Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 单个方法(即扩展方法)之间的调用不明确_C#_Asp.net_Runtime Error_Ambiguous - Fatal编程技术网

C# 单个方法(即扩展方法)之间的调用不明确

C# 单个方法(即扩展方法)之间的调用不明确,c#,asp.net,runtime-error,ambiguous,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) {

我有一个扩展方法,比如

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;
    }
}
我把这叫做

string domain = "." + _url.GetTLD();
我在构建和清理构建方面没有错误。
但我在运行时遇到编译错误

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

我发誓我没有把这个扩展方法放在项目的其他地方。 为什么我只在运行时出现此错误

但若我删除了这个方法,那个么我将在构建时得到错误,而不是在运行时。没有这个方法的代码,一切都很好


这不是一个真正的解决方案,我无法解释它是如何工作的,但它起了作用

我尝试了项目属性、引用、bin、obj中的所有内容,但都没有真正帮助我。我只是尝试了每一个选项,并从上下文菜单中选择了“转换为Web应用程序”。尽管之前它本身就是一个Web应用程序。它向我显示了一条警告,说
.designer.cs
文件将添加到每个aspx文件中,我只是单击了OK

除了
App\u code
文件夹(所有这些类都在那里)被重命名为
Old App\u code
之外,其他一切都保持不变,我将构建该项目。现在我在运行时没有得到编译错误

我知道App_代码文件夹是用于网站项目的,我在WAP中对此没有任何问题。但我只是意识到我不应该在WAP中有App_代码文件夹,因为这里在一篇文章中讨论了这一点。作者在这里说过

WAP中不支持应用程序代码。App_Code文件夹在以下位置编译: 运行时;WAP中的所有代码都是在编译/开发时编译的。因此,当您将应用程序代码文件夹添加到WAP时。你最终得到的是 重复代码;例如,在App_代码中定义的类也将 显示在wap DLL中。解决方法很简单:只需命名文件夹即可 其他类似于类或代码文件的东西


在转换之前,我也尝试过重命名它,但那一次它不起作用。

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

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


@shashwat提供的答案也是如此。

我也遇到过同样的情况。我有一个自定义的网格控件,它有一个扩展方法。该方法仅在一个位置声明。在我的整个解决方案中,该控件已在多个地方使用,没有出现任何问题。然后有一天,我复制了一个控件,通过在同一个项目中复制和粘贴来实现自定义网格控件。然后,我只是根据需要重命名了属性。在此之后,解决方案将不会引用与上述相同的错误。我怀疑复制粘贴给项目添加了对自身的引用


删除它解决了问题。

我的问题与shashwat描述的类似。在我的例子中,我将代码文件放在App_code dir中,但为了获得intellisense,我将文件本身设置为compile,这可能意味着该文件在运行时和编译时都被编译。我刚将文件从应用程序代码中移出。

我也遇到了同样的问题。经过一些研究和实验,我发现(无论出于何种原因)VisualStudio不喜欢App_Code文件夹中的扩展方法。我找到的最简单的解决方案就是更改文件夹的名称。

我在上面的评论中找到了这个解决方案。 它帮助了我

我在项目A中提到了项目A。 错了


Removeing helps=)

url的类型是什么?另外,您是否尝试删除该方法?@newStackExchangeInstance它的
字符串
。是的,我试过删除这个方法。删除它会在生成时出错,但不是在运行时。您能否显示所有异常详细信息?如何“在运行时获取编译错误”?这似乎是一个奇怪的措辞。您使用的是延迟绑定的
动态
类型吗?@JeppeStigNielsen如果出现语法错误并且您正在尝试运行应用程序,则在运行时可能会出现编译错误。和我一样,但我只是在运行时得到它,而不是在构建时。我在编译时也有“含糊不清”的消息,您的回答为我解决了这个问题。当我在“引用”下进行检查时,项目引用自身。删除它可以使它再次编译。非常感谢!这也是我的情况,但有趣的是,我没有使用Resharper,我有DevXPress代码匆忙,但我不知道自我引用是如何出现的。。。没有证据可以指责代码匆忙。这种情况通常是由于在同一个项目中复制/粘贴一个类或一个或多个类的文件夹而引起的。非常好:检查项目引用是否包含对自身的引用。确定,因此删除对自身的引用是有效的。然而,一旦网站整合,它就会回来。例如,每次点击Debug都将其添加回。它不需要在那里,所以如何防止它再次出现