# Script Compile Order Folders

> Unity's predefined assemblies and the order in which Unity compiles them.

Unity 保留了一些项目文件夹名称来指示内容具有特殊用途。其中一些文件夹会影响脚本编译的顺序。这些文件夹名称为：

* 资源
* Editor
* Editor default resources
* Gizmos
* 插件
* 资源
* Standard Assets
* StreamingAssets

请参阅[特殊文件夹名称](/engine/6000.0/manual/working-in-unity/assets-and-media/asset-workflow/special-folders.md)了解有关这些文件夹的更多信息。

## 预定义的程序集

Unity 根据脚本文件在项目文件夹结构中的位置，以四个单独阶段编译脚本。Unity 为每个阶段创建单独的 CSharp 项目文件 (.csproj) 和预定义程序集。（如果没有适合编译阶段的脚本，Unity 不会创建相应的项目文件或程序集。）

当脚本引用在不同阶段编译的类（因此位于不同的程序集中）时，编译顺序很重要。基本规则是无法引用在当前阶段*之后*的阶段编译的任何内容。在当前阶段或早期阶段编译的所有内容则是完全可用的。

编译阶段如下：

| **阶段** | **程序集名称**                        | **脚本文件**                                                                                     |
| ------ | -------------------------------- | -------------------------------------------------------------------------------------------- |
| 1      | Assembly-CSharp-firstpass        | 名为 Standard Assets、Pro Standard Assets 和 Plugins 的文件夹中的运行时脚本。                                |
| 2      | Assembly-CSharp-Editor-firstpass | 名为 Editor 的文件夹（位于名为 Standard Assets、Pro Standard Assets 和 Plugins 的顶级文件夹中的任意位置）中的 Editor 脚本。 |
| 3      | Assembly-CSharp                  | 不在名为 Editor 的文件夹中的所有其他脚本。                                                                    |
| 4      | Assembly-CSharp-Editor           | 其余所有脚本（位于名为 Editor 的文件夹中的脚本）。                                                                |

\*\*注意：\*\*Standard Assets 仅在 **Assets** 根文件夹中有效。

您可以创建程序集定义文件，从而使用自己的程序集来组织项目中的脚本。定义自己的程序集可以减少在进行不相关的代码更改时需要重新编译的代码量，并可提供对其他程序集的依赖性的更多控制。有关更多信息，请参阅[脚本编译 - 程序集定义文件](/engine/6000.0/manual/scripting/compilation-and-code-reload/script-compilation/assembly-definition-files.md)。

## 其他资源

* [条件编译](/engine/6000.0/manual/scripting/compilation-and-code-reload/script-compilation/conditional-compilation.md)
* [程序集定义](/engine/6000.0/manual/scripting/compilation-and-code-reload/script-compilation/assembly-definition-files.md)
