C#编译器:CS0121:以下方法或属性之间的调用不明确

时间:2015-07-30 16:24:21

标签: c#

这是我所看到的最疯狂的事情,因为Fody插件通过发出无效代码来破坏我的程序集并且控制流在运行时随机变化......这次没有Fody。

事实:

  • 整个故事都在一个项目中。
  • GetMessage扩展方法已存在数星期......
  • 问题从2个小时开始,我无法弄清楚它是什么。
  • 只有一个GetMessage扩展方法。
  • 错误消息(参见图片)列出了两个相同的方法规范

    Error CS0121 The call is ambiguous between the following methods or properties: 'ComiCalc.Data.ExceptionExtensions.GetMessage2(System.Exception)' and 'ComiCalc.Data.ExceptionExtensions.GetMessage2(System.Exception)' ComiCalc.Data D:\2014Develop\.vsonline\ComiCalc\src\ComiCalc.Data\Services\UserService.cs 61

  • 如果我同时将方法定义(在2个位置只进行了2次编辑)和GetMessage2的调用同时更改,那么我只是引用了GetMessage2的完全相同的错误消息。

  • 使用VS 2015

有什么想法吗?

enter image description here

这是单一方法:

namespace ComiCalc.Data
{

    using System;
    using System.Data.Entity.Validation;
    using PluralTouch.DataAccess;
    // TODO: Move to PluralTouch
    public static class ExceptionExtensions
    {
        public static string GetMessage2(this Exception exception)
        {

            var message = exception.Message;
            if (exception is DbEntityValidationException)
            {
                message = ((DbEntityValidationException) exception).DbEntityValidationResultToString();
            }
            return message;
        }
    }
}

enter image description here

7 个答案:

答案 0 :(得分:11)

确保您没有在项目引用中引用输出二进制文件(即项目引用自身)。在过去,Resharper(将输出二进制文件添加到项目引用)中发生了这种情况,因此扩展方法既可以在源代码中也可以在二进制引用中。

答案 1 :(得分:2)

删除bin文件夹>打开项目>构建解决方案

答案 2 :(得分:0)

我创建了一个新项目并移动了所有文件,除了'bin','references','obj'和繁荣。它就像魅力一样......

答案 3 :(得分:0)

由于我的项目引用了一个dll并出现了相同的错误,并且同时具有对同一个dll的传递依赖,但文件路径不同。

通过在生成过程中使用额外的日志记录来发现它(工具->选项->生成并运行->将详细信息输出到“详细”或“诊断”):通过搜索依赖项dll名称:在任务“ Csc”中,使用/ reference出现了两次dll

修正是将引用指向相同的dll路径

答案 4 :(得分:0)

我有两个由数据库工具创建的确切类,因为使用不同的参数执行了2次。我按类名称搜索并删除较新的名称,然后一切正常。

答案 5 :(得分:0)

就我而言,我的项目文件夹中有“发布”文件夹。删除“发布”文件夹为我解决了这个问题。

答案 6 :(得分:0)

就我而言,Resharper 创建了一个名为 Annotations1.cs 文件的新文件。我刚刚删除它,问题解决了。也许你需要删除 debug/release/obj 和 clean/rebuild 解决方案。

enter image description here