Я создаю веб-приложение на фреймворке .NET 4.0 (beta2) на C#.
Когда я пытаюсь использовать сборку под названием "ActiveHomeScriptLib", я получаю следующую ошибку:
Interop type 'ActiveHomeScriptLib.ActiveHomeClass' не может быть встроен. Используйте соответствующий интерфейс вместо этого.
Когда я меняю фреймворк на версию 3.5, у меня нет никаких ошибок.
Что такое Interop Type и почему это происходит только при использовании фреймворка 4.0?
.NET 4.0 позволяет встраивать первичные interop-сборки (точнее, те их части, которые вам нужны) в вашу сборку, так что вам не нужно развертывать их вместе с вашим приложением.
По какой-то причине эта сборка не может быть встроена - но похоже, что для вас это не проблема. Просто откройте вкладку Properties для сборки в Visual Studio 2010 и установите "Embed Interop Types" на "False".
EDIT: Смотрите также ответ Майкла Густуса, удаляющего суффикс Class
из типов, которые вы используете.
В большинстве случаев, эта ошибка является результатом код, который пытается создать экземпляр COM-объекта. Например, вот кусок кода начиная с Excel:
Excel.ApplicationClass xlapp = new Excel.ApplicationClass();
Как правило, в .Сеть 4 Вам просто нужно снять 'класса' суффикс-и скомпилировать код:
Excel.Application xlapp = new Excel.Application();
Объяснение MSDN является здесь.
Like Jan Мне потребовалось время, чтобы понять это... =S Так что для всех остальных, кто ослеплен разочарованием.
Продолжая правильный ответ Джона.
Проблема здесь в том, что вы сочетаете новую функцию "Embed Interop Types" (или NoPIA) с использованием типа класса. Функция "Embed Interop Types" работает, по сути, путем статического связывания всех типов из PIA (Primary Interop Assembly) в ссылающуюся сборку, устраняя накладные расходы на ее развертывание.
Эта функция отлично работает для большинства типов в PIA, но у нее есть ограничения. Одно из них заключается в том, что вы не можете встраивать классы (это вопрос обслуживания). У Миши есть подробная статья в блоге о том, почему это не разрешено
Есть решение
Перейти к ссылкам правой кнопкой мыши на нужной DLL, вы получите возможность "и внедрить типы взаимодействия и" чтобы "ложные" или "Правда и".
Я столкнулся с этой проблемой, когда потянуть вниз проект ТФС на моей локальной машине. Якобы, он работает на парень's машина, кто ее написал. Я просто изменил это...
WshShellClass shellClass = new WshShellClass();
Для этого...
WshShell shellClass = new WshShell();
Теперь он работает как чемпион!
http://digital.ni.com/public.nsf/allkb/4EA929B78B5718238625789D0071F307
Эта ошибка возникает потому, что значением по умолчанию является true в свойство внедрить типы взаимодействия в испытательном комплексе API для взаимодействия сборки в новом проекте. Чтобы устранить эту ошибку, измените значение свойство внедрить типы взаимодействия значение false, выполнив следующие действия: Выберите испытательном комплексе взаимодействия ссылку в разделе "ссылки" вашего проекта в обозревателе решений. Найти свойство внедрить типы взаимодействия в Обозревателе свойств, и измените его значение на false
Визуальная студия 2017 Версия 15.8 дало возможность использовать PackageReferencesyntax Для справки пакетов NuGet в Visual Studio расширяемость (расширение VSIX) проектов. Это делает его гораздо проще рассуждать о пакеты NuGet и открывает дверь для того, чтобы иметь полную мета-пакет, содержащий всю VSSDK.
Установка ниже NuGet-пакет решит EmbedInteropTypes вопрос.
установка пакета Microsoft.VisualStudio.СДК.EmbedInteropTypes