Подтвердить что ты не робот

Visual Studio 2010, TlbImp генерирует .net 4.0 interops в 2.0 проектах

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

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

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

4b9b3361

Ответ 1

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

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

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

tlbimp MyModule.dll\1

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

Ответ 2

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

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

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

Ответ 3

Если вы используете 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.

Ответ 4

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

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

Ответ 5

Для меня (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 на выходе.

Ответ 6

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

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

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