几个星期前开始,编译项目(VB.NET,.NET 2.0,VS 2010)已经花了好几倍的时间。在任务管理器中,我注意到ResXtoResources.exe
占用了大量CPU。我终于能够使用MSBuild的'Diagnostic'输出设置获得一些数据,并将该输出与几个月前我在分支中看到的输出进行比较。最引人注目的是最后的线条,它们给出了时间。之前:
Target Performance Summary:
[..]
1395 ms CoreResGen 1 calls
1930 ms CompileLicxFiles 1 calls
2135 ms GenerateApplicationManifest 1 calls
2844 ms CoreCompile 1 calls
Task Performance Summary:
[..]
1391 ms GenerateResource 1 calls
1929 ms LC 1 calls
2134 ms GenerateApplicationManifest 1 calls
2843 ms Vbc 1 calls
Build succeeded.
Time Elapsed 00:00:09.50
========== Rebuild All: 5 succeeded, 0 failed, 0 skipped ==========
后:
Target Performance Summary:
1348 ms CompileLicxFiles 1 calls
1747 ms GenerateApplicationManifest 1 calls
2595 ms CoreCompile 1 calls
39575 ms CoreResGen 1 calls
Task Performance Summary:
1347 ms LC 1 calls
1745 ms GenerateApplicationManifest 1 calls
2593 ms Vbc 1 calls
39570 ms GenerateResource 1 calls
Build succeeded.
Time Elapsed 00:00:47.34
========== Rebuild All: 5 succeeded, 0 failed, 0 skipped ==========
两个项目都在同一系统上使用相同的设置进行编译。我们已经做了很多改变,但是没有任何规模可以证明这种时间变化是合理的(并且只适用于这一项任务!)。我认为资源生成正在陷入某些问题 - 循环引用,缺失引用等等。但是,我无法找到有关如何将这样的问题追溯到我认为只是单个资源文件的任何有用的东西。
如果没有查看数以千计的签到或暂时从项目中删除某些表单(以及它们的资源文件),我还能做些什么来找出问题吗?我似乎无法找到单个资源文件的时间。
到目前为止的结果:
我创建了一个新的空项目,其中包含所有相同的.resx
个文件。
.resx
文件会“按比例”减少时间;那就是:遗憾的是我找不到一个单一的文件是罪魁祸首。答案 0 :(得分:1)
看起来this blog entry给出了答案。
在一个坚果中,搜索.resx
文件中的实际不存在的程序集引用(例如System.Windows.Forms, Version 4.0.0.0
),并将其替换为(Version 2.0.0.0
)。我使用grepWin来完成此任务。
我的CoreResGen
/ GenerateResource
时间现在大致与以往相同。 CruiseControl.NET表示构建时间从92秒减少到40秒。:))
答案 1 :(得分:0)
我在这里找到了原因......资源包含一个以特殊Adobe Fireworks格式(PNG)保存的png文件。我将文件导出到png(没有图层信息),现在编译需要6秒。