具有多个目标框架的项目的 dotnet publish sln 失败

dotnet publish sln having projects with multiple target frameworks fails

我有很多项目的解决方案。一些目标框架netcoreapp2.1,一些其他目标框架netstandard2.0和一个项目有一个双目标框架

<TargetFrameworks>netstandard2.0;net471</TargetFrameworks>

我想用一个命令为 win10 制作一个工件:

dotnet publish MySolution.sln -c Release -o "targetFolder" -r win10-x64

使用这个命令,我在使用双目标框架构建项目时遇到了这个错误。这是错误:

C:\Program Files\dotnet\sdk.1.402\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.CrossTargeting.targets(31,5) error : The 'Publish' target is not supported without specifying a target framework. The current project targets multiple frameworks, please specify the framework for the published application.

错误很明显。最后我发现在输出目录中编译了dll,它似乎是一个netstandard2.0 dll,因为我的应用程序仍然有效。

我不喜欢脏东西,请问怎么解决?

如果可能,我会避免调用 N 次 "dotnet publish" 命令。

不要在解决方案中使用具有相同输出目录的 dotnet publish。特别是不使用“-r”参数。

这很危险,因为:

  • 库没有针对 netstandard facade 包的正确修剪行为
  • 库在使用“-r”发布时可能会有奇怪的行为,尤其是对于 netstandard<2.0 依赖项。 (他们最终会复制 .NET Core 1.0/1.1 实现(!)程序集)
  • 您最终可能会在输出中得到不同的 NuGet 依赖项(传递依赖项)
  • Copy-to-output/publish-directory 项目最终可能会相互覆盖,甚至可能导致构建失败

为所有应用程序(控制台应用程序、Web 应用程序)项目单独调用它或创建发布这些应用程序的 MSBuild 文件。