我如何调查非
我试图让一个类库的内部对单元测试项目可见。 类库和单元测试项目均已签名; 我们在VS-2013中使用了项目属性页面,勾选了签名框,让VS创建一个密钥文件。
我在开发者命令工具上使用了“sn -TnNnitTests.dll”来提取公钥(真正的匿名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。
尽管所有令人沮丧的“尝试一切你能想到的,即使你不知道为什么它可能会工作”的选择,我不知道是否有更好的方法。
如果重要的话,我们的目标是3.5。
这很尴尬!
程序集名称确实是“NUnitTests”,而不是“MyProject.NUnitTests”(尽管Hans Passant如何拥有这些知识超出了我的意思!)。
这很容易让你...
我仍然认为微软可以让我们更容易。 使用内部修饰符是有用的,并且能够有选择地将它们暴露给其他组件对于制作图书馆的任何人来说都是一个巨大的简化,这就是我们所做的一切(即使消费者只是“同一组织中的人”,也许在同一个系统上工作)。
链接地址: http://www.djcxy.com/p/73387.html