【问题标题】:Moles with InternalsVisibleTo creates "Assembly reference invalid" warning带有 InternalsVisibleTo 的痣会创建“程序集引用无效”警告
【发布时间】:2012-01-02 15:50:06
【问题描述】:

又是一年,又是一个关于 Moles 的问题。我有一个带有内部密封类的程序集,我想在我用于单元测试的测试项目中使用它。

根据 Moles 文档,我应该添加一个

[assembly: InternalsVisibleTo( "MyAssembly.Moles" )]

属性,以便我可以从我的测试项目中访问内部类。但是,不幸的是,这不起作用,因为“MyAssembly”是强签名的。

因此,按照文档,我在上面的行中添加了公钥,导致

[assembly: InternalsVisibleTo( "MyAssembly.Moles, PublicKey=0123456..." )]

不幸的是,现在编译“MyAssembly”时出现以下错误:

程序集引用“MyMoles.Moles,PublicKey=0123456...”无效,无法解析

文档说“...... Moles 框架总是使用相同的密钥来签署程序集......”,但正如编译器所说,这不起作用。我还使用 Reflector 检查了生成的文件“MyAssembly.Moles.dll”,以验证我使用了正确的公钥(我这样做了),所以我被卡住了,因为我真的不知道问题是什么。

有什么想法吗?

【问题讨论】:

    标签: .net unit-testing moles pex-and-moles


    【解决方案1】:

    确保您输入的是PUBLIC KEY,而不是PUBLIC KEY TOKEN

    如果这不起作用,请使用 secutil 来获取公钥。详细输出将包括正确的键值。这是您需要使用的语法:

    C:\> secutil -hex -s MyAssemblyName.dll
    

    【讨论】:

    • 对不起,我的回复迟了,不知何故,通知一定漏掉了。当我运行 secutil 时,我总是收到错误消息“错误:无法加载程序集“MyAssemblyName.dll””。我通过使用命令提示符的命令完成功能确保名称正确,并且我还尝试了带有和不带有“.dll”扩展名的程序集名称,不幸的是无济于事。然后,我尝试按照msdn.microsoft.com/en-us/library/0tke9fxk(v=vs.80).aspx 中的说明从 .snk 中提取公钥,但使用该密钥我得到“由于其保护级别而无法访问......”错误消息。
    • 您使用的是哪个操作系统?
    • Windows 7 Enterprise SP1,64 位
    • 我看看能不能重现这个问题。目前我不确定问题或解决方案是什么。
    • 谢谢。如果我找到解决方案,我也会在这里发布更新。
    猜你喜欢
    • 2012-01-15
    • 1970-01-01
    • 2014-08-18
    • 1970-01-01
    • 1970-01-01
    • 2011-09-26
    • 2012-03-13
    • 1970-01-01
    • 2010-11-06
    相关资源
    最近更新 更多