导入模块上的强名称验证失败

Jus*_* R. 2 .net strongname sn.exe import-module

我无法导入程序集,据说是因为强名称验证失败,尽管即使我注册了不检查的程序集,也会发生这种情况。有人可以发现我在这里做错了吗?

以下是抄录。作为参考,sn.exe 的开关是:

  • -v:验证签名。
  • -Vr:注册程序集以进行验证跳过。

    PS C:\temp> .\sn.exe -v .\my.dll

    Microsoft (R) .NET Framework 强名称实用程序版本 3.5.30729.1 版权所有 (c) Microsoft Corporation。版权所有。

    程序集 '.\my.dll' 有效

    PS C:\temp\Cmdlets> Import-Module .\my.dll Import-Module :无法加载文件或程序集“my,Version=4.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”或其依赖项之一。强名称验证失败。(来自 HRESULT 的异常:0x8013141A)在 line:1 char:14

    • 导入模块 <<<< .\Microsoft.Rtc.Management.Core.dll
      • CategoryInfo : NotSpecified: (:) [Import-Module], FileLoadException
      • FullQualifiedErrorId : System.IO.FileLoadException,Microsoft.PowerShell .Commands.ImportModuleCommand

    PS C:\temp\Cmdlets> .\sn.exe -Vr *

    Microsoft (R) .NET Framework 强名称实用程序版本 3.5.30729.1 版权所有 (c) Microsoft Corporation。版权所有。

    为程序集 ' , '添加了验证条目

    PS C:\temp\Cmdlets> Import-Module .\my.dll Import-Module :无法加载文件或程序集“my,Version=4.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”或其依赖项之一。强名称验证失败。(来自 HRESULT 的异常:0x8013141A)在 line:1 char:14

    • 导入模块 <<<< .\Microsoft.Rtc.Management.Core.dll
      • CategoryInfo : NotSpecified: (:) [Import-Module], FileLoadException
      • FullQualifiedErrorId : System.IO.FileLoadException,Microsoft.PowerShell .Commands.ImportModuleCommand

我应该提到我已经通过 Reflector 验证所有必需的依赖程序集都存在于同一目录中。

hbw*_*hbw 5

您的程序集可能是延迟签名或测试密钥签名的,看起来 PowerShell 只允许加载完全签名的程序集(即它忽略跳过验证设置)。这将解释为什么 sn.exe 说程序集具有有效的强名称签名,而技术上没有。(您可以通过运行sn -vf而不是 来确定程序集是否确实具有有效签名,即使它已注册为跳过验证sn -v)。

我认为您的困惑的主要来源源于关于验证跳过如何工作的错误假设。为验证跳过注册程序集并不能保证永远不会验证程序集的强名称签名。验证跳过专门用于允许延迟签名和测试密钥签名的程序集在此类情况下无缝工作,但没有什么能阻止某人(如 PowerShell)覆盖它并强制进行验证。