如何为所有项目更改Visual Studio 2017默认语言版本?

如何在C#7.0上为所有项目设置语言版本?

项目/属性/构建/高级… /高级构建设置屏幕

默认参数来自哪里,我想更改默认值

PS:我不是指UI语言

default值的含义来自C#编译器本身。 所以为了改变它的意思,你需要改变编译器。

但是在Visual Studio 2017附带的编译器中, default实际上意味着C#7.0,所以你不需要做任何事情。

Visual Studio Project System仅将语言版本值传递给MSBuild。 MSBuild将其作为/langversion选项进一步传递给C#编译器。 /langversion选项允许您指定编译器接受的高级语言版本。 换句话说,它允许您将语言function限制用于特定版本。 如果使用高于您指定的语言版本的function,C#编译器将发出错误。 就这样。 如果将/langversion指定为default ,则C#编译器将接受最后一个主要C#语言版本包含的所有有效语法(请参阅MSDN上的/ langversion(C#编译器选项)页面)。 Visual Studio 2017附带的最新主要C#版本是7.0。 请参阅C#GitHub存储库中C#语言版本页面中添加的function 。

如果您需要启用最新次要版本(7.1,7.2等)的function或禁止同时为多个项目或解决方案使用某些新的C#function,则可以使用MSBuild 15 Directory.Build.props自定义文件。 在MSDN上自定义构建文章的相关摘录:

…现在,您可以通过在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文件不包含标签优先:

   latest   

有关更多信息,请查看

  • langversion开关有什么作用? Eric Lippert的文章
  • 项目系统源代码
  • MSDN上的常见MSBuild项目属性页,特别是CscToolPath属性