背景介绍

nuget是.net平台有效的包管理工具,相信每个C#开发者对它都不陌生。

本文我们来探究一下nuget对不再使用的dll文件的处理策略,分为如下2个场景:

  • 场景A:包A1.0原来包含Newtonsoft.Json.dll,后来更新到包A2.0时不再包含此dll。现在项目中升级包A到2.0,nuget会如何处理Newtonsoft.Json.dll文件?

  • 场景B:包A1.0和包B1.0都包含Newtonsoft.Json.dll,并在项目中同时安装了这2个包。现在卸载包B,nuget会如何处理Newtonsoft.Json.dll文件?

下面结合现有项目,验证上述场景看看:

场景A验证

说明:xxx.MQ就代表包A;xxx.MQ.2.0.36.6版本包含Newtonsoft.Json.dll,xxx.MQ.2.0.36.7版本不包含Newtonsoft.Json.dll;

执行nuget包升级操作后的变化对比如下:

根据上图验证效果,可以看到nuget从csproj文件中移除了Newtonsoft.Json.dll。这种情况其实是符合预期的,因为对dll文件确实是不再引用了。然而,如果考虑到其它包包含Newtonsoft.Json.dll时,nuget会怎么处理呢?看下图:

经过上图验证,可以看到nuget还是把Newtonsoft.Json.dll移除了。虽然它是通过xxx.3rd包安装引入的,那也不行。

场景B验证

说明:xxx.3rd就代表包A,xxx.MAC代表包B;

执行卸载包B操作后的效果如下:

可见卸载包B时,直接把Newtonsoft.Json.dll文件从csproj项目文件中移除,也是忽略了包A对Newtonsoft.Json.dll的依赖。

上述场景造成的直接影响就是:代码中依赖的Newtonsoft.Json的地方,nuget操作后编译不通过了。当然临时的解决办法可以reinstall所需的包,但你不觉得这样的操作不是那么优雅么?

总结

由上述探究可见,nuget包管理工具对dll文件的管理虽然提供了方便,但是在某些场景下还是会发生不符合预期的情况。如果恰好开发人员再排查不严格,那么甚至会造成dll版本错乱,进而引发更严重的问题。

我们回过头思考下以上问题的根源是什么?答案是最小单位的设计!这种模式下的nuget直接操作管理csproj中dll文件的具体路径。

如果我们把nuget包整体作为最小单位来维护管理呢?那么生成项目时,编译器就约定的路径下以nuget包为单位定位dll文件,由于避免了琐碎的dll文件路径管理,因此就压根不存在dll混乱的问题。

具体如何操作呢?请看微软推出的nuget升级版:PackageReference!

探究:nuget工具对不再使用的dll文件的处理策略的更多相关文章

  1. 如何使用ILAsm与ILDasm修改.Net exe(dll)文件

    一.背景 最近项目组新上项目,交付的时间比较急迫,原本好的分支管理习惯没有遵守好,于是出现下面状况: 多个小伙伴在不同的分支上开发. 原本QA环境也存在一个阻碍性的bug A 一位同事在QA环境发布了 ...

  2. Visual Studio 2017中使用正则修改部分内容 如何使用ILAsm与ILDasm修改.Net exe(dll)文件 C#学习-图解教程(1):格式化数字字符串 小程序开发之图片转Base64(C#、.Net) jquery遍历table为每一个单元格取值及赋值 。net加密解密相关方法 .net关于坐标之间一些简单操作

    Visual Studio 2017中使用正则修改部分内容   最近在项目中想实现一个小工具,需要根据类的属性<summary>的内容加上相应的[Description]特性,需要实现的效 ...

  3. 直接引用MrAdvice.dll文件不能实现AOP拦截,教你1分钟解决这个问题

    直接引用MrAdvice.dll文件不能实现AOP拦截,教你1分钟解决这个问题.近日工作中,要实现一个功能,那就是业务层方法里面实现自动缓存.编写业务的C#开发人员只关注如何将业务代码编写正确就可以了 ...

  4. dll文件32位64位检测工具以及Windows文件夹SysWow64的坑

    自从操作系统升级到64位以后,就要不断的需要面对32位.64位的问题.相信有很多人并不是很清楚32位程序与64位程序的区别,以及Program Files (x86),Program Files的区别 ...

  5. 几种工具反编译被编译好的DLL文件

    我们平时在工作中经常会遇到一些已经被编译后的DLL,而且更加麻烦是没有源代码可以进行修改,只能针对这个DLL的文件进行修改才能得到我们想要的结果:本文将通过一个实例来演示如果完成一个简单的修改;我们将 ...

  6. dll文件32位64位检测工具以及Windows文件夹SysWow64的坑(很详细,还有自动动手编程探测dll)

    阅读目录 dll文件不匹配导致数据库无法启动 究竟是System32还是SysWow64 区分dll文件32位64位的程序让我倍感迷惑 再次判断究竟是System32还是SysWow64——意想不到的 ...

  7. dll文件32位64位检测工具以及Windows文件夹SysWow64的坑【转发】

    原文地址:http://www.cnblogs.com/hbccdf/archive/2014/03/09/3590916.html 自从操作系统升级到64位以后,就要不断的需要面对32位.64位的问 ...

  8. iOS/macOS推荐个高效苹果开发工具, JSON 转模型代码工具,不再为复杂JSON数据写模型而烦恼,支持Swift/Objective-C,极速转换

    CCJSON 是一款运行在macOS上 JSON 转模型代码工具,不再为复杂JSON数据写模型而烦恼,可识别嵌套模型,字典/数组,支持Swift/Objective-C,操作方便,极速转换.下载 效果 ...

  9. C# .exe和.dll文件图标资源提取工具

    Windows 可执行文件(.exe)和动态库文件(.dll)图标资源提取工具 GitHub 功能 图标资源预览 图标资源导出(仅支持导出 PNG 格式) 代码 获取图标资源使用了 Win32 API ...

