我有一个像
这样的扩展方法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(字符串)'
我发誓我没有把这个扩展方法放在项目的任何其他地方。 为什么我只在运行时收到此错误..?
但是,如果我删除此方法,那么我在构建时遇到错误,而不是在运行时。没有这种方法的代码,一切正常。
答案 0 :(得分:65)
我有同样的问题,但对我来说,它解决了从项目引用中删除自己的项目的问题。 Resharper意外地添加了对同一项目的编译二进制文件的引用。这样我在我的项目中有2次相同的扩展类。在构建期间,它无法区分扩展类的源版本或二进制版本。
基本上:检查项目引用是否包含对自身的引用。
@shashwat提供的答案也是一个案例。
答案 1 :(得分:12)
这不是一个真正的解决方案,我无法解释它是如何工作的,但它有效。
我正在尝试Project Properties,References,bin,obj中的所有内容,但实际上没有任何帮助。我只是尝试了每个选项,并从上下文菜单中选择了“转换为Web应用程序”。虽然它之前是Web应用程序。它向我显示一条警告,说.designer.cs
个文件将被添加到每个aspx文件中,我只需单击OK即可。
除App_Code
文件夹(其中所有这些类都已重命名)重命名为Old App_Code
之外,所有内容都保持不变,我将构建项目。现在我在运行时没有收到编译错误。
我知道App_Code文件夹是针对网站项目的,直到这次WAP才对此我没有任何问题。但我只是意识到我不应该在WAP中使用App_Code文件夹,因为这里讨论的是wrox forum (1st point)。作者在这里说过
WAP不支持App_Code。 App_Code文件夹编译在 运行时; WAP中的所有代码都是在编译/开发时编译的。因此,当您向WAP添加App_Code文件夹时。你结束了 重复代码;例如,App_Code中定义的类也将 显示在wap DLL中。修复很简单:只需命名文件夹即可 其他类似于Classes或CodeFiles。
我在转换之前尝试过重命名,但那次它没有用。
答案 2 :(得分:2)
我遇到了同样的问题。经过一些研究和实验,我发现(无论出于何种原因)visual studio不喜欢App_Code文件夹中的扩展方法。我发现最简单的解决方案就是更改文件夹的名称。
答案 3 :(得分:1)
我有同样的情况。我有一个自定义网格控件,有一个扩展方法。该方法仅在一个地方声明。该控件已在我的解决方案中的多个位置使用,没有任何问题。然后有一天,我复制了一个控件,通过在同一个项目中逐字复制和粘贴来实现自定义网格控件。然后我只是适当地重命名了属性。之后解决方案不会构建引用与上面相同的错误。我怀疑复制和粘贴是否为项目添加了对自身的引用。
删除它解决了问题。
答案 4 :(得分:0)
我的问题类似于shashwat所描述的。在我的情况下,我将代码文件放在App_Code目录中,但为了获得intellisense,我将文件本身设置为compile,这可能意味着文件在运行时和编译时都被编译。我刚把文件移出App_Code。
答案 5 :(得分:0)
我在上面的评论中找到了这个解决方案。 它帮助了我。
我在项目A中引用了项目A. 错误的。
删除帮助=)