情况如下:
- 我想将完整的源代码发布到类库
- 我也想发布二进制文件,由我签名,带有我不想发布的密钥文件
- 我将提供批处理文件和预构建步骤,如果不存在,它们会在本地创建一个新的密钥文件,以便任何人都可以快速开始使用源代码
- 测试项目需要引用主项目中的一个内部类
- 要访问内部类,我需要
[assembly: InternalsVisibleTo("...")]
在主项目 AssemblyInfo.cs 文件中添加一个属性 - 由于我正在签署项目输出,因此我需要指定该属性的 PublicKey 部分
- 然后这将绑定到我不愿意发布的密钥文件
那么,我该如何解决呢?
如果我对主项目输出而不是测试库进行签名,并且在InternalsVisibleTo
属性中仅指定程序集名称,则会收到以下编译时错误:
错误 1 朋友程序集引用“Mercurial.Net.Tests”无效。强名称签名的程序集必须在其 InternalsVisibleTo 声明中指定一个公钥。C:\Dev\VS.NET\Mercurial.Net\Mercurial.Net\Properties\AssemblyInfo.cs 22 31 Mercurial.Net
所以显然不签署测试项目输出是不够的。
我唯一的选择是删除签署项目的设置,并将项目文件修改为我的二进制文件构建脚本的一部分吗?IE。在构建之前寻找<SignAssembly>false</SignAssembly>
项目文件的元素并对其进行修改?