Вызов неоднозначен между следующими методами или свойствами (ошибка?)

  1. Создание нового веб-приложения ASP.NET MVC
  2. Создание ASP.NET-папки App_Code
  3. Внутри новой папки создайте class с методом расширения. Например:

    static public class BugMVCExtension { public static int ToInt(this string str) { return Convert.ToInt32(str); } } 
  4. Выберите вид и попробуйте использовать этот новый метод расширения

Вы получите это исключение:

 CS0121: The call is ambiguous between the following methods or properties: '*MvcApplication1.App_code.BugMVCExtentions.ToInt(string)*' and '*MvcApplication1.App_code.BugMVCExtentions.ToInt(string)*' 

Кто-нибудь здесь имеет больше информации об этом? Неправильно ли создавать App_code в ASP.NET MVC (?) Веб-приложениях?

Проекты MVC, созданные в Visual Studio, используют модель проекта веб-приложения по умолчанию. App_Code в основном используется моделью веб-сайта. Я предлагаю прочитать о различиях между ними ( другой вопрос охватывает это, и он также широко освещается в MSDN). Если вы добавите исходный файл в App_Code в проект веб-приложения, Visual Studio скомпилирует его в DLL (так как он включен в проект) и помещает его в /bin . Во время выполнения компилятор ASP.NET видит App_Code и пытается скомпилировать источник в другой сборке. Как следствие, два отдельных classа с одинаковыми именами будут существовать в двух разных assemblyх, и когда парсер ASP.NET попытается скомпилировать файл .aspx , он не сможет его выбрать.

Обновить:

Являются ли эти два (метод расширения и class, который вы создаете) в одном файле .cs? В противном случае, возможно, class, который вы создаете, находится в исходном файле с действием сборки (щелкните правой кнопкой мыши по файлу, щелкните свойства), установленным в Content, который сообщает Visual Studio пропустить его в процессе сборки (в этом случае вы не будете иметь возможность ссылаться на него в других файлах .cs, которые находятся за пределами App_Code но вы сможете использовать их в представлении, так как это будет только оживать во время выполнения.) Если действие сборки является компиляцией , вы получите ошибка. Эта проблема определенно не специфична для методов расширения. Visual Studio кажется достаточно умным, чтобы установить его в Content по умолчанию для исходных файлов, добавленных в App_Code .

Не используйте папку app_code.

Используйте любое другое имя папки. IE. appCode или ApplicationsCode.

Имя в папке подразумевает компиляцию во время выполнения, что приводит к дублированию кода.

Я решил проблему, поместив файл .cs вне папки App_Code в корневом каталоге веб-приложения.

Я решил, поместив в файл расширение полного пространства имен папки.

namespace Helpers {

namespace xxx.yyy.zzz.Helpers {