单个方法即扩展方法之间的调用是模糊的

sha*_*wat 26 c# asp.net runtime-error ambiguous

我有一个类似的扩展方法

public static class Extension
{
    public static string GetTLD(this string str)
    {
        var host = new System.Uri(str).Host;
        int index = host.LastIndexOf('.'), last = 3;
        while (index >= last - 3)
        {
            last = index;
            index = host.LastIndexOf('.', last - 1);
        }
        var domain = host.Substring(index + 1);
        return domain;
    }
}
Run Code Online (Sandbox Code Playgroud)

我称之为

string domain = "." + _url.GetTLD();
Run Code Online (Sandbox Code Playgroud)

我在构建和清理构建时没有错误.
但我得到compilation error运行时错误说

以下方法或属性之间的调用不明确:'myignOU.Extension.GetTLD(string)'和'myIGNOU.Extension.GetTLD(string)'

我发誓我没有把这个扩展方法放在项目中的任何其他位置.为什么我只在运行时收到此错误..?

但是,如果我删除此方法,那么我在构建时遇到错误,而不是在运行时.没有这种方法的代码,一切正常.

这是编译错误页面

Dan*_*u15 70

我有同样的问题,但对我来说,它解决了从项目引用中删除自己的项目的问题.Resharper意外地添加了对同一项目的编译二进制文件的引用.这样我在我的项目中有2次相同的扩展类.在构建期间,它无法区分扩展类的源版本或二进制版本.

所以基本上:检查项目引用是否包含对自身的引用.

@shashwat提供的答案也是一个案例.

  • 我在编辑时也有"暧昧"的消息,你的答案也解决了我.当我在参考文献下查看时,该项目会自行引用.删除它使它能够再次编译. (8认同)

sha*_*wat 14

这不是一个真正的解决方案,我无法解释它是如何工作但它的工作原理.

我正在尝试Project Properties,References,bin,obj中的所有内容,但实际上没有任何帮助.我只是尝试了每个选项,并从上下文菜单中选择"转换为Web应用程序".虽然它之前是Web应用程序.它向我显示了一个警告,说.designer.cs文件将被添加到每个aspx文件中,我只需单击确定.

除了App_Code文件夹(所有这些类都被重命名)之外,一切都保持不变Old App_Code,我将构建项目.现在我在运行时没有收到编译错误.

我知道App_Code文件夹是针对网站项目的,直到这次WAP才对此我没有任何问题.但我只是意识到我不应该在WAP中使用App_Code文件夹,因为它在wrox论坛中进行了讨论(第1点).作者在这里说过

WAP不支持App_Code.App_Code文件夹在运行时编译 ; WAP中的所有代码都是在编译/开发时编译的.因此,当您向WAP添加App_Code文件夹时.你最终得到了重复的代码; 例如,App_Code中定义的类也将显示在wap DLL中.修复很简单:只需将文件夹命名为Classes或CodeFiles.

我在转换之前尝试过重命名,但那次它没有用.