首页 新闻 会员 周边

msbuild 如何实现 TargetFramework 大于等于某个版本号的条件引用

0
悬赏园豆:30 [已解决问题] 解决于 2023-12-02 23:01

目前在 .csproj 中采用如下方式根据 TargetFramework 版本号实现条件引用 nuget 包

<Choose>
  <When Condition="'$(TargetFramework)' == 'net6.0' Or '$(TargetFramework)' == 'net7.0'">
    <ItemGroup>
      <FrameworkReference Include="Microsoft.AspNetCore.App" />
    </ItemGroup>
  </When>
  <Otherwise>
    <ItemGroup>
      <PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="7.0.0" />
      <PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="7.0.0" />
      <PackageReference Include="Microsoft.Extensions.Http" Version="7.0.0" />
    </ItemGroup>
  </Otherwise>
</Choose>

上面的实现方式不优雅,现在 .net 8 出来了,又得修改 .csproj 文件增加 '$(TargetFramework)' == 'net8.0' 条件,请问如何写TargetFramework 版本号大于等于6.0的条件表达式?

dudu的主页 dudu | 高人七级 | 园豆:30994
提问于:2023-12-02 21:42
< >
分享
最佳答案
0

Extract number from string in MSBuild 的回答中知道了如何在 msbuild 中使用正则表达式,通过正则表达式从 TargetFramework 中提取版本号中的数字,然后针对数字写条件表达式解决了

<Choose>
  <When Condition="$([System.Text.RegularExpressions.Regex]::Match($(TargetFramework), `[1-9]\d*`)) &gt;= 6">
    <ItemGroup>
      <FrameworkReference Include="Microsoft.AspNetCore.App" />
    </ItemGroup>
  </When>
  <Otherwise>
    <ItemGroup>
      <PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="7.0.0" />
      <PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="7.0.0" />
      <PackageReference Include="Microsoft.Extensions.Http" Version="7.0.0" />
    </ItemGroup>
  </Otherwise>
</Choose>

dudu | 高人七级 |园豆:30994 | 2023-12-02 23:00
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册