优化dotnet核心自包含部署

时间:2017-12-28 15:20:18

标签: deployment .net-core

我正在开发一个简单的跨平台dotnet应用程序。我需要将其作为自包含部署进行分发,因为如果已经安装了dotnet,我无法假设。

用于win10-x64的dotnet发布生成64MB目录。我很确定大多数dll都不需要。有没有办法优化分发,以便只保留必要的dll?

4 个答案:

答案 0 :(得分:2)

我面临同样的问题。 到目前为止,这是我发现的:

Microsoft发布了一个Trim tool,用于查找未使用的程序集并将其删除。 使用.Net CLI:

  • dotnet add package Microsoft.Packaging.Tools.Trimming -v 1.1.0-preview1-25818-01
  • dotnet publish -r win-x64 -c release / p:TrimUnusedDependencies = true

您的应用程序的足迹现在要小得多(通常)

为了更好的优化,您可以将它与ILLinker一起使用:

  • dotnet new nuget

打开nuget.config并在<add key="dotnet-core" value="https://dotnet.myget.org/F/dotnet-core/api/v3/index.json" />

之间添加<packageSource>

Here你的nuget.config应该是什么样子的例子

然后执行以下命令:

  • dotnet add package ILLink.Tasks -v 0.1.4-preview-981901
  • dotnet add package Microsoft.Packaging.Tools.Trimming -v 1.1.0-preview1-25818-01
  • dotnet publish -r win-x64 -c release / p:TrimUnusedDependencies = true

使用这两个工具,我设法将应用程序的大小除以三个

来源:https://ianqvist.blogspot.fr/2018/01/reducing-size-of-self-contained-net.html#comment-form

我仍然想要获得更好的优化,我想在只有10 MB的嵌入式系统中运行我的Asp.net Core应用程序(目前为72 MB)。

如果有人找到了更好的优化,我就是买家。

答案 1 :(得分:1)

可以使用IL链接器完成此任务。通过向项目添加NuGet包,它可以通过删除不需要的代码来减少已发布的自包含应用程序的大小。但是,它仍在预览中(截至2017年)。有关自包含的应用程序,请参阅announcement postsample instructions

答案 2 :(得分:0)

Microsoft.DotNet.ILCompiler似乎比ILLinker更好。 See this reply

我对同一源代码上的.NET Core 2.2自包含输出的测试得出:

  1. 默认的独立发布:68MB
  2. ILLinker:36MB
  3. ILCompiler:5Mb

答案 3 :(得分:0)

我只想补充一点,因为.NET Core 3.0以来,它就像在项目的.csproj文件中添加标志一样简单:

<PropertyGroup>
  <OutputType>Exe</OutputType>
  <TargetFramework>netcoreapp3.0</TargetFramework>
  <RuntimeIdentifier>win-x64</RuntimeIdentifier>
  <PublishSingleFile>true</PublishSingleFile>

  <PublishTrimmed>true</PublishTrimmed> <!-- add this flag to enable trimming -->
</PropertyGroup>

然后,您可以只使用dotnet publish生成修剪后的可执行文件。

这是the documentation的警告:

  

考虑应用程序或框架(包括   使用反射或相关动态功能的ASP.NET Core和WPF),   修剪后经常会断裂。发生此损坏是因为链接器   不知道这种动态行为,无法确定哪个   反映需要框架类型。 IL Linker工具可以是   配置为了解这种情况。

     

最重要的是,修剪后一定要测试您的应用。

一个简单的控制台应用程序的典型减少结果似乎是从大约 70 MB 到大约 28 MB