Ошибка сборки компилятора: вызов неоднозначен между следующими способами или свойствами
У меня возникла странная ошибка компилятора с методами расширения. У меня есть сборка, которая имеет метод расширения, например
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)"
Только после очистки проекта я смогу снова построить. Это проблема в компиляторе, использующая старую версию сборки? Теперь я работаю только над тем, чтобы заменить мои методы расширения обычными статическими методами.
Ответы
Ответ 1
Хорошо, немного поработав, я могу воспроизвести подобную ситуацию, добавив ссылку на файл для выходного файла - в первый раз он строит успех (поскольку ссылка не используется - вы просто получаете ссылку не разрешен "), однако с этого момента я вижу, что в редакторе кода появляется ошибка" Неисправность вызова ".
Для меня, однако, это не мешает мне создавать решение (я тестирую это с помощью Visual Studio 2010), однако ошибка появляется - возможно, в самых разных обстоятельствах, таких как другая версия Visual Studio, это остановить компиляцию проекта.
Вы также можете создать такую же ситуацию с этапами после сборки, которые копируют выходные сборки.
Ответ 2
Пришло время понять это, но комментарий Gluips правильный, я добавлю его здесь для удобства:
Что это! Так или иначе проект непосредственно ссылался на себя. Удаление ссылки, вероятно, устраняет проблему. Спасибо!
Это исправило это для меня.
Ответ 3
Я не могу объяснить такое поведение, но вы должны реализовать такой метод, как статический, непосредственно в классе Foo
.