Visual Studio 2010, TlbImp создает .net 4.0 interops в 2.0 проектах

17

В проекте C # мы добавляем ссылку на объект COM с помощью установки Add References, указывающей на COM-объект, который приводит к автоматической генерации сборки interop в среде IDE. Так что это хорошо и хорошо, но мы строим на основе .net 3.5 SP1 aka CLR 2.0, а сгенерированные interops используют 4.0 CLR, что делает их несовместимыми. Есть ли способ предотвратить это?

Я предполагаю, что другой вариант - настроить наш скрипт сборки, чтобы попробовать использовать tlbimp.exe с параметром / references? указать mscorlib v2.0?

Во всяком случае, я надеюсь, что где-нибудь есть флаг, чтобы это разрешить.

    
задан DJScrib 17.04.2010 в 21:41
источник

6 ответов

20

Я столкнулся именно с этой проблемой. Решение, которое я нашел, это использовать версию 3.5 tlbimp из .Net Framework SDK (или Windows Platform SDK?), Расположенную в% ProgramFiles% \ Microsoft SDK \ Windows \ v6.0A \ bin, которая использовала CLR 2.

Я также нашел, что мне нужна эта информация, чтобы получить правильную библиотеку типов из файла exe, который я импортировал, поскольку VS будет использовать только библиотеку первого типа:

"Идентификатор ресурса может быть добавлен в файл библиотеки типов при импорте библиотеки типов из модуля, содержащего несколько библиотек типов.

tlbimp MyModule.dll \ 1

из Ссылка

    
ответ дан Skym 06.05.2010 в 12:38
источник
14

Решение проблемы заключается в настройке tlbimp.exe для запуска в версии 2.0 .NET.

  1. Перейдите в папку C: \ Program Files (x86) \ Microsoft SDK \ Windows \ v7.0A \ Bin и откройте файл tlbimp.exe.config.
  2. Добавьте следующие строки в файл в разделе конфигурации:

    <startup>
       <supportedRuntime version="v2.0.50727"/>
    </startup>
    
  3. Сохраните файл, затем запустите исполняемый файл tlbimp.exe, как обычно.

ответ дан CarllDev 04.05.2012 в 16:26
источник
  • спас мой день !!! Благодаря! –  EdsonF 17.09.2013 в 16:51
  • Это не работает с версией SDK / tlbimp для Windows 10, fwiw. Он дает ошибки в отношении недопустимой конфигурации «бок о бок». В противном случае, хороший ответ! –  Mahmoud Al-Qudsi 05.02.2017 в 02:28
5

Если вы используете Build Events, попробуйте следующее:

"$(SDK35ToolsPath)tlbimp" tlbimp arguments

$ (SDK35ToolsPath) указывает на C: \ Program Files (x86) \ Microsoft SDK \ Windows \ v7.0A \ Bin

И если вы хотите ссылаться на 4.0, $ (SDK40ToolsPath) - это макрос, который указывает на файлы C: \ Program Files (x86) \ Microsoft SDK \ Windows \ v7.0A \ Bin \ NETFX 4.0.

В командной строке VS 2010 «где tlbimp» сначала отобразит tlbimp.exe в папке «Инструменты NETFX 4.0». Поэтому нам нужно $ (SDK35ToolsPath) для 3.5 tlbimp.exe.

    
ответ дан Eellor 25.06.2012 в 23:47
источник
2

У меня была такая же точная проблема, но даже с v2.0 от tlbimp.exe у меня все равно получается dll 4.0, которая не будет работать.
Я закончил с более простым решением, если кто-то столкнется с этим:
Зарегистрируйте dll с помощью regsvr32 (убедитесь, что вы запустили это как admin или вы получите сообщение об ошибке), а затем добавив ссылку в проект, вы найдете свою DLL на вкладке COM.
Работал как шарм!

Если вы не хотите создавать dll для взаимодействия с вашим приложением, вам нужно выяснить маршрут tlbimp.exe.

    
ответ дан BeemerGuy 26.10.2010 в 21:01
источник
1

Для меня (Visual Studio 2013) это было просто вопрос использования правильного исполняемого файла TlbImp.

Найдите тот, который вы используете по умолчанию:

where tlbimp

Который для меня был

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

Вместо этого используйте один из более низкой версии, например

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

, который создал для меня сборку .Net 2, не нужно редактировать файл конфигурации. Вы можете использовать CorFlags для EXE, чтобы определить, какую .Net-версию он использует. Или вы можете просто использовать Corflags на выходе.

    
ответ дан Patrick 12.09.2016 в 09:23
источник
0

Просто запустите

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

Чтобы создать библиотеку interops .Net version 2.0

    
ответ дан Dat Nguyen 07.06.2013 в 10:39
источник