如何在.NET Core上构build多目标解决scheme?

我有解决scheme与多目标csproj文件:

<PropertyGroup> <TargetFrameworks>net45;netstandard1.6</TargetFrameworks> </PropertyGroup> 

要么

 <PropertyGroup> <TargetFrameworks>net45;netcoreapp1.1</TargetFrameworks> </PropertyGroup> 

我试图在Linux上构build这个解决scheme的.NET Core部分,但是不能pipe理它。 如果我跑

 dotnet build 

它构build了所有的目标: netcoreapp1.1netstandard1.6net45并且在net45上失败,因为.NET Core在Linux上不提供.NET 4.5平台。 我试图通过指定mono作为构build框架来解决这个问题,但是解决scheme很复杂,并不是所有的.NET 4.5都支持mono。 但是,这可以帮助别人避免can't find .NETFramework v4.5只是运行:

 FrameworkPathOverride=/usr/lib/mono/4.5/ dotnet restore FrameworkPathOverride=/usr/lib/mono/4.5/ dotnet build 

当我运行dotnet build /p:TargetFramework=netcoreapp1.1我得到了很多的错误,我认为是因为netstandard1.6项目没有build立。

如果我通过

  dotnet build /p:TargetFrameworks=netcoreapp1.1\;netstandard1.6 

我明白了

 MSBUILD : error MSB1006: Property is not valid. Switch: netstandard1.6 

如何将netcoreapp1.1netstandard1.6目标框架同时netstandard1.6传递给msbuild

我知道我可以添加额外的属性,并根据它进行条件编译,但我不想更改csproj来解决这个问题。

如果你真的不想尝试在Linux上构建完整的框架或PCL版本,只想要一个.net核心应用程序或.net标准库,您可以修改项目文件( .csproj )只在Windows上的多目标和就像一个项目针对非窗户上的单个框架,像这样:

 <PropertyGroup> <TargetFrameworks>netcoreapp1.1;net45</TargetFrameworks> <TargetFrameworks Condition="'$(OS)' != 'Windows_NT'">netcoreapp1.1</TargetFrameworks> </PropertyGroup> 

这允许为所有项目的非Windows个别指定netstandard*netcoreapp* .net核心只能使用普通的dotnet restore / dotnet build命令来构建应用程序的唯一版本。