释放类库源,无需签名密钥文件,但是单元测试需要访问内部类,该怎么办?

情况如下: 我想将完整的源代码发布到类库中 我也希望发布二进制文件,由我签名,使用我不想发布的密钥文件 我将提供批处理文件和预构建步骤,如果不存在则在本地创建新的密钥文件,以便任何人都可以快速开始使用源代码 测试项目需要引用主项目中的内部类 要访问内部类,我需要在主项目AssemblyInfo.cs文件中添加一个
[assembly: InternalsVisibleTo("...")]
属性 由于我正在签署项目输出,因此我需要指定该属性的PublicKey部分 这将绑定到密钥文件,我不愿意发布 那么,我该如何解决这个问题呢? 如果我签署主项目输出而不是测试库,并且只在
InternalsVisibleTo
属性中指定程序集名称,则会出现此编译时错误:   错误1朋友程序集引用'Mercurial.Net.Tests'无效。强名称签名程序集必须在其InternalsVisibleTo声明中指定公钥。 C: Dev VS.NET Mercurial.Net Mercurial.Net Properties AssemblyInfo.cs 22 31 Mercurial.Net 所以显然没有签署测试项目输出是不够的。 我唯一的选择是删除签署项目的设置,并修改项目文件作为我的二进制文件构建脚本的一部分?即。在构建之前,搜索项目文件的
<SignAssembly>false</SignAssembly>
元素并进行修改?     
已邀请:
是否可以选择发布仅用于测试的SNK文件? 然后你可以有两个
InternalsVisibleTo
并用
#if
切换你使用的那个,例如:
#if FOR_RELEASE
[InternalsVisibleTo(... your private SNK ...)]
#else
[InternalsVisibleTo(... test SNK which you release ...)]
#endif
然后,您可以在创建要发布的构建时设置
FOR_RELEASE
。     
我对我的操作系统项目所做的很简单:我有一个私有SNK,我只在构建发布项目时使用。这些项目仅在我编译发布时签名,通常项目不引用SNK。这使得使用
InternalsVisibleTo
属性变得容易,因为没有SNK,这总是有效的。     
#ifdef会使用您不关心的“eval”键跳到脑海。     

要回复问题请先登录注册