随机推荐

  1. React.Component 和 React.PureComponent 、React.memo 的区别

    一 结论 React.Component 是没有做任何渲染优化的,但凡调用this.setState 就会执行render的刷新操作. React.PureComponent 是继承自Componen ...

  2. drf Serializer使用

    drf序列化 在前后端不分离的项目中,可以使用Django自带的forms组件进行数据验证,也可以使用Django自带的序列化组件对模型表数据进行序列化. 那么在前后端分离的项目中,drf也提供了数据 ...

  3. ES6里class杂乱随笔

    这是一篇乱七八糟的随笔.class是ES6新增的特性,用于解决JavaScript没有类的困惑. --杂谈 ES5及之前,类都是用函数来替代,包括实例. 如: 1 function Person(na ...

  4. 变量分割技术、判别学习(discriminative learning method)

    基于模型的优化方法(model-based optimization method): 小波变换.卡尔曼滤波.中值滤波.均值滤波: 优点:对于处理不同的逆问题都非常灵活:缺点:为了更好的效果而采用各种 ...

  5. R语言学习-(金融数据获取和简单的分析)

    利用R语言中的quantmod包和fBasics对股票数据的获取和简要的分析, 通过获取的数据进行典型图像绘制,使用JB正态性检验来检验是否服从于正态分布. 前提概要:quantmod 包默认是访问 ...

  6. JavaScript核心 Dom Bom

    <div id="time">2020-9-27</div> <script> //文档页面从上往下加载,先有标签才能获取元素对象,script ...

  7. 调度《Taint(污点) 和 Toleration(容忍)》

    节点亲和性(详见这里),是 pod 的一种属性(偏好或硬性要求),它使 pod 被吸引到一类特定的节点.Taint 则相反,它使 节点 能够 排斥 一类特定的 pod. Taint 和 tolerat ...

  8. python数据类型互相转换

    类型转换 关注公众号"轻松学编程"了解更多. 主要针对几种存储工具:list.tuple.dict.set 特殊之处:dict是用来存储键值对的. 1.list 转换为set l1 ...

  9. Cocos Creator 源码解读:引擎启动与主循环

    前言 预备 不知道你有没有想过,假如把游戏世界比作一辆汽车,那么这辆"汽车"是如何启动,又是如何持续运转的呢? 如题,本文的内容主要为 Cocos Creator 引擎的启动流程和 ...

  10. 一年前,我来到国企搞IT

    ​ 2020.11.01日,这一天是我加盟xxx国企的一年整,这篇分享本来是要提前写的,不过由于前段时间确实繁忙,一直没有机会提笔.今天简单和大家分享下我在国企的一些工作内容,感悟等等,希望能给那些对 ...