Неоднозначный вызов, вызванный выбором двух версий System.Linq - PullRequest
9 голосов
/ 15 февраля 2012

У меня есть следующий код, который показывает волнистую красную линию под лямбда-выражением после .Any (из-за «неоднозначного вызова» между версиями System.Linq 3.5 и 4.0 - как заставить его использовать определенную версию?

Он компилируется и работает нормально.

string[] allowedExtensions = { "PNG", "JPG", "JPEG", "GIF" };
string fileExtension = (Path.GetExtension(postedFile.FileName) ?? "NULL").ToUpper().TrimStart(new[] { '.' });

if (this.MediaService.FileAllowed(postedFile) 
    && allowedExtensions.Any(e => e == fileExtension))
{ ... }

UPDATE

Я сейчас проверил все (60) проектов во всем решении, и все ссылки на System.dll и System.Core.dll имеют версию 4.0 - я действительно не могу понять, откуда она получает ссылку на 3.5.

Ответы [ 2 ]

10 голосов
/ 02 августа 2012

У меня возникла эта проблема после того, как ReSharper предложил «ссылаться на System.Core» и «импортировать System.Linq» в файле, где я использовал выражение Linq, но еще не импортировал «System.Linq». Когда я выполнил команду ReSharper, я получил какую-то ошибку, что ее часть не удалась. Тогда все выражения Linq в моем проекте были неоднозначными между System.Core 3.5 и 4.0. Глядя на все мои ссылки на System и System.Core, они были 4.0. Удаление ссылки на System.Core (4.0) привело к тому, что ошибки неоднозначности исчезли, и заставило System.Core исчезнуть из списка ссылок для этого проекта. Когда я вернулся, чтобы повторно добавить System.Core, хотя он не появился в моем списке ссылок в обозревателе решений, он был отмечен в диалоговом окне «Добавить ссылку на». Попытка отменить его, а затем еще раз проверить, привела к ошибке, что System.Core уже упоминается в моем проекте. Я все еще исправляю ошибки, поэтому не знаю, повлияет ли это на процесс сборки.

6 голосов
/ 16 февраля 2012

Возможно, у вас есть два модуля, которые ссылаются на разные версии.Найдите в файлах проекта эти ссылки и приведите их в соответствие (4.0).

...