当前位置: 首页 > news >正文

.NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化

最近我大幅度重构了我一个库的项目结构,使之使用最新的项目文件格式(基于 Microsoft.NET.Sdk)并使用 SourceYard 源码包来打包其中的一些公共代码。不过,最终生成了一个新的 dll 之后却心有余悸,不知道我是否删除或者修改了某些 API,是否可能导致我原有库的使用者出现意料之外的兼容性问题。

另外,准备为一个产品级项目更新某个依赖库,但不知道更新此库对我们的影响有多大,希望知道目前版本和希望更新的版本之间的 API 差异。

索性发现了 JustAssembly 可以帮助我们分析程序集 API 的变化。本文将介绍如何使用 JustAssembly 来分析不同版本程序集 API 的变化。


本文内容

    • 下载和安装 JustAssembly
    • 开始比较
    • 关于比较结果的说明

下载和安装 JustAssembly

JustAssembly 是 Telerik 开源的一款程序集分析工具。

你可以去它的官网下载并安装:Assembly Diff Tool for .NET - JustAssembly。

开始比较

启动 JustAssembly,在一开始丑陋(逃)的界面中选择旧的和新的 dll 文件,然后点击 Load

选择旧的和新的 dll 文件

然后,你就能看到新版本的 API 相比于旧版本的差异了。

新版本的 API 相比于旧版本的差异

关于比较结果的说明

在差异界面中,差异有以下几种显示:

  1. 没有差异
    • 以白色底显示
  2. 新增
    • 以绿色底辅以 + 符号显示
  3. 删除
    • 以醒目的红色底辅以 - 符号显示
  4. 有部分差异
    • 以蓝紫色底辅以 ~ 符号显示

这里可能需要说明一下“部分差异”:由于差异是以树状结构显示的,所以如果子节点有新增,那么父节点因为既有新增又存在未修改的节点,所以会以“有部分差异”的方式显示。

对于每一个差异,双击可以去看差异的代码详情。

上图我的 SourceFusion 项目在版本更新的时候只有新增的 API,没有修改和删除的 API,所以还是一个比较健康的 API 更新。


参考资料

  • telerik/JustAssembly: Assembly Diff and Analysis Tool
  • Assembly Diff Tool for .NET - JustAssembly

我的博客会首发于 https://blog.walterlv.com/,而 CSDN 会从其中精选发布,但是一旦发布了就很少更新。

如果在博客看到有任何不懂的内容,欢迎交流。我搭建了 dotnet 职业技术学院 欢迎大家加入。

知识共享许可协议

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:https://walterlv.blog.csdn.net/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。

相关文章:

  • Windows 上的应用程序在运行期间可以给自己改名(可以做 OTA 自我更新)
  • 为 WPF 程序添加 Windows 跳转列表的支持
  • 在 Windows 系统上降低 UAC 权限运行程序(从管理员权限降权到普通用户权限)
  • 专栏素材
  • Visual Studio 如何能够不进行编译就调试 .NET/C# 项目(用于解决大项目编译缓慢的问题)
  • 仅反射加载(ReflectionOnlyLoadFrom)的 .NET 程序集,如何反射获取它的 Attribute 元数据呢?
  • 全局或为单独的项目添加自定义的 NuGet 源
  • 电脑总是意外从睡眠状态唤醒,可以找出原因然后解决
  • 我收集的各种公有 NuGet 源
  • 制作一个极简的 .NET 客户端应用自安装或自更新程序
  • 在 MSBuild 编译项目时阻止输出所有的警告信息
  • 编写 MSBuild 内联编译任务(Task)用于获取当前编译环境下的所有编译目标(Target)
  • 如何在 csproj 中用 C# 代码写一个内联的编译任务 Task
  • 安装和运行 .NET Core 版本的 PowerShell
  • 让你的 Windows 应用程序在任意路径也能够直接通过文件名执行
  • CentOS6 编译安装 redis-3.2.3
  • Invalidate和postInvalidate的区别
  • nodejs:开发并发布一个nodejs包
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • PHP 小技巧
  • Redis 中的布隆过滤器
  • RxJS: 简单入门
  • socket.io+express实现聊天室的思考(三)
  • SSH 免密登录
  • 从零搭建Koa2 Server
  • 关于for循环的简单归纳
  • 后端_ThinkPHP5
  • 实战|智能家居行业移动应用性能分析
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 微信支付JSAPI,实测!终极方案
  • 栈实现走出迷宫(C++)
  • 白色的风信子
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • ​ArcGIS Pro 如何批量删除字段
  • ​VRRP 虚拟路由冗余协议(华为)
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #控制台大学课堂点名问题_课堂随机点名
  • #数学建模# 线性规划问题的Matlab求解
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (全注解开发)学习Spring-MVC的第三天
  • (四)Linux Shell编程——输入输出重定向
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • .net core Swagger 过滤部分Api
  • .NET 命令行参数包含应用程序路径吗?
  • .net 怎么循环得到数组里的值_关于js数组
  • .Net下的签名与混淆
  • :=
  • [ C++ ] STL_stack(栈)queue(队列)使用及其重要接口模拟实现
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(白虎组)
  • [ACL2022] Text Smoothing: 一种在文本分类任务上的数据增强方法
  • [Android Pro] listView和GridView的item设置的高度和宽度不起作用