如何根据Visual Studio版本更改targetframework

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

我想支持项目中从 .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
或其他构建/项目文件中。

.net visual-studio msbuild csproj target-framework
1个回答
0
投票

如果你想根据 Visual Studio 版本更改目标框架,可以使用属性

VisualStudioVersion
。有关更多信息,请查看常见的 MSBuild 项目属性

例如

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Target Name="PrintVisualStudioInfo">
    <Message Text="VisualStudioVersion: '$(VisualStudioVersion)'" />
</Target>

enter image description here

<Project>
    <PropertyGroup>
        <ExtraTargetFrameworks></ExtraTargetFrameworks>
    </PropertyGroup>
    <PropertyGroup Condition="'$(VisualStudioVersion)'=='17.0'">
        <ExtraTargetFrameworks>net8.0;</ExtraTargetFrameworks>
    </PropertyGroup>
</Project>

希望可以帮到你。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.