我们在开发应用程序时,一般会引入一些第三方库,通常情况下,我们是把这些第三方依赖文件放到应用程序所处目录,这样应用程序启动时就能正确找到相关依赖文件。但当依赖文件比较多,我们希望对依赖的文件进行归类,放置到不同的目录下以便管理,这个时候应用程序的manifest就派上用场了。
并行程序集
在介绍应用程序的manifest之前,需要了解一下并行程序集(Side-by-Side Assembly)。什么是并行程序集呢? 并行程序集是微软为了解决DLL Hell问题而提出的一种解决方案,它采用manifest文件扫描组件之间的依赖关系。其工作原理如下图所求:
简单说明一下,微软在未提出Side-by-Side Assembly之前,应用程序启动时按照一定的规则加载DLL。通常情况下,应用程序会采用动态链接方式共享一些操作系统提供的基础库文件,当Windows更新共享库且共享库不能向后兼容时(DLL自身并不能向后兼容,这种情况通常发生在DLL的内存布局发生了改变),那些依赖于老版本共享库的应用程序就不能正常工作了。为了解决这个问题,微软重写了DLL动态加载子系统,提出了并行程序集的解决方案,即允许多个版本的库共同存在,应用程序通过manifest描述自身所依赖的文件,SxS Manager再通过manifest按照一定的规则找到应用程序的依赖文件,使应用程序正确工作。