c# - InternalsVisibleTo、Signing 和 Unit tests,如何落地?

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

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

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

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

最佳答案

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

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

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

关于c# - InternalsVisibleTo、Signing 和 Unit tests,如何落地?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10816475/

相关文章:

unit-testing - 如何在Visual Studio中对Windows 10应用进行单元测试?

c# - Javascript 从 C# 方法获取进度

c# - Controller 方法(http get) : optional parameter is not null

c# - 如何返回包含文件的文件夹列表?

Flutter - Mockito - 在测试中使用 async 会产生错误,但使用 async* 可以正常工作吗?

c# - 立即为所有单元测试初始化​​私有(private)字段

c# - 如何有条件地编译 `InternalsVisibleTo(...)` 程序集信息?

c# - 同名的静态方法和实例方法?

.net - 黑客能否查看隐藏字段的值

c# - 我可以将 C# 方法替换为另一个具有相同名称和签名的方法吗?