Estou criando um aplicativo Web na estrutura .NET 4.0 (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 altero a estrutura para a versão 3.5, não tenho erros.
O que é um tipo de interoperabilidade e por que isso ocorre apenas quando uso a estrutura 4.0?
Respostas:
O .NET 4.0 permite que os assemblies de interoperabilidade primários (ou melhor, os bits necessários) sejam incorporados ao seu assembly para que você não precise implantá-los junto ao seu aplicativo.
Por qualquer motivo, esta montagem não pode ser incorporada - mas parece que isso não é um problema para você. Basta abrir a guia Propriedades do assembly no Visual Studio 2010 e defina "Tipos de interoperabilidade incorporados" como "Falso".
Edição: Veja também a resposta de Michael Gustus , removendo o
Class
sufixo dos tipos que você está usando.fonte
embed interop types
propriedade acima mencionadafalse
fez o truque. No meu caso - eu estava trabalhando com aMicrosoft.Office.Interop.Excel
biblioteca e precisava acessar o objeto Pasta de Trabalho. Usando sua interfaceWorkbook
(btw convenção de nomenclatura ....) Não foi uma opção - eu recebiCOM object
, e não o desejadoMicrosoft.Office.Interop.Excel.WorkbookClass
Na maioria dos casos, esse erro é o resultado do código que tenta instanciar um objeto COM. Por exemplo, aqui está um pedaço de código que inicia o Excel:
Normalmente, no .NET 4, você só precisa remover o sufixo 'Class' e compilar o código:
Uma explicação do MSDN está aqui .
fonte
Como Jan Demorei um pouco para obtê-lo .. = S Então, para qualquer pessoa que esteja cega de frustração.
fonte
Aqui é onde definir a interoperabilidade de incorporação no Visual Studio 2012
fonte
Expandindo a resposta correta de Jon.
O problema aqui é que você está combinando o novo recurso "Incorporar tipos de interoperabilidade" (ou NoPIA) com o uso de um tipo de classe. O recurso "Incorporar tipos de interoperabilidade" funciona vinculando essencialmente estaticamente em todos os tipos de um PIA (Primary Interop Assembly) ao assembly de referência, removendo a sobrecarga de sua implantação.
Esse recurso funciona muito bem para a maioria dos tipos em uma PIA, mas possui restrições. Uma delas é 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
fonte
Tem a solução
Vá para as referências, clique com o botão direito do mouse na dll desejada e você receberá a opção "Incorporar tipos de interoperabilidade" para "Falso" ou "Verdadeiro".
fonte
Corri para esse problema ao puxar um projeto TFS para a minha máquina local. Alegadamente, estava funcionando bem na máquina do cara que a escreveu. Eu simplesmente mudei isso ...
Para isso...
Agora, está funcionando como um campeão!
fonte
Eu tive o mesmo problema no VB.NET 2013 com o Office 2007, e isso resolveu:
Projeto 2013 do VB.NET do VS 2013> Props> Refs> Lib de objeto do Microsoft Word 12.0> Tipos de interoperabilidade de incorporação: alterar verdadeiro para falso
fonte
http://digital.ni.com/public.nsf/allkb/4EA929B78B5718238625789D0071F307
Este erro ocorre porque o valor padrão é verdadeiro para a propriedade Tipos de interoperabilidade incorporada do assembly de interoperabilidade da API TestStand mencionado no novo projeto. Para resolver esse erro, altere o valor da propriedade Incorporar tipos de interoperabilidade para Falso, seguindo estas etapas: Selecione a referência TestStand Interop Assembly na seção de referências do seu projeto no Solution Explorer. Localize a propriedade Incorporar tipos de interoperabilidade no Navegador de propriedades e altere o valor para Falso
fonte
O Visual Studio 2017 versão 15.8 tornou possível usar a sintaxe PackageReferences para referenciar pacotes NuGet em projetos do Visual Studio Extensibility (VSIX). Isso torna muito mais simples o raciocínio sobre os pacotes NuGet e abre a porta para ter um meta pacote completo contendo o VSSDK inteiro.
A instalação abaixo do pacote NuGet resolverá o problema de EmbedInteropTypes .
fonte