几周前开始,编译一个项目(VB.NET,.NET 2.0,VS 2010)的时间与以前一样长。在任务管理器中,我注意到ResXtoResources.exe
有一段时间需要大量的CPU。我终于能够使用MSBuild的“诊断”输出设置获得一些数据,并将该输出与我在几个月前在分支中看到的结果进行比较。最引人注目的是最后一行,它们给出了时间安排。之前:GenerateResource/CoreResGen突然花费近30倍的时间
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
文件的新的空项目。
- 该问题在.NET 4.0中无法重现:编译完全相同的测试项目需要不到一秒的时间。
- 只要我还添加了原始项目中的一个表单,该问题就可以在.NET 2.0中重现;显然,它将不会正确地编译资源。
- 删除个人
.resx
文件将降低计时“按比例”;那就是:我不幸没有找到一个单独的文件是罪魁祸首。