在VS 2017中元组无法正常工作

3

我在Visual Studio 2017中有一个C#库,我正在尝试在接口中使用元组:

IEnumerable<(Guid Id, string name)> GetFoo ();

我已经通过NuGet添加了对System.ValueTuple的引用。

Visual Studio和ReSharper都没有检测到此行存在问题,但是在构建时我会收到错误提示:

------ Build started ------ 
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Workflow.targets(121,5):
error : Type expected
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Workflow.targets(121,5):
error : Invalid token '(' in class, struct, or interface member
declaration
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Workflow.targets(121,5):
error : Identifier expected; 'string' is a keyword
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Workflow.targets(121,5):
error : ; expected
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Workflow.targets(121,5):
error : Method must have a return type
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

这表明它没有使用C# 7进行编译。
我正在针对.NET Framework 4.6.2进行目标设置。
我尝试过以下内容:
安装Visual Studio的最新更新
通过属性>生成>高级>语言版本,显式地使项目编译使用C# 7
添加对Microsoft.Net.Compilers的引用
但都没有任何效果。

编辑:不是C# 7 .NET / CLR / Visual Studio version requirements的重复,因为那里的解决方案(NuGet包)没有解决问题。


2
这很奇怪。"通过属性 > 构建 > 高级 > 语言版本,显式地使用 C# 7 编译项目" 应该是解决这个问题的方法。 - David Arno
好像某种预编译没有发生......但这只是我的猜测。 - theMayer
3
你是在针对哪个版本的C#进行开发,是最新的主要版本、最新的次要版本还是7.0版本? - David Arno
2
谢谢大家。我不认为这是重复的。由于更广泛的环境限制,我无法针对4.7.1进行目标定位。 - Paul
显示剩余7条评论
1个回答

2
我想我已经找到了问题的根源。
该项目导入: <Import Project="$(MSBuildToolsPath)\Workflow.Targets" /> 这是构建输出中错误的来源。如果我将其导入到一个简单的控制台项目中,使用上面的代码,我可以重现该错误。

我不这么认为。从构建日志中可以看出,它正在使用 C:\Windows\Microsoft.NET\Framework\v4.0.30319\Workflow.targets,这应该是我的 .Net 版本的正确路径。我目前正在努力弄清楚是否可以只删除此包含(似乎很难找出 Workflow.Targets 的作用!) - Paul
你可以将其删除,但我想知道它是如何出现在你的控制台项目中的。如果你打开它,它是 Windows Workflow 的 targets 文件。它不应该出现在控制台项目中 - 它不是模板的一部分。你是否添加了任何引用 WF 的库或包? - Panagiotis Kanavos
这是一个库而不是控制台项目。它是非常古老的代码库的一部分,因此可能在过去的某个时候需要它,但现在可能不再需要了。我想不出它还有什么用处。我将删除它并通过持续集成/回归测试来查看是否有任何问题。感谢您的帮助! - Paul
如果您创建一个新的控制台应用程序或库,您不应该在.csproj文件中看到任何对Workflow.targets的引用。这就是为什么这么奇怪的原因。 - Panagiotis Kanavos

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