Visual Studio 2010 Edição de interop de 64 bits
-
20-09-2019 - |
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.
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.