内部可见,签名和单元测试,如何使其实用

本文关键字:何使其 单元测试 内部 | 更新日期: 2023-09-27 18:35:57

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

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

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

内部可见,签名和单元测试,如何使其实用

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

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

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