【问题标题】:How to fix DLL LoaderExceptions in PowerShell如何在 PowerShell 中修复 DLL LoaderExceptions
【发布时间】:2019-08-26 17:57:14
【问题描述】:

我正在尝试加载 itext7 的 .dll,但如果我使用这个

Add-Type -Path "D:\Eigene\Packages\itext7.7.1.5\lib\net40\itext.kernel.dll"

我得到以下异常(从德语翻译):

Add-Type : Add-Type : Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.
In Zeile:2 Zeichen:1
+ Add-Type -Path "D:\Eigene\Packages\itext7.7.1.5\lib\net40\itext.kerne ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Add-Type], ReflectionTypeLoadException
    + FullyQualifiedErrorId : System.Reflection.ReflectionTypeLoadException,Microsoft.PowerShell.Commands.AddTypeCommand

当我使用时:

try   { Add-Type -Path "D:\Eigene\Packages\itext7.7.1.5\lib\net40\itext.kernel.dll" }
catch { $_.Exception.LoaderExceptions }

上面写着(也翻译自德语):

文件或程序集“BouncyCastle.Crypto,版本=1.8.1.0, Culture=neutral, PublicKeyToken=0e99375e54769942" 或依赖 没有找到。系统找不到指定的文件。

我该如何解决这个问题?

编辑: 我在我的系统上发现了一个 BouncyCastle dll,当我安装 itext7 包时它也下载了它,但如果我在加载 itext.kernel.dll 之前加载 "D:\Eigene\Packages\Portable.BouncyCastle.1.8.5\lib\net40\BouncyCastle.Crypto.dll",它也不起作用。

【问题讨论】:

  • 将两个 DLL 文件放在同一个文件夹中,然后重试。
  • @TheMadTechnician 不幸的是没有解决它。会不会是版本问题?充气城堡 dll 是 1.8.5 但错误说它要加载 1.8.1?我对使用 dll 很陌生
  • 我什至没有注意到版本不匹配。取决于第一个 DLL 指定为依赖项的内容,如果它需要特定版本还是仅需要最低版本。我想看看你能不能得到确切版本的充气城堡
  • @TheMadTechnician 太好了,成功了!
  • 很多时候,Nuget 包版本与包内 DLL 的版本不匹配。您应该使用ILSpy 来确认依赖 DLL 的版本是否正确。

标签: powershell dll dllimport


【解决方案1】:

您的程序集正在寻找与您不同的版本。 我不确定您是否可以像使用可以将旧程序集绑定到新示例的应用程序一样在 powershell 中进行程序集绑定: https://docs.microsoft.com/en-us/dotnet/framework/deployment/configuring-assembly-binding-redirection

您的错误是要求您使用以下公共令牌加载 1.8.1.0 版的 dll:PublicKeyToken=0e99375e54769942

通常,程序集发布者不会更改他们的公共令牌,尽管从技术上讲充气城堡是可行的,因此您可能不需要指定。

无论如何你需要找到旧版本(好像你有 1.8.5)。这些很可能是兼容的,但最好/最安全的选择是使用与您加载所需的程序集相同的程序集。

如果您需要将绑定重定向到较新的程序集,您可以在此处找到一些帮助:Powershell - Assembly binding redirect NOT found in application configuration file

【讨论】:

  • 这真的很旧,所以只是在我遇到这个(类似的不同程序集)时发布并通过加载正确的程序集来修复它。没有搞乱 Powershell 中的绑定重定向,但在 .NET 中经常使用它
猜你喜欢
  • 2015-12-28
  • 1970-01-01
  • 2021-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-07
相关资源
最近更新 更多