由于选择了两个版本的System.Linq,导致调用不明确

9
我有一段下面的代码,它在任何.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))
{ ... }

更新:

我已经检查了整个解决方案中的所有(60)个项目,所有对System.dll和System.Core.dll 的引用都是4.0版本 - 我真的不明白它从哪里获取对3.5的引用。


如果编译和运行都没有问题,那么只是一个外观问题吗?你尝试过完全重建项目吗? - svick
这只是一个表面问题,但仍然很烦人。尝试重新构建,但没有用... - greg84
2个回答

10
在使用Linq表达式的文件中,ReSharper建议我引用'System.Core'和导入'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
我刚遇到了与resharper完全相同的问题,最终得到了相同的结果。虽然如此,我立即谷歌了这个错误,找到了这个问题,并阅读了第一个答案,在阅读了Bertrand的答案评论后重新启动了VS,问题就被解决了。重启后编译立即正常工作。 - Nick Larsen
1
@NickLarsen 很好知道。即使重新启动后,我的问题仍然存在,即 System.Core 在“解决方案资源管理器”的引用列表中未出现,但在“添加引用到…”对话框中被勾选,尝试取消选中并重新选择System.Core会导致错误,提示 System.Core 已经被添加。我希望一开始就尝试重新启动!当我进行干净的构建时,我会找出这是否是一个持久性问题... - Carl G

6

可能您有两个模块引用了不同的版本。请搜索项目文件中的那些引用,并将它们统一为4.0。


嗨@Bertrand - 我已经检查了整个解决方案中的所有项目,所有对System.dll和System.Core.dll的引用都是4.0版本 - 我真的不明白它从哪里获取3.5版本!:( - greg84
奇怪。你的using语句是什么样的? - Bertrand Le Roy
1
嗨@BertrandLeRoy - 看起来重新启动机器解决了问题!非常奇怪。我会给你答案,因为这是我面对问题时做的第一件事。感谢你的帮助。 - greg84

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接