29

我有一个扩展方法,比如

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();

我在构建和干净构建时没有错误。
但我compilation error在运行时出错说

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

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

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

这是编译错误页面

4

6 回答 6

75

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

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

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

于 2013-09-24T09:26:38.120 回答
15

这不是一个真正的解决方案,我无法解释它是如何工作的,但它确实有效。

我在项目属性、引用、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 中的所有代码都是在编译/开发时编译的。因此,当您将 App_Code 文件夹添加到 WAP 时。你最终得到重复的代码;例如,App_Code 中定义的类也将显示在 wap DLL 中。修复很简单:只需将文件夹命名为 Classes 或 CodeFiles 之类的其他名称。

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

于 2013-06-24T20:59:22.937 回答
2

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

于 2016-08-15T17:20:14.407 回答
1

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

删除它解决了问题。

于 2013-11-27T17:09:28.580 回答
0

我的问题与 shashwat 描述的类似。在我的情况下,我将代码文件放在 App_Code 目录中,但为了获得智能感知,我将文件本身设置为编译,这可能意味着文件在运行时和编译时都被编译。我刚刚将文件移出 App_Code。

于 2016-05-23T17:23:37.860 回答
0

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

我在项目 A 中有对项目 A 的引用。错误。

删除帮助 =)

于 2017-10-24T12:08:20.373 回答