MSBUILD.exe 执行速度很慢
MSBUILD.exe is executing very slow
正在体验,MSBUILD.exe需要很长时间。
此命令需要 50+ 分钟 来执行:
C:\Program Files (x86)\MSBuild.0\Bin\amd64>MSBUILD C:\xyz.sln /p:Configuration=Release /p:OutDir= c:/测试
此命令需要 1 分钟 来执行:
C:\Program Files (x86)\MSBuild.0\Bin\amd64>MSBUILD C:\xyz.sln /p:Config=Release /p:OutDir= c:/测试
问题:
1: 使用 /p:Config=Release 代替 /p:Configuration=Release 可以吗?
2: 使用 /p:Configuration=Release 使构建时间过长的根本原因是什么?
1: Is that ok to use /p:Config=Release instead of /p:Configuration=Release?
恐怕不是。正如 Lex 评论,/p:Config=Release
不是一个有效的参数。我已经使用该参数创建了一个测试示例,但我发现该解决方案是使用默认配置构建的 Debug
:
所以参数/p:Config=Release
无效。
What can be the root cause to making the build so long with /p:Configuration=Release?
如上测试,当您使用 /p:Config=Release
构建时,VS/MSBuild 将使用默认配置 Debug
构建解决方案。正如我们所知,调试模式做的优化要少得多,因为这些优化会弄乱指令和代码行之间的映射。因此,编译器在那里做的工作较少。
即使完整的调试构建速度较慢,但调试构建的发生频率更高,并且通常可以比发布构建更多地利用增量构建。因此,Debug 构建通常不需要像 Release 构建那样做那么多的工作。所以带调试配置的命令会花费更少的构建时间。
此外,当您第一次完成构建解决方案时,您应该清理解决方案,否则解决方案中的大部分项目将跳过构建。因为他们中的大多数都是最新的。因此,您应该在第一次构建解决方案后清理解决方案。
此外,如果您想了解有关构建过程的详细信息,可以通过将 /v:diag
添加到您的构建命令行来将 "Logging Verbosity" 设置为值 Diagnostic:
MSBUILD C:\xyz.sln /p:Configuration=Release /p:OutDir=c:/test /v:diag
正在体验,MSBUILD.exe需要很长时间。
此命令需要 50+ 分钟 来执行: C:\Program Files (x86)\MSBuild.0\Bin\amd64>MSBUILD C:\xyz.sln /p:Configuration=Release /p:OutDir= c:/测试
此命令需要 1 分钟 来执行: C:\Program Files (x86)\MSBuild.0\Bin\amd64>MSBUILD C:\xyz.sln /p:Config=Release /p:OutDir= c:/测试
问题:
1: 使用 /p:Config=Release 代替 /p:Configuration=Release 可以吗?
2: 使用 /p:Configuration=Release 使构建时间过长的根本原因是什么?
1: Is that ok to use /p:Config=Release instead of /p:Configuration=Release?
恐怕不是。正如 Lex 评论,/p:Config=Release
不是一个有效的参数。我已经使用该参数创建了一个测试示例,但我发现该解决方案是使用默认配置构建的 Debug
:
所以参数/p:Config=Release
无效。
What can be the root cause to making the build so long with /p:Configuration=Release?
如上测试,当您使用 /p:Config=Release
构建时,VS/MSBuild 将使用默认配置 Debug
构建解决方案。正如我们所知,调试模式做的优化要少得多,因为这些优化会弄乱指令和代码行之间的映射。因此,编译器在那里做的工作较少。
即使完整的调试构建速度较慢,但调试构建的发生频率更高,并且通常可以比发布构建更多地利用增量构建。因此,Debug 构建通常不需要像 Release 构建那样做那么多的工作。所以带调试配置的命令会花费更少的构建时间。
此外,当您第一次完成构建解决方案时,您应该清理解决方案,否则解决方案中的大部分项目将跳过构建。因为他们中的大多数都是最新的。因此,您应该在第一次构建解决方案后清理解决方案。
此外,如果您想了解有关构建过程的详细信息,可以通过将 /v:diag
添加到您的构建命令行来将 "Logging Verbosity" 设置为值 Diagnostic:
MSBUILD C:\xyz.sln /p:Configuration=Release /p:OutDir=c:/test /v:diag