2010-09-23 77 views
2

上的强名称验证失败我无法导入程序集,据说是因为强名称验证失败,虽然这发生在我注册程序集时未被检查。有人可以发现我在这里做错了吗?Import-Module

以下是成绩单。作为参考,到sn.exe的开关是:

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

    PS C:\ TEMP> \ SN.EXE -v \ my.dll

    微软(R).NET Framework中的强名称实用程序版本3.5.30729.1 版权所有(c)Microsoft公司。版权所有。 '\ my.dll'

    大会有效

    PS C:\ TEMP \的cmdlet>导入模块\ my.dll 导入模块:无法加载文件或程序集“我的, 版= 4.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'或其 依赖项之一。强名称验证失败。 (从HRESULT异常:0x8013141A) 在行:1个字符:14

    • 导入模块< < < < \ Microsoft.Rtc.Management.Core.dll
      • CategoryInfo:NotSpecified:(:) [导入模块],FileLoadExcep 灰
      • FullyQualifiedErrorId:System.IO.FileLoadException,Microsoft.PowerShell .Commands.ImportModuleCommand

    PS C:\ TEMP \的cmdlet> \ SN.EXE -Vr *

    微软(R).NET Framework中的强名称实用程序版本3.5.30729.1 版权所有(c)Microsoft公司。版权所有。

    验证条目添加用于装配 ''

    PS C:\ TEMP \的cmdlet>导入模块\ my.dll 导入模块:无法加载文件或程序集“我的, 版= 4.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'或其 依赖项之一。强名称验证失败。 (从HRESULT异常:0x8013141A) 在行:1个字符:14

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

我要指出,我已经通过验证反射所有必需的依赖程序都存在于同一个目录。

回答

3

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

我认为你的困惑的主要来源源于对验证跳过如何工作的错误假设。注册程序集进行验证跳过是而不是保证程序集的强名称签名将永远不会被验证。验证跳过专门用于允许延迟签名和测试密钥签名程序集在这些情况下无缝地工作,但没有任何事情阻止某人(如PowerShell)重写它并强制验证。