Comment gérer le développement de PowerShell-ins avec les versions composant logiciel enfichable x86 et x64

StackOverflow https://stackoverflow.com/questions/3551494

Question

Je suis en train d'écrire un snapin PowerShell qui a des dépendances spécifiques sur les assemblages en mode mixte (assemblages contenant du code natif) qui ciblent spécifiquement x64 ou x86. Je les deux versions de l'assemblée à charge, mais je me demande comment mieux gérer la construction et le déploiement de ce logiciel enfichable, plus précisément:

  1. Est-il nécessaire d'avoir deux versions du logiciel enfichable, un x86 et une x64, et utilisez les pour l'installer, deux versions différentes de installutil une fois pour chaque architecture?
  2. # 1 Supposant est vrai, est-il recommandé d'installer les deux versions différentes du snapin dans les différents "Program Files" et "Program Files (x86)" répertoires?
  3. Quel est le moyen idéal (moins de tracas) pour structurer une paire de projets que tout part, mais une seule référence, afin de construire pour les deux architectures différentes?
  4. Si le snapin est compilé comme « anycpu », et les dll dépendants sont tous deux chargés dans le GAC, sera la charge d'exécution l'assemblage correct du GAC basé sur l'architecture de l'hôte PowerShell en cours d'exécution?
  5. Est-il un moyen slick de façon dynamique, au moment de l'exécution, choisissez qui dll en fonction de la charge (si elle ne peut pas, pour diverses raisons, être installé dans le GAC) sans avoir des maux de tête avec des contextes de charge de montage?
Était-ce utile?

La solution 2

J'ai fini par créer un module (merci, Richard!), Mais cela ne résout pas les problèmes liés à l'architecture du processeur. Pour résoudre cela, je mets à charger la version appropriée de la dll dépend à la fois les versions de la dll dépendante dans le répertoire du module, et dans le constructeur de chaque applet de commande je mets un code d'initialisation (qui fonctionne qu'une seule fois).

Merci, tout, pour les pointeurs.

Autres conseils

Mark, nous avons cette situation très avec les extensions communautaires PowerShell avec 32 bits et 64 bits de 7zip.dll. Vous pouvez très facilement travailler autour de ce par PInvoking à LoadLibrary au début de votre démarrage de snapin (ou avant que vous devez appeler la DLL native). Vous pouvez ensuite tester si vous êtes un processus 32 bits ou 64 bits (IntPtr.Size) puis charger manuellement la DLL correcte à l'aide du LoadLibrary PInvoke. Après que le, DllImport ( « YourNative.dll ») remarqueront que le dll est déjà chargé et d'utiliser cette DLL.

Jetez un oeil à ces deux fichiers de code source PSCX: http://pscx.codeplex.com/SourceControl/changeset/ vue / 74794? ProjectName = Pscx # 1358100 http://pscx.codeplex.com/SourceControl/changeset/ vue / 74794? ProjectName = Pscx # 1358102

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