Visual Studio 2010, TlbImp генерирует взаимодействия .net 4.0 в проектах 2.0 - PullRequest
17 голосов
/ 17 апреля 2010

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

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

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

Ответы [ 6 ]

20 голосов
/ 06 мая 2010

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

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

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

tlbimp MyModule.dll \ 1

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

14 голосов
/ 04 мая 2012

Решение проблемы - настроить tlbimp.exe для работы под версией 2.0 .NET.

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

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

5 голосов
/ 26 июня 2012

Если вы используете события сборки, попробуйте это:

"$(SDK35ToolsPath)tlbimp" tlbimp arguments

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

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

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

2 голосов
/ 26 октября 2010

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

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

1 голос
/ 12 сентября 2016

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

0 голосов
/ 07 июня 2013

Просто беги

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

Для создания библиотеки взаимодействий .Net версии 2.0

...