Frage

Ich schreibe zur Zeit ein Powershell-Snap-In, die bestimmten Abhängigkeiten von Mixed-Mode-Baugruppen (Baugruppen, den native Code) hat, die speziell x64 oder x86 Ziel. Ich habe beiden Versionen der abhängigen Assembly, aber ich frage mich, wie man am besten den Aufbau und Einsatz dieser snapin zu verwalten, und zwar:

  1. Ist es notwendig, zwei Versionen des Snap-In zu haben, ein x86 und x64 ein, und verwenden Sie die zwei verschiedenen Versionen von installutil es zu installieren, einmal für jede Architektur?
  2. Unter der Annahme, # 1 wahr ist, ist es die zwei verschiedenen Versionen des Snap-Ins in den verschiedenen „Program Files“ und „Program Files (x86)“ Verzeichnisse installieren empfohlen?
  3. Was ist das ideale (am wenigsten Aufwand) Art und Weise ein Paar von Projekten, die Aktie alles andere als eine einzige Referenz, um zu bauen für die beiden unterschiedlichen Architekturen zu strukturieren?
  4. Wenn die Snap-Ins als „AnyCPU“ kompiliert wird, und die abhängigen DLLs beide werden in den GAC geladen, wird die Laufzeit lädt die richtige Assembly aus dem GAC auf der Basis der Architektur der aktuell laufenden Powershell-Host?
  5. Sie hat ein glatter Weg dynamisch zur Laufzeit wählen, die abhängige DLL zu laden (wenn es nicht, die aus verschiedenen Gründen in dem GAC installiert werden), ohne in Kopfschmerzen mit Montage Lesen Kontexte?
War es hilfreich?

Lösung 2

beendet I Erstellung eines Moduls bis (danke, Richard!), Aber das hat nicht lösen, die auf Prozessorarchitektur Probleme. Um das zu lösen, habe ich beiden Versionen der abhängigen DLL in dem Modul-Verzeichnis und in jedem Konstruktor des Cmdlets habe ich einige Initialisierungscode (das läuft nur einmal) die entsprechende Version der abhängigen DLL zu laden.

Danke, alle, für die Zeiger.

Andere Tipps

Mark, haben wir diese sehr Situation mit den Powershell-Communityerweiterungen mit 32-Bit und 64-Bit-Versionen von 7zip.dll. Sie können ziemlich umgehen dies leicht durch PInvoking zu Loadlibrary früh in Ihrem snapin Start (oder bevor Sie brauchen, um die native DLL zu rufen). Anschließend können Sie testen, ob Sie eine 32-Bit oder 64-Bit-Prozess (IntPtr.Size) und laden Sie dann manuell die richtige DLL mit dem Loadlibrary PInvoke sind. Danach wird das, DllImport ( „YourNative.dll“) werden feststellen, dass die DLL bereits Gebrauch geladen und das DLL.

Werfen Sie einen Blick auf diese beiden PSCX Quellcodedateien: http://pscx.codeplex.com/SourceControl/changeset/ view / 74794? Projektname = PSCX # 1358100 http://pscx.codeplex.com/SourceControl/changeset/ view / 74794? Projektname = PSCX # 1358102

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top