构建解决方案
ReSharper 允许您使用多个并行进程增量生成解决方案。 您可以将 ReSharper Build 作为 Visual Studio 原生生成管理的替代方案。
请注意,ReSharper 不会替代 MSBuild — 您的项目仍会正常生成。 不同之处在于,不需要更新的项目不会重新生成。
启动 ReSharper Build
默认情况下,ReSharper Build 是禁用的。 要启用它,请执行以下操作之一:
转到 ReSharper 选项 的 页面 Alt+R, O ,并在 构建 部分选择 使用 ReSharper Build。
打开生成与运行窗口( ),单击 设置
并选择 使用 ReSharper Build。
启用 ReSharper Build 后,有多种方法可以生成您的解决方案:
使用任何 Visual Studio 的生成命令,例如 Ctrl+Shift+B — 所有这些命令和快捷键都会被 ReSharper Build 覆盖。
单击 构建
或在 构建与运行 窗口工具栏的下拉菜单中选择其他可用的生成命令。要生成、重新生成或清理特定项目,请在生成与运行窗口中右键单击该项目,并在上下文菜单中选择相应的命令。
ReSharper 还提供了其自己的 NuGet 还原器实现,可与所有 Visual Studio 版本配合使用。 默认情况下,ReSharper 会确保在每次构建之前还原所有相关的 NuGet 包,但您可以通过清除 ReSharper 选项 页面上的相应复选框
Alt+R, O
来禁用此功能。 如果自动还原被禁用,您始终可以通过单击构建和运行窗口工具栏上的 还原 NuGet 软件包
手动运行它。
如果在此选项页面启用了输出日志,NuGet 还原器会将日志写入输出。 您还可以在 ReSharper 选项 的 页面 Alt+R, O 上配置日志消息级别并查看还原的日志信息。
生成过程
首次运行 ReSharper Build 时,它会根据您的 配置 使用多个并行进程生成所有项目。 所有生成管理都在进程外进行,因此在生成运行时,Visual Studio 仍然保持响应。
下次生成解决方案时,ReSharper 仅生成 支持的生成项 发生更改的项目。 如果更改影响了其他项目中使用的公共类型,则相关项目也会重新生成。
未受更改影响的项目将被完全跳过,包括所有附加的生成逻辑。 如果您希望为跳过的项目执行 预生成和后生成事件以及 BeforeBuild 和 AfterBuild MSBuild 目标 ,请在 ReSharper 选项 的 页面上使用相应的复选框 Alt+R, O 。
ReSharper Build 维护了 MSBuild 任务、目标和项目的输入和输出的依赖关系图,并高效地监控文件系统的更改。 当您开始生成时,ReSharper Build 已经知道时间戳是否是最新的,而无需调用 MSBuild:如果时间戳是最新的,则项目会被跳过。
默认情况下,ReSharper Build 使用 Visual Studio 设置中指定的相同 MSBuild 版本,并以 6 个进程并行运行。 如果需要,您可以在 ReSharper 选项 的 页面上明确指定 MSBuild 版本并更改进程数量 Alt+R, O 。
生成过程和摘要在生成与运行窗口中可视化:

解决方案的所有项目都以网格形式可视化,每个项目都有特定的颜色。 您还可以将鼠标悬停在项目上以显示解释状态的工具提示。 颜色表示项目的生成状态:
深灰色 — 项目已清理或从未生成。
灰色 — 项目未生成,原因有两种:它被 排除在解决方案生成之外,或者您仅为特定项目运行生成,未关联的项目未生成。
浅蓝色 — 项目在上一次运行中已生成且没有任何更改。
蓝色 — 项目在上一次运行中已生成且没有任何更改;其引用的项目仅有私有更改。
绿色 — 项目已更改或依赖项目有公共更改,然后成功重新生成且无警告。
黄色 — 项目已更改或依赖项目有公共更改,然后成功重新生成但有警告。
红色 — 项目已更改或依赖项目有公共更改,然后项目生成失败。
如果您需要取消当前生成,请从主菜单中选择 。
生成与运行窗口工具栏控件
控件 | 名称 | 注释 |
|---|---|---|
| 构建 | 生成当前解决方案或允许您选择其他生成操作: 重新构建 或 清理 |
运行配置选择器 | 显示活动运行配置,允许切换配置并添加新配置。 更多信息,请参阅 运行配置。 | |
| 运行 | 运行活动运行配置。 |
| 在不构建的情况下运行 | 在不生成解决方案的情况下运行活动运行配置。 |
| 调试 | 开始调试活动配置。 |
| 在不构建的情况下调试 | 在不生成的情况下开始调试活动配置。 |
| 还原 NuGet 软件包 | 此按钮允许您使用 ReSharper 自己的 NuGet 还原器实现来还原当前解决方案的 NuGet 包。 默认情况下,在每次生成之前也会启用 NuGet 包的自动还原。 如果需要,您可以通过清除 ReSharper 选项 的 构建前还原 NuGet 软件包 页面上的复选框来禁用它 Alt+R, O 。 |
| 开始性能分析 | 通过此下拉按钮,您可以 以所需的析模式 分启动选定运行配置的 JetBrains dotTrace 分析。 |
| 设置 | 允许您在 ReSharper Builder 和 Visual Studio Builder 之间切换,并打开 ReSharper 选项 的 页面 Alt+R, O 。 |
分析生成结果
生成完成后,ReSharper 会在生成结果窗口中显示生成错误(以及可选的警告)。

