柳永法的.net技术博客

向更高的人生目标奋斗
随笔 - 10, 文章 - 0, 评论 - 102, 阅读 - 35714
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

.net DLL之间是通过AssemblyVersion建立引用关系的

Posted on   yongfa365  阅读(661)  评论(0编辑  收藏  举报

  AssemblyVersion对程序集间的引用很重要,此版本号一般不要随便改,也不要让其自动生成,如果项目很多,类库间引用很多你这么做了的话,很可能把dll搞乱,解释:

  类库ClassA设置:[assembly: AssemblyVersion("1.0.0.*")]

  类库ClassB引用了ClassA

  如果对ClassB重新生成,则ClassB将关联ClassA(假设AssemblyVersion为1.0.0.1),将生成的两个dll文件都Copy到某一目录CommonDLL,然后在ConsoleC项目里引用CommonDLL\ClassB.dll后,生成时会自动引用CommonDLL\ClassA.dll到ConsoleC项目的bin目录下。

  而如果后来单独生成了ClassA.dll(假设AssemblyVersion为1.0.0.2),并替换CommonDLL下的这一个文件,此时生成ConsoleC项目时你会发现只有ClassB.dll而没有ClassA.dll,并且不会生成失败!但运行ConsoleC项目时会报错:
未能加载文件或程序集“ClassA, Version=1.0.0.1, Culture=neutral, PublicKeyToken=null”或它的某一个依赖项。系统找不到指定的文件。

(以上举例是单独生成ClassA.dll,实际中你可能是多个公共的项目又引用了公共的ClassA,而每个项目重新生成时都生成了不同AssemblyVersion的ClassA.dll,然后这些公共的DLL又都被同一个项目引用,最终导致ClassA.dll是哪个类生的,很就乱大了。)

这个过程类似强命名,但又不是强命名,但dll间的引用就是使用这种方式来关联各DLL的。


但我们还是要实现版本功能,以便排错,这时我们可以使用[assembly: AssemblyFileVersion("1.0.5.0")],因为他只是个文件版本号,供人看的,类似备注一类的功能,不参与dll间的引用或者保证每次这些版本间的引用都正确,但这个在开发阶段很难做到,可以在产品发布的时候去做,但柳永法(yongfa365)'Blog觉得如果不是要做成强命名DLL,没必要这么做。

 

首发地址:

.net DLL之间是通过AssemblyVersion建立引用关系

http://www.yongfa365.com/Item/DLL-Reference-By-AssemblyVersion.html

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示