如何调查非工作的InternalsVisibleTo属性?

时间:2015-10-28 08:04:18

标签: .net unit-testing

我试图使类库的内部对单元测试项目可见。类库和单元测试项目都已签名;我们在VS-2013中使用了项目属性页面,勾选了签名框,让VS创建一个密钥文件。

我使用过" sn -Tp NUnitTests.dll"在开发人员命令工具上提取公钥(真正的anonying MS不提供简单的"选择DLL" GUI方式来做这个乏味的东西 - 但我离题了)。

在类库的AssemblyInfo.cs中,我已插入

[assembly: InternalsVisibleTo("MyProject.NUnitTests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100fbd5b3dfc3247de89f1940718fbecda5fc6f9e19a17515a5af8004555d1f1bc9720dfa522ccf414c2f79c659528053a3ba0083333e5d1ae9d7a674d032386b5180e78cacad2e1f16f2f2cf005452615a5d06c6c6911665e8f66112c568bcd93ae93bd4cce348f3e2c5f8ea9156abd19119773ebe329728ae9558210aa8181be2")]

只要我不测试任何内部构件,这两个项目都会很好,但是如果我尝试这样做,我会得到相同的构建错误,如果内部没有暴露,我会得到。例如。如果类库包含

public class Foo 
{
    internal static void Bar() {}
}

并且测试确实

Foo.Bar();

我得到一个错误声称Foo没有这个方法。

我已经检查,仔细检查并三重检查名称和密钥是否正确。我已经清空了GAC并重建了(因为我有时经历过构建似乎使用GAC版本的程序集,即使我重建 - 不确定这是什么)。我用ildasm查看了清单,并在那里验证了公钥(只有套管不同,这对于HEX数据来说应该不重要;无论如何我在属性值中使用小写,如sn.exe) 。我尝试将NUnitTests中的引用删除并重新添加到类库中。我重启了VS-2013。

已经筋疲力尽所有令人沮丧的事情,即使你不知道它为什么会起作用,也要尝试一切你能想到的事情。选项,我想知道是否有更好的方法。

如果重要的话,我们会定位fw 3.5。

1 个答案:

答案 0 :(得分:0)

这太令人尴尬了!

程序集名称确实是" NUnitTests"而不是" MyProject.NUnitTests" (尽管Hans Passant可能拥有这些知识的能力超出了我的范围!)。

这很容易让你感到兴奋......

我仍然认为微软可以让我们更轻松。使用内部修饰符非常有用,并且能够有选择地将它们暴露给其他组件对于任何创建库的人来说都是一个巨大的简化,这是我们所有人都做的事情(即使消费者是"只是"同一个组织,可能在同一个系统上工作)。