代码之家  ›  专栏  ›  技术社区  ›  Mitchel Sellers

.NET程序集绑定方式/原因(1.1、2.0、GAC、策略文件等)

  •  4
  • Mitchel Sellers  · 技术社区  · 17 年前

    我一直在研究一些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版本都有一个策略文件,指定要加载的最新版本。

    我们有一个项目引用了ApplicationAssembly.dll文件的1.1.00.1234版本,但是该项目已被移动,提示路径不再有效。然而,该参考并没有失效,而是显示了02.00.0111版本,而不是预期的1.1版本的组件。

    这个过程是如何确定的,为什么它会立即跳到2.0框架?如果我们指定它是一个“特定版本”引用,即使有不正确的提示路径,它也会找到正确的DLL,但由于未来破坏东西的风险,我们不能打开该设置。

    我想问题是 为什么会发生这种情况? 如何做到。NET确定程序集的位置?

    1 回复  |  直到 17 年前
        1
  •  3
  •   ShuggyCoUk    17 年前

    Fusion(.Net中的托管dll加载功能)用于定位dll的规则非常广泛(仅举几例,这是由于Gac/strong名称/自定义加载钩子)。

    官方规则是笼统地处理的 here 由于您的库具有强名称,因此将应用更复杂的规则

    推荐文章