我有一个csproj与<LangVersion>default</LangVersion>
,目前默认为c#7.0。
如果我手动将其更改为7.3,它会正确编译我们的代码,该代码使用7.1及更高版本中的某些功能。
当然我可以在每个csproj上改变它,但是因为我们有很多我正在寻找其他解决方案。
我在我的存储库的根目录中添加了一个Directory.Build.props,并将其导入到csproj中。但是csproj中<LangVersion>
的设置优先于我的道具文件中<LangVersion>
的设置...无论我在csproj中导入它。
我宁愿不要求每个人从他们的csproj和所有未来的csproj中删除<LangVersion>
属性,如果这可以从一些主要道具继承...但似乎并非如此。我在这里错过了什么?
Directory.Build.props
文件在项目文件的开头(!)自动导入(不需要<Import>
)。
因此,项目文件中的每个内容都会在该文件的内容之后添加,因此将覆盖之前定义的值。 (除非csproj包含像<LangVersion Condition="'$(LangVersion)' != ''">…
这样的条件)。
要覆盖来自csproj文件的任何值,您可以使用Directory.Build.targets
文件,该文件在(!)项目内容之后自动导入,允许您覆盖项目文件中设置的值。