【问题标题】:Can I shrink a dotnet publish package我可以缩小 dotnet 发布包吗
【发布时间】:2018-10-12 22:51:51
【问题描述】:

我最近开始使用 dotnet core(而不是老式的普通 .net)进行开发,以创建许多小型实用程序控制台应用程序。

开发很好,已经到了我想发布它们的地步。

我正在使用 CLI,因为我只对 Win 10 部署感兴趣,所以尝试过

dotnet publish -c release -r win10-x64

它工作并为我构建了一个“发布”文件夹,似乎一切正常,尽管“发布”文件夹与应用程序的大小(约 500 行代码)相比很大(约 70mb)。

因为我只打算部署到 Win10 机器,有没有办法打包它,所以我不需要所有的 .NET 文件?我认为这就是 -r 选项的用途,但似乎并没有取得太大成就。

【问题讨论】:

标签: .net-core publish


【解决方案1】:

这取决于您希望如何部署您的应用程序/谁将使用它们。

-r 标志创建一个独立的应用程序。这会导致publish 命令包含指定平台所需的 .NET Core DLL(以及平台特定的 nuget 包,如果可用),这意味着任何人都可以使用该应用程序而无需安装 .NET Core 运行时。

如果您删除-r 标志,那么publish 将只包含适用于您的应用程序的DLL。但这意味着任何想要使用您的应用程序的人都必须先安装 .NET Core 运行时。

您可以通过使用-o 标志将发布输出写入不同的目录来查看差异,例如

dotnet publish -c release -r win10-x64 -o ./publish-win10

或

dotnet publish -c release -o ./publish-any

现在去看看./publish-win10 和./publish-any 文件夹中写入的内容,你会发现不同之处。

如果您将它们安装到已经存在 .NET Core 运行时的系统上,那么您只需分发 DLL 并节省大量空间。但是,如果您希望能够分发应用程序而最终用户不必担心安装 .NET Core 运行时,那么创建自包含分发的 -r 标志是可行的方法,但会导致 ' package' 包括必要的 .NET Core 程序集。

AFAIK -r 标志不会影响您的应用程序的编译方式,只是在 publish 命令中包含哪些运行时 DLL。因此,如果您为 win10-x64 发布代码,或者带有或不带有 -r 标志,那么您的代码始终会获得相同的 DLL,因此您的应用程序 DLL 将在任何(.NET Core 兼容)平台上运行,但我很高兴在这一点上予以纠正。

【讨论】:

  • 感谢您的回复,这有助于现在更好地理解它。删除 -r 标志确实提供了一个小的发行包,但当然没有 .exe,这将是有问题的。
  • 我怀疑我只是在要求错误的东西,我现在需要使用“巨大”的发布包。也许使用 dotnnet core 不是正确的选择。
【解决方案2】:

与您习惯以构建作为创建输出的标准的 .NET 4.x 不同,.NET Core(和 .NET 5)认为构建和发布非常不同。

巨大的 (70MB) 大小是因为发布者假设您的目标没有安装任何形式的 .NET Framework,因此将其与您的项目捆绑在一起。

您可以将发布行更改为

dotnet publish -r win-x64 --self-contained false

这将单独创建 .NET Core 标准 - 一个 .dll(您的应用程序)、一个 .exe(运行应用程序)、一些用于设置的 .json 文件和一个 .pdb 文件用于调试符号。

要将应用程序更改为您习惯的 .NET Framework 标准输出,请在文本编辑器中打开 .csproj 文件,并在

<TargetFramework>netx.x</TargetFramework>

行,添加

<PublishSingleFile>true</PublishSingleFile>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>

然后重新运行发布命令。这将在publish 目录中生成一个.exe 和一个.pdb(您可以安全地删除.pdb 文件)。

注意:由于您已包含--self-contained false,因此目标需要安装指定版本的.NET Framework(在您的.csproj 文件中指定的版本)。虽然目前大多数 Windows 10 设备(通常位于 C:\Windows\Microsoft.NET\Framework 或 C:\Program Files\dotnet\)上都安装了许多版本的 .NET Framework,但 .NET Core / .NET 5 运行时并不常见(尽管可能会分发在不久的将来通过 Windows 更新),因此如果您的.exe 的收件人没有它,可能需要一次性下载。

虽然 .NET Core / .NET 5 生成的二进制文件更大(尽管大约 150kb - 不是 50MB),但它们的运行速度明显快于 .NET Framework 4.x 对应物。

【讨论】:

    猜你喜欢
    • 2013-01-09
    • 1970-01-01
    • 1970-01-01
    • 2014-04-26
    • 2021-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多