Question

Nous avons plusieurs projets qui utilisent p4.net , une DLL gérée , qui à son tour dépend de p4dn.dll, une DLL non géré 32 bits. Cela a des problèmes sur les systèmes x64, donc j'ai dû aller à chaque projet qui utilise p4.net et définir son type de processeur x86.

Si je comprends bien le problème droit, il est que lorsque .NET charge un exe, il vérifie un manifeste et si aucun ne fait tout est le mieux pour le type de processeur. Puis, quand il se jette dans la dll 32 bits, il vomit.

Je peux aller à chaque projet qui utilise p4.net et la marquer comme 32 bits. Mais nous avons un assez grand nombre d'entre eux. De plus, les gens vont continuer à faire de nouveaux et oublier de mettre 32 bits, puis à l'avenir, nous aurons à nouveau ce problème quand quelqu'un d'autre essaie de l'utiliser sur x64.

Ma question est la suivante: est-il un moyen d'avoir .NET charger automatiquement une application qui utilise p4dn.dll comme 32 bits? A défaut, est-il un moyen de l'IDE pour détecter cela et ne parviennent pas à construire?

Ou est-il possible de créer un fichier .manifest que je peux mettre à côté de p4api ou p4dn.dll de sorte que les applications les utilisant courrons automatique en 32 bits?

Était-ce utile?

La solution

Si vous avez absolument aucun autre choix que vous pouvez utiliser corflags dans le cadre d'un script automatisé de construction pour marquer tous les DLLs .NET comme x86 - corflags /32bit+ file.dll. Bien que je pense que l'éducation appropriée des développeurs est une solution plus adéquate.

Autres conseils

CLR vérifie le type de plate-forme que si elle charge un ensemble de GAC. Je suppose que p4dn.dll est contenu dans l'application dossier racine, donc je pense que vous avez tort dans votre logique.

Il semble que p4dn.dll ne peut pas être utilisé quand il est en cours d'exécution en mode WoW64 et votre application est en cours d'exécution en mode natif 64 bits. Je pense que la meilleure façon est de compiler tout votre projet ciblé sur la plate-forme x86 (32). Ou casser dans les parties, de sorte que l'appelant p4dn.dll serait toujours en cours d'exécution en mode WoW64.

En outre, vous devez contacter les développeurs de p4net ajouter un support complet de la plate-forme x64.

Je ne connais aucune façon de le faire automatiquement. Je vous recommande de faire ce qui suit:

  • Formez vos développeurs,
  • Ajouter ce sujet à votre base de connaissances internes et
  • Ajoutez les plates-formes x64 à vos environnements de test

De plus, vous pourriez penser à l'écriture d'un add-in VS qui vérifie la plate-forme cible correcte. Mais il pourrait y avoir la création dynamique de composants COM aussi ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top