首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >InternalsVisibleTo属性不起作用

InternalsVisibleTo属性不起作用
EN

Stack Overflow用户
提问于 2008-09-20 02:59:22
回答 20查看 58K关注 0票数 76

我正在尝试使用InternalsVisibleTo程序集属性来使.NET类库中的内部类对我的单元测试项目可见。由于某些原因,我一直收到一条错误消息:

由于其保护级别,无法访问

'MyClassName‘

两个程序集都经过签名,并且我在属性声明中列出了正确的密钥。有什么想法吗?

EN

回答 20

Stack Overflow用户

回答已采纳

发布于 2008-09-20 11:40:13

您是否绝对确定在属性中指定了正确的公钥?请注意,您需要指定完整的公钥,而不仅仅是公钥标记。它看起来像这样:

代码语言:javascript
复制
[assembly: InternalsVisibleTo("MyFriendAssembly,
PublicKey=0024000004800000940000000602000000240000525341310004000001000100F73
F4DDC11F0CA6209BC63EFCBBAC3DACB04B612E04FA07F01D919FB5A1579D20283DC12901C8B66
A08FB8A9CB6A5E81989007B3AA43CD7442BED6D21F4D33FB590A46420FB75265C889D536A9519
674440C3C2FB06C5924360243CACD4B641BE574C31A434CE845323395842FAAF106B234C2C140
6E2F553073FF557D2DB6C5")]

大概是320个十六进制数字。不确定为什么需要指定完整的公钥-可能只使用在其他程序集引用中使用的公钥标记,这样会更容易让人伪造友元程序集的身份。

票数 103
EN

Stack Overflow用户

发布于 2013-07-27 02:01:05

另一个可能的“陷阱”:您在InternalsVisibleToAttribute中指定的友元程序集的名称必须与您的友元程序集的名称完全匹配,如友元程序集的项目属性中所示(在选项卡中)。

在我的例子中,我有一个项目Thingamajig和一个配套项目ThingamajigAutoTests (为了保护有罪的人而更改了名称),这两个项目都产生了未签名的程序集。我在Thingamajig\AssemblyInfo.cs文件中适当地添加了属性[assembly: InternalsVisibleTo( "ThingamajigAutoTests" )],并如上所述注释掉了AssemblyKeyFileAssemblyKeyName属性。Thingamajig项目构建得很好,但其内部成员顽固地拒绝出现在autotest项目中。

费尽心机之后,我重新检查了ThingamajigAutoTests项目的属性,发现程序集名称被指定为"ThingamajigAutoTests.dll“。Bingo -我在InternalsVisibleTo属性中的程序集名称中添加了".dll“扩展名,然后就准备就绪了。

有时候是最微不足道的事情...

票数 42
EN

Stack Overflow用户

发布于 2010-08-29 21:09:15

如果您的程序集未签名,但仍然收到相同的错误,请检查AssemblyInfo.cs文件中的以下两行之一:

代码语言:javascript
复制
[assembly: AssemblyKeyFile("")]
[assembly: AssemblyKeyName("")]

如果存在这两行中的一行(或两行),则属性选项卡仍将程序集显示为无符号,但InternalsVisibleTo属性将具有这些行的程序集视为强有符号的。只需删除(或注释掉)这些行,它就可以很好地为您工作。

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

https://stackoverflow.com/questions/106880

复制
相关文章

相似问题

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