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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述