点击上方蓝字
关注我们
(本文阅读时间:15分钟)
.NET 6 继续与大家相约周日啦 。 本篇文章将介绍:单文件应用、IL 修整、System.Text.Json、源代码构建、库AIP的相关攻略 。
单文件应用
在 .NET 6中 , 已为 Windows 和 macOS 启用内存中单文件应用程序 。 在 .NET 5 中 , 这种部署类型仅限于 Linux 。 您现在可以为所有受支持的操作系统发布作为单个文件部署和启动的单文件二进制文件 。 单文件应用不再将任何核心运行时程序集提取到临时目录 。
这种扩展功能基于称为“超级主机”的构建块 。 “apphost” 是在非单文件情况下启动应用程序的可执行文件 , 例如 myapp.exe或./myapp. Apphost 包含用于查找运行时、加载它并使用该运行时启动您的应用程序的代码 。 Superhost 仍然执行其中一些任务 , 但使用所有 CoreCLR 本机二进制文件的静态链接副本 。 静态链接是我们用来实现单一文件体验的方法 。 本机依赖项(如 NuGet 包附带的)是单文件嵌入的显着例外 。 默认情况下 , 它们不包含在单个文件中 。 例如 , WPF 本机依赖项不是超级主机的一部分 , 因此会在单文件应用程序之外产生其他文件 。 您可以使用该设置 IncludeNativeLibrariesForSelfExtract 嵌入和提取本机依赖项 。
▌静态分析
我们改进了单文件分析器以允许自定义警告 。 如果您的 API 在单文件发布中不起作用 , 您现在可以使用[RequiresAssemblyFiles]属性对其进行标记 , 如果启用了分析器 , 则会出现警告 。 添加该属性还将使方法中与单个文件相关的所有警告静音 , 因此您可以使用该警告将警告向上传播到您的公共 API 。
当 PublishSingleFile 设置为 true 时 , 会自动为 exe 项目启用单文件分析器 , 但您也可以通过将 EnableSingleFileAnalysis 设置为 true 来为任何项目启用它 。 如果您想支持将库作为单个文件应用程序的一部分 , 这将很有帮助 。
在 .NET 5 中 , 我们为单文件包中行为不同的 Assembly.Location 和一些其他 API 添加了警告 。
▌压缩
单文件包现在支持压缩 , 可以通过将属性设置 EnableCompressionInSingleFile为true. 在运行时 , 文件会根据需要解压缩到内存中 。 压缩可以为某些场景节省大量空间 。
让我们看一下与 NuGet 包资源管理器一起使用的单个文件发布(带压缩和不带压缩) 。
无压缩:172 MB
文章图片
压缩:71.6 MB
文章图片
压缩会显着增加应用程序的启动时间 , 尤其是在 Unix 平台上 。 Unix 平台有一个不能用于压缩的无拷贝快速启动路径 。 您应该在启用压缩后测试您的应用程序 , 看看额外的启动成本是否可以接受 。
▌单文件调试
目前只能使用平台调试器(如 WinDBG)来调试单文件应用程序 。 我们正在考虑使用更高版本的 Visual Studio 2022 添加 Visual Studio 调试 。
▌macOS 上的单文件签名
单文件应用程序现在满足 macOS 上的 Apple 公证和签名要求 。 具体更改与我们根据离散文件布局构建单文件应用程序的方式有关 。
Apple 开始对macOS Catalina实施新的签名和公证要求 。 我们一直在与 Apple 密切合作 , 以了解需求 , 并寻找使 .NET 等开发平台能够在该环境中正常工作的解决方案 。 我们已经进行了产品更改并记录了用户工作流程 , 以满足 Apple 在最近几个 .NET 版本中的要求 。 剩下的差距之一是单文件签名 , 这是在 macOS 上分发 .NET 应用程序的要求 , 包括在 macOS 商店中 。
特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
