InternalsVisibleTo,签名和单元测试,如何使其实用?

时间:2012-05-30 12:38:52

标签: c# .net unit-testing internalsvisibleto signed-assembly

在“C#in Depth 2nd Edition”中,Jon Skeet的书 - 我刚读到第2部分结尾 - 在7.7.3中提到InternalsVisibleTo也可以用于签名的程序集。目前我根本没有使用签名。已发布二进制文件的安全性问题实际上非常重要,因此我计划使用预处理器变量测试完全删除发布程序集的属性。

只是为了感兴趣,使用签名的程序集和InternalsVisibleTo是如何实际的?为了使用InternalsVisibleTo来指定已签名的朋友程序集,我需要指定其公钥。我只有在编译了一个依赖于被测试的组件的友元组件之后才能拥有它(动态组件加载和反射被放在一边,什么会膨胀编码和可读性)。这听起来像鸡蛋问题,需要测试组件的自举。我可以想象一些使用MSBuild和脚本来自动化的技巧。有没有更实际的方法呢?

如果它仍然如此乏味,我将坚持我的第一个想法,即放弃发布版本的单元测试(这有点不令人满意,因为微妙的时序问题可能未经测试......)

1 个答案:

答案 0 :(得分:8)

使用相同的密钥对解决方案中的所有项目进行签名,不要为每个项目和每个构建生成不同的项目。 我建议在项目属性中使用每个项目引用的相同物理密钥文件,而不是将其复制到每个项目中。

这样,所有这些都与相同的PublicKey常量相关联。 并使用单个条目,例如:

[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("UnitTests, PublicKey=<your key>")]