包含多个目标框架的项目的dotnet publish sln失败

时间:2018-10-05 07:17:04

标签: .net-core dotnet-cli target-framework

我的Sln有很多项目。有人拥有目标框架netcoreapp2.1,有人拥有目标框架netstandard2.0,一个项目拥有双重目标框架

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

我想用一个命令为win10安装一个articaft:

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

使用此命令在使用双目标框架构建项目时出现此错误。这是错误:

C:\Program Files\dotnet\sdk\2.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”命令。

1 个答案:

答案 0 :(得分:1)

请勿在解决方案上将dotnet publish与相同的输出目录一起使用。特别是不能使用“ -r”参数。

这很危险,因为:

  • 库对于netstandard门面软件包没有正确的修剪行为
  • 当使用“ -r”发布时,
  • 库可能具有奇怪的行为,尤其是对于netstandard <2.0依赖项。 (它们最终将复制.NET Core 1.0 / 1.1实现(!)程序集)
  • 您最终可能在输出中获得不同的NuGet依赖项(传递依赖项)
  • 复制到输出/发布目录项可能最终被彼此覆盖,甚至可能导致构建失败

为所有应用程序(控制台应用程序,Web应用程序)项目分别调用它,或创建一个发布这些应用程序的MSBuild文件。