2010-04-17 6 views
17

W projekcie C# dodajemy odniesienie do obiektu COM poprzez konfigurację Add References wskazując obiekt COM, który powoduje, że IDE generuje automatycznie zestaw współdziałania. Jest więc dobrze i dobrze, ale budujemy w oparciu o .net 3.5 SP1 aka CLR 2.0, a wygenerowane interakcje używają CLR 4.0, co powoduje, że są niekompatybilne. Czy istnieje sposób, aby temu zapobiec?Visual Studio 2010, TlbImp generuje interakcje .net 4.0 w 2.0 projektach

Zakładam, że drugą opcją jest skonfigurowanie naszego skryptu kompilacji, aby spróbować użyć polecenia tlbimp.exe z parametrem/references? wskazać na mscorlib v2.0?

W każdym razie, mam nadzieję, że jest gdzieś flaga, żeby na to pozwolić.

Odpowiedz

20

Znalazłem dokładnie ten problem. Rozwiązaniem, które znalazłem, było użycie wersji 3.5 programu tlbimp z pakietu .Net Framework SDK (lub Windows Platform SDK?) Znajdującego się w pliku% ProgramFiles% \ Microsoft SDK \ Windows \ v6.0A \ bin, który użył CLR 2.

I również znalazłem potrzebne informacje, aby uzyskać prawidłową bibliotekę typów z pliku exe, który importowałem, ponieważ VS używałby tylko pierwszej biblioteki typów:

"Identyfikator zasobu można opcjonalnie dołączyć do pliku biblioteki typów podczas importowania typ biblioteki z modułu zawierającego biblioteki wielu typów. "

tlbimp MyModule.dll \ 1

z http://msdn.microsoft.com/en-us/library/tt0cf3sx%28VS.80%29.aspx

2

miałem dokładnie taki sam problem, ale nawet z v2.0 z TLBIMP.exe, wciąż otrzymuję 4.0 dll, która nie będzie działać .
Skończyło się na prostszym rozwiązaniu, na wypadek, gdyby ktoś wpadł na to:
Zarejestruj dll za pomocą programu regsvr32 (upewnij się, że uruchomiłeś to jako administrator lub otrzymasz błąd), a następnie dodając odniesienie w projekcie, znajdziesz swoją bibliotekę dll w zakładce COM.
Pracował jak urok!

Jeśli nie chcesz utworzyć pliku DLL interop, aby wysłać go wraz z aplikacją, musisz znaleźć trasę programu tlbimp.exe.

14

Rozwiązaniem problemu jest skonfigurowanie programu tlbimp.exe do działania w wersji środowiska wykonawczego 2.0 .NET.

  1. Przejdź do C: \ Program Files (x86) \ Microsoft SDK \ Windows \ v7.0A \ Bin i otwórz plik tlbimp.exe.config.
  2. Dodaj poniższe linie do pliku w sekcji konfiguracji:

    <startup> 
        <supportedRuntime version="v2.0.50727"/> 
    </startup> 
    
  3. Zapisz plik, a następnie uruchom TLBIMP.exe wykonywalny tak jak zwykle.

+2

zapisałem mój dzień !!! Dzięki! – EdsonF

+0

To nie działa z wersją SDK/tlbimp dla systemu Windows 10, fwiw. Daje błędy związane z nieprawidłową konfiguracją side-by-side. W przeciwnym razie, miła odpowiedź! –

5

Jeśli używasz Budowanie Imprezy, spróbuj tego:

"$(SDK35ToolsPath)tlbimp" tlbimp arguments 

$ (SDK35ToolsPath) punkty do katalogu C: \ Program Files (x86) \ Microsoft SDK \ Windows \ v7.0A \ bin

A jeśli chcesz odwołać 4.0, $ (SDK40ToolsPath) jest makro, które wskazuje na C: \ Program Files (x86) \ Microsoft SDK \ Tools \ Windows \ v7.0A \ Bin \ NETFX 4.0.

W wierszu komend VS 2010, "gdzie tlbimp" pokaże tlbimp.exe w folderze Narzędzia NETFX 4.0. Potrzebujemy $ (SDK35ToolsPath) dla 3.5 tlbimp.exe.

0

Wystarczy uruchomić

C:\Program Files (x86)\Microsoft Visual Studio 8\SDK\v2.0\Bin\TlbImp.exe 

do wygenerowania interops NET wersji 2.0

1

dla mnie (Visual Studio 2013), to było tylko kwestią wykorzystania odpowiedniej tlbimp wykonywalny.

Dowiedzieć się jedną używasz domyślnie:

where tlbimp

co dla mnie było

C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\TlbImp.exe

Zamiast używać jednego z niższej wersji, na przykład

C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\tlbimp

, który wyprodukował dla mnie zestaw .Net 2, nie trzeba edytować pliku konfiguracyjnego. Możesz użyć CorFlags na exe, aby ustalić, jakiej używa wersji .Net. Lub możesz po prostu użyć Corflags na swoim wyjściu.