使用WINMD库会导致强名称验证异常

时间:2012-05-14 10:32:58

标签: c# .net code-signing windows-runtime strongname

在Windows 8消费者预览版上使用Visual Studio 11 beta。

问题是:如果尝试使用其输出类型设置为WinMD的类库中的类,我会收到一个安全异常,指出“强名称验证”失败(来自HRESULT的异常:0x8013141A)。我只是想尝试使用Visual Studio运行(F5)一个小测试应用程序。

如果我将输出类型设置为“类库”,问题就会消失。可以在这里找到一个小的(而且相当简单的)测试项目:

http://download.tallcomponents.com/WinRTApplication3.zip

我使用新生成的.snk文件(没有密码)为类库设置了“Sign the Assembly”标志。在生成的ClassLibrary1.winmd文件上运行sn -vf会显示:

ClassLibrary1.winmd是延迟签名或测试签名的程序集

所以也许问题基本上是输出没有“正确”签名?我只是不知道如何解决这个问题,因为我已经指定了要签名的类库,我也不明白为什么只有在输出到WinMD文件时才会发生这种情况。我现在假设我不需要仅用于调试和测试的“官方”证书。

好吧,如果这是一个初学者问题,我仍然很抱歉。我试图“谷歌”一个答案,但我主要得到超过2年的点击,谷歌建议“风”而不是winmd ...

甚至无法在这里创建一个新标签“winmd”......(声誉不够)

1 个答案:

答案 0 :(得分:1)

如果您在winmd文件上收到强名称验证错误,通常是因为您使用的工具集不了解.winmd文件格式。

.winmd文件不能是强名称签名。

在这种情况下,问题可能是因为您尝试对组件库进行强名称签名 - C#组件库生成包含Windows元数据和C#IL的混合.winmd文件。

为什么要尝试使用强名称对组件进行签名?强制名称签名主要用于将程序集放入GAC,而.winmd文件无法插入GAC。