Тип Interop не может быть встроен
Я создаю веб-приложение на платформе .NET 4.0 (beta2) на С#.
Когда я пытаюсь использовать сборку под названием "ActiveHomeScriptLib", я получаю следующую ошибку:
Тип взаимодействия 'ActiveHomeScriptLib.ActiveHomeClass' не может быть встроена. Используйте применимые интерфейса.
При изменении рамки до версии 3.5 у меня нет ошибок.
Что такое тип Interop и почему это происходит только при использовании рамки 4.0?
Ответы
Ответ 1
.NET 4.0 позволяет использовать первичные сборки interop (или, точнее, их биты), которые необходимо встроить в вашу сборку, чтобы вам не нужно было развертывать их вместе с вашим приложением.
По какой-то причине эта сборка не может быть встроена - но это звучит так, что это не проблема для вас. Просто откройте вкладку "Свойства" для сборки в Visual Studio 2010 и установите "Вставить типы Interop" в "False".
EDIT: см. также Michael Gustus answer, удалив суффикс Class
из типов, которые вы используете.
Ответ 2
В большинстве случаев эта ошибка является результатом кода, который пытается создать экземпляр COM-объекта. Например, вот фрагмент кода, запускающего Excel:
Excel.ApplicationClass xlapp = new Excel.ApplicationClass();
Как правило, в .NET 4 вам просто нужно удалить суффикс класса и скомпилировать код:
Excel.Application xlapp = new Excel.Application();
Объяснение MSDN здесь.
Ответ 3
Как Ян. Мне потребовалось некоторое время, чтобы получить его. = S Итак, для всех, кто ослепил от разочарования.
- Щелкните правой кнопкой мыши на оскорбительной сборке, которую вы добавили в проводник решений в своем проекте Ссылки. (В моем случае WIA)
- Нажмите свойства.
- И там должен быть вариант для Встраивать сборку Interop.
- Установите значение False
Ответ 4
Развернувшись на правильном ответе Джона.
Проблема заключается в том, что вы комбинируете новую функцию "Вставить типы взаимодействия" (или NoPIA) с использованием типа класса. Функция "Вставить типы взаимодействия" работает, по существу, статически связываясь во всех типах из PIA (Primary Interop Assembly) в сборку ссылок, удаляя издержки по ее развертыванию.
Эта функция отлично работает для большинства типов в PIA, но у нее есть ограничения. Один из них заключается в том, что вы не можете внедрять классы (это проблема обслуживания). У Миши есть подробная статья в блоге о том, почему это не разрешено.
Ответ 5
Здесь, где установить Embed Interop в Visual Studio 2012
Ответ 6
Получено решение
Перейдите к ссылкам правой кнопкой мыши по требуемой DLL, вы получите опцию "Вставить типы взаимодействия" в "False" или "True".
Ответ 7
Я столкнулся с этой проблемой, вытаскивая проект TFS на свою локальную машину. Предположительно, он отлично работал на машинке-парне, которая его написала. Я просто изменил это...
WshShellClass shellClass = new WshShellClass();
Для этого...
WshShell shellClass = new WshShell();
Теперь он работает как чемпион!
Ответ 8
У меня была такая же проблема в VB.NET 2013 с Office 2007, и это решило ее:
VS 2013 VB.NET Project > Реквизиты > Refs > Microsoft Word 12.0 Object Lib > Вставить типы взаимодействия: изменить True на False
Ответ 9
http://digital.ni.com/public.nsf/allkb/4EA929B78B5718238625789D0071F307
Эта ошибка возникает, потому что значение по умолчанию истинно для свойства Embed Interop Types сборки TestStand API Interop, на которое ссылается новый проект. Чтобы устранить эту ошибку, измените значение свойства Embed Interop Types на False, выполнив следующие шаги:
Выберите ссылку TestStand Interop Assembly в разделе ссылок вашего проекта в обозревателе решений.
Найдите свойство Embed Interop Types в Property Browser и измените значение на False
Ответ 10
Visual Studio 2017 версии 15.8 позволила использовать синтаксис PackageReferences для ссылки на пакеты NuGet в проектах Visual Studio Extensibility (VSIX). Это значительно упрощает рассуждение о пакетах NuGet и открывает возможность для получения полного метапакета, содержащего весь VSSDK.
Установка ниже NuGet пакета решит проблему EmbedInteropTypes.
Пакет установки Microsoft.VisualStudio.SDK.EmbedInteropTypes