I would like to support from .NET Standard 2.0 to .NET 8.0 every target in a projects. Currently
<TargetFrameworks>$(ExtraTargetFrameworks)netstandard2.0</TargetFrameworks>
is used along with
<Project>
<PropertyGroup>
<ExtraTargetFrameworks></ExtraTargetFrameworks>
</PropertyGroup>
<PropertyGroup Condition="'$(UseDotnet6SDK)'=='True'">
<ExtraTargetFrameworks>net6.0;</ExtraTargetFrameworks>
</PropertyGroup>
</Project>
I would just add net8.0
to the TargetFrameworks
, but that's a bit problematic for the following reasons:
Windows 7 and 8.1 are no longer supported platforms as of .NET 7
Visual Studio 2022 no longer supports Windows 7 and 8.1
.NET 7 and later not supported by into Visual Studio 2019 or older
Visual Studio refuses to deal with a project unless it can handle all of the project's TargetFrameworks, meaning
<TargetFrameworks>net5.0;net8.0</TargetFrameworks>`
won't suffice
So the question is: how to include net8.0
in TargetFrameworks
if using Visual Studio 2022 or later or not using Visual Studio at all, but not when using an older version of Visual Studio?
I was thinking of adding conditions to the property groups, like so:
<PropertyGroup Condition="'$(Flavor)'=='DEBUG'">
based on this
I have found a list of reserved properties, that I assume could be used in conditions here, but this does not list a way of querying the Visual Studio version - although some paths listed usually contain the version. Would it be possible to regex magic that for the condition?
I don't want to specify properties on the command line, all should be in the .csproj
or in other build/project files.
If you want to change targetframework based on visual studio version, you can use property VisualStudioVersion
. For more information, please check the Common MSBuild project properties
For example
<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>
Hope it can help you.