【问题标题】:.Net assembly resolving confusion.Net 程序集解决混乱
【发布时间】:2010-06-04 08:54:26
【问题描述】:

在阅读了 MSDN 文章 How the Runtime Locates Assembliesthis 之后,我仍然不确定如何在运行时解析弱命名程序集。

例如。如果我在我的项目中引用了某个 dll 文件,我编译和部署,如果我只是替换在编译时实际引用的旧版本,它会获取引用的 dll 文件的新版本吗?项目文件中的引用是否指定了被引用程序集的版本等是否重要?

欢迎任何启示

【问题讨论】:

    标签: c# assemblies reference


    【解决方案1】:

    如果在 GAC 中未找到该程序集,则 CLR 将在“探测路径”中搜索它。默认情况下,它只是包含 EXE 的目录。它只在程序集名称上查找匹配项,并在第一个匹配项时停止搜索。

    然后检查 [AssemblyVersion] 编号。如果它不匹配你会得到一个异常,它不会继续寻找另一个同名的程序集。每当您遇到解决问题时,您都需要使用 Fuslogvw.exe 实用程序。它可以准确地向您显示 CLR 的位置以及出了什么问题。

    【讨论】:

    • 弱引用会影响版本号吗?我的经验是,如果您在探测路径中,它只会按名称匹配(不确定 GAC,但它不会很弱)。
    • 强命名与否无关紧要。只有 GAC 能够按版本号解析引用的程序集。探测路径搜索仅按名称进行,在找到程序集后仍会检查版本号。
    【解决方案2】:

    我发现了解这方面的最佳地点是在 Grimes Fusion Workshop 中,可以找到 here。它非常全面,但仍然易于理解。

    【讨论】:

      【解决方案3】:

      只要您在引用程序集的属性中将Specific Version 设置为False,您的问题的答案就是肯定的。

      【讨论】:

        【解决方案4】:

        如果没有提到版本,它将选择引用,如果提到了版本,它将尝试查找并加载与所提到的版本匹配的签名的程序集。如果没有找到它会抛出异常。要解决此问题,您可以执行程序集绑定重定向。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-06-09
          • 1970-01-01
          相关资源
          最近更新 更多