【问题标题】:dotnet publish sln having projects with multiple target frameworks fails具有多个目标框架的项目的 dotnet publish sln 失败
【发布时间】:2019-03-10 15:27:17
【问题描述】:

我有很多项目的解决方案。一些目标框架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\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”命令。

【问题讨论】:

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


    【解决方案1】:

    不要在解决方案上将dotnet publish 与相同的输出目录一起使用。尤其是没有“-r”参数。

    这很危险,因为:

    • 对于 netstandard 外观包,库没有正确的修剪行为
    • 使用“-r”发布时,库可能会出现奇怪的行为,尤其是对于 netstandard
    • 您最终可能会在输出中得到不同的 NuGet 依赖项(传递依赖项)
    • 复制到输出/发布目录项最终可能会相互覆盖,甚至可能导致构建失败

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

    【讨论】:

    • 我必须在同一个目录下发布。所有这些项目都属于同一个应用程序。你说的有道理,但我不明白你的解决方案。我应该用不同的参数调用 N 次“dotnet publish”吗?我错过了什么?
    • 如果你只有一个项目(web app/console app),只在那个项目的csproj文件上做dotnet publish,它会包含所有的依赖。
    • 很好,但我有很多项目。其中一个是控制台应用程序,其他是类库。
    • 如果控制台应用程序引用这些库,它们将被自动包含。
    猜你喜欢
    • 2011-01-15
    • 2022-12-03
    • 2023-01-08
    • 2022-08-16
    • 2018-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-09
    相关资源
    最近更新 更多