Работа в проекте C# WebApp, который я унаследовал. У меня есть пара определений функций, как так ...C# Функция жалобы с компилятором неоднозначна сама по себе
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, но при попытке запустить его в браузере он держится.
Я работаю в VS 2015 и нацелен на версию Framework версии 4.5.2.
Вы пытались удалить содержимое «Временных файлов ASP.NET»? Иногда предыдущая версия DLL застревает там, и она мешает более новому набору двоичных файлов, когда компилятор делает свою магию. – xxbbcc
FYI: исходные файлы в [App_Code скомпилированы ASP.NET во время выполнения] (https://msdn.microsoft.com/en-us/library/vstudio/t990ks23 (v = vs.100) .aspx). «Вы можете хранить исходный код в папке App_Code, и он будет автоматически скомпилирован во время выполнения». Вы можете предварительно скомпилировать их, используя [Инструмент компиляции ASP.NET] (https://msdn.microsoft.com/en-us/library/ms229863.aspx). – KiwiPiet
У вас есть две копии DLL, присутствующих на сервере? Он может находить ту же функцию в двух отдельных dll. – JosephStyons