我想将TargetFrameworks .csproj元素用于控制台应用程序的.Net Core3.0 (netcoreapp3.0)和.Net Framework4.8 (net48),如下所示:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFrameworks>netcoreapp3.0;net48</TargetFrameworks>
<AssemblyName>MyConsoleApp</AssemblyName>
</PropertyGroup>
</Project>但是,我希望同一个.csproj文件在旧的工具中优雅地降级,并且在工具不支持netcoreapp3.0 (比如Visual 2017)时只编译.Net Framework4.8。
我查看了条件编译文档,但它似乎只讨论编译时更改设置,而不是从一开始就进行编译。
我怎样才能做到这一点?
发布于 2019-11-04 08:56:51
我查看了条件编译文档,但它似乎只讨论编译时更改设置,而不是从一开始就进行编译。
是的,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>不得不说,在大多数情况下,我们使用多个目标的类库项目,而不是控制台项目,不确定您这样做的具体原因。希望能有所帮助:)
更新:
要在没有安装VS的情况下构建.net项目,我们可以考虑使用Build Tools for VS package,下面是构建VS2019工具的链接(包含msbuil16.0)。在All downloads=>Tools for VS2019中,我们可以找到构建工具包。
为了确保可以使用此包中的msbuild.exe构建.net框架4.8和.net core3.0控制台项目,请确保在安装时启用了这些工作负载和组件:


我们可以导航到Individual Components,以确保启用了.net核心3.0和.net 4.8。
https://stackoverflow.com/questions/58687081
复制相似问题