c# - InternalsVisibleTo 不适用于所有程序集。有些有效,有些无效

标签 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 和 PATs 但 WebService 完美配合。奇怪的是,我在WebService项目中写代码的时候,能在IntelliSense框中看到这些内部方法。我写代码的时候没有错误提示,但是当我构建项目的时候,我得到了这个错误信息

'Common' does not contain a definition for 'internal method name'

当时我觉得这个程序集名字有什么地方不对。我试着让它确实是错误的:

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

然后在WebService项目中,在I use Common internal methods without compiling with this message这一行立即变红:

Cannot access internal method 'internal method name' here

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

最佳答案

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

'Common' does not contain a definition for 'internal method name'

这意味着您要使用的方法不存在。它很可能在其他一些命名空间中 - 特别是如果您正在对您的类使用扩展方法。

您可能已经注意到,在将错误的名称输入到 InternalsVisibleTo 表达式之后,您遇到的第二个错误是不同的:

Cannot access internal method 'internal method name' here

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

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

关于c# - InternalsVisibleTo 不适用于所有程序集。有些有效,有些无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8429118/

相关文章:

android - 使用内部安卓类

c# - protected 和内部,不 protected 或内部

c# - 无法使用 C# 客户端反序列化日期时间属性 Neo4j

c# - 集成 DotNetOpenAuth 和 WCF WebAPI

java - 格式化toString方法

java - 使用另一个类 java.language.String 中的方法

c# - 更改 C# 中的编码?

c# - 鉴别器的mongodb 2.0查询

java - 创建一种方法以从索引 x 到索引 y 中删除 ArrayList 元素

c# - 内部与私有(private)访问修饰符