默认情况下,仅当存在生成错误时才会显示结果。 如有必要,您可以在 ReSharper 选项 页面使用 显示构建结果... 选择器 Alt+R, O ,以显示包含警告的结果、始终显示结果或从不显示结果。
在 构建结果 窗口中,您可以通过以下方式进一步研究生成输出:
使用 分组依据 选择器中的多个选项之一选择方便的方式对结果进行分组。
如果存在生成错误,则仅这些错误会出现在窗口中。 如果您还想查看编译警告,请单击工具栏上的 显示警告
。使用 上一个
/下一步
按钮或
Shift+F8
/
F8
快捷键在生成消息之间导航。要预览导致错误或警告的代码,请单击 显示预览
或按
Ctrl+P
。 在预览窗格中(可以位于窗口左侧或底部),错误和警告会分别用红色或蓝色波浪线突出显示。双击任何错误或警告即可导航到编辑器中的相应代码行。
配置 ReSharper Build
您可以在 ReSharper 的选项页面下的 上配置 ReSharper Build。
您可以通过清除 ReSharper 选项 的 ReSharper 构建 页面上的复选框来禁用 ReSharper 解决方案生成器 Alt+R, O 。
从生成中排除项目
如果在生成解决方案时不需要生成某些项目,您可以将其排除以减少生成时间。 为此,请转到 ReSharper 选项 的 页面 Alt+R, O 页面,并在 不应构建的项目 部分标记您想要排除的项目或解决方案文件夹。 您可以使用此部分中的搜索字段来筛选解决方案树,仅显示匹配的项目。
请注意,即使您在解决方案资源管理器中对这些项目调用 构建 命令,也无法生成被排除的项目。
排除项目意味着即使源文件已过期或引用的项目有公共 API 更改,它也不会被重新生成。 这相当激进,可能会导致未捕获的编译错误,但在临时排除编译速度较慢且当前开发任务中未使用的项目时可能会很有用。 这类似于在 Visual Studio 中卸载项目,使其不进行编译,但源文件仍可供 ReSharper 使用,以便进行导航和重构。 我们建议在提交到源代码管理之前重新启用并重新生成,或者使用 解决方案范围分析 在您输入时显示编译错误。
强制特定项目生成
如果项目之前已成功生成,并且自那时起没有任何更改,ReSharper Build 不会重新生成这些项目。 如果您需要独立于项目的更改生成某些项目,可以强制生成它们。 为此,请在 始终应构建的项目 部分标记您想要强制生成的项目或解决方案文件夹。 您可以使用此部分中的搜索字段来筛选解决方案树,仅显示匹配的项目。
将项目标记为“始终生成”会告诉 ReSharper Build 永远不要对该项目应用启发式方法,而是始终将其传递给 MSBuild。 这并不意味着项目将始终被重新生成和重新编译,但意味着始终调用 MSBuild — MSBuild 仍会检查时间戳并可能执行增量生成。 这对于 ReSharper Build 无法跟踪的具有自定义生成步骤的项目很有用(尽管最好将自定义生成步骤重写为支持 增量生成的适当 MSBuild 目标)。
可视化设置
默认情况下,当您启动 ReSharper Build 时,生成与运行窗口会弹出,生成进度也会显示在 Visual Studio 状态栏中。 如果需要,您可以在 ReSharper 选项 的 页面 Alt+R, O 上配置此行为。
支持的生成项
在评估先前生成的项目的更改以决定是否重新生成时,ReSharper 会检查最常见的 MSBuild 项目类型的生成项:
默认情况下,类型为 None 的生成项和上述未列出的其他类型的更改会被忽略。 如果您的项目生成依赖于其他自定义生成项类型,则应在 .csproj / .vbproj 文件中的 AvailableItemName 中注册这些类型的名称,例如:
ReSharper Build 支持的项目类型及其限制
ReSharper Build 支持大多数基于 MSBuild 的 .NET 项目类型和语言(C#、VB.NET、F#、C++)。 但是,存在以下限制:
非 MSBuild 项目。 ReSharper Build 无法处理非基于 MSBuild 的项目类型。 这包括网站(基于文件夹的项目,而非 MVC Web 应用程序)、WinJS 应用程序和 DNX 应用程序。 如果您的解决方案中有这些类型的项目,则整个解决方案生成将回退到标准 MSBuild 生成过程。
自定义生成步骤。 通常,自定义生成步骤(包括 C++ 项目中的预生成和后生成步骤)相当于调用批处理文件,执行多个命令行,例如将文件复制到输出目录。 对于 ReSharper Build 而言,这些是一个黑盒——它不知道自定义生成步骤中发生了什么,因此无法跟踪输入和输出。 此外,如果项目被跳过,则生成步骤不会运行,这可能会导致生成问题(这是 ReSharper Build 默认禁用的主要原因)。
然而,只要自定义目标和任务支持 增量生成 ,并提供可监控时间戳更改的输入和输出列表,自定义 MSBuild 目标和任务将与 ReSharper Build 一起正常工作。 为了在 ReSharper Build 中获得良好的结果,强烈建议将简单的自定义生成步骤转换为自定义目标。
如果无法替换自定义生成步骤,则可以将项目添加到应“始终生成”的项目列表中,不应用启发式方法,这意味着它们始终会传递给 MSBuild,并运行 MSBuild 的标准增量生成过程。 这可以在 ReSharper 选项 的 页面 Alt+R, O 上进行配置。