使用TFS检测.NET代码中的破坏性更改?
每当TFS构建解决方案时,我想检测.NET代码(特别是C#)中的破坏性更改。如果签入的代码与最近成功构建的版本之间存在任何中断性更改(如“”中所述),我想了解一下。突破性的更改不一定会导致构建失败。除了编写一个使用反射来比较同一程序集的两个版本的应用程序外,如何才能做到这一点?单元测试。它们提供了一种断言“这是客户端代码所期望的”的方法。你可以在建造的时候就开始建造。独立学院的帕特里克·斯马奇亚(Patrick Smacchia)在大约3.5年前发布了这篇文章 他提到了LibCheck和(显然)NDepend,一条评论又提到了一个 因为已经3.5年多了,现在可能有更好的选择(LibCheck已经超过6年了),但这应该是一个开始。是的,我会(并且确实)使用NDepend。 我正在开发一个为开发人员提供可扩展API的产品。因此,我们需要确保在不同版本之间,我们不会删除那些开发人员可能依赖的功能。 另一方面,我们需要灵活性来扩展产品,而无需对反向进行大量限制 <>你想考虑的一些事情。使用TFS检测.NET代码中的破坏性更改?,.net,tfs,versioning,.net,Tfs,Versioning,每当TFS构建解决方案时,我想检测.NET代码(特别是C#)中的破坏性更改。如果签入的代码与最近成功构建的版本之间存在任何中断性更改(如“”中所述),我想了解一下。突破性的更改不一定会导致构建失败。除了编写一个使用反射来比较同一程序集的两个版本的应用程序外,如何才能做到这一点?单元测试。它们提供了一种断言“这是客户端代码所期望的”的方法。你可以在建造的时候就开始建造。独立学院的帕特里克·斯马奇亚(Patrick Smacchia)在大约3.5年前发布了这篇文章 他提到了LibCheck和(显然
这里有两个问题(我是单元测试的坚定支持者!)第一个是你必须有100%的覆盖率,按照惯例执行。第二个是,除非测试在解决方案之外进行维护,否则任何破坏性重构也会改变单元测试,从而忽略问题。不幸的是,单元测试只发现破坏源代码的更改,而不是破坏二进制代码的更改(例如向方法签名添加可选参数).链接问题:详细说明#1?如果我的Apple.dll依赖于Bear.dll的v1,我升级到Bear.dll的v1.2,并验证Bear.dll没有按照其他#2-6暴露任何破坏性的更改,那么Apple.dll的用户不应该因此而经历任何破坏?只要我确保所有引用的dll也满足相同的标准aI’在链的上游,每当我更新引用的DLL时,不应该有问题,对吗?嗨,AaronLS。这是一个好问题,我本来应该详细说明#1。如果Apple.DLL的公共功能
返回在Bear.DLL中声明的类型,则会产生风险。如果这些程序集是强类型的,则产品部门以Apple结尾的函数调用将返回(完全限定的类型名)“type,Bear,v1.1”。如果您已“热修复”(已更改但未反转)您的Apple.dll,它现在将返回“type,Bear,v1.2”运行时将抛出类强制转换异常,因为强名称类型由所有名称组件限定,包括版本。