Version: 2020.1
程序集定义
程序集定义引用属性

程序集定义 (Assembly Definition) 属性

单击程序集定义资源 (Assembly Definition Asset) 可以在 Inspector 窗口中设置程序集的属性。

程序集定义属性分为以下部分:

Name and General

属性 描述
名称 程序集的名称(不含文件扩展名)。程序集名称在整个项目中必须唯一。请考虑使用 reverse-DNS 命名样式降低名称冲突的风险,尤其是希望在多个项目中使用该程序集的情况下。

注意:Unity 会将您分配给程序集定义资源的名称用作 Name 字段的默认值,但您可以根据需要更改此名称。但是,如果您通过名称而不是 GUID 来引用程序集定义,则更改名称将使引用无效。
Allow ‘unsafe’ code 如果在程序集内的脚本中使用了 C# unsafe 关键字,请启用 Allow ‘unsafe’ Code 选项。启用此设置后,Unity 在编译程序集时会将 /unsafe 选项传递到 C# 编译器。
Auto Referenced 指定预定义的程序集是否应引用此项目程序集。禁用 Auto Reference 选项后,Unity 不会在编译过程中自动引用该程序集。这不会影响 Unity 是否将文件包含在构建中。
Override References 启用 Override References 设置可以手动指定此程序集依赖哪些预编译的程序集。启用 Override References 后,Inspector 会显示 Assembly References 部分,在此部分中可以指定引用。

预编译的程序集是在 Unity 项目外编译的库。默认情况下,在项目中定义的程序集将会引用添加到项目中的所有预编译程序集,这一点与预定义程序集引用所有预编译程序集的方式一致。启用 Override References 后,此程序集仅引用您在 Assembly References 下添加的预编译程序集。注意:为了防止项目程序集自动引用预编译程序集,可以禁用 Auto Referenced 选项。请参阅 Plugin Inspector 以了解更多信息。
No Engine References 启用此属性后,Unity 在编译程序集时不会添加对 UnityEditor 或 UnityEngine 的引用。

请参阅[创建程序集定义资源]。

Define Constraints

指定编译器 #define 指令;必须定义这些指令,才能让 Unity 编译或引用程序集。

Unity 仅在已满足 Define Constraints 中的所有约束条件时才会编译和引用项目程序集。约束的作用与 C# 中的 #if 预处理器指令类似,但在程序集级别(而不是脚本级别)运行。您必须定义 Define Constraints 设置中的所有符号,才能满足这些约束。

要表示必须取消定义某个符号,请在该符号前面添加否定!(叹号)符号作为前缀。例如,如果在 Define Constraints 中指定以下符号:

!ENABLE_IL2CPP
UNITY_2018_3_OR_NEWER

当符号 ENABLE_IL2CPP 未定义且符号 UNITY_2018_3_OR_NEWER 已定义时,则满足这些约束。换言之,仅在 Unity 2018.3 或更高版本的非 IL2CPP 脚本运行时中,Unity 才编译和引用此程序集。

可以使用 || (OR) 运算符来指定必须存在至少一个约束才能满足这些约束条件。例如:

UNITY_IOS || UNITY_EDITOR_OSX
UNITY_2019_3_OR_NEWER
!UNITY_ANDROID

例如:UNITY_IOS 或 UNITY_EDITOR_OSX 已定义且 UNITY_2019_3_OR_NEWER UNITY_ANDROID 未定义时满足约束。各行类似于在约束之间执行逻辑 AND。以上示例等同于:

 (UNITY_IOS OR UNITY_EDITOR_OSX) AND (UNITY_2019_3_OR_NEWER) AND (NOT UNITY_ANDROID)

可以使用 Unity 的任何内置 #define 指令、全局编译器响应文件 (.rsp) 定义的符号,以及项目的 Scripting Define Symbols Player 设置中定义的任何符号。请参阅[平台相关的编译]以了解更多信息(包括内置符号的列表)。

注意:Scripting Define Symbols 设置与具体平台有关。如果使用此设置来定义 Unity 是否应使用程序集,请务必定义所有相关平台上的必要符号。

请参阅[有条件地包含一个程序集]。

无效或不兼容的约束

Unity 根据当前定义的设置使用指示器标记每个约束。例如,以下这两个约束指示当前一个符号有定义,而另一个未定义。由于要满足整体约束条件,每个单独的约束条件都必须为真,因此 Define Constraints 框也被标记为无效或不兼容。

为了满足本示例中的约束,您可以将 Scripting Backend 更改为 IL2CPP(位于 Player Settings 中)。但是,通常重要的是构建项目时如何评估约束,而不是约束在 Unity 编辑器中的显示方式。例如,您可能有一个程序集,您只想将其包含在使用 IL2CPP 后端的构建中,而不包含在使用 Mono 后端的其他构建中。

Assembly Definition References

属性 描述
Assembly Definition References 指定对使用程序集定义资源创建的其他程序集的引用。Unity 使用这些引用来编译程序集,还定义程序集之间的依赖关系。
Use GUIDs 此设置控制 Unity 如何序列化对其他程序集定义资源的引用。启用此属性后,Unity 将这些引用另存为资源的 GUID,而不是程序集定义的名称。最好是使用 GUID 而不是名称,因为这意味着可以更改程序集定义资源的名称,而不必更新引用该程序集的其他程序集定义文件。

请参阅[创建程序集定义资源]。

Assembly References

Assembly References 部分仅在您启用 Override References 属性(位于 [General] 部分)时出现。使用这一区域可以指定对此程序集依赖的预编译程序集的任何引用。

请参阅[引用预编译的插件程序集]

Platforms

设置程序集的平台兼容性。Unity 仅在包含(或不排除)的平台上编译或引用此程序集。

请参阅[创建特定于平台的程序集]

版本定义

根据项目中包和模块的版本指定要定义的符号。

属性 描述
Resource 一个包或模块
Define 该符号定义 Resource 的适用版本何时也出现在此 Unity 项目中。
Expression 定义版本或版本范围的表达式。请参阅版本定义表达式。
Expression outcome 该表达式将作为逻辑语句进行求值,其中 “x” 是要检查版本。如果表达式结果显示无效,则表达式格式错误。

[基于项目包定义符号]

[有条件地包含一个程序集]:ScriptCompilationAssemblyDefinitionFiles.html#conditional-assembly [创建特定于平台的程序集]:ScriptCompilationAssemblyDefinitionFiles.html#create-platform-specific [创建程序集定义资源]:ScriptCompilationAssemblyDefinitionFiles.html#create-asmdef [基于项目包定义符号]:ScriptCompilationAssemblyDefinitionFiles.html#define-symbols [General]:#general [平台相关的编译]:PlatformDependentCompilation.html [引用预编译的插件程序集]:ScriptCompilationAssemblyDefinitionFiles.html#reference-precompiled-assembly

程序集定义
程序集定义引用属性