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

问题描述 投票:2回答:1

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

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

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

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

我宁愿不要求每个人从他们的csproj和所有未来的csproj中删除<LangVersion>属性,如果这可以从一些主要道具继承...但似乎并非如此。我在这里错过了什么?

c# visual-studio msbuild
1个回答
5
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.