【问题标题】:Is the C# language version set per each solution configuration?是否为每个解决方案配置设置了 C# 语言版本?
【发布时间】:2020-08-06 02:16:41
【问题描述】:

在处理包含一个针对 .NET 4.5.2 的项目和另一个针对 .NET 4.8 的项目的 VS 2019 解决方案时,我观察到如果解决方案配置设置为“调试”以外的任何内容(此特定解决方案具有“DEV”、“FEATURE”、“QA”、“STG”和“PROD”配置)我在 VS 错误列表窗口中看到错误指示“功能 _______ 在 C# 7.3 中不可用。请使用 8.0 或更高版本的语言。 "

作为参考,如果在此处选择“调试”以外的配置,则会观察到错误:

然后我收到这些错误:

有问题的项目设置为使用 C# 语言级别“默认(自动检测)”:

我可能不完全理解语言版本与不同解决方案配置之间的关系,以及为什么“调试”配置似乎使用正确的语言版本,而其他冲突则没有。但是,使用各种解决方案配置发布应用程序不会产生任何语言版本错误。

【问题讨论】:

  • 我添加了一个我希望会有所帮助的答案,但如果没有,如果您能提供项目文件的完整示例,那将非常有帮助(以及理想的解决方案文件,以及 C# 文件)演示问题。特别是,目前我们甚至不知道它是一个什么样的项目——一个“SDK 风格”的项目,还是一个更老、更冗长的项目。

标签: c# .net visual-studio-2019


【解决方案1】:

语言级别在项目文件中设置。项目属性可以是特定于配置的,也可以是通用的。 (请注意,“解决方案配置”和“项目配置名称”也可以不同,这是一个复杂的问题。)

您应该查看项目文件 - 我希望您会找到具有 Condition 属性的 LangVersion 的 MSBuild 属性。移除 Condition 属性,使该属性适用于所有配置。

【讨论】:

  • 感谢您的快速回复!在我的解决方案中,以 .NET 4.5.1 为目标的项目在 <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'"> 中确实有 <LangVersion>latest</LangVersion>。对于所有其他解决方案配置,<PropertyGroup> 没有<LangVersion>。如果我将<LangVersion> 移动到没有“条件”属性的<PropertyGroup> 元素,我将不再收到错误消息。
  • @matt.f.c:开裂。我强烈建议如果您可以将任何“旧式”项目移动到 SDK 式项目,那么就这样做。它们如此更具可读性,并且非常容易手动编辑。我尽量避免有任何条件,除非我真的非常需要它们:)
猜你喜欢
  • 2015-10-13
  • 1970-01-01
  • 2014-01-10
  • 1970-01-01
  • 2010-11-26
  • 1970-01-01
  • 1970-01-01
  • 2020-11-21
  • 1970-01-01
相关资源
最近更新 更多