Это может произойти, если где-нибудь в вашем коде или в сборке, на которую ссылаются, кто-то имел ужасную ужасную идею реализовать свои собственные методы расширения IEnumerable<T>
и, не зная лучше, использовал то же пространство имен, что и те, которые предоставлены фреймворком:
Альфа-сборка сворачивает свои IEnumerable<T>
методы расширения в System.Linq
пространстве имен:
namespace System.Linq {
public static class MyEnumerable {
public static T Max<T>(this IEnumerable<T> source) { //...
}
//...
}
}
Сборка Чарли думает, что Alpha великолепна из-за некоторых других функций, которые она предоставляет, и ссылается на нее, совершенно не обращая внимания на неприятный сюрприз, который она скрывает внутри.
using System.Linq; //woops
namespace Charlie {
class C {
void Foo() {
var l = new List<object>() { 1, 2, 3 };
var m = l.Max() /*compile time error. Ambiguous call*/ } }
}
Я не знаю, может ли это быть вашим случаем, но это вероятный сценарий. Другим потенциальным кандидатом может быть конфликт версий, но я не совсем уверен, возможно ли это в VS. Я никогда не сталкивался ни с чем подобным с System.*
пространствами имен.