Visual Studio在当前上下文中不存在名称

时间:2012-08-21 20:00:11

标签: c# visual-studio-2010

我在像

这样的类上调用静态方法
Foo.bar()

Visual Studio的intellisense为我识别Foo和autocompletes吧(它突出了Foo和所有类似的工作正常)。在我构建项目之前,一切看起来都很好,它会抛出一个错误,说当前上下文中不存在名称Foo。

我在其他文件中使用这个静态方法调用,所以我知道该类是正常的。这种情况对于发布代码来说太大了,所以我主要是寻找开始研究的理由,这会导致intellisense正常运行,但会在编译时遇到错误。

15 个答案:

答案 0 :(得分:28)

我在不同的项目中看到了由不同版本的.NET框架引起的这个错误。我构建的类库是4.5,应用程序是4.0,但它唯一的错误是命名空间错误。更改类库上的框架版本并重建它,然后应用程序解决了错误。

答案 1 :(得分:9)

当命名空间,类和变量具有相同名称时,会发生这种情况。我以前曾经受过这种痛苦。 Intellisense告诉我我是对的,编译告诉我我错了!我信任编译器!

你有两个我能想到的选择

  1. 在代码中搜索Foo,并看到它被用于静态类以外的其他内容。

  2. 完全限定Foo.bar()调用。 MyApplication.This.That.Foo.bar();

  3. 按顺序执行...最好优雅地解决问题,这样你就可以调用Foo.bar(),因为这比整个地方MyApplication.This.That.Foo.bar();更具可读性和可维护性!

答案 2 :(得分:7)

在我的情况下,我在代码中间的一个方法的末尾错过了一个},这导致程序看不到代码的其余部分,并且抱怨我之后定义的方法那一点。

答案 3 :(得分:3)

我知道这是一个有点老的话题,但我只是经历了同样的事情,对我来说这是因为该文件实际上没有包含在解决方案中。

我发生了正确的事,因为我重命名了该类,然后重命名了该文件,这导致Visual Studio仍然知道该类和名称空间,但编译器没有获取该文件,因为未包含重命名的文件。

答案 4 :(得分:3)

旧线程我知道,但是我在单元测试项目中引用静态方法时遇到了这个问题 - intellisense说方法就在那里,但是当我尝试构建/运行测试时(在调试模式下)我得到错误'名称在当前上下文中不存在'。为了解决这个问题,我不得不重新构建包含Debug配置中引用的静态方法的项目(它之前只在Release配置中构建) - 在此之后构建测试并运行OK。

答案 5 :(得分:1)

考虑对问题进行清理,然后对项目进行构建。编辑器和Intellisense可以正确发现类,而编译器可以处理过时的文件。 (我有同样的问题,这就是我解决它的方法。)

答案 6 :(得分:1)

这是我所知道的一篇旧文章,但我刚刚遇到这个问题并且困扰了我好几天,最终得到了它:点击类文件,在解决方案资源管理器中,然后查看属性选项卡;确保将Build Action设置为" Compile"。

答案 7 :(得分:0)

我已经遇到过几次这样的问题,所以当我这样做时,我检查的第一件事是如果组件未被识别有任何Nuget包。在我的情况下,他们总是这样,我只是忘了在组件中安装相同的软件包,其中包含对未识别的程序集的引用。修复了重构命令和问题。我希望这可以帮助别人。可以为多个事项提供相同的错误消息,因此这种特殊情况可能不适用。如果您没有使用Nuget,我会建议您尝试其他答案

答案 8 :(得分:0)

我也遇到了这个问题,创建了一个数据访问层,并且调用了具有相同症状的静态方法:Intellisense找到它而不是编译器。我尝试了上述许多方法,包括修复.Net版本。

将源文件添加到项目时,我也更改了命名空间。 对于带有问题的文件,我忘记更改名称空间以匹配在其他时间导入的名称空间。

答案 9 :(得分:0)

关闭MonoDevelop的所有标签。然后关闭MonoDevelop。最后打开MonoDevelop再次解决了我的问题。

答案 10 :(得分:0)

我的解决方案有点复杂。项目A引用了项目B和C:两个引用都将Copy Local设置为true,两个生成的程序集都具有相同的名称。构建引用项目时,项目B和C的输出程序集被复制,一个覆盖了另一个,因为它们具有相同的名称。 VS然后在构建目录中查找引用,并且只找到了“赢了”的程序集。

答案 11 :(得分:0)

我不时会出现这个问题的解决方案:

  1. 在解决方案资源管理器中找到给您带来问题的课程"从项目中排除"
  2. 重建该程序集(让我们称之为" A")
  3. 使用该文件的项目(" B")将要求您重新加载"重新加载"项目,等等。
  4. 将文件重新添加到程序集A中,您刚刚将其删除,并重建
  5. 现在,重新加载项目B
  6. 然后在VS中找到了文件,一切都很顺利。

答案 12 :(得分:0)

调整相关文件。如果错误代码为Default.aspx.cs,则需要如下更改文件Default.aspx中的第一行:

"CodeFile="替换为"CodeBehind"

希望这会有所帮助。

-谢谢Thai_FUV

答案 13 :(得分:0)

就我而言,我必须重新加载标记为“丢失”的项目。

  1. 项目>卸载项目
  2. 项目>加载项目
  3. 清洁,构建解决方案

答案 14 :(得分:0)

更改控件的ID为我解决了该问题。显然,控件的ID存在于解决方案的另一部分。