Ich habe ein Powershell-CmdLet, das im 32-Bit-Modus funktioniert und im 64-Bit-Modus fehlschlägt. Frage ist, was die Ursache ist und wie sie behoben werden kann.
Powershell CmdLet, das auf 'OutlookHelper.Common.dll' verweist. Neueste Version ist 2.0.0.0
Das CmdLet verwendet außerdem Protokollierung und Verweise "Logging.dll".
Logging.dll verweist auch auf 'OutlookHelper.Common.dll', wurde nur mit Version 1.0.0.0 kompiliert.
Verwenden einer Assembly-Bindungsumleitung in der Anwendungskonfigurationsdatei von Powershell:
%Vor%Wenn es auf einem 64-Bit-Rechner läuft, funktioniert 'Windows PowerShell (x86)'. Der Assembly-Manager findet eine Assembly-Bindungsumleitung:
%Vor%Hier ist was Powershell über die Assembly-Identität sagt:
%Vor%Wenn Sie auf einem 64-Bit-Computer arbeiten, funktioniert 'Windows Powershell' nicht. Der Assembly-Manager findet die Assembly Binding Redirect nicht:
%Vor%Hier ist was Powershell über die Assembly-Identität sagt:
%Vor%Wenn ich Powershell den Inhalt seiner eigenen Anwendungskonfigurationsdatei holen lasse, bekomme ich die folgende Ausgabe:
%Vor%Auf einer 64-Bit-Maschine gibt es zwei Konfigurationsdateien:
%Vor%Haben Sie beide auf der 64-Bit-Maschine bearbeitet?
Auf 64-Bit-Versionen von Windows. 32-Bit-Prozesse (wie Notepad ++) werden vom Betriebssystem transparent von C: \ WINDOWS \ System32 nach C: \ WINDOWS \ SysWOW64 umgeleitet.
Sie müssen sicherstellen, dass Sie beide Dateien mit einem 64-Bit-Texteditor wie dem eingebauten Notepad bearbeiten. Dies garantiert Ihnen, dass Sie nicht unter diesem subtilen Problem leiden, das zu Verwirrung führen kann.
Nicht 100% im Zusammenhang mit dem 32/64-Bit-Problem. Wenn jedoch jemand an einer funktionierenden Assembly-Redirect-Lösung interessiert ist, schauen Sie bitte hier Powershell Config Assembly-Weiterleitung .
Sie können benutzerdefinierte Umleitungen mit PowerShell-Code wie
ausführen %Vor% Ich lade zuerst die korrekte Version von FSharp.Core
von irgendwo, da die Version in der GAC alt ist (ich denke, das könnte auch dein Fall sein)
Sie können auch die tatsächliche Testnutzung in meinem Projekt überprüfen .
Basierend auf der äußerst hilfreichen Antwort von @ davidpodhola habe ich angefangen, so etwas in meine psm1-Moduldateien einzufügen. Wenn Ihre neueren Assemblys bereits geladen sind (zB durch Import-Module), sollte dies funktionieren:
%Vor%Aktualisierung: Powershell scheint einen Fehler zu haben, bei dem das einfache Registrieren eines Assembly-Resolve-Skriptblocks eine StackOverflowException verursachen kann, wenn einige Befehle wie Out-GridView aufgerufen werden. Ich habe den Code aktualisiert, um eine mit Add-Type kompilierte Version zu verwenden, die das Problem scheinbar löst.
Tags und Links .net powershell 32bit-64bit assembly-binding-redirect