我查看了条件编译文档,但似乎只谈论编译时更改设置,而不是首先是否进行编译。
是的,msbuild 条件应该在节点内工作。<Project>
对于您的要求,我只能想象一种可能的方式,您将其添加conditions
到第一个PropertyGroup
( Condition="'$(VisualStudioVersion)'=='16.0'"
) 中,类似于这种格式:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup Condition="'$(VisualStudioVersion)'=='16.0'">
<OutputType>Exe</OutputType>
<TargetFrameworks>netcoreapp3.0;net48</TargetFrameworks>
</PropertyGroup>
<PropertyGroup Condition="'$(VisualStudioVersion)'!='16.0'">
<OutputType>Exe</OutputType>
<TargetFramework>net48</TargetFramework>
</PropertyGroup>
<!-- ... other PropertyGroup with conditions-->
<!--I use this script to confirm that when building the project in VS2017(msbuild15.0),the VS version is 15.0 while in VS2019(msbuild16.0), VS version is 16.0-->
<Target Name="TestVersion" AfterTargets="build">
<Message Text="version=>$(VisualStudioVersion)" Importance="high"/>
</Target>
</Project>
不得不说,大多数时候,我们对类库项目使用 Multi-targets 而不是控制台项目,不确定您这样做的具体原因......希望它有所帮助:)
更新:
在没有安装VS的情况下构建.net
项目,我们可以考虑使用Build Tools for VS package
,这里是VS2019构建工具的链接(包含msbuild 16.0)。在All downloads=>Tools for VS2019
我们可以找到构建工具包。
为了确保我们可以使用这个包中的 msbuild.exe 来构建 .net framework4.8 和 .net core3.0 控制台项目,请确保我们在安装时启用了这些工作负载和组件:
我们可以导航到Individual Components
以确保 .net core 3.0 和 .net 4.8 已启用。