O tipo de interoperabilidade não pode ser incorporado

Eu estou criando um aplicativo da web no .NET 4.0 framework (beta2) em c #.

Quando tento usar um assembly chamado “ActiveHomeScriptLib”, recebo o seguinte erro:

O tipo de interoperabilidade ‘ActiveHomeScriptLib.ActiveHomeClass’ não pode ser incorporado. Use a interface aplicável.

Quando mudo o framework para a versão 3.5, não tenho erros.

O que é um tipo de interoperabilidade e por que isso só ocorre quando eu uso a estrutura 4.0?

O .NET 4.0 permite que assemblies de interoperabilidade primários (ou melhor, os bits de que você precisa) sejam incorporados em seu assembly para que você não precise implantá-los ao lado de seu aplicativo.

Por alguma razão, esta assembly não pode ser incorporada – mas parece que isso não é um problema para você. Basta abrir a guia Propriedades da assembly no Visual Studio 2010 e definir “Incorporar tipos de interoperabilidade” a “Falso”.

EDIT: Veja também a resposta de Michael Gustus, removendo o sufixo de Class dos tipos que você está usando.

Na maioria dos casos, esse erro é o resultado do código que tenta instanciar um object COM. Por exemplo, aqui está uma parte do código que inicia o Excel:

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

Normalmente, no .NET 4 você só precisa remover o sufixo ‘Class’ e compilar o código:

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

Uma explicação do MSDN está aqui .

Como Jan Levei um tempo para consegui-lo .. = S Então, para qualquer outra pessoa que esteja cega de frustração.

  • Clique com o botão direito do mouse no assembly ofensivo que você incluiu no gerenciador de soluções sob o projeto References . (No meu caso WIA)
  • Clique em propriedades.
  • E deve haver a opção lá para a assembly incorporada da interoperabilidade.
  • Defina como False

Expandindo a resposta correta de Jon.

O problema aqui é que você está combinando o novo recurso “Embed Interop Types” (ou NoPIA) com o uso de um tipo de class. O recurso “incorporar tipos de interoperabilidade” funciona essencialmente vinculando estaticamente em todos os tipos de um PIA (assembly de interoperabilidade primária) para o assembly de referência removendo a sobrecarga de implantá-lo.

Esse recurso funciona muito bem para a maioria dos tipos em um PIA, mas tem restrições. Um deles é que você não pode incorporar classs (é um problema de manutenção). Misha tem um artigo de blog detalhado sobre por que isso não é permitido

Aqui é onde definir a interoperabilidade incorporada no Visual Studio 2012

insira a descrição da imagem aqui

Tem a solução

Ir para referências clique direito a dll desejada você terá opção “Incorporar tipos de interoperabilidade” para “False” ou “True”.

Eu me deparei com esse problema ao puxar para baixo um projeto do TFS para minha máquina local. Alegadamente, estava funcionando bem na máquina do sujeito que a escreveu. Eu simplesmente mudei isso …

 WshShellClass shellClass = new WshShellClass(); 

Para isso…

 WshShell shellClass = new WshShell(); 

Agora, está funcionando como um campeão!

Eu tive o mesmo problema no VB.NET 2013 com o Office 2007, e isso resolveu:

VS 2013 VB.NET Projeto> Adereços> Refs> Microsoft Word 12.0 Objeto Lib> Incorporar Tipos de Interoperabilidade: altere True para False

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

Este erro ocorre porque o valor padrão é true para a propriedade Embed Interop Types do assembly de interoperabilidade de API TestStand referenciado no novo projeto. Para resolver esse erro, altere o valor da propriedade Embed Interop Types para False seguindo estas etapas: Selecione a referência do Assembly de interoperabilidade TestStand na seção de referências do seu projeto no Solution Explorer. Localize a propriedade Embed Interop Types no Property Browser e altere o valor para False