【发布时间】:2025-12-27 13:50:12
【问题描述】:
我的情况
在我现在正在处理的 C# 项目中,我们有一个相当大的解决方案(80 多个项目)。现在,使用来自Visual Studio 2008 的 MSBuild,5 分钟以上的重建时间确实成为一个相当大的问题。
在我上周进行的一项分析中,结果表明我的构建时间花费如下:
将文件复制到项目并重新复制到依赖它的项目(CopyToLocal)等(60%)
调用 postbuild 来反编译/编译。 (20%)
做实际编译等(20%)
除了“正常”项目bin\debug 文件夹的输出也被复制到外部目录以设置主“加载器”程序。主程序结构有点像这样:
\loader\bin\loader.exe
\loader\plugin\plugin1\plugin1.dll
\loader\plugin\plugin1\somedependency.dll
我做了什么
为了让事情进展得更快一点,我想到了以下几点:
将所有文件复制到一个大的 bin 目录中,不要使用 CopyTolocal。我不喜欢这样,因为我们不能再使用同一个 DLL 文件的不同版本,而且我的 bin 目录变得一团糟。
Use parallelism (/m) for MSBuild。这对构建时间的帮助很小。
尽量减少项目之间的依赖,这当然是一件好事。
投资硬件。我找到了一些research on solid-state drives,但这似乎并不乐观。
我的问题
我还注意到,当我对位于我的依赖关系树根目录的项目进行更改时,所有内容都会重新构建。即使只是在“私人”部分进行了更改,并且项目的界面没有更改。
MSBuild 是否使用依赖项目的时间戳来确定项目是否需要重建?
这可以更改为不同的条件吗?比如文件的校验和?
除了这个具体的建议之外,我肯定会感谢所有缩短构建时间的建议。
【问题讨论】:
标签: msbuild build-process build build-automation