Почему я не могу использовать сборку взаимодействия, созданную TLBIMP в .NET? - PullRequest
2 голосов
/ 06 ноября 2011

У меня есть файл .OCX, который я преобразовал в сборку взаимодействия с помощью инструментов Visual Studio 2010 (tlbimp).Когда я хочу добавить созданную DLL в свой проект .NET, я получаю следующее исключение:

'DLLName.DLL' или одна из его зависимостей требует более поздней версии .NET Frameworkчем на указанном в проекте.Вы можете изменить цель .NET Framework, щелкнув свойства в меню проекта, а затем выбрав новую цель в раскрывающемся списке «.NET Framework».

Кто-нибудь когда-либо сталкивался с этим?

1 Ответ

4 голосов
/ 06 ноября 2011

Я могу это повторить, хотя это нелегко:

enter image description here

Единственный способ получить его - запустить Tlbimp.exe из командной строки Visual Studio 2010 и с настройкой Target Framework, нацеленной на более раннюю версию .NET. Трижды проверьте эту настройку. Если в настройке выбрано .NET 4.

, что-то серьезно сломано в вашей настройке

Лучшей мышеловкой является создание библиотеки взаимодействия с IDE. Проект + Добавить ссылку, Обзор и выберите файл .ocx. При изменении целевого фреймворка библиотека взаимодействия автоматически перегенерируется в соответствии с версией CLR. Вы можете перепроверить все это, запустив ildasm.exe в библиотеке взаимодействия. Дважды щелкните манифест, он показывает целевую версию CLR в первой строке:

// Metadata version: v4.0.30319
.assembly extern mscorlib
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
  .ver 4:0:0:0
}

И последнее, но не менее важное: вы действительно хотите, чтобы свойство "Встраивать типы взаимодействий" в библиотеке взаимодействий было установлено в значение "Истина", чтобы вам не приходилось загружать библиотеку взаимодействий. Если вы не можете найти это свойство обратно в окне «Свойства», то у вас есть еще один намек на то, что целевая структура не соответствует вашим ожиданиям.

...