使用msbuild和一个大型解决方案来防止所有复制操作

8 浏览
0 Comments

使用msbuild和一个大型解决方案来防止所有复制操作

我坦率承认我对msbuild完全不熟悉,希望我的问题不算愚蠢。我们有一个包含大约316个项目的大型.NET解决方案。在构建过程中,似乎有很多时间被用来将DLL从一个文件夹复制到另一个文件夹(我猜这样做是为了解决引用的问题?)。有没有办法指示MSBuild将每个项目的输出文件都放在一个文件夹中,以避免这样做呢?似乎这样做是合理的,因为最终我们会将最终结果从最终输出文件夹复制出来,而所有其他的中间DLL都是浪费的。

0
0 Comments

问题的原因是一次构建316个项目太多了。解决方法是将项目分解成逻辑上分离依赖项的解决方案,并设置最大CPU计数属性为较高的值以并行构建项目。

可以通过设置BuildInParallel属性为true来实现并行构建。当BuildInParallel设置为true时,会生成多个工作进程,尽可能同时构建多个项目。为了使其正常工作,/maxcpucount开关必须设置为大于1的值,并且系统必须至少是双核或具有两个或更多处理器。

以下是一个示例,摘自microsoft.common.targets,关于如何设置BuildInParallel参数。/maxcpucount:number指定参与构建的工作进程数量。例如:C:\Windows\WinFX\v3.5>msbuild.exe *.proj /maxcpucount:3。这个示例指示MSBuild使用三个MSBuild.exe进程进行构建,从而实现三个项目的并行构建。/m也是可以接受的。

通过以上方法,可以防止使用msbuild和一个庞大的解决方案进行所有复制操作。

0
0 Comments

问题原因:通过msbuild进行编译时,由于大型解决方案中涉及到大量的复制操作,导致编译时间变长。

解决方法:可以采取以下措施来解决问题。

1. 使用/verbosity:diag参数运行msbuild命令,查看详细的构建日志。在日志的末尾,可以看到每个步骤所花费的时间,确认是否是复制操作导致的时间长。

2. 使用/flp:Filename=<myfile>;Verbosity=diag参数将构建日志写入文件,以便更好地分析和查看。

3. 尝试使用/m参数来并行构建。默认情况下,msbuild在单线程上运行,对于包含316个项目的大型解决方案来说,这可能会导致速度较慢。通过并行构建可以提高编译速度。

以上是解决问题的方法,可以根据实际情况选择适合的方法来优化编译过程。

0
0 Comments

大型解决方案在使用msbuild进行构建时,可能会出现大量的复制操作,这会导致构建过程变慢。为了解决这个问题,可以通过重写OutDir属性来防止所有的复制操作,同时还可以禁用CopyLocal设置来加快构建过程。

具体的解决方法如下:

1. 使用以下命令来重写OutDir属性:

msbuild your.sln /p:Configuration=Release;OutDir="C:\SomeFolder\Release" /m

这样可以将构建输出目录指定为指定的路径,从而避免复制操作。

2. 另外,可以禁用CopyLocal设置来加快构建过程。可以参考这篇Stack Overflow帖子了解具体的操作方式。

通过以上两种方法,可以有效地防止所有的复制操作,并加快大型解决方案的构建过程。

0