首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何声明友元程序集?

如何声明友元程序集?
EN

Stack Overflow用户
提问于 2009-07-14 06:01:42
回答 3查看 34.7K关注 0票数 120

我的解决方案中有两个项目:

  1. 程序集(基本库)
  2. 测试程序集(NUnit)

我在第一个项目中将测试程序集声明为friends程序集:

代码语言:javascript
复制
[assembly: InternalsVisibleTo ("Company.Product.Tests")]

一切都很好,直到我意识到我忘了设置解决方案来签署我的程序集。因此创建了一个snk文件,并设置visual studio项目对第一个程序集(Basic Library)进行签名。现在,当我编译第一个项目时,我得到了以下错误:

友元程序集引用'Company.Product.Tests‘无效。强名称签名的程序集必须在其InternalsVisibleTo声明中指定公钥。

我试图使用sn实用程序从我的snk文件中提取公钥,但它生成了一个有线二进制文件,我不确定如何使用它。我如何解决这个问题?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-07-14 06:51:00

您需要对这两个程序集进行签名,因为这两个程序集实际上相互引用。

您必须将公钥放在InternalsVisibleTo属性中。例如,在Protocol Buffers中,我使用:

代码语言:javascript
复制
[assembly:InternalsVisibleTo("Google.ProtocolBuffers.Test,PublicKey="+
"00240000048000009400000006020000002400005253413100040000010001008179f2dd31a648"+
"2a2359dbe33e53701167a888e7c369a9ae3210b64f93861d8a7d286447e58bc167e3d99483beda"+
"72f738140072bb69990bc4f98a21365de2c105e848974a3d210e938b0a56103c0662901efd6b78"+
"0ee6dbe977923d46a8fda18fb25c65dd73b149a5cd9f3100668b56649932dadd8cf5be52eb1dce"+
"ad5cedbf")]

通过运行以下命令来检索公钥

代码语言:javascript
复制
sn -Tp path\to\test\assembly.dll

或者,从.snk文件中获取它:

代码语言:javascript
复制
sn -p MyStrongnameKey.snk public.pk
sn -tp public.pk
票数 203
EN

Stack Overflow用户

发布于 2015-02-08 21:01:52

您可以直接从您感兴趣的程序集中获取publicKey,而不需要使用sn.exe

代码语言:javascript
复制
<!-- language: c# -->
var assemblyName = Assembly.GetExecutingAssembly().GetName();
Console.WriteLine("{0}, PublicKey={1}",
    assemblyName.Name,
string.Join("", assemblyName.GetPublicKey().Select(m => string.Format("{0:x2}", m))));
票数 -3
EN

Stack Overflow用户

发布于 2009-07-14 06:08:14

我认为你需要输入强名称,类似于"Company.Product.Tests,Version=1.0.0.0,Culture=neutral,PublicKeyToken=17135d9fcba0119f“。我假设Company.Product.Tests是您的程序集名,17135d9fcba0119f是公钥。

解决此问题的另一种方法是不使用单独的程序集。我通常将源代码和测试代码放在同一个程序集中。我不知道你是否有什么特别的顾虑,你必须把它们分开。

票数 -7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1123683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档