离职后来到现在这家公司,在这几天接到一个项目要求是要通过淘宝聚石塔API来抓取公司的订单流水。按理说这项任务不算很难,但是,你也知道,壮士出征往往死在离出发地不远的地方。现在我们来研究一下为什么会导致这种原因,以及我们该如何去解决掉这个问题。

 一:DLL冲突的特殊性

  本次遇到的问题很是棘手,因为在老项目中已经存在阿里巴巴速卖通的API—TopSdk,然后现在要去完成另外一块的内容,也就是说需要我去下载淘宝聚石塔的sdk,悲剧的是,下载下来的sdk还是叫做TopSdk,不仅如此,这两个sdk虽然同名,但是他们的版本号命名空间,名称都是一模一样的,最要命的是,他们并没有用于区别DLL的publicKeyToken都是空的!!!我在想,阿里巴巴写的DLL肯定是很严谨的啊,但是偏偏就是被我遇上了这种不向后兼容的特殊情况,简直是欲哭无泪,后来询问了老员工,他们也表示未曾见过这样的特殊情况。于是,我就硬着头皮开启了我的探索之路,也希望可以帮助那些遇到同样问题的人。

  问题总结:一旦在项目中使用两个同名同版本号同命名空间的DLL的时候,有一个DLL无法添加,即使改名称能够添加了,本质上文件名还还一样,都是TopSdk。而且,如果不修改名字会直接覆盖原先的项目,这样会导致项目出现更多的Bug。

二:如何解决这样的冲突问题

  在知道了问题的产生后,我们又必须使用这两个DLL,那么我们就可以通过vs这款强大的IDE里面自带的插件,来进行强命名。强命名就是为了生成一个用来防止冲突的 publicKeyToken。接下来我们来看看具体的操作。

1:首先在电脑(本人使用的是win10系统)打开vs2015文件夹,可以看到红线框内的开发者命令提示,右键选择以管理员的方式打开。

          

2:打开页面后,先生成一个KeyFile 。命令是:

sn -k keyPair.snk

3:在生成一个keyFile之后,就要去解析得到DLL文件的中间语言文件(MSIL)

ildasm C:\Users\nsysdf\Desktop\twoDll\JushitaTopSdk.dll /out:C:\Users\nsysdf\Desktop\twoDll\JushitaTopSdk.il

其中,C:\Users\nsysdf\Desktop\twoDll\JushitaTopSdk.dll 是你想要强命名的DLL文件所在地址。最后得到的JushitaTopSdk.il就是中间语言文件

4:这一步是最关键的一步:使用导出的MSIL(JushitaTopSdk.il) 和刚创建的KeyFile 生成一个新的的DLL 文件。

指令如下:

ilasm C:\Users\nsysdf\Desktop\twoDll\JushitaTopSdk.il /dll /key:keyPair.snk

然后系统就会开始生成

注意:如果不是用管理员的方式打开,到这步就可能导致合成失败

 最后,我们得到了一个带有签名的DLL了,把它引入项目后,与同名的DLL已经完美兼容了。

以上就是今天分享的全部内容,希望可以帮助到同样踩坑的小伙伴们。

  

