包含此页的版本:
不含此页的版本:
Unity 生成过程使用名为 Unity 链接器的工具来剥离托管代码。Unity 链接器是自定义为与 Unity 配合使用的 IL 链接器版本。特定于 Unity 引擎的 Unity 链接器的自定义部分不公开可用。
Unity 链接器负责托管代码剥离和引擎代码剥离过程的一部分,这是一个单独的过程,可通过IL2CPP:Unity 开发的脚本后端,在为某些平台构建项目时,可以将其用作 Mono 的替代品。更多信息
请参阅术语表删除未使用的引擎代码的脚本后端。有关更多信息,请参阅PlayerSettings.StripEngineCode.
生成 Unity 项目时,生成过程会将 C# 代码编译为称为通用中间语言 (CIL) 的 .NET 字节码格式。Unity 将此 CIL 字节码打包到称为程序集的文件中。.NET Framework 库和插件在 Unity 外部创建的一组代码,用于在 Unity 中创建功能。可以在 Unity 中使用两种类型的插件:托管插件(使用 Visual Studio 等工具创建的托管 .NET 程序集)和本机插件(特定于平台的本机代码库)。详细信息
请参阅术语表您在项目中使用的也预打包为 CIL 字节码的程序集。
出于托管代码剥离的目的,程序集分类如下:
mscorlib.dll和System.dll,以及 .NET 类库外观程序集,例如netstandard.dll.windows.winmd程序集,这是通用 Windows 平台 SDK 的一部分。UnityEngine.Core.dll.Assembly-CSharp.dll.通常,项目中不属于这些类别之一的任何程序集都不会由 Unity 链接器处理,并且会从 Player 生成中排除。
在生成期间,Unity 链接器处理所有适用类型的程序集并执行以下作:
在“高剥离”级别,Unity 链接器编辑方法正文以进一步减小代码大小。Unity 链接器仅编辑 .NET 类库程序集中的方法正文。
Unity 链接器可以通过以下方式编辑方法正文:
if检查System.Environment.OSVersion.Platform并且对于当前目标平台无法访问。const价值。void返回类型。try-finally当finally块为空。删除空调用可能会创建空调用finally块。在方法编辑期间发生这种情况时,Unity 链接器会删除整个try-finally块。可能发生这种情况的一种情况是当编译器生成try-finally块作为foreach循环,以便调用Dispose.注意:编辑方法体后,程序集的源代码不再与程序集中的编译代码匹配,这会使调试更加困难。