目前在 .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
的条件表达式?
在 Extract number from string in MSBuild 的回答中知道了如何在 msbuild 中使用正则表达式,通过正则表达式从 TargetFramework 中提取版本号中的数字,然后针对数字写条件表达式解决了
<Choose>
<When Condition="$([System.Text.RegularExpressions.Regex]::Match($(TargetFramework), `[1-9]\d*`)) >= 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>