intellisense 无法找出 Visual Studio 和 C# 中的“内部”可访问性级别语法错误

Posted

技术标签:

【中文标题】intellisense 无法找出 Visual Studio 和 C# 中的“内部”可访问性级别语法错误【英文标题】:intellisense can't figure out a 'internal' accessibility level syntax error of in visual studio & C# 【发布时间】:2013-11-20 08:36:12 【问题描述】:

当我调用来自其他程序集且其可访问性级别为“内部”的函数时,智能感知应该找出语法错误,例如“XXX 由于其保护级别而无法访问”。但事实并非如此。毫无疑问,编译失败了。

但是,在我将函数的可访问性级别更改为其他级别(例如“私有”)后,它会发现语法错误。

是什么让“内部”如此不同,为什么?还是只是 Visual Studio 中的一个错误?

示例代码:

static void Main(string[] args)

    var t= new AssemblyBCode();
    t.test();

其他程序集中的代码(参考解决方案):

public class AssemblyBCode

    internal void test()  

【问题讨论】:

看看这里:***.com/questions/3813485/… 【参考方案1】:

当然,internals 的想法是向其他程序集隐藏东西,同时提供对“原始”程序集的访问,但是有一个名为InternalsVisibleToAttribute程序集属性 使用它您可以明确指示框架AssemblyA 可以访问AssemblyB 的internals。

当然*) 对于 IDE/编译器,它应该是完全清楚*) 如果您当前的程序集有或没有访问权限。这可能是一些小错误或签名密钥的一些问题..如果我自己没有看到它很难说,不幸的是我没有vs2012..

编辑:*) 请参阅 HansPassant 评论:问题在于,直到在构建作业结束时对程序集进行签名后才清楚,这可能还没有正确完成。

【讨论】:

这不是问题的答案。 OP 询问我的智能感知(在他看来)行为不正确 OP 没有询问如何使其他程序集可以看到内部结构 [InternalsVisibleTo] 实际上是问题所在。 IntelliSense 解析器无法可靠地确定该属性是否会抑制错误。这需要签署程序集,这会在以后发生。 谢谢汉斯,这正是我在谈到“签名密钥问题”时的想法,但我没有详细说明。

以上是关于intellisense 无法找出 Visual Studio 和 C# 中的“内部”可访问性级别语法错误的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Visual Studio 编译器无法找到某些头文件而 intellisense 可以?

Visual Studio 代码:Intellisense 无法在 Mac 上运行

Visual Studio 2010 Javascript Intellisense 无法正常工作

用于 bower.json 文件的 Visual Studio 2015 RC 上的 Intellisense 无法正常工作。

无法在 Visual Studio 2017 RC 中添加全局 JavaScript Intellisense 引用

Visual Studio Intellisense没有显示某些类