LoaderException bei Add-Type in Powershell


Will man in Powershell mittels Add-Type eine DLL Datei laden, so kann es passieren, dass der Versuch mit einer Ausnahme abgebrochen wird:

PS> add-type -path ‚C:\Program Files\PackageManagement\NuGet\Packages\MimeKit.1.22.0\lib\net451\MimeKit.dll‘
add-type : Mindestens ein Typ in der Assembly kann nicht geladen werden. Rufen Sie die LoaderExceptions-Eigenschaft ab, wenn Sie weitere Informationen benötigen.
In Zeile:1 Zeichen:1
+ add-type -path ‚C:\Program Files\PackageManagement\NuGet\Packages\Mim …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Add-Type], ReflectionTypeLoadException
    + FullyQualifiedErrorId : System.Reflection.ReflectionTypeLoadException,Microsoft.PowerShell.Commands.AddTypeComma
   nd

Schön solche umfassenden Fehlermeldungen, wo bekomme ich nun aber die LoaderException-Eigenschaft her? Das Fehlerobjekt liefert zunächst nix brauchbares. Der Parameter –Force ist wichtig damit alle Eigenschaften angezeigt werden:

PS> $error|fl * -Force

PSMessageDetails      :
Exception             : System.Reflection.ReflectionTypeLoadException: Mindestens ein Typ in der Assembly kann nicht
                        geladen werden. Rufen Sie die LoaderExceptions-Eigenschaft ab, wenn Sie weitere Informationen
                        benötigen.
                           bei System.Reflection.RuntimeModule.GetTypes(RuntimeModule module)
                           bei System.Reflection.Assembly.GetTypes()
                           bei Microsoft.PowerShell.Commands.AddTypeCommand.LoadAssemblyFromPathOrName(List`1
                        generatedTypes)
                           bei Microsoft.PowerShell.Commands.AddTypeCommand.EndProcessing()
                           bei System.Management.Automation.CommandProcessorBase.Complete()
TargetObject          :
CategoryInfo          : NotSpecified: (:) [Add-Type], ReflectionTypeLoadException
FullyQualifiedErrorId : System.Reflection.ReflectionTypeLoadException,Microsoft.PowerShell.Commands.AddTypeCommand
ErrorDetails          :
InvocationInfo        : System.Management.Automation.InvocationInfo
ScriptStackTrace      : bei <ScriptBlock>, <Keine Datei>: Zeile 1
PipelineIterationInfo : {}

Aber es gibt bei der Exception-Eigenschaft etwas:

PS> $Error.Exception|fl -Force

Types            : {MimeKit.MimeParser, MimeKit.AttachmentCollection, MimeKit.BodyBuilder,
                   MimeKit.ContentDisposition…}
LoaderExceptions : {System.IO.FileNotFoundException: Die Datei oder Assembly "BouncyCastle.Crypto, Version=1.8.1.0,
                   Culture=neutral, PublicKeyToken=0e99375e54769942" oder eine Abhängigkeit davon wurde nicht
                   gefunden. Das System kann die angegebene Datei nicht finden.
                   Dateiname: "BouncyCastle.Crypto, Version=1.8.1.0, Culture=neutral, PublicKeyToken=0e99375e54769942"

                   WRN: Protokollierung der Assemblybindung ist AUS.
                   Sie können die Protokollierung der Assemblybindungsfehler aktivieren, indem Sie den
                   Registrierungswert [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) auf 1 festlegen.
                   Hinweis: Die Protokollierung der Assemblybindungsfehler führt zu einer gewissen Leistungseinbuße.
                   Sie können dieses Feature deaktivieren, indem Sie den Registrierungswert
                   [HKLM\Software\Microsoft\Fusion!EnableLog] entfernen.
                   , System.IO.FileNotFoundException: Die Datei oder Assembly "BouncyCastle.Crypto, Version=1.8.1.0,
                   Culture=neutral, PublicKeyToken=0e99375e54769942" oder eine Abhängigkeit davon wurde nicht
                   gefunden. Das System kann die angegebene Datei nicht finden.
                   Dateiname: "BouncyCastle.Crypto, Version=1.8.1.0, Culture=neutral, PublicKeyToken=0e99375e54769942"

                   WRN: Protokollierung der Assemblybindung ist AUS.
                   Sie können die Protokollierung der Assemblybindungsfehler aktivieren, indem Sie den
                   Registrierungswert [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) auf 1 festlegen.
                   Hinweis: Die Protokollierung der Assemblybindungsfehler führt zu einer gewissen Leistungseinbuße.
                   Sie können dieses Feature deaktivieren, indem Sie den Registrierungswert
                   [HKLM\Software\Microsoft\Fusion!EnableLog] entfernen.
                   , System.IO.FileNotFoundException: Die Datei oder Assembly "BouncyCastle.Crypto, Version=1.8.1.0,
                   Culture=neutral, PublicKeyToken=0e99375e54769942" oder eine Abhängigkeit davon wurde nicht
                   gefunden. Das System kann die angegebene Datei nicht finden.
                   Dateiname: "BouncyCastle.Crypto, Version=1.8.1.0, Culture=neutral, PublicKeyToken=0e99375e54769942"

                   WRN: Protokollierung der Assemblybindung ist AUS.
                   Sie können die Protokollierung der Assemblybindungsfehler aktivieren, indem Sie den
                   Registrierungswert [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) auf 1 festlegen.
                   Hinweis: Die Protokollierung der Assemblybindungsfehler führt zu einer gewissen Leistungseinbuße.
                   Sie können dieses Feature deaktivieren, indem Sie den Registrierungswert
                   [HKLM\Software\Microsoft\Fusion!EnableLog] entfernen.
                   , System.IO.FileNotFoundException: Die Datei oder Assembly "BouncyCastle.Crypto, Version=1.8.1.0,
                   Culture=neutral, PublicKeyToken=0e99375e54769942" oder eine Abhängigkeit davon wurde nicht
                   gefunden. Das System kann die angegebene Datei nicht finden.
                   Dateiname: "BouncyCastle.Crypto, Version=1.8.1.0, Culture=neutral, PublicKeyToken=0e99375e54769942"

                   WRN: Protokollierung der Assemblybindung ist AUS.
                   Sie können die Protokollierung der Assemblybindungsfehler aktivieren, indem Sie den
                   Registrierungswert [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) auf 1 festlegen.
                   Hinweis: Die Protokollierung der Assemblybindungsfehler führt zu einer gewissen Leistungseinbuße.
                   Sie können dieses Feature deaktivieren, indem Sie den Registrierungswert
                   [HKLM\Software\Microsoft\Fusion!EnableLog] entfernen.
                   …}
Message          : Mindestens ein Typ in der Assembly kann nicht geladen werden. Rufen Sie die
                   LoaderExceptions-Eigenschaft ab, wenn Sie weitere Informationen benötigen.
Data             : {}
InnerException   :
TargetSite       : System.RuntimeType[] GetTypes(System.Reflection.RuntimeModule)
StackTrace       :    bei System.Reflection.RuntimeModule.GetTypes(RuntimeModule module)
                      bei System.Reflection.Assembly.GetTypes()
                      bei Microsoft.PowerShell.Commands.AddTypeCommand.LoadAssemblyFromPathOrName(List`1
                   generatedTypes)
                      bei Microsoft.PowerShell.Commands.AddTypeCommand.EndProcessing()
                      bei System.Management.Automation.CommandProcessorBase.Complete()
HelpLink         :
Source           : mscorlib
HResult          : –2146232830

Da der ganze kram Drumherum in diesem Fall nicht interessiert, ist diese Zeile zielführend:

PS> $error[0].exception.loaderexceptions[0]
Die Datei oder Assembly "BouncyCastle.Crypto, Version=1.8.1.0, Culture=neutral, PublicKeyToken=0e99375e54769942" oder
eine Abhängigkeit davon wurde nicht gefunden. Das System kann die angegebene Datei nicht finden.

Also kurz gesagt, es fehlt eine andere Assembly bzw. DLL-Datei, in diesem Fall BouncyCastle. Wenn also bei einer LoaderException bei Add-Type ein Problem auftaucht hilft diese Zeile:

$error[0].exception.loaderexceptions[0]

Advertisements

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

w

Verbinde mit %s


%d Bloggern gefällt das: