Подтвердить что ты не робот

Вызов неоднозначен между одним методом i.e методом расширения

У меня есть метод расширения, например

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(строка)' и 'MyIGNOU.Extension.GetTLD(строка)'

Я клянусь, что у меня нет этого метода расширения, размещенного где-то еще в проекте. Почему я получаю эту ошибку только во время выполнения.?

Но если я удалю этот метод, я получаю ошибку во время сборки не во время выполнения. Все работает отлично без кода этого метода.

Вот страница ошибки компиляции

4b9b3361

Ответ 1

Это не настоящее решение, и я не могу объяснить, как он работал, но он сработал.

Я пробовал все в свойствах проекта, ссылках, bin, obj, но мне ничего не помогло. И я просто пробовал каждый вариант и выбрал "Конвертировать в веб-приложение" из контекстного меню. Хотя раньше это было веб-приложение. Он показал мне предупреждение о том, что файлы .designer.cs будут добавлены в каждый файл aspx, и я просто нажал OK.

Все оставалось таким же, кроме папки App_Code (где все эти классы были) было переименовано в Old App_Code, и я бы построил проект. И теперь я не получаю ошибку компиляции во время выполнения.

Я знаю, что папка App_Code предназначена для веб-сайта Project, и до этого времени в WAP не было проблем с этим. Но я просто понимаю, что у меня не должно быть папки App_Code в WAP, как это обсуждается здесь на форуме wrox (1-е место). Автор сказал здесь, что

App_Code не поддерживается в WAP. Папка App_Code скомпилирована в время выполнения; весь код в WAP компилируется во время компиляции/разработки. Таким образом, когда вы добавляете папку App_Code в WAP. вы в конечном итоге дублирующий код; например, класс, определенный в App_Code, также будет отображаются в DLL файле. Исправить легко: просто укажите папку что-то вроде Classes или CodeFiles.

Я попробовал переименовать его перед конверсией, но в то время он не работал.

Ответ 2

У меня была та же проблема, но для меня она решила проблему, чтобы удалить собственный проект из ссылок на проект. Resharper случайно добавил ссылку на скомпилированный двоичный файл того же проекта. Таким образом, у меня был один и тот же класс расширения 2 раза в рамках моего проекта. Во время строительства он не мог отличить исходную версию или двоичную версию класса расширения.

Итак, в основном: проверьте ссылки на проект, если он содержит ссылку на себя.

Ответ, предоставленный @shashwat, также является случаем.

Ответ 3

У меня была та же проблема. После некоторых исследований и экспериментов я обнаружил, что (по какой-либо причине) визуальная студия не любит методы расширения в папке App_Code. Самое простое решение, которое я нашел, это просто изменить имя папки.

Ответ 4

У меня была такая же ситуация. У меня был настраиваемый элемент управления сеткой, для которого был метод расширения. Метод был объявлен только в одном месте. Элемент управления использовался во многих местах в моем решении без проблем. Затем в один прекрасный день я скопировал элемент управления, который реализовал пользовательский контроль сетки, буквально копируя и вставляя его в один и тот же проект. Затем я просто переименовал свойства по мере необходимости. После этого решение не будет строить, цитируя ту же ошибку, что и выше. Я подозреваю, что копия и вставка добавили в проект ссылку на себя.

Удаление проблемы устранено.

Ответ 5

Моя проблема была похожа на то, что описывает шашват. В моем случае я помещал файл кода в директорию App_Code, но для того, чтобы получить intellisense, я сам установил сам файл, который, вероятно, означает, что файл компилируется как во время выполнения, так и во время компиляции. Я просто перенес файл из App_Code.

Ответ 6

Я нашел это решение в комментариях выше. И это помогло мне.

У меня есть ссылка на проект А в проекте А. По ошибке.

Удаление помогает =)