2012-12-10 28 views
7

Dies scheint ein häufiges Problem in PowerShell und Visual Studio zu sein, jedoch scheinen Fälle und Lösungen sehr unterschiedlich zu sein. Obwohl ich einige ähnliche Fragen sah, habe ich noch keine funktionierende Lösung für mein Problem gefunden.PowerShell-Laufzeitausnahme - "Datei oder Baugruppe konnte nicht geladen werden"

Das Problem besteht in der Fehlermeldung

Datei konnte nicht oder Montage 'file: /// C: \ Benutzer \ jenstmar \ Desktop \ WinSCP.dll' load o r eine seiner Abhängigkeiten. Die Bedienung wird nicht unterstützt. (Ausnahme von HRESULT: 0x80131515)

Der Speicherort der Datei ist ungültig, da die DLL soll im selben Ordner wie die WinSCP Installation befinden. Dieser Ort wurde geändert, um zu prüfen, ob keine Rechte oder ein Mangel daran bestehen, beschränkte mich darauf, sie zu benutzen.

Die Skriptzeile, die das Problem verursacht sieht wie folgt:

# Load WinSCP .NET assembly 
[Reflection.Assembly]::LoadFrom("C:\users\jenstmar\Desktop\WinSCP.dll") | Out-Null 

Dieser Fehler kommt sowohl in PowerShell ISE und PS ISE (x86). Ich betreibe PowerShell V3.0 in einer Windows-64-Bit-Umgebung als lokalen Administrator. Wie kann ich dieses Problem beheben?

Antwort

4

Lösung in diesem Fall: Entfernen und alles wieder herunterladen. Ich entsperrt es sogar auf der ersten Datei, ohne Hilfe. Ich bin froh, dass dies auf einer internen Maschine war.

+1

Wer dachte, es wird die Lösung sein. :) Ich versuche es jetzt seit ungefähr 6 Stunden. Danke Mark Jenster –

+4

Wenn PowerShell ISE zum Zeitpunkt der Entsperrung geöffnet war, schließen und öffnen Sie es erneut. Es scheint, die DLL in bestimmten Szenarien zu sperren, was die Freigabeaktion verzögert. – tresf

10

Die Datei kann aufgrund ihres Ursprungs möglicherweise nicht geladen werden (gespeichert in NTFS streams). Überprüfen Sie die Eigenschaften und prüfen Sie, ob die Schaltfläche für die kleine Entsperrung leuchtet. Sobald Sie es entsperren wird es vielleicht geladen ...

+0

Auch hier dokumentiert: http://winscp.net/eng/docs/message_net_operation_not_supported –

+0

Es stellte sich heraus, dass das Benutzerverzeichnis meines vm auf einem freigegebenen Laufwerk war. Ich musste zuerst die Datei auf den lokalen PC herunterladen und dann das Schloss entfernen. – Nico

+0

Sobald die Datei entsperrt ist, schließen und öffnen Sie die Powershell erneut, sonst wird es nicht funktionieren. – rom

0

Ich würde WinSCP.dll Abhängigkeiten in ILDASM oder dotPeek betrachten und dann diese Abhängigkeiten laden vor dem Laden von WinSCP.dll. Das Problem besteht darin, dass Sie in dem Fusion-Loadkontext PowerShell.exe (oder Powershell_ise.exe) und den Assemblys ausgeführt werden, die WinSCP.dll nicht unter den Basisverzeichnissen beider EXEs gefunden werden. Daher müssen Sie die abhängigen Assemblys laden, bevor der CLR-Lader drosselt, da er keine erforderliche DLL finden kann. Wenn Sie Hilfe benötigen, um herauszufinden, welche Baugruppe nicht gefunden werden kann, sehen Sie sich das Tool fuslogvw.exe an.

BTW, ab PowerShell v2 sollten Sie anstelle von [S.R.A] :: LoadFrom (...) Add-Type -Path <path> verwenden.

3

Die folgenden funktionierten für mich (aus Stack Overflow Frage Add-Type load assembly from network UNC share error 0x80131515).

In Dateien:

C: \ Windows \ System32 \ Windows \ v1.0 \ powershell.exe.config C: \ Windows \ SysWOW64 \ Windows \ v1.0 \ powershell.exe.config

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <runtime> 
     <loadFromRemoteSources enabled="true"/> 
    </runtime> 
</configuration> 
1
Import-Module : Could not load file or assembly 'file:/// *dll path*' or one of 
its dependencies. An attempt was made to load a program with an incorrect format. 
At *script path*.ps1:68 char:2 
+  Import-Module *module path* 
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : NotSpecified: (:) [Import-Module], BadImageFormatException 
    + FullyQualifiedErrorId : System.BadImageFormatException,Microsoft.PowerShell.Commands.ImportModuleCommand 

Wenn Sie den obigen Fehler zu sehen, könnte es das Problem sein, die Windows Powershell ISE in 32-Bit-Modus (Windows Powershell ISE (x86)) ausgeführt wird. Sie müssen die Anwendung Windows PowerShell ISE ausführen.

Diese Anwendung (Windows PowerShell ISE) befindet sich im 64-Bit-Modus. Als ich den Power-Shell-Befehl ausgeführt habe, funktioniert es gut für mich.

Ich habe versucht, dies mit verschiedenen Arten Lösungen zu beheben, aber es hat nicht für mich funktioniert. Wenn Sie den 32-Modus ausführen, schalten Sie ihn auf 64 Bit um und versuchen Sie es.

Verwandte Themen