如何为所有项目设置C#7.0的语言版本?
默认参数从哪里来,我想改变默认值。
PS:我不是指UI语言。
如何为所有项目设置C#7.0的语言版本?
默认参数从哪里来,我想改变默认值。
PS:我不是指UI语言。
default
值的含义来源于 C# 编译器本身。因此,要更改其含义,您需要更改编译器。但是,在 Visual Studio 2017 自带的编译器中,default
实际上代表 C# 7.0,因此您无需做任何操作。Visual Studio 项目系统仅将语言版本值传递给 MSBuild。然后,MSBuild 将其作为 /langversion
选项进一步传递给 C# 编译器。 /langversion
选项允许您指定编译器接受的最高语言版本。换句话说,它允许您将语言功能的使用限制为某个版本。如果您使用了比指定版本更高的语言版本特性,C# 编译器将会发出错误。这就是全部。如果您将 /langversion
指定为 default
,则 C# 编译器将接受所有最新主要 C# 语言版本包括的有效语法(请参见 MSDN 上的 /langversion (C# 编译器选项) 页面)。Visual Studio 2017 自带的最后一个主要 C# 版本是 7.0。请参阅 C# GitHub 存储库上的C# 语言版本中添加的功能页面。
如果您需要在多个项目或解决方案中启用最新小版本(7.1、7.2 等)的功能或禁止使用一些新的 C# 功能,可以使用 MSBuild 15 Directory.Build.props 自定义文件。来自 MSDN 上自定义生成文章的相关摘录:
…现在,您可以通过在称为根目录下的单个文件 Directory.Build.props 中定义新属性一次性向每个项目添加新属性。当 MSBuild 运行时,Microsoft.Common.props 会搜索您的目录结构以查找 Directory.Build.props 文件(Microsoft.Common.targets 查找 Directory.Build.targets)。如果找到一个,则导入该属性。Directory.Build.props 是用户定义的文件,可为目录下的项目提供自定义内容。
以下是一个 Directory.Build.props 文件的示例,指示 C# 编译器接受最新小版本的 C# 版本 (Visual Studio 2017 版本 15.5.3 中的 C# 7.2) 的所有有效语法,在所有项目中生效,只要它们的 .csproj 文件不包括 <LangVersion>
标记,则该标记具有优先权:
<Project>
<PropertyGroup>
<LangVersion>latest</LangVersion>
</PropertyGroup>
</Project>
了解更多信息,请查看:
ValueTuple
(不使用nuget),我需要手动将Framework版本更改为4.7,这是可以的。但是,如果我想使用c# 7.2功能(in
修饰符或readonly struct
),除非我将语言版本更改为“C#最新次要版本(最新)”,否则项目将无法编译,然后我必须为每个构建配置执行此操作。难道没有一种方法可以将两者都默认设置为最新吗?您似乎暗示它已经应该(至少对于langversion),但事实并非如此。 - pinkfloydx33<LangVersion> latest </ LangVersion>
放置在非条件<PropertyGroup>
标记中的方式,为所有构建配置更改它在.csproj文件中。 - Leonid VasilevMicrosoft.Common.props
来包括 PropertyGroup,或者您可以在每个“模板”项目中进行设置(尽管那将是很多工作),但我不知道它们是否会在更新期间被覆盖。 - pinkfloydx33<LangVersion>latest</LangVersion>
和<TargetFramework>net47</TargetFramework>
标签。 - Leonid Vasilev