[VS] Erro Visual Studio – Problemas ao instanciar classes do tipo Interop

Publicado: 11/06/2013 em ASP.NET, Cotidiano, Erros, IIS, Internet, Sistemas Operacionais, Softwares, Visual Studio
Tags:, , ,

erro_vs2010

Eu recentemente atualizei alguns projetos do Visual Studio 2010 para o Visual Studio 2012.

Quase tudo correu muito bem mas eu topei com um problema com algumas assemblies COM que faziam parte do projeto.

No início, o projeto ASP.NET Web Application  realizava build sem problemas, mas então eu tive esse erro ao visitar algumas das páginas:

Could not load file or assembly ‘Interop.AssemblyName’ or one of its dependencies.

An attempt was made to load a program with an incorrect format.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.BadImageFormatException: Could not load file or assembly ‘Interop.AssemblyName’ or one of its dependencies. An attempt was made to load a program with an incorrect format.

Minha solução para esse problema foi remover a  assemblies COM das referências do Visual Studio e, em seguida, adicioná-lo de volta (não tenho certeza que esta era a solução correta, mas funcionou.)

Mas então, quando eu adicionei o COM de volta no projeto como uma referência, não pude mas realizar o build  do projeto:

Interop type ‘AssemblyName.ClassName’ cannot be embedded

E outros, indicando que o projeto não estava vendo a referência ao assembly COM. Felizmente esta questão  StackOverflow question (Interop type cannot be embedded) tinha a resposta.

SOLUÇÃO:

A solução é alterar uma propriedade no assembly COM referenciado.

Para fazer isso, em seu projeto Visual Studio, basta expandir a seção Referências e com o botão direito do mouse sobre o assembly COM e selecione Propriedades. Isso fará com que a caixa de diálogo Propriedades para a referência do assembly COM.

Basta alterar a propriedade  “Embed Interop Types” de True para False.

Agora é só buildar o seu projeto e tudo vai estar funcionando.

2011-11-03 06h42_17

– Update 30/05/2012

Caso a aplicação a utilizar o interop seja uma aplicação web e que a mesma esteja hospedada no IIS 7 ou superior, é necessário habilitar no application pool correspondente a opção “Enabled 32-bits applications”.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s