Pregunta

Tenemos varios proyectos que utilizan p4.net , un DLL administrado , que a su vez depende de p4dn.dll, un archivo DLL no administrado de 32 bits. Esto tiene problemas en los sistemas x64, así que he tenido que ir a cada proyecto que utiliza p4.net y establecer su tipo de procesador x86.

Si entiendo el problema correcto, es que cuando .NET carga un exe, se comprueba para un manifiesto y si no se hace lo que sea mejor para el tipo de procesador. Luego, cuando se topa con la DLL de 32 bits, que vomita.

Puedo ir a cada proyecto que utiliza p4.net y marcarla como de 32 bits. Pero tenemos un buen número de ellos. Además, las personas van a seguir para hacer otros nuevos y se olvide de establecer de 32 bits y, a continuación, en el futuro vamos a tener de nuevo este problema cuando alguien intenta usarlo en x64.

Hay una manera de tener .NET carga automáticamente cualquier aplicación que utiliza p4dn.dll como de 32 bits:

Mi pregunta es la siguiente? De no ser así, ¿hay una manera para que el IDE para detectar esto y no se aprovecha?

O es posible hacer un archivo manifest que puedo poner al lado de p4api o p4dn.dll de manera que ninguna de las aplicaciones utilizando, se auto de 32 bits?

¿Fue útil?

Solución

Si usted no tiene absolutamente ninguna otra opción que usted puede utilizar corflags como parte de una secuencia de comandos de creación automatizado para marcar todos los archivos DLL de .NET como x86 - corflags /32bit+ file.dll. Aunque creo que la educación adecuada de los desarrolladores es la solución más adecuada.

Otros consejos

CLR comprueba el tipo de plataforma sólo si se carga un ensamblado de GAC. Supongo p4dn.dll está contenida en la carpeta raíz de la aplicación, por lo que creo que estás equivocado en su lógica.

Parece que p4dn.dll no se puede utilizar cuando se está ejecutando en modo WoW64 y su aplicación se ejecuta en modo de 64 bits de forma nativa. Creo que la mejor forma de hacerlo es recopilar toda su proyecto dirigido a x86 (32) de la plataforma. O dividirlo en las partes, por lo que llama p4dn.dll siempre estaría funcionando en modo WoW64.

Además, debe ponerse en contacto con los desarrolladores p4net para añadir soporte completo plataforma x64.

No sé de cualquier manera de hacer esto de forma automática. Yo recomendaría que hacer lo siguiente:

  • Tren sus desarrolladores,
  • Agregar este tema a su base de conocimiento interno y
  • Añadir plataformas x64 a sus entornos de prueba

Además, es posible pensar en escribir un VS complemento en el que comprueba la plataforma de destino correcto. Sin embargo, es posible que haya creación dinámica de componentes COM, también ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top