2012-05-14 24 views
0

在Windows 8使用者预览版上使用Visual Studio 11测试版。使用WINMD库会导致强名称验证异常

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

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

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

我已经设置了“登录大会”标志的类库,使用新生成的.snk文件(没有密码)。对产生的ClassLibrary1.winmd文件运行SN室颤显示:

ClassLibrary1.winmd是一个延迟签名或测试签名组装

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

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

甚至不能创建一个新的标签“winmd”在这里...(没有足够的信誉)

回答

1

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

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

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

你为什么要强调你的组件签名?将组件放入GAC并且.winmd文件无法插入GAC时,主要使用强名称签名。

+0

这很有趣。如果我在Visual Studio中关闭“签署程序集标志”,则异常消失。 –

+0

我之所以使用它的原因基本上是我们想要创建一个组件供其他人使用,所以结果不知何故必须在某个时刻进行签名。请注意,我的工具集只包含Visual Studio。我认为它理解winmd。感谢您改变我的观点。 –

+0

那么万一有人遇到这个问题:选择输出类型“类库”迫使你签署汇编。随后选择输出类型“WinMD”不会让编译器抱怨,但会导致强名称验证异常,除非您再次关闭签名。 –

相关问题