MSBuild 服务器

MSBuild 服务器改进了 .NET Core 生成的性能,在 Windows、Linux 或 Mac .NET Core 生成环境中通过 .NET CLI 使用 dotnet build 命令时会调用这些生成。 与每次请求生成时将启动生成过程相反,大部分的上下文会缓存在长时间运行的进程中,以便供下一个生成重复使用。 MSBuild 服务器与 Visual Studio 生成无关,因为 Visual Studio 充当 MSBuild 的主机,并且已缓存所有必要的上下文。

MSBuild 服务器在 CI 方案(例如 Azure 管道生成)中一般不会起作用,因为管道通常会按需为每个生成维护生成环境,然后在生成完成后释放它。

启用 MSBuild 服务器

默认未启用 MSBuild 服务器;若要启用它,请将环境变量 DOTNET_CLI_USE_MSBUILD_SERVER 设置为 true1

启用后,在你首次启动新的生成过程时,将启动生成服务器。 当你启动第一个生成时,它将启用缓存。 缓存会在第一个生成完成后得以保留;由于启动时间会因缓存的信息而明显减少,因此,第二个生成的速度将更快。 缓存会在生成完成后得以保留,但在 15 分钟的空闲时间后,它会关闭。 因此,它主要有益于重复生成方案,其中许多生成请求是接踵而至的。

关闭或禁用 MSBuild 服务器

可以通过几种不同的方法来禁用 MSBuild 服务器的使用。 如果只想关闭正在运行的服务器,可以发出命令 dotnet build-server shutdown

若要禁用计算机上所有生成的功能,可以将系统环境变量 DOTNET_CLI_USE_MSBUILD_SERVER设置为 0false。 还可以在 VS Code launch.json 等工具中按项目来设置此变量。

若要为命令行生成的特定调用禁用 MSBuild 服务器,可以使用选项 /nr:false(或 /node-reuse:false)。

若要完全禁用该功能,可以选择退出启用了该功能的更改波次;SET MSBuildDisableFeaturesFromVersion="17.4"。 这将禁用同一更改波次中的其他功能。 有关更改波次的详细信息,请参阅 MSBuild 更改波次

确定生成服务器的当前状态

可以在计算机上查看进程状态并查找 MSBuild 服务器进程。 MSBuild 服务器进程会随 dotnet.exe 启动,并显示 MSBuild.dll 的路径和命令选项 /nodemode:8,其中 8 指示 MSBuild 服务器(/nodemode:1 指示正常的 MSBuild 工作器节点)。

另请参阅