AssemblyVersion对程序集间的引用很重要,此版本号一般不能随便改,也不要让其自动生成,解释:
类库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”或它的某一个依赖项。系统找不到指定的文件。
这个过程类似强命名,但又不是强命名,但dll间的引用就是使用这种方式来关联各DLL的。
但我们还是要实现版本功能,以便排错,这时我们可以使用[assembly: AssemblyFileVersion("1.0.5.0")],因为他只是个文件版本号,供人看的,类似备注一类的功能,不参与dll间的引用。或者保证每次这些版本间的引用都正确,但这个在开发阶段很难做到,可以在产品发布的时候去做,但柳永法(yongfa365)'Blog觉得如果不是要做成强命名DLL,没必要这么做。
引用本页地址:
http://www.yongfa365.com/item/DLL-Reference-By-AssemblyVersion.html