【问题标题】:How to publish only required dependencies?如何仅发布所需的依赖项?
【发布时间】:2019-07-03 22:47:58
【问题描述】:

如果我在 Visual Studio 2017 中创建“Hello World”.NET Core C# 控制台应用程序并运行

dotnet publish -c Release -r win10-x64 --self-contained

生成的publish 文件夹中有 215 个文件,总计 62MB,包括整个 .NET,应用程序不使用这些文件。例如,它有System.Security.Cryptography.OpenSsl.dll

这是“Microsoft.NETCore.App”依赖项的一部分,我似乎无法手动编辑。我如何才能将其缩减为应用程序实际使用的内容?

【问题讨论】:

标签: c# .net .net-core


【解决方案1】:

根据deployment documentation

与 FDD 不同,自包含部署 (SCD) 不依赖于目标系统上是否存在共享组件。所有组件,包括 .NET Core 库和 .NET Core 运行时,都包含在应用程序中

(强调我的)

如果您不想将整个 .NET Core 运行时与您的应用程序一起部署,那么您应该使用 Framework-dependent Deployment (FDD) 而不是 Self-contained Deployment (SCD)。

dotnet publish -c Release

在未来,CoreRT runtime(在撰写本文时仍在开发中)旨在允许创建单个预编译的本地可执行文件,该可执行文件特定于运行时并且不需要任何其他文件。

参考:Is there a way to make a console application run using only a single file in .NET Core?

【讨论】:

  • 我不是在谈论运行时,而是像我在帖子中提到的那样不必要的框架 DLL。
  • 由于Microsoft.NETCore.App 依赖于它们,因此您需要它们。我问了similar question,虽然微软正在制作CoreRT runtime,以便将来制作单个部署文件,但它仍在进行中。
  • 有什么方法可以发布以 FDD 风格的 core 2.0 编写的 Windows 服务?我被困在这里,因为 3 个微服务在我的主机上占用了 310mb 存储空间 - 荒谬,我即将放弃核心开发!
  • 我也有同样的困惑(为什么有这么多 dll 被复制到发布文件夹),所以感谢这两个 - 有意义的问题和答案。所以我现在使用自包含部署,因为我不必在服务器上单独安装运行时并通过这种方式完全控制我的应用程序环境。
【解决方案2】:

还有第三个选项:“Framework-dependent executables (FDE)

您需要使用--self-contained false 例如:

dotnet publish <xyz.csproj> -c Release -r win-x64 --self-contained false

“发布”文件夹仍包含一些 Microsoft.*.dll。然而少之又少。在我的例子中,之前的发布文件夹大小是 84MB,现在只有 12MB!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-21
    • 2017-02-26
    相关资源
    最近更新 更多