# Windows 的 Visual Studio 项目生成

> Introduces Visual Studio project generation for Windows and how to use it.

**创建 Visual Studio 解决方案 (Create Visual Studio Solution)** 构建设置使 Unity 生成 Visual Studio [解决方案](https://docs.microsoft.com/en-us/visualstudio/ide/solutions-and-projects-in-visual-studio?view=vs-2019#solutions)而不是构建播放器。生成 Visual Studio 解决方案使您能够改变构建过程。例如，您可以执行以下操作：

* 修改应用程序的清单。
* 添加 C++ 代码。
* 修改嵌入式资源。
* 附带调试器启动应用程序。

**注意**：此选项仅在使用 Windows 构建目标时可用。

## 创建 Visual Studio 解决方案##create-a-visual-studio-solution

\*\*警告：\*\*在重新构建 Unity 项目之前，请务必保存并备份在 Visual Studio 中所做的任何更改。如果不备份更改，Unity 会在构建过程中重写这些更改。

1. 转到**文件 (File)** > **构建设置 (Build Settings)** > **目标平台 (Target Platform)**。
2. 选择 **Windows** 构建目标。
3. 启用**创建 Visual Studio 解决方案 (Create Visual Studio Solution)** 构建设置。
4. 选择**构建 (Build)** 以生成解决方案。


**选择了构建 Visual Studio 解决方案 (Create Visual Studio Solution) 的构建设置面板:**
![](/api/media?file=/engine/6000.0/media/images/buildsettingsVSsolution.png)

默认情况下，Unity 将生成的 Visual Studio 解决方案存储在与所构建项目相同的目录中。

### 脚本后端##scripting-backends

Unity 生成的 Visual Studio 解决方案包含不同数量的项目，具体取决于 Unity 项目使用的[脚本后端](/engine/6000.0/manual/scripting/compilation-and-code-reload/backends.md)。对于 [Mono](/engine/6000.0/manual/scripting/compilation-and-code-reload/backends/mono.md) 脚本后端，该解决方案包含三个项目。对于 [IL2CPP](/engine/6000.0/manual/scripting/compilation-and-code-reload/backends/il2cpp.md) 脚本后端，该解决方案包含四个项目。

**注意**：只能在 Windows 计算机上构建 Windows IL2CPP。

## 项目重定向向导##project-retarget-wizard

Unity 生成面向 Visual Studio 2015 的 Visual Studio 解决方案。如果使用较新版本的 Visual Studio，打开 Visual Studio 解决方案时，可能会出现**重定向项目 (Retarget Projects)** 对话框。

**重定向项目**对话框提示您升级 Visual Studio 解决方案以匹配已安装的 Visual Studio 版本。选择**确定 (OK)** 接受此建议。

## 解决方案内容##solution-contents

下面是 Unity 为 Visual Studio 解决方案生成的项目的列表。

| **项目**                                  | **描述**                                                                                              |
| --------------------------------------- | --------------------------------------------------------------------------------------------------- |
| **projectName**（表示项目名称）                 | 这是您的主项目。Visual Studio 将此项目构建到最终的应用程序可执行文件中。您最有可能在其中进行更改。                                            |
| **UnityData**（存储在 projectName 项目内）      | 此项目包含构建项目所需的所有 Unity 特定文件（如资源）。                                                                     |
| **UnityPlayerStub**                     | 这是适用于 `UnityPlayer.dll` 的存根库。Unity 使用该存根库将可执行文件链接到 `UnityPlayer.dll` 并公开可用的 `UnityPlayer.dll` API。  |
| **Il2CppOutputProject**（仅限 IL2CPP 脚本后端） | 此项目包含：• 生成的 C++ 代码，这是 Unity 从托管程序集转换而来的。• IL2CPP 运行时的源代码。• IL2CPP 垃圾收集器。您可以从 Visual Studio 内部调试此代码。 |

## Visual Studio 中的构建配置选项##build-configuration-options-in-visual-studio

Visual Studio 提供多种构建配置选项。本节中的所有优化和调试参考仅指 Visual Studio 解决方案。要选择选项，请单击**发布 (Release)** 并从下拉选单中进行选择。

### 构建配置的类型##types-of-build-configurations

| **配置**                                  | **用途**                                                               | **描述**                                                                                      |
| --------------------------------------- | -------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- |
| **Debug**                               | 调试 C++ 代码时使用 **Debug** 配置。                                           | • 禁用所有优化。• 保留代码中的所有调试信息。• 导致代码运行缓慢。                                                         |
| **Release**                             | 使用 **Release** 配置来对游戏进行性能分析。                                         | • 启用代码优化。                                                                                   |
| **Master**                              | 使用 **Master** 配置进行游戏提交和最终测试。                                         | • 禁用性能分析器。• 构建时间与 **Release** 配置相同。                                                         |
| **MasterWithLTCG**。仅在启用 IL2CPP 脚本后端时可用。 | 如果使用的是 IL2CPP 脚本后端，可以选择 **Master** 或 **MasterWithLTCG** 进行游戏提交和最终测试。 | • 为生成的 C++ 代码、IL2CPP 运行时和 IL2CPP 垃圾收集启用链接时间代码生成。• 与 **Master** 配置相比，构建时间更长。• 生成的应用程序执行速度更快。 |
