No Visual Studio, ao adicionar uma referência ao projeto, a janela de propriedades tem uma opção Embed Inteop Types
, devemos defini-la como True
ou False
? Qual é a diferença?
Como temos muitos projetos, entre alguns deles, foi definido como referência False
, outros foram definidos como True
, é uma bagunça total. E o servidor bulid também tem os mesmos avisos:
O que significa “referência foi criada para assembly de interoperabilidade incorporado”?
Portanto, planejamos mudar todos os Embed Inteop Types
para False
, que risco teríamos?
c#
visual-studio
Jerry Bian
fonte
fonte
false
ou nunca alterá-los (por exemplo, se elesfalse
já estiverem no padrão )?Respostas:
Esta opção foi introduzida para remover a necessidade de implantar PIAs (Primary Interop Assemblies) muito grandes para interoperabilidade.
Ele simplesmente incorpora o código de ponte gerenciado usado que permite que você converse com assemblies não gerenciados, mas em vez de incorporar tudo, ele apenas cria o que você realmente usa no código.
Leia mais na postagem do blog de Scott Hanselman sobre isso e outras melhorias do VS aqui .
Quanto a se é aconselhável ou não, não tenho certeza, pois não preciso usar esse recurso. Uma rápida pesquisa na web rende alguns leads:
O único risco de transformá-los todos em falsos é mais questões de implantação com arquivos PIA e uma implantação maior se alguns desses arquivos forem grandes.
fonte
Percebi que, quando está definido como false, posso ver o valor de um item usando o depurador. Quando estava definido como true, recebia um erro - item.FullName.GetValue O tipo de interoperabilidade incorporado 'FullName' não contém uma definição para 'QBFC11Lib.IItemInventoryRet', pois não foi usado no assembly compilado. Considere converter em objeto ou alterar a propriedade 'Embed Interop Types' para true.
fonte