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

mar*_*tch 2 c# msbuild visual-studio

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

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

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

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

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

Mar*_*ich 6

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

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

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