.NET 程序集差异/比较工具 - 有什么可用? [关闭]

2024-05-21

我希望能够在两个程序集之间进行代码级差异; Reflector 的 Diff 插件是迄今为止我发现的最接近的东西,但是比较整个程序集是一个手动过程,需要我深入到每个命名空间/类/方法。

到目前为止,我发现的其他工具似乎仅限于 API 级别(命名空间、类、方法)差异,这无法满足我的需求。

有谁知道这样的工具吗?我的要求(从最高到最低)是:

  • 能够分析/反映code同一程序集的两个版本的内容并报告差异
  • 接受一个文件夹或一组程序集作为输入;快速比较它们(类似于 WinMerge 的文件夹差异)
  • 能够快速确定两个程序集在代码级别(不仅仅是 API 级别)是否等效
  • 允许轻松深入查看差异
  • 导出有关差异的报告

(我个人喜欢 WinMerge 进行文本差异,因此具有类似界面的应用程序会很棒)


工具NDepend http://www.NDepend.com提供许多功能来处理 .NET 代码差异。

面板按变更搜索专门用于浏览程序集代码差异:


提出了许多约束差异和演化的代码规则。它们可以成为您自己编写或根据您的需求进行调整的良好开端。例如看一下规则:

过去 100% 覆盖的类型,但现在不再 http://www.ndepend.com/DefaultRules/webframe.html?Q_Types_that_used_to_be_100__covered_but_not_anymore.html

// <Name>Types that used to be 100% covered but not anymore</Name>
warnif count > 0
from t in JustMyCode.Types where 
   t.IsPresentInBothBuilds() &&
   t.OlderVersion().PercentageCoverage == 100 &&
   t.PercentageCoverage < 100
let culpritMethods = t.Methods.Where(m => m.PercentageCoverage < 100)
select new {t, t.PercentageCoverage, culpritMethods }

or also:

  • API 重大变更:方法 http://www.ndepend.com/DefaultRules/webframe.html?Q_API_Breaking_Changes__Methods.html
  • 避免使复杂的方法变得更加复杂 http://www.ndepend.com/DefaultRules/webframe.html?Q_Avoid_making_complex_methods_even_more_complex_%28Source_CC%29.html
  • 避免通过类型测试降低代码覆盖率 http://www.ndepend.com/DefaultRules/webframe.html?Q_Avoid_decreasing_code_coverage_by_tests_of_types.html
  • 从现在开始,所有添加或重构的类型都应遵守基本质量原则 http://www.ndepend.com/DefaultRules/webframe.html?Q_From_now,_all_types_added_or_refactored_should_respect_basic_quality_principles.html
  • 避免将不可变类型转换为可变类型 http://www.ndepend.com/DefaultRules/webframe.html?Q_Avoid_transforming_an_immutable_type_into_a_mutable_one.html
  • 启发式查找从一个名称空间或程序集移动到另一个名称空间或程序集的类型 http://www.ndepend.com/DefaultRules/webframe.html?Q_Heuristic_to_find_types_moved_from_one_namespace_or_assembly_to_another.html

要开始使用 NDepend 比较功能,请查看文档:

  • 与 Visual Studio 内的高级代码差异 http://www.ndepend.com/Doc_VS_Diff.aspx:解释如何使用 NDepend 构建比较功能,在 Visual Studio 和 Visual NDepend 独立 UI 的上下文中.

  • 报告代码差异 http://www.ndepend.com/Doc_CI_Diff.aspx:解释如何使用 NDepend 构建比较功能,在报告的背景下.

