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

以下是成绩单。作为参考,转到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 =中性=中性,public keytoken = 31bf3856ad364e35'或其中一个依赖性。强名称验证失败。 (Hresult的例外:0x8013141a)在线:1个字符:14

    • import-module <<<<。 microsoft.rtc.management.core.dll
      • categoryInfo:未指定::) [Import-Module],Fileloadexcep tion
      • 完全QualifiedErrid:system.io.fileleloadexception,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 =中性=中性,public keytoken = 31bf3856ad364e35'或其中一个依赖性。强名称验证失败。 (Hresult的例外:0x8013141a)在线:1个字符:14

    • import-module <<<<。 microsoft.rtc.management.core.dll
      • categoryInfo:未指定::) [Import-Module],Fileloadexcep tion
      • 完全QualifiedErrid:system.io.fileleloadexception,Microsoft.powershell .Commands.importModulecommand

我应该提到,我已经通过反射器验证了同一目录中存在所有所需的依赖组件。

有帮助吗?

解决方案

您的组件可能是签名延迟或测试键,并且看起来PowerShell仅允许装载完全签名的组件(即它忽略了SKIP验证设置)。这可以解释为什么SN.EXE说大会在技术上没有一个有效的强名字签名。 (您可以通过运行 sn -vf 代替 sn -v).

我认为您的混乱的主要来源源于关于验证如何工作的错误假设。注册一个用于跳过验证的组件是 不是 保证大会的强人名称签名将永远无法验证。验证跳过专门旨在允许延迟签名和测试键签名的组件在此类情况下无缝工作,但是没有什么可以阻止某人(像PowerShell这样的人)覆盖它并强迫验证。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top