InternalsVisibleTo不适用于所有程序集。一些作品,一些不作品

时间:2011-12-08 09:58:10

标签: c# methods internal internalsvisibleto

我有一个Common DLL,它有一些内部方法供内部使用。除此之外,我还有3个其他项目WebServices,UnitTests和PATs

在Common项目的AssemblyInfo.cs中,我添加了以下几行:

[assembly: InternalsVisibleTo("WebServices, PublicKey=00240...b59a0")]
[assembly: InternalsVisibleTo("UnitTests, PublicKey=00240...dcf98")]
[assembly: InternalsVisibleTo("PATs, PublicKey=00240...e65cf")]

这些内部方法适用于UnitTests和PAT但WebService。当我在WebService项目中编写代码时,我可以在IntelliSense框中看到这些内部方法,这很奇怪。我编写代码时没有错误警告,但是当我构建项目时,我收到了此错误消息

  

'Common'不包含'内部方法名称'

的定义

当时,我认为程序集名称在某种程度上是错误的。而且我试图确定它确实是错误的:

[assembly: InternalsVisibleTo("WebSer, PublicKey=00240...b59a0")]

然后在WebService项目中,它立即在我使用Common内部方法的行中变为红色,而不使用此消息进行编译:

  

无法在此处访问内部方法'内部方法名称'

所以我认为我的程序集名称是正确的但我仍然不知道为什么我不能在我的WebServices项目中使用内部方法。

1 个答案:

答案 0 :(得分:0)

您在此处提供的第一条错误消息表明您使用了错误的命名空间:

  

'普通'不包含'内部方法名称'

的定义

这意味着您要使用它的方法不存在。它最有可能出现在其他名称空间中 - 特别是如果您在类中使用扩展方法。

正如您可能已经注意到的那样,在将错误的名称添加到InternalsVisibleTo表达式后,您获得的第二个错误是不同的:

  

无法访问内部方法'内部方法名称'这里

只有第二个错误与将内部暴露给其他dll有关。

Visual Studio也可能疯了,重新启动/重建就足够了。