拾取两个版本的System.Linq导致模糊调用

gre*_*g84 9 linq reference ambiguous-call orchardcms method-invocation

我有以下代码,在.Any之后的lambda表达式下显示了一条波浪形的红线(由于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))
{ ... }
Run Code Online (Sandbox Code Playgroud)

更新:

我现在已经检查了整个解决方案中的所有(60)项目,并且所有对System.dll和System.Core.dll的引用都是版本4.0 - 我真的无法理解它从哪里获得对3.5的引用.

Car*_*l G 10

在我使用Linq表达式但尚未导入'System.Linq'的文件中,ReSharper提供"引用System.Core"和"import 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的错误.我仍在修复错误,所以我不知道这是否会影响构建过程.

  • 我刚刚与resharper遇到了完全相同的问题并最终得到了相同的结果.我立刻用Google搜索了这个错误,发现了这个问题,读了第一个答案,在阅读了Bertrand的回答评论后重新启动了VS并修复了它.重启后,构建工作正常. (6认同)

Ber*_*Roy 6

您可能有两个模块引用不同的版本.在项目文件中搜索这些引用并使它们保持一致(4.0).