c# O tipo de interoperabilidade não pode ser incorporado




visual-studio-2010 visual-studio (8)

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 a estrutura 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?


Answer #1

Aqui é onde definir a interoperabilidade incorporada no Visual Studio 2012


Answer #2

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".


Answer #3

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

Por alguma razão, esta montagem não pode ser incorporada - mas parece que isso não é um problema para você. Basta abrir a guia Propriedades para a montagem no Visual Studio 2010 e definir "Incorporar tipos de interoperabilidade" a "False".

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


Answer #4

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


Answer #5

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 as referências do projeto. (No meu caso WIA)
  • Clique em propriedades.
  • E deve haver a opção lá para a montagem incorporada da interoperabilidade.
  • Defina como False

Answer #6

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 classe. 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 remover 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 classes (é um problema de manutenção). Misha tem um artigo de blog detalhado sobre por que isso não é permitido


Answer #7

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

Esse 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


Answer #8

Eu corri para este problema ao puxar para baixo um projeto 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!





c#-4.0