# 创建程序集资源

> Create various kinds of assembly assets to customize your assemblies.

程序集定义 (Assembly Definition, `.asmdef`) 资源允许您通过将新程序集放置在包含脚本的文件夹根目录中来定义新程序集。

程序集定义引用 (Assembly Definition Reference, `.asmref`) 资源允许您将一组脚本文件显式包含在预先存在的程序集内。

## 创建程序集定义资源##create-an-assembly-definition

要创建程序集定义资源，请执行以下操作：

1. 在**项目**窗口中，找到包含要包括在程序集中的脚本的文件夹。
2. 在文件夹中创建程序集定义资源（菜单：**资源 (Assets)** > **创建 (Create)** > **脚本 (Scripting)** > **程序集定义 (Assembly Definition)**）。
3. 为资源分配名称。默认情况下，程序集文件使用分配给资源的名称，不过可以在**检视面板**窗口中更改名称。

Unity 会重新编译项目中的脚本以创建新程序集。然后，您可以编辑新程序集定义的[属性](/engine/6000.0/manual/scripting/compilation-and-code-reload/script-compilation/assembly-definition-files/class-assembly-definition-importer.md)。

新程序集包括与程序集定义位于同一文件夹中的所有脚本，以及任何没有自己的程序集定义或程序集定义引用文件的子文件夹中的脚本。Unity 会从以前的程序集中删除脚本（如果适用）。

## 创建程序集定义引用资源##create-an-assembly-definition-reference

要创建程序集定义引用资源，请执行以下操作：

1. 在**项目**窗口中，找到包含要包括在引用程序集中的脚本的文件夹。

2. 在文件夹中创建程序集定义引用资源（菜单：**资源 (Assets)** > **创建 (Create)** > **脚本 (Scripting)** > **程序集定义引用 (Assembly Definition Reference)**）。

3. 为资源分配名称。

   Unity 会重新编译项目中的脚本以创建新程序集。完成，您可以编辑新程序集定义引用的[属性](/engine/6000.0/manual/scripting/compilation-and-code-reload/script-compilation/assembly-definition-files/class-assembly-definition-reference-importer.md)。

4. 选择新程序集定义引用资源以在**检视面板**中查看其属性。


   **Frame:**
   ![](/api/media?file=/engine/6000.0/media/images/asmdef-2.png)

5. 设置程序集定义属性以引用目标程序集定义资源。

6. 单击**应用 (Apply)**。

引用的程序集现在包括与程序集定义引用位于同一文件夹中的所有脚本，以及任何没有自己的程序集定义或程序集定义引用文件的子文件夹中的脚本。Unity 会从以前的程序集中删除脚本（如果适用）。

## 创建特定于平台的程序集##create-a-platform-specific-assembly

要为特定平台创建程序集，请执行以下操作：

1. [创建程序集定义资源](#create-asmref)

2. 选择新程序集定义引用资源以在**检视面板**中查看其属性。


   **Frame:**
   ![](/api/media?file=/engine/6000.0/media/images/asmdef-3.png)

3. 选中**任何平台 (Any Platform)** 选项，然后选择要排除的特定平台。或者，也可以取消选中任何平台 (Any Platform) 并选择要包含的特定平台。

4. 单击**应用 (Apply)**。

为平台构建项目时，会根据选定平台包含（或排除）程序集。

## 为编辑器代码创建程序集##create-an-assembly-for-editor-code

通过编辑器程序集可以将编辑器脚本置于项目中的任何位置，而不仅仅是置于名为 `Editor` 的顶层文件夹中。

要在项目中创建包含编辑器代码的程序集，请执行以下操作：

1. 在包含编辑器脚本的文件夹中[创建特定于平台的程序集](#create-platform-specific)。
2. 仅包含编辑器平台。
3. 如果有包含编辑器脚本的其他文件夹，则在这些文件夹中[创建程序集定义引用资源](#create-asmref)并将它们设置为引用此程序集定义。

## 创建测试程序集##create-a-test-assembly

测试程序集是 Unity 期望包含测试的程序集。将测试放入测试程序集有以下好处：

* 它们将测试代码与要发送给用户的应用程序代码分开，因此仅当需要时才编译测试代码。
* 测试程序集中的任何测试都自动对 [Test Framework 包](/engine/6000.0/manual/tests-editortestsrunner.md)可见，因此可从 **Test Runner** 窗口运行这些测试。

如果任何程序集具有对 **nunit.framework.dll** 的[程序集引用](/engine/6000.0/manual/scripting/compilation-and-code-reload/script-compilation/assembly-definition-files/class-assembly-definition-importer.md#assembly-references)以及对 **UnityEngine.TestRunner** 和 **UnityEditor.TestRunner** 的[程序集定义引用](/engine/6000.0/manual/scripting/compilation-and-code-reload/script-compilation/assembly-definition-files/class-assembly-definition-importer.md#asmdef-references)，Unity 会自动将其识别为测试程序集。

请参阅 Unity [Test Framework 文档](https://docs.unity3d.com/Packages/com.unity.test-framework@latest?subfolder=/manual/workflow-create-test-assembly.html)，以了解有关安装 Test Framework 包和创建测试程序集的说明。您可以使用编辑器 UI 创建预定义了相关引用的程序集定义文件，也可以[通过检视面板窗口](/engine/6000.0/manual/scripting/compilation-and-code-reload/script-compilation/assembly-definition-files/class-assembly-definition-importer.md)或[直接编辑 JSON 文件](/engine/6000.0/manual/scripting/compilation-and-code-reload/script-compilation/assembly-definition-files/file-format.md)手动配置引用。

**注意**：测试程序集不会作为常规构建管线的一部分进行编译，因此放置在测试程序集中的任何代码都将从标准[项目构建](/engine/6000.0/manual/unity-editor/editor-features/build-settings.md)中排除。仅当通过 **Test Runner** 窗口[在播放器中运行播放模式测试](https://docs.unity3d.com/Packages/com.unity.test-framework@latest?subfolder=/manual/workflow-run-playmode-test-standalone.html)时，才会将测试程序集代码包含在播放器中。如果您的生产代码未按预期编译到项目构建中，请仔细检查以确保其不在测试程序集内。

# 其他资源##additional-resources

* [特殊文件夹和脚本编译顺序](/engine/6000.0/manual/scripting/compilation-and-code-reload/script-compilation/script-compile-order-folders.md)
