2011-08-08 17 views
5

Zbudowałem aplikację, która generuje Excel z COM Interop. Działa dobrze na kopalni i na komputerze naszego użytkownika: Office 2007, Windows XP SP2. Teraz migruję go na inny komputer, Office 2010, Windows 7 64 bit, i używam Visual Studio 2010 z VS2008, który wciąż działa dobrze. Kiedy wdrażam go na komputerze mojego użytkownika, mam problem, używają tego samego Windows 7 64-bitowego, ale Office 2007.Office 2007 PIA

Więc jeśli zainstaluję pakiet Office 2007 PIA na moim komputerze Win7 64-bitowym i Office 2010, zmień odniesienie w moim projekcie visual studio, czy to rozwiąże problem?

+3

Problem? *Jaki problem? –

+0

Co się stanie, jeśli klikniesz każdy zespół biurowy i włączysz opcję "Osadzić typy interopii"? Myślę, że to odbiera potrzebę zajmowania się tym, gdzie są pliki PIA lub która wersja jest używana. –

Odpowiedz

9

Wiem, że ten post był na chwilę z powrotem, ale pomyślałem, że wrzucę moje dwa centy w każdym razie na wypadek, gdyby ktoś natknął się na to.

Ogólną zasadą jest, aby korzystać z wersji PIA w rozwoju, która łączy się z wersją najstarszy Urzędu planuje się wspierać. Tak więc, jeśli zamierzasz obsługiwać pakiet Office 2007 i nowsze, użyj wersji 12 PIA podczas programowania.

Dodać odniesienie do PIAs v12 (albo pobierając PIA w 2007 r. Online, za pośrednictwem VSTO, albo z GAC, jeśli poprzednio już pakiet Office 2007 był poprzednio). Teraz możesz pomyśleć "Ok, odwołuję się do v12 w Visual Studio, to powinno teraz działać w Office 2007". Źle. Ponieważ odnosisz się do wersji v12, ale masz zainstalowany pakiet Office 2010, podczas wiązania zespołu twój komputer powie: "Cóż, wymagany jest v12, ale mamy zainstalowany v14 w GAC, a ponieważ PIA są kompatybilne w przód, użyjemy tego". Nawet jeśli wyraźnie powiesz mu, aby używał wersji v12, po zakończeniu kompilacji twój komputer użyje wersji v14. Możesz to potwierdzić przez FUSLOG. FUSLOG jest doskonałym narzędziem do pracy z bindowaniem zespołów. Uwaga: Jeśli nie widzisz niczego w FUSLOG i uważasz, że powinieneś, wyczyść wszystko w historii przeglądarki Internet Explorer i spróbuj ponownie.

Aby rozwiązać ten problem, należy zatrzymać to, co się nazywa "assembly binding redirection". Te PIA zwykle zawierają plik zasad w GAC. Celem pliku zasad jest przekierowanie starszych wersji PIA do nowszych wersji podczas rozwiązywania złożenia. Aby to zobaczyć, wykonaj następujące czynności:

  1. Prasowej 'klawisz Windows + R' aby otworzyć menu Run.
  2. Wpisz "C: \ Windows \ Assembly \ GAC" i naciśnij Enter. Uwaga: Używam komputera 32-bitowego. Twoje PIA będą najprawdopodobniej zainstalowane w innym miejscu w GAC, takim jak "C: \ Windows \ Assembly \ GAC_MSIL".

Po przejściu do GAC przewiń w dół i wyszukaj foldery PIA, do których się odwołujesz (np. Microsoft.Office.Interop.Excel). Jeśli będziesz kontynuować przewijanie, powinieneś zobaczyć foldery zaczynające się od "Zasady", następnie liczbę, a następnie nazwę PIA (np. Policy.12.0.Microsoft.Office.Interop.Excel). Jest to plik strategii wykonujący przekierowanie wiązania. Otwórz plik konfiguracyjny XML w tym folderze, a zobaczysz coś podobnego do poniższego:

<?xml version="1.0" encoding="UTF-16"?><configuration> 
<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
      <assemblyIdentity publicKeyToken="71e9bce111e9429c" name="Microsoft.Office.Interop.Excel" culture="neutral"></assemblyIdentity> 
      <bindingRedirect oldVersion="12.0.0.0" newVersion="14.0.0.0"></bindingRedirect> 
     </dependentAssembly> 
    </assemblyBinding> 
</runtime> 

W powyższym fragmencie kodu tagu „bindingRedirect OldVersion ...” jest odpowiedzialny za Przekierowanie zespołu PIA.Jeśli wykomentuj ten kod tak:

<?xml version="1.0" encoding="UTF-16"?><configuration> 
<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
      <assemblyIdentity publicKeyToken="71e9bce111e9429c" name="Microsoft.Office.Interop.Excel" culture="neutral"></assemblyIdentity> 
      <!--<bindingRedirect oldVersion="11.0.0.0" newVersion="12.0.0.0"></bindingRedirect>--> 
     </dependentAssembly> 
    </assemblyBinding> 
</runtime> 

Wtedy to przekierowanie będą ignorowane. Komentuję go, a następnie usuwam, ponieważ plik służy do dobrego celu, ale nie w przypadku starszych wersji pakietu Office. Wykonaj to na każdym wymaganym pliku zasad PIA, a komputer programistyczny przestanie przekierowywać.

Mam nadzieję, że to odpowiedź na twoje pytanie!

+1

To jest ważna informacja! Miałem wiele problemów z wdrażaniem aplikacji, ponieważ nie zdawałem sobie sprawy z przyczyny problemu. Visual Studio zawsze wyświetlało oryginalną wersję 11 w referencename, mimo że kompilacja została przekierowana, jak opisano powyżej oraz w https://msdn.microsoft.com/en-us/library/2fc472t2%28v=vs.100%29.aspx. – DrMarbuse

Powiązane problemy