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

Ошибка сборки компилятора: вызов неоднозначен между следующими способами или свойствами

У меня возникла странная ошибка компилятора с методами расширения. У меня есть сборка, которая имеет метод расширения, например

public static class MyClass
{
    public static Bar GetBar(this Foo foo)
    {
        return new Bar();
    }
}

И в другом месте той же сборки я делаю что-то вроде этого

Foo foo = new Foo();
var bar = foo.GetBar();

Когда я чист и компилирую все в порядке. НО, как только я сделаю небольшое изменение (например, лишние пробелы) в сборке и снова построю, я получаю ошибку, подобную этой:

Ошибка 973 Вызов неоднозначен между следующими методами или свойствами: "MyNameSpace.MyClass.GetBar(Foo)" и "MyNameSpace.MyClass.GetBar(Foo)"

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

4b9b3361

Ответ 1

Хорошо, немного поработав, я могу воспроизвести подобную ситуацию, добавив ссылку на файл для выходного файла - в первый раз он строит успех (поскольку ссылка не используется - вы просто получаете ссылку не разрешен "), однако с этого момента я вижу, что в редакторе кода появляется ошибка" Неисправность вызова ".

Для меня, однако, это не мешает мне создавать решение (я тестирую это с помощью Visual Studio 2010), однако ошибка появляется - возможно, в самых разных обстоятельствах, таких как другая версия Visual Studio, это остановить компиляцию проекта.

Вы также можете создать такую ​​же ситуацию с этапами после сборки, которые копируют выходные сборки.

Ответ 2

Пришло время понять это, но комментарий Gluips правильный, я добавлю его здесь для удобства:

Что это! Так или иначе проект непосредственно ссылался на себя. Удаление ссылки, вероятно, устраняет проблему. Спасибо!

Это исправило это для меня.

Ответ 3

Я не могу объяснить такое поведение, но вы должны реализовать такой метод, как статический, непосредственно в классе Foo.