InternalsVisibleTo不适用于所有程序集.有些有用,有些没用

本文关键字:有用 程序集 不适用 适用于 InternalsVisibleTo | 更新日期: 2023-09-27 18:17:04

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

在Common project的AssemblyInfo.cs中,我添加了这些行:

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

这些内部方法可以完美地与unittest和pat一起工作,但WebService除外。当我在WebService项目中编写代码时,我可以在IntelliSense框中看到这些内部方法,这很奇怪。当我写代码时没有错误警报,但当我构建项目时,我得到了这个错误消息

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

的定义

在那个时候,我认为汇编名称在某种程度上是错误的。我试着让它确实是错误的:

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

然后在WebService项目中,在我使用公共内部方法而没有编译这条消息的那一行,它立即变成红色:

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

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

InternalsVisibleTo不适用于所有程序集.有些有用,有些没用

您在这里给出的第一条错误消息表明您使用了错误的名称空间:

'Common'不包含'内部方法名'的定义

这意味着你想要使用的方法不在那里。它很可能在其他名称空间中-特别是如果您正在对类使用扩展方法。

您可能已经注意到,在给InternalsVisibleTo表达式添加了错误的名称之后,您得到的第二个错误是不同的:

无法访问内部方法'internal method name'

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

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