Deployment 优化.NET核心自包含部署
我正在开发一个简单的、跨平台的.NET应用程序。我需要将其作为一个自包含的部署分发,因为我不能假设.NET是否已经安装Deployment 优化.NET核心自包含部署,deployment,.net-core,Deployment,.net Core,我正在开发一个简单的、跨平台的.NET应用程序。我需要将其作为一个自包含的部署分发,因为我不能假设.NET是否已经安装 .NET publish for Windows 10 64位生成64 MB目录。我很确定大多数DLL文件是不需要的。是否有办法优化分发,以便只保留必要的DLL文件?更新2020:这现在是工具链的一部分,请参见Pawel的答案 此任务可以通过使用IL链接器来完成。通过向项目中添加NuGet包,可以删除不需要的代码,从而减小已发布的自包含应用程序的大小。然而,它仍处于预览阶段(截
.NET publish for Windows 10 64位生成64 MB目录。我很确定大多数DLL文件是不需要的。是否有办法优化分发,以便只保留必要的DLL文件?更新2020:这现在是工具链的一部分,请参见Pawel的答案
此任务可以通过使用IL链接器来完成。通过向项目中添加NuGet包,可以删除不需要的代码,从而减小已发布的自包含应用程序的大小。然而,它仍处于预览阶段(截至2017年)。有关自包含的应用程序,请参见和。我也面临同样的问题。到目前为止,我的发现如下: Microsoft发布了一个用于查找未使用的程序集并将其删除的 使用.NET CLI:
dotnet添加包Microsoft.Packaging.Tools.Trimming-v1.1.0-preview1-25818-01
dotnet发布-r win-x64-c发布/p:trimunseddependencies=true
为了获得更好的优化效果,您可以将其与iLink一起使用:
dotnet新nuget
,这是您的nuget.config应该是什么样子的示例
然后执行以下命令:
dotnet添加程序包链接任务-v 0.1.4-preview-981901
dotnet添加包Microsoft.Packaging.Tools.Trimming-v1.1.0-preview1-25818-01
dotnet发布-r win-x64-c发布/p:trimunseddependencies=true
使用这两个工具,我成功地将应用程序的大小除以三
资料来源:
我仍在尝试更好的优化。我想在一个只有10 MB的嵌入式系统中运行我的ASP.NET核心应用程序(目前为72 MB)
如果有人找到了更好的优化,我就是买家。似乎比ILLinker更好
我在同一源代码上对.NET Core 2.2自包含输出进行的测试给出了:
默认自包含发布:68 MB
ILLinker:36MB
iL编译器:5 MB
自.NET Core 3.0以来,只需在项目的.csproj
文件中添加一个标志即可:
Exe
netcoreapp3.0
win-x64
真的
真的
然后您可以使用dotnetpublish
生成一个经过修剪的可执行文件
这里有一个警告:
重要的是考虑应用程序或框架(包括
ASP.NET内核和WPF)使用反射或相关动态功能,
修剪时会经常断裂。由于链接器
不知道这种动态行为,也无法确定
反射需要框架类型。IL链接器工具可以是
配置为了解此场景
最重要的是,一定要在修剪后测试你的应用程序
简单控制台应用程序的典型缩减结果似乎是从大约70MB减少到大约28MB旁注:如果您应该使用.net core 2.0,请使用win-x64
而不是win10-x64
谢谢。有道理。这是令人印象深刻的:-)部署大小减少了50%,正如页面所宣称的。非常有希望,但我不确定我是否可以将其用于生产用途。仍然让我感到困惑的是,我需要32MB的内存来制作一个简单的应用程序,它可以与stdin/stdout接口,与newtonsoft接口,与Serilog输出日志。Python中类似的应用程序被冻结为10MB。我相信这可能是苹果和橙子的比较。我将密切关注这个链接器的进展,因为它可能对micro至关重要-services@PeterMortensen你说得对。随着情况的变化,这样的答案很难回答。