![](/img/trans.png)
[英]FindObjectsOfType saying the name doesn't exist in the current context
[英]Visual Studio saying name doesn't exist in current context
我正在像这样的类上调用静态方法
Foo.bar()
Visual Studio 的智能感知为我识别 Foo 并自动完成栏(它突出显示 Foo 并且一切正常)。 在我开始构建项目之前,一切看起来都很好,它抛出一个错误,指出当前上下文中不存在名称 Foo。
我在其他文件中使用这个静态方法调用,所以我知道这个类没问题。 情况太大而无法发布代码,所以我主要是在寻找开始调查的原因,这会导致智能感知正常运行,但在编译时会出现这样的错误。
我已经看到这个错误是由不同项目中不同版本的 .NET 框架引起的。 我构建的类库是 4.5,应用程序是 4.0,但它给出的唯一错误是命名空间错误。 更改类库上的框架版本并重建它,然后是应用程序,解决了错误。
当命名空间、类和变量在名称相同时变得混乱时,就会发生这种情况。 我以前受过这种苦。 智能感知告诉我我是对的,编译器告诉我我错了! 我相信编译器!
你有 2 个我能想到的选择
在你的代码中搜索 Foo,看看它被用于静态类以外的东西。
完全限定 Foo.bar() 调用。 MyApplication.This.That.Foo.bar();
按这个顺序做……最好优雅地解决问题,这样你就可以调用 Foo.bar() ,因为这比MyApplication.This.That.Foo.bar();
更具可读性和可维护性MyApplication.This.That.Foo.bar();
到处都是!
在我的例子中,我在代码中间的一个方法的末尾遗漏了一个}
,这导致程序看不到其余的代码并抱怨我在那之后定义的方法。
我知道这是一个有点老的话题,但我刚刚经历了同样的事情,对我来说这是因为该文件实际上并未包含在解决方案中。
我正确地发生了,因为我重命名了类,然后重命名了文件,这导致 Visual Studio 仍然知道类和命名空间,但是编译器没有得到文件,因为重命名的文件没有包含在内。
我知道旧线程,但是在从单元测试项目中引用静态方法时遇到了这个问题 - 智能感知说该方法在那里,但是当我尝试构建/运行测试(在调试模式下)时,我得到了错误'名称在当前上下文中不存在'。 为了修复它,我必须在调试配置中重建包含引用的静态方法的项目(它之前仅在发布配置中构建) - 在此之后,测试构建并运行正常。
考虑对有问题的项目进行清理,然后进行构建。 编辑器和 Intellisense 有可能正确发现类,而编译器则处理过时的文件。 (我遇到了同样的问题,这就是我解决它的方法。)
这是我知道的一篇旧文章,但我刚刚遇到这个问题并且让我困惑了几天,最终得到了解决:在解决方案资源管理器中单击类文件,然后查看属性选项卡; 确保构建操作设置为“编译”。
调整相关文件。 如果Default.aspx.cs
的错误代码,您需要更改文件Default.aspx
的第一行,如下所示:
将"CodeFile="
替换为"CodeBehind"
希望这能有所帮助。
-谢谢, Thai_FUV
我遇到过几次这个问题,所以当我这样做时,我检查的第一件事是无法识别的程序集是否有任何 Nuget 包。 在我的情况下,他们总是有,我只是忘记在程序集中安装相同的包,其中对无法识别的程序集的引用所在的程序集。重新构建命令并修复了问题。 我希望这可以帮助别人。 可以针对多种情况给出相同的错误消息,因此这种特殊情况可能不适用。 如果您没有使用过 Nuget,我建议您尝试其他答案
我也在创建数据访问层时遇到了这个问题,并且调用了具有相同症状的静态方法:Intellisense 找到了它,但没有找到编译器。 我尝试了上面的许多方法,包括修复 .Net 版本。
将源文件添加到项目时,我还更改了命名空间。 对于有问题的文件,我忘记更改命名空间以匹配在其他时间导入时的命名空间。
关闭 MonoDevelop 的所有选项卡。 然后关闭 MonoDevelop。 最后再次打开 MonoDevelop 为我解决了问题。
我的是一个更复杂的解决方案。 项目 A 引用了项目 B 和 C:两个引用都将 Copy Local 设为 true,并且都生成了名称相同的程序集。 在构建引用项目时,项目 B 和 C 的输出程序集被复制,并且一个覆盖另一个,因为它们具有相同的名称。 VS 然后在构建目录中查找引用,并且只找到“获胜”的程序集。
我对这个时不时发生的问题的解决方案:
然后在VS中找到该文件,一切正常。
就我而言,我不得不重新加载标记为“丢失”的项目。
更改控件的 ID 为我解决了这个问题。 显然控件的 id 存在于解决方案的另一部分。
就我而言,我的 csproj 文件中缺少以下几行
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<DefineConstants>TRACE</DefineConstants>
<DebugType>full</DebugType>
<DebugSymbols>true</DebugSymbols>
</PropertyGroup>
一旦我添加了这个,我就可以在调试时看到变量
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.