C# 内部可视、签名和单元测试,如何使其实用?

C# 内部可视、签名和单元测试,如何使其实用?,c#,.net,unit-testing,internalsvisibleto,signed-assembly,C#,.net,Unit Testing,Internalsvisibleto,Signed Assembly,在Jon Skeet的书“C#Depth Second Edition”中(我刚刚读到第2部分末尾),7.7.3中提到,InternalsVisibleTo也可以与签名组件一起使用。当时我根本没有使用签名。发布的二进制文件的安全性问题实际上非常关键,因此我计划使用预处理器变量test完全删除发布程序集的属性 出于兴趣,使用带签名的程序集和InternalsVisibleTo实际可行吗?为了使用InternalsVisibleTo指定签名的好友程序集,我需要指定其公钥。我只有在编译了friend程

在Jon Skeet的书“C#Depth Second Edition”中(我刚刚读到第2部分末尾),7.7.3中提到,
InternalsVisibleTo
也可以与签名组件一起使用。当时我根本没有使用签名。发布的二进制文件的安全性问题实际上非常关键,因此我计划使用预处理器变量test完全删除发布程序集的属性

出于兴趣,使用带签名的程序集和
InternalsVisibleTo
实际可行吗?为了使用
InternalsVisibleTo
指定签名的好友程序集,我需要指定其公钥。我只有在编译了friend程序集之后才拥有它,它依赖于被测程序集(不考虑动态程序集加载和反射,这会增加编码和可读性)。这听起来像是一个鸡蛋问题,需要测试程序集的引导。我可以想象使用MSBuild和脚本实现自动化的一些技巧。有没有更实用的方法


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

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

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

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

除非在构建过程中生成新的密钥文件(极不可能),否则公钥将是一个常量值……为什么您认为这是一个安全问题?强名称与安全无关。对于用户来说,禁用强名称验证并以您不希望的方式使用程序集是很简单的。因此,如果我很了解您,并且可以不签署程序集,那么我根本不必担心这一点。如果强名称可以信任,这将确保用户软件的来源是安全的。如果程序集部署在公司内部这样的“安全”环境中,那么我不需要费心签名。这是一个正确的说法吗?天哪,我想我没有记住这一点。生活可以如此简单。。。我认为关键取决于组装内容。我需要尽快开始。谢谢你这么精确。我是个不懂签名的人。