我有一个大型WPF MEF PRISM解决方案(100多个项目),我们的构建时间在四核8 GB机器上大约2分钟。
我将所有二进制文件输出到相同的输出路径“.. \ Bin”,以便我们的MEF引导程序可以扫描并查找所有程序集。
在对构建时间进行故障排除时,我注意到每个引用核心Infastructure库的项目都会将此二进制文件复制到输出目录,从而为完全相同的文件生成多个副本。我觉得实际的编译很快,但重复复制的数量正在削弱我的构建时间。
如果输出目录中已经存在相同版本的文件,有没有办法告诉项目不要复制引用?我已经有了一个较小的项目集合的辅助SLN文件,这有助于大多数人减少构建时间。
答案 0 :(得分:3)
在Windows中复制文件非常快速,由于文件系统缓存,内存到内存的复制。特别是在构建中,因为文件是新创建的,因此它们的数据始终存在于缓存中。直到稍后,当缓存管理器懒惰地将文件数据写入磁盘时,才会发生对磁盘的实际写入。它在后台运行,不能减慢构建速度。文件复制速度很慢的唯一情况是文件系统缓存填满容量并且必须等待慢速磁盘写入以腾出更多空间。
多次复制同一个文件,即使它没有由构建创建,也同样快。您只需支付第一次阅读文件的费用。之后,任何后续副本始终使用缓存的文件数据。
没有合理的方案,.NET解决方案可以在具有8 GB RAM的计算机上填充缓存容量,并使其变慢。缓存应至少为2千兆字节。编写一个生成2千兆字节代码和资源的.NET解决方案是不可能的。
你正试图解决错误的问题。
答案 1 :(得分:1)
我认为这不是一个很好的解决方案,但您可以让您的基础架构复制到输出目录,并且在引用的任何地方都可以将CopyLocal
属性设置为特别引用False。我不是说它是唯一的选择,但它可以做你想要的。我只是想帮忙。
编辑:
我不知道你是否这样做,但如果不这样做,你可以在xcopy
中post-build
将MEF所需的那些dll复制到该输出目录。在这种情况下,你可以避免这些困难。