Directory.Build.Props 中的变量不适用于旧式 csproj 格式

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

我尝试使用 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>

enter image description here

它似乎可以在有或没有多目标的 SDK 风格项目中工作。

看起来它可能在旧式 csproj 文件中显示为“空白”或空。

作为测试,我尝试在 UI 中手动设置一个值。

enter image description here

这在项目文件中显示为:

<TargetFrameworkVersion>v4.8.1</TargetFrameworkVersion>
c# .net msbuild csproj
1个回答
0
投票

查看此处的一些文档:

https://learn.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2017/msbuild/customize-your-build?view=vs-2017#directorybuildprops-and-directorybuildtargets

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')" />
© www.soinside.com 2019 - 2024. All rights reserved.