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

我有一个类似的扩展方法

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)’

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

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

这是编译错误页面

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

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

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

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

我正在尝试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。

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

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

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

删除它解决了问题。

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

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

我在项目A中引用了项目A.错误地说。

删除帮助=)