Pergunta

Eu tenho um projeto .NET que sempre foi construído / run by / em máquinas de 32 bits. Eu tenho um computador novo a 64 bit e estou tentando enfrentar a tarefa de fazê-lo funcionar lá. O script de construção está em nant, e em um ponto que compilar algum código boo usando a tarefa nant. As referências de código boo nosso núcleo DLL, que é construído a partir de c # fonte no início do processo de criação.

Eu tentei duas coisas: construir a sua operação em modo de 32 bits e construí-lo para ser executado no modo de 64 bits. Usando corflags em vários programas (incluindo booc), eu era capaz de construir o projeto construído em modo de 32 bits, mas acabou com um monte de problemas a jusante em tempo de execução. Então eu preciso para obtê-lo construído em modo de 64 bits, o que eu acho que é mesmo assim preferível.

De acordo com o código-fonte nant / booc, a tarefa booc nant chama a booc.exe em processo usando classe Process do CLR, por isso, (eu acho) que deve herdar 32bitness ou 64bitness do processo pai. Que não reflete o que estou vendo, no entanto.

Aqui está o que eu fiz:

  1. usou a versão de 64 bits do PowerShell para invocar nant
  2. especificado plataforma = "x64" em minhas tarefas. Eu sinto que eu não deveria ter que fazer isso porque anycpu deve estar bem, mas parece fazer a diferença.

Aqui está o erro que estou recebendo:

[booc] Compiling 5 files to 'C:\dev\build\MyProjectBoo.dll'.
[booc] BCE0106: Failed to access the types defined in assembly 'MyProject, Version=5.5.0.0, Culture=neutral, PublicKeyToken=null' - (C:\dev\build\MyProject.dll):Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.
[booc]  is not a valid Win32 application. (Exception from HRESULT: 0x800700C1)
[booc]  is not a valid Win32 application. (Exception from HRESULT: 0x800700C1)
[booc] .
[booc] 1 error(s).

O que significa que, de acordo com o código-fonte booc, "Eu tentei lista reflexivamente os tipos em seu referenciada montagem, mas falhou". Eu não sei se isso significa, "Eu acho que estou 32bit mas estes são de 64 bits DLLs" ou o quê, e eu estou muito confuso.

Algumas ideias sobre como posso chegar a este trabalho?

Atualizar depois de algum trabalho, eu descobri que a questão não tem nada a ver com vaia. Eu escrevi um programa rápido c # que cargas reflexivamente a dll e quebra da mesma forma. Então, por algum motivo, não importa o que eu defini como a plataforma (x86, x64 ou anycpu), não posso carregá-lo reflexivamente em uma máquina x64. culpa por isso não é realmente da vaia. Então eu vou para cavar isso e repost se eu tiver uma pergunta melhor.

mais recente atualização Acontece que uma das dependências de terceiros meu principal da DLL insiste em estar em um ambiente de 32 bits, mesmo que ele não é construído com corflags. Isso faz com que assembly.GetTypes () falhar no modo de 64 bits.

Foi útil?

Solução

O problema é dependências do DLL de terceiros que requerem modo de 32 bits, o que é possível, mesmo se eles não têm corflags definido.

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