Pergunta

Estou tentando adicionar uma DLL VC6 à nossa solução VS2010RC C#. A DLL foi compilada com as ferramentas VC6 para criar uma versão X86 e foi compilada com as ferramentas de plataforma cruzada VC7 para gerar uma DLL VC7.

A versão x86 da Assembléia funciona bem, desde que a plataforma consumida do C# Project esteja definida como x86. Não importa se a versão x64 ou x86 da DLL está realmente registrada. Funciona com ambos. Se a plataforma estiver definida como 'qualquer CPU', recebo um BadImageFormatException na carga do Interop.<name>.dll.

Quanto à versão X64, não consigo nem mesmo que o projeto construa. Eu recebo o erro TLBIMP:

TLBIMP: ERRO TI0000: Um único tipo de máquina válido compatível com a biblioteca do tipo de entrada deve ser especificado.

Alguém já viu essa questão?

EDITAR:

Eu fiz muito mais escavação nesse problema e acho que isso pode ser um bug do Visual Studio. Eu tenho uma solução limpa. Eu trago minha assembléia com a linguagem agnóstica 'qualquer CPU' selecionada. A arquitetura do processo da DLL de interoperidade resultante é X86 em vez de MSIL.

Pode ter que fazer a interoper manualmente por enquanto fazer isso funcionar.

Se alguém tiver outra sugestão, me avise.

Foi útil?

Solução

Este problema pode ser resolvido abrindo o arquivo csproj e adicionando o seguinte nó a qualquer um dos nós '(configuração) | qualquer CPU' que está perdendo:

<PlatformTarget>AnyCPU</PlatformTarget>

Se esse nó não estiver presente, o TLBIMP padrão será o X86 e causará problemas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top