.NET Core 3.0 构建和部署

时间:2024-03-22 10:13:49

Default Executables 默认可执行文件 

 dotnet build  dotnet publish 期间,将创建一个与你使用的 SDK 的环境和平台相匹配的可执行文件。 和其他本机可执行文件一样,可以使用这些可执行文件执行相同操作,例如:  

  • 可以双击可执行文件。  

  • 可以直接从命令提示符启用应用程序,如 Windows 上的 myapp.exe,以及 Linux  macOS 上的 ./myapp 

 

下面是一个基于.NET Core 2.2的项目: 

.NET Core 3.0 构建和部署

 

当我Build该项目之后,在bin/Debug/netcoreapp2.2目录下有这些文件: 

.NET Core 3.0 构建和部署

这里没有.exe文件。 

 

下面是一个.NET Core 3.0的项目: 

.NET Core 3.0 构建和部署

 

当我build项目后,bin/Debug/netcoreapp3.0目录下有这些文件: 

.NET Core 3.0 构建和部署

值得注意的就是,这里有一个exe文件,点击它可以直接运行该项目。 

而且这个exe文件的大小也很小,这是因为它依赖于.NET Core运行时,它所需要的依赖项在我电脑上是全局可用的。 

还有另外一个地方也值得注意,项目所有的依赖也都复制到了这个输出的文件夹里。 

 

Single-file Executables 单文件可执行文件 

这种部署方式很方便,、。dotnet publish命令支持将应用打包为特定于平台的单文件可执行文件。该可执行文件是自解压缩文件,包含运行应用所需的所有依赖项(包括本机依赖项)。首次运行应用时,应用程序将根据应用名称和生成标识符自解压缩到一个目录中。再次运行应用程序时,启动速度将变快。除非使用了新版本,否则应用程序无需再次进行自解压缩。 

 

下面针对这个.NET Core 3.0的项目,我们修改一下项目属性,来实现Single-file Executables部署: 

.NET Core 3.0 构建和部署

 

build的话不会起作用,这个功能仅支持发布(publish): 

.NET Core 3.0 构建和部署

 

看一下输出文件夹: 

.NET Core 3.0 构建和部署

实际上这里只有一个exe文件,没有其它dll文件,而且这个exe文件很大,因为这里面包含了它需要的所有依赖。 

 

Assembly linking 程序集链接

目前这个exe有点大,.NET core 3.0 SDK 随附了一种工具,可以通过分析 IL 并剪裁未使用的程序集来减小应用的大小。 

自包含应用包括运行代码所需的所有内容,而无需在主计算机上安装 .NET 但是,很多时候应用只需要一小部分框架即可运行,并且可以删除其他未使用的库。 

 .NET Core 现在包含一个设置,将使用 IL 链接器工具扫描应用的 IL 此工具将检测哪些代码是必需的,然后剪裁未使用的库。 此工具可以显著减少某些应用的部署大小。 

 

要启用此工具,请使用项目中的 <PublishTrimmed> 设置并发布自包含应用: 

.NET Core 3.0 构建和部署

 

再次发布后: 

.NET Core 3.0 构建和部署

可以看到exe文件的大小减小了很多,这是因为这里只包含了这个项目真正用到的依赖。 

 

但是启用这个特性的时候一定要注意,如果项目使用到了反射或相关动态功能(例如 ASP.NET Core  WPF,那么通常会在剪裁时损坏。 发生此损坏是因为链接器不知道此动态行为,并且不能确定反射需要哪些框架类型。 可配置 IL 链接器工具以发现这种情况。  

最重要的是,剪裁后务必对应用进行测试。 

 

ReadyToRun 镜像 

可以通过将应用程序集编译为 ReadyToRun (R2R) 格式来改进.NET Core 应用程序的启动时间。 

 

 

这里首先把注释掉<PublishTrimmed>,然后添加<PublishReadyToRun> 

.NET Core 3.0 构建和部署

 

发布: 

.NET Core 3.0 构建和部署

发布后会得到一个稍微大一点的exe文件,这是因为里面包含了原生代码和IL(中间语言)版的程序。 

更详细内容请查看原文链接。