C# MSbuild花费的时间比预期的长

C# MSbuild花费的时间比预期的长,c#,msbuild,C#,Msbuild,我有一个有很多依赖关系的小项目。我更改了项目中的一个文件,并注意到MSBuild也会重新编译所有依赖项。这可能是什么原因造成的?这是默认行为吗?如果是,如何更改 如果重要的话,我是通过命令行编译的(不是从VisualStudio编译)可以全部编译,也可以只是检查依赖项以确定它们是否需要重建 首先,解决方案中包含哪些类型的项目?更晦涩的项目类型可能有一些目标并没有在编写时考虑到增量构建,并且可能有错误行为(例如2012 SQL项目总是在重建,因为它试图将SQLVAR参数解析为文件位置) 这里有一些

我有一个有很多依赖关系的小项目。我更改了项目中的一个文件,并注意到MSBuild也会重新编译所有依赖项。这可能是什么原因造成的?这是默认行为吗?如果是,如何更改


如果重要的话,我是通过命令行编译的(不是从VisualStudio编译)

可以全部编译,也可以只是检查依赖项以确定它们是否需要重建

首先,解决方案中包含哪些类型的项目?更晦涩的项目类型可能有一些目标并没有在编写时考虑到增量构建,并且可能有错误行为(例如2012 SQL项目总是在重建,因为它试图将SQLVAR参数解析为文件位置)

这里有一些建议可以帮助您上路:

首选文件记录器,它允许您在不依赖控制台缓冲区的情况下进行故障排除。

msbuild.exe MySolution.sln /fl3 /flp3:warningsonly;logfile=msbuild.wrn /fl4 /flp4:errorsOnly;logfile=msbuild.err /fl5 /flp5:Verbosity=diag;logfile=msbuild.log
这将生成三个日志,两个用于警告和错误,以及一个详细程度最高的日志。打开msbuild.log并标识其中一个依赖项的生成

生成日志是否指示跳过了目标

Skipping target "CoreCompile" because all output files are up-to-date with respect to the input files.
还是说他们被重建了

Building target "SqlBuild" completely.
MsBuild可以并行构建您的项目。
提高性能的另一个技巧是并行构建项目。MsBuild是调度程序,可以使用神奇的“/m”开关并行构建依赖项

MSBuild本身不编译任何东西-它是一个工具。请提供有关您的操作的更多详细信息-您是如何构建项目的,有哪些参数等。启用MSBuild日志记录,它会告诉您一切。