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】:当然,internal
s 的想法是向其他程序集隐藏东西,同时提供对“原始”程序集的访问,但是有一个名为InternalsVisibleToAttribute
的 程序集属性 使用它您可以明确指示框架AssemblyA 可以访问AssemblyB 的internal
s。
当然*) 对于 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 无法正常工作。