C# 如何解决 引用的两个同名同版本的DLL冲突的更多相关文章

  1. 解决一个项目里面加载两个同名不同版本的DLL的问题

    在config里面这样配置,可以加载不同版本的dll <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com ...

  2. 同一个解决方案或有依赖关系的两个项目引用同名但不同版本的DLL

    问题描述 我们最近在使用Redis作Session的集中化,中间碰到了一个如下问题:我们有一些项目比较老,引用了NewtonJson的4.0.3.0版本的DLL,但是Redis提供的C#集成DLL引用 ...

  3. 完美解决IE8有两个进程的问题

    完美解决IE8有两个进程的问题,照以下方法设置后就只有一个进程了,没有什么负影响哦! 方法: 1.win+R,在运行框里输入:gpedit.msc,回车进入组策略设置. 2.依次展开:计算机配置——管 ...

  4. POJ2676,HDU4069解决数独的两种实现:DFS、DLX

    搜索实现:解决数独有两种思考策略,一种是枚举当前格能填的数字的种数,这里有一优化策略就是先搜索能填入种数小的格子:另一种是考虑处理某一行(列.宫)时,对于某一个没用过的数字,若该行(列.宫)只有一个可 ...

  5. 分布式理论基础(一)一致性及解决一致性的两种方式:2PC和3PC (转载 不错)

    分布式理论基础(一)一致性及解决一致性的两种方式:2PC和3PC 1 一致性 1.1 简述 一致性,是指对每个节点一个数据的更新,整个集群都知道更新,并且是一致的 假设一个具有N个节点的分布式系统,当 ...

  6. 解决引用 System.Windows.Interactivity程序集生成多国语言文件夹fr、es、ja等问题

    原文:解决引用 System.Windows.Interactivity程序集生成多国语言文件夹fr.es.ja等问题 通过以下方式对 System.Windows.Interactivity程序集添 ...

  7. .Net中DLL冲突解决(真假美猴王)

    <西游记>中真假美猴王让人着实难以区分,但是我们熟知了其中的细节也不难把他们剥去表象分别出来.对问题不太关心的可以直接调到文中关于.Net文件版本的介绍 问题 最近在编译AKKA.net ...

  8. Maven排除项目中同名不同版本的jar

    今天突然发现web项目打包后的exe居然有200M+了,心想不应该有这么大的啊,于是检查了一番发现引用的jar有130+个,仔细一瞅发现好多同名的但是不同版本的jar,比如说有commons-http ...

  9. 【重构】C# VS 配置引用程序集的路径(分离exe和dll从指定路径调用)

    原文:[重构]C# VS 配置引用程序集的路径(分离exe和dll从指定路径调用) 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/CocoWu892 ...

随机推荐

  1. Android进阶推荐书籍

    中级进阶推荐看一下以下这几本书 1.<Android从入门到精通(附光盘)> 明日科技 编 2.<第一行代码2 Android(第二版)> 郭霖 著 3.<Android ...

  2. js根据顺序加载,有依赖关系

    function loadScript(url, callback) { var script = document.createElement("script"); script ...

  3. C语言复习1_变量与数据类型

    变量命名规则: 1.变量名的首字母或下划线(不能是其他特殊符号) 2.变量名的其他字母包含下划线.数字 和字母 3.不能使用关键字 基本数据类型 分为数值型和非数值型,其中数值型分为整型和非整型 整型 ...

  4. 查询结果集转换成HTML存储过程

    工作中经常需要用SQLServer发送报警或者业务报表邮件,每次现拼串也不是办法,故写了一个TableResult to HTML的存储过程 USE master; GO -- Description ...

  5. 【二代示波器教程】第15章 FreeRTOS操作系统版本二代示波器实现

    第15章     FreeRTOS操作系统版本二代示波器实现 本章教程为大家讲解FreeRTOS操作系统版本的二代示波器实现.主要讲解RTOS设计框架,即各个任务实现的功能,任务间的通信方案选择,任务 ...

  6. HTTP协议概念与特点,HTTP的状态码,HTTPS是什么?

    很多人在打开网页的时候,在浏览器地址栏里都会看到http  ,在Java WEB里,HTTP也是个重点内容,今天我们就来详细了解和学习HTTP . HTTP是Hyper Text Transfer P ...

  7. Android OpenSL ES 开发:使用 OpenSL 播放 PCM 数据

    OpenSL ES 是基于NDK也就是c语言的底层开发音频的公开API,通过使用它能够做到标准化, 高性能,低响应时间的音频功能实现方法. 这次是使用OpenSL ES来做一个音乐播放器,它能够播放m ...

  8. [Swift]LeetCode82. 删除排序链表中的重复元素 II | Remove Duplicates from Sorted List II

    Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numb ...

  9. MySql和Oracle数据库区别

    Oracle与mysql区别: 1.Oracle有表空间,mysql没有表空间. 2.mysql的char类型取值范围0-255字节,varchar为0-65535字节 3.oracle的char类型 ...

  10. Django+Bootstrap+Mysql 搭建个人博客(二)

    2.1.博客首页设计 (1)settings.py MEDIA_ROOT = os.path.join(BASE_DIR,'media').replace("//","/ ...