我在一个继承来的C# WebApp项目中工作。以下是一些函数定义...
public static DataTable ExecuteDT(this AppDBContext target, string sql, int timeoutSeconds = defaultTimeoutSeconds) {
DbCommand cmd = target.Database.Connection.CreateCommand();
cmd.CommandText = sql;
cmd.CommandType = System.Data.CommandType.Text;
if (timeoutSeconds != defaultTimeoutSeconds) cmd.CommandTimeout = timeoutSeconds;
DataTable rv = new DataTable();
rv.Load(cmd.ExecuteReader());
return rv.Copy();
}
public static object ExecuteDR(this AppDBContext target, string sql, int timeoutSeconds = defaultTimeoutSeconds) {
DataTable dt = target.ExecuteDT(sql, timeoutSeconds);
return (ReferenceEquals(dt, null) || dt.Rows.Count == 0) ? null : dt.Rows[0];
}
当我对应用程序进行构建时,它能够编译并且没有任何错误。
然而,当我尝试运行该网站(使用F5),它会在浏览器中启动,但随后出现编译错误:
Compiler Error Message: CS0121: The call is ambiguous between the following methods or properties:
'ConstructionLoan.WebFormsApp.DataExtensions.ExecuteDT(ConstructionLoan.Domain.Data.AppDBContext, string, int)' and
'ConstructionLoan.WebFormsApp.DataExtensions.ExecuteDT(ConstructionLoan.Domain.Data.AppDBContext, string, int)'
Source Error:
Line 34:
Line 35: public static object ExecuteDR(this AppDBContext target, string sql, int timeoutSeconds = defaultTimeoutSeconds) {
Line 36: DataTable dt = target.ExecuteDT(sql, timeoutSeconds);
Line 37: return (ReferenceEquals(dt, null) || dt.Rows.Count == 0) ? null : dt.Rows[0];
Line 38: }
Source File: c:\Users\myuser\Source\Workspaces\ourclient\src\Web\Main\ConstructionLoan.WebFormsApp\App_Code\DataExtensions.cs Line: 36
它抱怨同一个函数存在二义性。我已经通过所有源代码进行了搜索,这是这个函数的唯一声明,所以我真的很困惑编译器为什么会感到困惑。
在Google上我找到的唯一一个类似的问题是某人的项目不知何故引用了自身。我再次检查确保该项目没有引用自己,但实际上并没有引用。
我也尝试过清理和重新构建这个项目,但不知何故,在IDE中编译正常,但在浏览器中运行时就失败了。
我使用VS2015,并针对框架的4.5.2版本进行目标设置。
C:\Users\myuser\AppData\Local\Temp\Temporary ASP.NET Files
。不幸的是,删除它们并让文件重新生成并没有帮助。 - eidylon