免责声明:我为 NDepend 工作

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.NET 程序集差异/比较工具 - 有什么可用? [关闭] 的相关文章

  • 从 .NET 设置系统时区

    有没有人有一些代码可以从 NET 获取 TimeZoneInfo 字段并执行互操作代码以通过 SetTimeZoneInformation 设置系统时区 我意识到它基本上是将 TimeZoneInfo 成员映射到结构成员 但对我来说 这些字
  • 泛型和系统集合

    迁移到 NET 2 0 后 是否还有理由继续使用 systems Collections 命名空间 除了维护遗留代码之外 是否应该始终使用泛型命名空间 在大多数情况下 泛型集合的执行速度比非泛型集合更快 并且为您带来强类型集合的好处 比较
  • XNA 窗口调整大小调用 LoadContent

    每当我将 XNA 窗口大小调整到尽可能小的分辨率 0 像素高 时 程序都会再次开始调用 LoadContent 这会导致我的应用程序崩溃 因为我只希望它加载内容一次 我能做什么 有没有办法阻止用户过度调整窗口大小 例如 Java 中的 se
  • NUnit 测试项目的 log4net 配置部分

    我正在使用名为 AssemblyTest nunit 的项目运行 NUnit 该测试调用另一个使用 log4net 程序集的程序集 这是使用 nunit 版本 2 4 3 和 net 2 0 框架 在 TestFixtureSetup 中
  • C# 可空相等运算,为什么 null <= null 解析为 false? [复制]

    这个问题在这里已经有答案了 为什么在 NET中会这样 null gt null 解析为 false 但是 null null 解析为真 换句话说 为什么不null gt null相当于null gt null null null 有谁有官方
  • 如何在 C# 中将字符串的内容复制到剪贴板? [复制]

    这个问题在这里已经有答案了 如果字符串中有一些文本 如何将其复制到剪贴板 以便用户可以将其粘贴到另一个窗口 例如 从我的应用程序粘贴到记事本 您可以使用System Windows Forms Clipboard SetText
  • 颜色变换器功能上的堆栈溢出错误

    我有两种颜色 红色 和 鲑鱼色 我需要动态创建面板以及面板背景颜色 这些颜色必须介于两种颜色之间 红色 public Color x y protected void Page Load object sender EventArgs e
  • .NET - MVC 应用程序外部的 Razor - 删除 @inherits 和提供 @model 时出现问题

    抱歉问了这么长的问题 我把它分成了三个问题 可以分别阅读 如果你能帮我解决一个问题 请帮我 我有一个 Razor 引擎的自定义实现 所有作品和模板均已编译并可以使用 手头有一些实现涉及具有通用的基类Model允许强类型视图 模板 的属性 此
  • 如何使用c#/VB.NET在word中插入书签

    我正在尝试使用 C 在 Word 文档中添加书签 但它不起作用 而且我在 msdn 文档和互联网上都找不到任何帮助 这就是我正在尝试做的事情 我正在阅读 Word 文档 然后在该文档中搜索关键字 然后将该文本转换为超链接 效果很好 现在 我
  • 为什么在此单元测试中,BackgroundWorker 没有在正确的线程上调用 RunWorkerCompleted?

    backgroundWorker 的全部目的是在执行耗时的任务后更新 UI 组件正如广告所宣传的那样在我的 WPF 应用程序中 但是在我的测试中 回调不会在调用线程上调用 Test public void TestCallbackIsInv
  • 找不到 OAuth2 参数

    我正在尝试使用 OAuth 2 0 来授权 google docs API 根据谷歌给出的例子https developers google com google apps documents list authorizing reques
  • “指定的登录会话不存在。它可能已被终止。”尝试使用 WindowsIdentity.Impersonate 复制文件时

    我正在尝试将文件从共享点复制到 unc 路径 我正在使用以下代码 var id new WindowsIdentity email protected cdn cgi l email protection var p new Windows
  • 为什么 ᏌᏊ ᎢᏳᎾᎵᏍᏔᏅ ᏍᎦᏚᎩ 是美国的本土名称?

    当我使用这段代码时 var ri new RegionInfo us var nativeName ri NativeName why is nativeName然后是字符串 in Cherokee https en wikipedia o
  • 基于 Web.Config 使用的 GAC 程序集版本

    Good Day 我有一个在 GAC 中使用自定义程序集的项目 为了能够使用它 我在中添加了对我的项目的引用 C WINDOWS Microsoft NET assembly GAC MSIL JOHN CommonLib v4 0 1 0
  • 下载 .NET 3.5 的实体框架

    哪个版本的实体框架 EF 我可以用在 NET 3 5我可以在哪里下载这个旧版本 对于 Net 3 5 您可以使用 EF v1 您是否尝试从以下位置下载 Microsoft NET Framework 3 5 Service Pack 1 h
  • 在 Javascript 中本地化字符串

    我目前正在使用 resx文件来管理我的 NET 服务器端资源 我正在处理的应用程序还允许开发人员将 JavaScript 插入各种事件处理程序中以进行客户端验证等 对我来说本地化 JavaScript 消息和字符串的最佳方法是什么 理想情况
  • C# 枚举 - 根据掩码检查标志

    我有以下枚举标志 Flags private enum MemoryProtection uint None 0x000 NoAccess 0x001 ReadOnly 0x002 ReadWrite 0x004 WriteCopy 0x0
  • 如果浏览器在 asp .net 中关闭,请从浏览器中注销?

    我的要求有点复杂 用户正在使用 Web 浏览器访问数据库 而在访问数据库时 如果用户关闭活动页面而不是注销会话 该会话需要自动注销 有人可以指导我如何做这个吗 我在母版页中使用了jquery onbeforeunload 我收到消息离开页面
  • 检查列表是否包含另一个列表。 C#

    编辑 只是说 ContainsAllItem 中的注释解释得最好 很抱歉问这个问题 我知道以前有人问过这个问题 但我只是不明白 好的 所以我想检查一个列表是否包含另一个列表中的所有项目WITHOUT重叠 以及根据类字符串 名称变量 称为项目
  • 为什么WCF中不允许方法重载?

    假设这是一个ServiceContract ServiceContract public interface MyService OperationContract int Sum int x int y OperationContract

