在构建期间使用NDepend生成差异报告

时间:2013-02-10 20:43:00

标签: c# .net build continuous-integration ndepend

我们正在使用TeamCity进行持续集成,我们的源代码控制是Git,我们有一个主要的存储库,其中包含多个.sln文件(大约10个)。

总而言之,此存储库包含 ~100 - 200个C#项目

在推送到主存储库后,TeamCity会触发一个构建,该构建将编译存储库中的所有项目

我希望能够告诉哪些项目实际上受到特定提交的影响,因此只将这些项目的输出发布为当前构建的工件。

为此,我设计了一个解决方案,将NDepend集成到我们的构建过程中,并在当前和最新构建输出之间生成差异报告。 已更改/添加的输出将作为构建输出发布。

我对NDepend的经验不多;从我所看到的,它所有的真正力量都来自于它的查询语言。

我想知道如何(如果可能的话)我可以实现以下目标:

  1. 包含先前构建的输出的文件夹与构建输出的当前文件夹之间的差异。
  2. 让NDepend以可使用的格式生成报告,以便我可以确定需要复制的文件。
  3. 这种情况可能吗?这有多容易/难?

1 个答案:

答案 0 :(得分:5)

因此,简单的答案是按照this documentation中的说明执行报告代码差异方式。这个基本答案的问题是,它预先假设两个NDepend项目总是引用两个相同的程序集集。


当然,程序集的数量和名称在您的上下文中有所不同,因此我们需要动态构建两个项目(旧/新)并通过NDepend.API进行分析。

这是NDepend.API的源代码。对于 It-Just-Works体验,在PowerTools源代码($NDependInstallDir$\NDepend.PowerTools.SourceCode\NDepend.PowerTools.sln)中,只需在FoldersDiff.Main();注册调用后调用AssemblyResolve方法,在{ {1}}。

Program.cs

以下是利用NDepend.API的源代码。

请注意,通过两个 ... AppDomain.CurrentDomain.AssemblyResolve += AssemblyResolverHelper.AssemblyResolveHandler; FoldersDiff.Main(); ... 对象和codeBase对象可以完成更多工作。您可以显示API断点更改,添加的新方法和类型,修改的类和方法,代码质量回归,而不是仅显示3个程序集列表(添加/删除/ codeWasChanges)...为此,请查看default code rules关于差异,基于相同的NDepend.CodeModel API

compareContext