21

我在像这样的类上调用静态方法

Foo.bar()

Visual Studio 的智能感知识别 Foo 并为我自动完成栏(它突出显示 Foo 和所有类似的东西都可以正常工作)。在我开始构建项目之前,一切看起来都很好,它会抛出一个错误,指出名称 Foo 在当前上下文中不存在。

我在其他文件中使用这个静态方法调用,所以我知道这个类没问题。这种情况太大而无法发布代码,所以我主要是在寻找开始调查的原因,这会导致智能感知正常运行,但在编译时会出现这样的错误。

4

16 回答 16

32

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

于 2014-06-06T14:45:19.607 回答
9

当命名空间、类和变量在同名时变得复杂时,就会发生这种情况。我以前也受过这种痛苦。Intellisense 告诉我我是对的,编译器告诉我我错了!我信任编译器!

你有两个我能想到的选择

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

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

按此顺序执行...最好优雅地解决问题,这样您就可以调用 Foo.bar() 因为这比到处都更具可读性和可维护性MyApplication.This.That.Foo.bar();

于 2012-08-21T21:53:16.857 回答
7

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

于 2014-05-14T00:37:26.550 回答
3

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

我正确地发生了,因为我已经重命名了类,然后是文件,这导致 Visual Studio 仍然知道类和命名空间,但是编译器没有得到文件,因为重命名的文件不包括在内。

于 2014-01-24T07:31:33.937 回答
3

我知道的旧线程,但是我在从单元测试项目中引用静态方法时遇到了这个问题-intellisense 说该方法在那里,但是当我尝试构建/运行测试时(在调试模式下)我得到了错误'名称在当前上下文中不存在'。为了修复它,我必须在调试配置中重建包含引用的静态方法的项目(它以前只是在发布配置中构建的)——在此之后,测试构建并运行正常。

于 2015-03-26T13:56:17.193 回答
1

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

于 2013-11-21T19:45:45.267 回答
1

这是我知道的一篇旧文章,但我刚遇到这个问题,困扰了我几天,最终得到它:在解决方案资源管理器中单击类文件,然后查看属性选项卡;确保构建操作设置为“编译”。

于 2015-01-26T17:54:07.567 回答
1

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

替换"CodeFile=""CodeBehind"

希望这能有所帮助。

-谢谢, Thai_FUV

于 2019-07-25T07:07:27.563 回答
0

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

于 2015-07-07T16:08:34.020 回答
0

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

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

于 2015-09-11T20:04:37.913 回答
0

关闭 MonoDevelop 的所有选项卡。然后关闭 MonoDevelop。最后再次打开 MonoDevelop 为我解决了这个问题。

于 2016-06-03T20:36:08.557 回答
0

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

于 2017-02-07T23:51:41.567 回答
0

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

  1. 在解决方案资源管理器和“从项目中排除”中找到给您带来问题的类
  2. 重建该程序集(我们称其为“A”)
  3. 使用文件(“B”)的项目会要求您“重新加载”项目,等待
  4. 将文件重新添加到您刚刚从中删除的程序集 A 中,然后重新构建
  5. 现在,重新加载项目 B

然后在VS中找到了文件,一切都很好。

于 2018-04-29T21:16:11.847 回答
0

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

  1. 项目 > 卸载项目
  2. 项目 > 加载项目
  3. 清洁,构建解决方案
于 2020-09-07T12:12:14.800 回答
0

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

于 2020-12-13T09:47:33.360 回答
0

就我而言,我的 csproj 文件中缺少以下几行

<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<DefineConstants>TRACE</DefineConstants>
<DebugType>full</DebugType>
<DebugSymbols>true</DebugSymbols>
</PropertyGroup>

添加后,我可以在调试时看到变量

于 2021-12-16T12:25:11.827 回答