4

我有一个大型 WPF MEF PRISM 解决方案(100 多个项目),我们的构建时间在四核 8 GB 机器上大约是 2 分钟。

我将所有二进制文件输出到相同的输出路径“..\Bin”,以便我们的 MEF 引导程序可以扫描并找到所有程序集。

在对构建时间进行故障排除时,我注意到每个引用核心基础结构库的项目都会将此二进制文件复制到输出目录,从而为完全相同的文件生成多个副本。我觉得实际的编译速度很快,但是重复复制的数量正在缩短我的构建时间。

如果输出目录中已经存在相同版本的文件,有什么方法可以告诉项目不要复制引用?我已经有了带有较小项目集合的辅助 SLN 文件,这有助于大多数人缩短构建时间。

4

2 回答 2

3

在 Windows 中复制文件非常快,由于文件系统缓存,内存到内存的复制。特别是在构建中,因为文件是新创建的,因此它们的数据始终存在于缓存中。直到稍后缓存管理器懒惰地将文件数据写入磁盘时,才会真正写入磁盘。它在后台运行,不能减慢构建速度。文件复制速度较慢的唯一情况是文件系统缓存已满,必须等待缓慢的磁盘写入以腾出更多空间。

多次复制同一个文件,即使它不是由构建创建的,也同样快。您只需为第一次阅读文件付费。之后任何后续副本始终使用缓存的文件数据。

在具有 8 GB RAM 的机器上,.NET 解决方案无法将缓存填满并使其变慢。缓存应至少为 2 GB。编写一个生成 2 GB 代码和资源的 .NET 解决方案是不可能的。

您正在尝试解决错误的问题。

于 2012-12-11T15:00:15.873 回答
1

我认为这不是一个很好的解决方案,但是您可以让您的基础架构复制到输出目录,并且在任何引用它的地方您都可以将CopyLocal特定引用的属性设置为 False。我不是说这是唯一的选择,但它可以做你想做的事。我只是想帮忙。

编辑:

我不知道您是否这样做,但如果您不这样做,您可以将 MEF 所需xcopypost-build那些 dll 复制到该输出目录。在这种情况下,您可以避免这些困难。

于 2012-12-11T12:59:11.830 回答