静态 CA 使解决方案构建速度变慢。在我的情况下,比没有 CA 慢 2 倍。我们可以禁用它,但失去它的权力是一个糟糕的决定。所以,我们能做些什么?
首先让我们看看 CA 是如何工作的。
您构建解决方案。在 msbuild 编译目标后的每个项目构建中,调用 fxcopcmd.exe 并使用应分析的程序集的路径。fxcopcmd。生成 VS 使用的 CA xml 日志(或者可能是输出流)。fxcopcmd.exe 加载程序集(快速)并同步分析它,因此只加载了一个 CPU,而 3 个(在我的情况下)什么也不做。只有在 CA 完成后,才能构建项目依赖链中的下一个项目。
所以 CA 的弱点是我们可以改进它——强制它并行工作以使用所有 CPU。
我看到这样的解决方案
要制作将从 MSBUILD 获取参数的假 fxcopcmd.exe,请记住它并立即向 msbuild 报告一切正常并且没有错误(通过 CA xml.log,或成功的文件,或者可能是流..)。因此,MSBUILD 将构建下一个项目,届时我们将使用保存的参数调用真正的 fxcopcmd.exe……如果 MSBUILD 将在下一个项目中调用 fxcopcmd.exe - 我们将再调用一次 fxcopcmd.exe……所以会有将加载所有 CPU 的少数进程。真正的 fxcopcmd.exe 完成后,我们可以调用我们的 MSBUILD 目标,它只会从 microsoft.common.targtets 调用 CA 目标,而无需编译,我们的假 fxcopcmd.exe 将立即报告结果(当时 CA 已完成,我们有日志)到 MSBUILD-VS。
你怎么看?这会加速 CA 吗?为什么微软不做这样的人员,只在 CA 中使用一个 CPU?