随机推荐

  • Spring boot + Spring Data JPA + Atomikos + 多数据库配置

    使用此配置 MainConfig java import javax transaction TransactionManager import javax transaction UserTransaction import org sp
  • Django send_mail SMTPSenderRefused 530 与 gmail

    一段时间以来 我一直在尝试使用 Django 从我正在开发的网站接收电子邮件 现在 我还没有部署它 并且我正在使用Django开发服务器 我不知道这是否会影响它 这是我的 settings py 配置 EMAIL BACKEND djang
  • 按值和键对哈希进行排序(按顺序)

    我正在寻找一种很好的方法来在 Perl 中先按值排序 然后再按键排序 Example my userids williams gt Marketing smith gt Research johnson gt Research jones
  • ggplot geom_bar - 条形太宽

    对于这个非信息性的标题 我感到很抱歉 gt y read csv textConnection scan sep n what raw org art type length 191 gk Finish short 4 147 ik Att
  • Django 的 request.FILES 出现 UnicodeDecodeError

    我在视图调用中有以下代码 def view request body u for filename f in request FILES items body body Filename filename n f read n 在某些情况下
  • 使react-leaflet能够离线使用

    我一直在使用反应传单 https github com PaulLeCam react leaflet图书馆 到目前为止运作良好 现在我希望网站预加载尽可能多的图块 以便网络应用程序 也是 PWA 可以在没有互联网的情况下使用 我找到了一些
  • 截图显示黑色

    我正在拍摄快照并创建缩略图 然后共享此图像 但缩略图显示全黑 我使用了以下代码 Bitmap bitmap View v1 v getRootView v1 setDrawingCacheEnabled true bitmap Bitmap
  • 全局使用和 .NET Standard 2.0

    我最近意识到我可以使用 C 10 功能文件范围的命名空间在 NET Standard 2 0 项目中也可以通过设置
  • SQL。 SP 或函数应计算周五的下一个日期

    我需要编写一个存储过程来返回给定日期的下周五日期 例如 如果日期是 05 12 2011 那么它应该返回下周五日期 05 13 2011 如果您通过 05 16 2011 那么它应该返回日期是 5 20 2011 星期五 如果您将星期五作为
  • iframe 重新加载按钮

    我浏览了很多网站 但似乎没有一个能正常工作 或者我不明白它们 我想要一个刷新某个 iframe 的简单按钮 该按钮将位于父页面上 并且 iframe 名称为 Right 有很多方法可以做到这一点 假设这个iframe markup 我们可以
  • 如何创建名称中带有正斜杠的标签

    当我已经有了类似的标签时 有什么方法可以创建名称中带有正斜杠的 git 标签吗 假设我有 1 16 0 标签 并且我想创建 1 16 0 1 0 0 标签 git tag 1 16 0 1 0 0 error refs tags 1 16
  • 当视口设置为 user-scalable=no 时,iOS/移动 Safari 仍然会缩放?检查辅助功能设置!

    这个特定的 Mobile Safari 看似不可能且未记录 问题让我今天坚持了很长一段时间 当我弄清楚它时 我正要在这里发布一个有关它的问题 问题 虽然我设置了我的 iPad 网络应用程序仍然允许手动缩放 在浏览器中捏合 但只能在我的 iP
  • C++ 将联合强制转换为其成员类型之一

    以下对我来说似乎完全符合逻辑 但不是有效的 C 联合不能隐式转换为其成员类型之一 有人知道为什么不这样做的充分理由吗 union u int i char c function f int i int main u v v i 6 f v
  • HTML colorpicker 发生变化时如何获取新值?

    我正在开发一个需要更改 HTML 颜色的网络应用程序canvas基于的价值观colorpicker 我有一个colorpicker在我需要获取的 HTML 中value从每次更新开始
  • Composer [UnexpectedValueException] 尝试使用 Composer 安装 github 项目时会出现错误

    我尝试使用 Composer 安装 Github 项目并收到以下错误 作曲家 UnexpectedValueException 您的 github com 的 Github oauth 令牌包含无效字符 谁能解释我需要做什么来纠正这个错误
  • 使用 UPI url 调用 PSP 应用程序

    我正在尝试创建一个商家应用程序 它将根据 NPCI 的指南生成一个 url 此 url 将作为意图共享 并且 PSP 应用程序 任何注册的银行应用程序 应该能够侦听该 url 并被调用 我已经形成了这样的网址 upi pay pa icic
  • 如何在 Perl 中获取本周的日期?

    我有以下循环来计算本周的日期并将其打印出来 它有效 但我正在考虑 Perl 中日期 时间可能性的数量 并且想听听您对是否有更好的方法的意见 这是我写的代码 usr bin env perl use warnings use strict u
  • java数学中的组合“N选择R”?

    java库中是否有内置方法可以为任何N R计算 N选择R 公式 实际上很容易计算N choose K甚至不需要计算阶乘 我们知道 公式为 N choose K is N N K K 因此 公式为 N choose K 1 is N N N
  • 在 iPhone 中保存会话数据

    我想将数据存储在应用程序中的不同点 以便应用程序中的对象可以访问这些数据 类似于 php 中的 session 或全局变量 我知道我可以使用 NSUserDefaults 但我不确定如何继续向它添加值然后访问它 例如 首先我想存储登录期间使
  • .NET 程序集差异/比较工具 - 有什么可用? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我希望能够在两个程序集之间进行代码级差异 Reflector 的 Diff 插件是迄今为止我发现的最接