Тип взаимодействия не может быть встроен - PullRequest
633 голосов
/ 20 марта 2010

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

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

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

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

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

Ответы [ 10 ]

1015 голосов
/ 20 марта 2010

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

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

РЕДАКТИРОВАТЬ: См. Также ответ Майкла Густуса, удаляя суффикс Classиз типов, которые вы используете.

460 голосов
/ 29 декабря 2010

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

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

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

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

Объяснение MSDN: здесь .

113 голосов
/ 23 июля 2010

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

  • Щелкните правой кнопкой мыши по сборке, которая была добавлена ​​в обозревателе решений в вашем проекте Ссылки . (В моем случае WIA)
  • Нажмите свойства.
  • И там должна быть опция для Встроить сборку взаимодействия.
  • Установите значение False
32 голосов
/ 20 марта 2010

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

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

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

29 голосов
/ 24 октября 2016

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

enter image description here

12 голосов
/ 11 июля 2011

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

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

9 голосов
/ 12 января 2016

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

WshShellClass shellClass = new WshShellClass();

К этому ...

WshShell shellClass = new WshShell();

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

2 голосов
/ 04 октября 2014

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

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

1 голос
/ 10 июня 2013

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

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

0 голосов
/ 19 июня 2019

Visual Studio 2017 версии 15.8 позволила использовать синтаксис PackageReferences для ссылки на пакеты NuGet в проектах расширяемости Visual Studio (VSIX). Это значительно упрощает рассуждение о пакетах NuGet и открывает возможность получения полного метапакета, содержащего весь VSSDK.

Установка ниже пакета NuGet решит проблему EmbedInteropTypes .

Install-Package Microsoft.VisualStudio.SDK.EmbedInteropTypes

...