Тип взаимодействия не может быть внедрен

Я создаю веб-приложение на .NET 4.0 framework (beta2) в C#.

когда я пытаюсь использовать сборку под названием "ActiveHomeScriptLib", я получаю следующую ошибку:

типа взаимодействия 'ActiveHomeScriptLib.ActiveHomeClass' невозможно внедрить. Использовать вместо этого интерфейс.

когда я меняю фреймворк на версию 3.5, у меня нет никаких ошибок.

Что такое тип взаимодействия и почему это происходит только когда я использую 4.0 framework?

9 ответов


.NET 4.0 позволяет основным сборкам взаимодействия (или, скорее, битам, которые вам нужны) быть внедренными в вашу сборку, чтобы вам не нужно было развертывать их вместе с вашим приложением.

по какой - то причине эта сборка не может быть встроена, но похоже, что это не проблема для вас. Просто откройте вкладку Свойства для сборки в Visual Studio 2010 и установите для "внедрить типы взаимодействия" значение "False".

EDIT: см. также Michael Gustus's ответ, удаление Class суффикс из типов, которые вы используете.


в большинстве случаев, эта ошибка является результатом код, который пытается создать экземпляр COM-объекта. Например, вот фрагмент кода, запускающего Excel:

Excel.ApplicationClass xlapp = new Excel.ApplicationClass();

Как правило, в .NET 4 Вам просто нужно удалить суффикс "Class" и скомпилировать код:

Excel.Application xlapp = new Excel.Application();

объяснение MSDN-это здесь.


Как Ян, мне потребовалось некоторое время, чтобы получить его .. =S Так для всех, кто ослеплен разочарованием.

  • щелкните правой кнопкой мыши оскорбительную сборку, добавленную в обозревателе решений в рамках проекта ссылки. (В моем случае WIA)
  • выберите "Свойства".
  • и там должна быть опция для Добавьте Сборку.
  • установите значение False

расширение на правильный ответ Джон.

проблема здесь в том, что вы объединяете новую функцию "Embed Interop Types" (или NoPIA) с использованием типа класса. Функция "внедрить типы взаимодействия" работает, по существу, статически связывая все типы из PIA (основной сборки взаимодействия) в ссылочную сборку, удаляя накладные расходы на ее развертывание.

эта функция отлично работает для большинства типов в PIA, но у нее есть ограничения. Один из них что вы не можете вставлять классы (это проблема обслуживания). У Миши есть подробная статья в блоге о том, почему это не разрешено


вот где установить взаимодействие встраивания в Visual Studio 2012

enter image description here


получил решение

перейти к ссылкам щелкните правой кнопкой мыши нужную dll, вы получите опцию "встраивать типы взаимодействия" в "False"или " True".


я столкнулся с этой проблемой при снятии проекта TFS с моей локальной машины. Предположительно, он отлично работал на машине парня, который его написал. Я просто изменил это...

WshShellClass shellClass = new WshShellClass();

для этого...

WshShell shellClass = new WshShell();

теперь он работает как чемпион!


У меня была такая же проблема в VB.NET 2013 с Office 2007, и это решило его:

VS 2013 VB.NET проект > реквизит > ссылки > Microsoft Word 12.0 Object Lib > встраивать типы взаимодействия: изменить True на False


http://digital.ni.com/public.nsf/allkb/4EA929B78B5718238625789D0071F307

эта ошибка возникает из-за значения по умолчанию true для свойства Embed Interop Types сборки взаимодействия API TestStand, на которую ссылается новый проект. Чтобы устранить эту ошибку, измените значение свойства Embed Interop Types на False, выполнив следующие действия: Выберите ссылку на сборку взаимодействия TestStand в разделе Ссылки проекта в решении Исследователь. Найдите свойство Embed Interop Types в браузере свойств и измените значение на False