csproj LangVersion属性将覆盖任何导入的项目

时间:2018-08-31 14:51:06

标签: c# visual-studio msbuild

我有一个<LangVersion>default</LangVersion>的csproj,当前默认为c#7.0。

如果我手动将其更改为7.3,它将正确编译使用7.1及更高版本中某些功能的代码。

我当然可以在每个csproj上更改它,但是由于我们有很多,我正在寻找其他解决方案。

我在存储库的根目录中添加了Directory.Build.props,并将其导入到csproj中。但是csproj中<LangVersion>的设置优先于props文件中<LangVersion>的设置……无论我将其导入csproj中的什么位置。

如果要从某些主道具继承过来,我不想让每个人都从其cproj和将来的cproj中删除<LangVersion>属性……但这似乎并非如此。我在这里想念什么?

1 个答案:

答案 0 :(得分:5)

Directory.Build.props文件将自动导入(无需<Import>)在项目文件的开头(!)。

因此,项目文件中的每个内容都将添加到该文件的内容之后,因此将覆盖之前定义的值。 (除非csproj包含类似<LangVersion Condition="'$(LangVersion)' != ''">…的条件)。

要覆盖来自csproj文件的任何值,可以使用Directory.Build.targets文件,该文件会在项目内容(!)之后自动导入,从而允许您覆盖在项目文件中设置的值。