【问题标题】:Error "Class does not contain a definition for method" but the method exists错误“类不包含方法的定义”但方法存在
【发布时间】:2011-07-25 19:49:51
【问题描述】:

我收到以下错误:

“MyNamespace.MyBaseClass”不包含“MyMethod”的定义 并且没有扩展方法“MyMethod”接受类型的第一个参数 可以找到“MyMamespace.MyBaseClass”(您是否缺少使用 指令还是程序集引用?)

当我在调用者行中选择方法并执行[转到定义]时,Visual Studio 在预期的位置找到方法声明。

当方法名更改为MyMethod_ABC并选择[Generate method stub]时,方法MyMethod_ABC会在MyMethod旁边创建,签名相同,只是参数名称不同。

项目无法构建。有人能看出什么不对吗?

【问题讨论】:

  • 尝试发布你的基类的代码。
  • 这是编译器给出的only错误吗?

标签: c# visual-studio


【解决方案1】:

对于任何寻求解决此问题的人,就像我一样:

我刚遇到这个问题,但事实证明在包含我尝试使用的方法的引用项目中存在一个小编译错误,并且由于该项目从未使用新方法成功编译,因此使用它在另一个项目中是无效的。修复了该错误,我不再收到此错误。

【讨论】:

  • 我遇到了同样的问题。阅读此答案后,我右键单击每个项目并选择“构建”,从依赖层次结构中较低的项目开始。然后出现错误,我纠正了它,并且可以重新构建完整的解决方案。
【解决方案2】:

我最近遇到了完全相同的问题。解决方案是删除对相关项目的引用,然后再次添加相同的引用...谁知道呢,就像一个魅力:)

【讨论】:

    【解决方案3】:

    引用方法和“转到定义”成功的能力不是 100% 关联的。虽然他们使用许多相同的基础设施,但在几个关键领域却有所不同。一般来说,“Go To Definition”会比编译成功的情况更多。

    导致结果不同的最常见原因是

    • 缺少 DLL / 项目参考
    • 重载解决错误

    鉴于您遇到的特定错误,我将从缺少 DLL / 项目引用开始

    【讨论】:

      【解决方案4】:

      我以为我已经修复了一次,但后来它又回来了。我永久修复它的方式是这样的:

      首先,我更新了 AssemblyInfo.cs 中程序集的版本号,该版本号可在 Visual Studio 的解决方案资源管理器的有问题的程序集属性部分中找到。

      我将它增加了 1。接下来,我删除了主项目中的引用并重新添加了它。最后,我对有问题的项目进行了清理和构建,并查找了任何错误。我看不到错误,但有一个与未使用的异常变量相关的警告。我删除了它并对整个解决方案进行了完全重建,问题得到了解决。

      【讨论】:

        【解决方案5】:

        如果您的代码涉及跨项目引用,请验证您是否包含项目引用,并验证构建顺序。

        【讨论】:

          【解决方案6】:

          今天开机,打开visual studio,问题消失,其他类有错误但右边代码没有红色下划线错误指示。现在解决方案工作正常。感谢所有为我看它的人。它是视觉工作室的错误吗? 再见。

          【讨论】:

            【解决方案7】:

            在开始编辑代码后,使用 VS 接口将 class.cs 从 HtmlHelpers 目录移动到 Filters 目录后,我得到了同样的错误。构建、重建、清理无济于事。

            但是如果你不开始编辑代码怎么办?在我的例子中,将 class.cs 从 HtmlHelper 目录拖放到 Filters 目录。然后按 F5 不会出现任何错误。 然后关闭VS,删除包含dll、缓存、tmp、DEBUG...的obj目录。运行 VS。按F5,再次没有错误。

            关闭VS,删除Obj目录,重启windows。 Filters 目录中的 Class.cs,在代码中指向错误的 HtmlHelpers 目录。再次按 F5 就没有错误了。

            【讨论】:

              【解决方案8】:

              我也遇到了这个问题。该方法在那里,可以通过“转到定义”找到。我更改了定义名称(和引用),并得到了与新名称相同的错误。 我重新输入了参考线,就在它上面,然后删除了旧的参考线,瞧——它起作用了。不知道为什么,但由于某种原因,VS 很少会挂在一行代码上,唯一的解决方案是重新键入该行并删除原始代码。奇怪的。 好吧,同样的问题又回来了。我注意到“缺失”的方法不会出现在与我开始输入的方法匹配的方法列表中。来自同一类的其他方法会。即使我重命名该方法,这种行为也不会改变。所以我认为“盲点”与特定方法的外在形式相关——不仅仅是名称。所以我从 IDE “看到”的同一个类中复制了另一个方法。我重命名了它,删除了内部代码,然后从“看不见”的方法中粘贴到内部代码中。现在它始终如一地工作。一个真正的“瞧”。

              【讨论】:

                猜你喜欢
                • 2012-09-10
                • 1970-01-01
                • 2023-03-13
                • 1970-01-01
                • 1970-01-01
                • 2015-07-27
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多