我一直在解决一些 DLL 版本、策略文件和 GAC 中的项目的一些非常“奇怪”的问题,在我的一生中,我一直无法找到关于 . NET 框架在绑定项目引用时选择它执行的程序集。
首先介绍一下我们所拥有的历史,我们有两个库 DLL 文件,其中包含以下信息
ApplicationAssembly.dll - .NET 1.1 code - .dll Version 01.01.00.1234
ApplicationAssembly.dll - .NET 1.1 code - .dll Version 01.01.00.1244
ApplicationAssembly.dll - .NET 2.0 code - .dll Version 02.00.00.1111
这些程序集中的每一个都加载到 GAC 中,并且 1.1 和 2.0 版本都有一个策略文件,指定要加载的最新版本。
我们有一个项目引用了 1.1.00.1234 版本的 ApplicationAssembly.dll 文件,但是,该项目已被移动,提示路径不再有效。但是,该引用并未失效,而是显示为 02.00.00.1111 版本,而不是预期的 1.1 版本的程序集。
这个过程是如何确定的,为什么马上跳到2.0框架?如果我们指定它是“特定版本”引用,即使使用不正确的提示路径,它也会找到正确的 DLL,但由于将来有破坏东西的风险,我们不能让该设置保持打开状态。
我想问题是为什么会发生这种情况? .NET 如何确定程序集的去向?