我尝试使用 Directory.Build.props 设置一些变量以用于我们不同的项目类型。
<Project>
<PropertyGroup>
<!-- For SDK style c# projects -->
<ApmTargetFramework>net481</ApmTargetFramework>
</PropertyGroup>
<PropertyGroup>
<ApmTargetFrameworkVersion>v4.8.1</ApmTargetFrameworkVersion>
</PropertyGroup>
<PropertyGroup>
<!-- For APM multi-targeted projects-->
<ApmMultiTargetFrameworks>net6.0;net481</ApmMultiTargetFrameworks>
</PropertyGroup>
</Project>
对于 sdk 风格的项目,这两种方法都有效:
<TargetFrameworks>$(ApmMultiTargetFrameworks)</TargetFrameworks>
和
<TargetFramework>$(ApmTargetFramework)</TargetFramework>
在旧式 csproj 文件中它似乎不起作用:
<TargetFrameworkVersion>$(ApmTargetFrameworkVersion)</TargetFrameworkVersion>
它似乎可以在有或没有多目标的 SDK 风格项目中工作。
看起来它可能在旧式 csproj 文件中显示为“空白”或空。
作为测试,我尝试在 UI 中手动设置一个值。
这在项目文件中显示为:
<TargetFrameworkVersion>v4.8.1</TargetFrameworkVersion>
查看此处的一些文档:
Directory.Build.props 很早就导入到了 Microsoft.Common.props 中,后来定义的属性对其不可用。因此,请避免引用尚未定义的属性(并将评估为空)。
当我查看时,我们的一些项目文件不包含 Microsoft.Common.props。我们有一些自己的 .props 文件,我认为有人可能已经删除了 Microsoft.Common.props。
例如不包含此内容的文件无法与 Directory.Build.props 一起使用
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />