我们正在使用TeamCity进行持续集成,我们的源代码控制是Git,我们有一个主要的存储库,其中包含多个.sln文件(大约10个)。
总而言之,此存储库包含 ~100 - 200个C#项目。
在推送到主存储库后,TeamCity会触发一个构建,该构建将编译存储库中的所有项目。
我希望能够告诉哪些项目实际上受到特定提交的影响,因此只将这些项目的输出发布为当前构建的工件。
为此,我设计了一个解决方案,将NDepend集成到我们的构建过程中,并在当前和最新构建输出之间生成差异报告。 已更改/添加的输出将作为构建输出发布。
我对NDepend的经验不多;从我所看到的,它所有的真正力量都来自于它的查询语言。
我想知道如何(如果可能的话)我可以实现以下目标:
这种情况可能吗?这有多容易/难?
答案 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