我想支持项目中从 .NET Standard 2.0 到 .NET 8.0 的每个目标。目前
<TargetFrameworks>$(ExtraTargetFrameworks)netstandard2.0</TargetFrameworks>
与
一起使用<Project>
<PropertyGroup>
<ExtraTargetFrameworks></ExtraTargetFrameworks>
</PropertyGroup>
<PropertyGroup Condition="'$(UseDotnet6SDK)'=='True'">
<ExtraTargetFrameworks>net6.0;</ExtraTargetFrameworks>
</PropertyGroup>
</Project>
我只是将
net8.0
添加到 TargetFrameworks
,但这有点问题,原因如下:
自 .NET 7 起不再支持 Windows 7 和 8.1 平台
Visual Studio 2022 不再支持 Windows 7 和 8.1
Visual Studio 2019 或更早版本不支持 .NET 7 及更高版本
Visual Studio 拒绝处理项目,除非它可以处理项目的所有 TargetFrameworks,这意味着
<TargetFrameworks>net5.0;net8.0</TargetFrameworks>`
还不够
所以问题是:如果使用 Visual Studio 2022 或更高版本或根本不使用 Visual Studio,但在使用较旧版本的 Visual Studio 时,如何在
net8.0
中包含 TargetFrameworks
?
我正在考虑向属性组添加条件,如下所示:
<PropertyGroup Condition="'$(Flavor)'=='DEBUG'">
基于这个
我找到了一个保留属性列表,我认为可以在here的条件下使用它,但这并没有列出查询 Visual Studio 版本的方法 - 尽管列出的某些路径通常包含版本。是否可以对条件进行正则表达式魔法?
我不想在命令行上指定属性,所有属性都应该在
.csproj
或其他构建/项目文件中。
如果你想根据 Visual Studio 版本更改目标框架,可以使用属性
VisualStudioVersion
。有关更多信息,请查看常见的 MSBuild 项目属性
例如
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Target Name="PrintVisualStudioInfo">
<Message Text="VisualStudioVersion: '$(VisualStudioVersion)'" />
</Target>
<Project>
<PropertyGroup>
<ExtraTargetFrameworks></ExtraTargetFrameworks>
</PropertyGroup>
<PropertyGroup Condition="'$(VisualStudioVersion)'=='17.0'">
<ExtraTargetFrameworks>net8.0;</ExtraTargetFrameworks>
</PropertyGroup>
</Project>
希望可以帮到你。