如何在C#7.0上为所有项目设置语言版本?
Project/Properties/Build/Advanced.../Advanced Build Settings screen
默认参数来自哪里,我想更改默认值
PS:我不是指UI语言
答案 0 :(得分:29)
default
值的含义来自C#编译器本身。所以为了改变它的意思,你需要改变编译器。
但是在Visual Studio 2017附带的编译器default
实际上意味着C#7.0,所以你不需要做任何事情。
Visual Studio Project System只将语言版本值传递给MSBuild。 MSBuild将其作为/langversion
选项进一步传递给C#编译器。 /langversion
选项允许您指定编译器接受的高级语言版本。换句话说,它允许您将语言功能限制用于特定版本。如果使用高于您指定的语言版本的功能,C#编译器将发出错误。这就是全部。如果将/langversion
指定为default
,则C#编译器将接受最后一个主要C#语言版本包含的所有有效语法(请参阅MSDN上的/langversion (C# Compiler Options)页面)。 Visual Studio 2017附带的最新主要C#版本是7.0。看到
C#GitHub存储库上的Features Added in C# Language Versions页面。
如果您需要启用最新次要版本(7.1,7.2等)的功能或禁止同时为多个项目或解决方案使用某些新的C#功能,则可以使用MSBuild 15 Directory.Build.props自定义文件。 MSDN上Customize your build文章的相关摘录:
...现在,您可以通过在repo根目录下名为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文件没有&#39 ; t包括优先的<LangVersion>
标记:
<Project>
<PropertyGroup>
<LangVersion>latest</LangVersion>
</PropertyGroup>
</Project>
有关详细信息,请查看: