Pergunta

Temos vários projetos que utilizam p4.net , uma DLL gerenciada , que por sua vez é dependente p4dn.dll, um de 32 bits não gerido DLL. Isto tem problemas em x64 sistemas, então eu tive que ir para cada projeto que usa p4.net e defina seu tipo de processador de x86.

Se eu entendi o direito problema, é que quando carrega .NET um EXE, ele verifica para um manifesto e se nenhum ele faz o que é melhor para o tipo de processador. Então, quando ele corre para a DLL de 32 bits, ele barfs.

Eu posso ir para cada projeto que usa p4.net e marcá-lo como de 32 bits. Mas temos muito poucos destes. Além disso, as pessoas vão continuar a fazer novos e se esqueça de definir de 32 bits e, em seguida, no futuro teremos esse problema novamente quando alguém tentar usá-lo em x64.

A minha pergunta é esta: existe uma maneira de ter .NET automaticamente carregar qualquer aplicativo que usa p4dn.dll como 32-bit? Falhando isso, há uma maneira para o IDE para detectar isso e não conseguem construir?

Ou é possível fazer um arquivo manifest que eu possa colocar ao lado p4api ou p4dn.dll modo que nenhuma aplicação através deles será executado automaticamente em 32 bits?

Foi útil?

Solução

Se você não tem absolutamente nenhuma outra escolha que você pode usar corflags , como parte de um script de construção automatizada para marcar todas as DLLs .NET como x86 - corflags /32bit+ file.dll. Embora eu acho que a educação adequada de desenvolvedores é a solução mais adequada.

Outras dicas

CLR tipo de plataforma cheques somente se ele carrega um assembly do GAC. Eu acho que p4dn.dll está contido na pasta raiz do aplicativo, então eu acho que está errado em sua lógica.

Parece que p4dn.dll não pode ser utilizado quando está em execução no modo WoW64 e sua aplicação está em execução no modo x64 nativo. Eu acho que a melhor maneira é compilar todo o seu projeto destinado a plataforma x86 (32). Ou quebrá-lo em partes, de modo chamador p4dn.dll seria sempre em execução no modo WoW64.

Além disso, você deve entrar em contato com os desenvolvedores p4net para adicionar suporte à plataforma x64 completo.

Eu não sei de nenhuma maneira de fazer isso automaticamente. Eu recomendo que você faça o seguinte:

  • treinar seus desenvolvedores,
  • Adicionar este tópico à sua base de conhecimento interno e
  • Adicionar x 64 plataformas para seus ambientes de teste

Além disso, você pode pensar em escrever um VS add-in que verifica a plataforma de destino correto. Mas, em seguida, pode haver criação dinâmica de componentes COM, também ...

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