【问题标题】:Understanding ASP.NET assembly reference management in Web.config file了解 Web.config 文件中的 ASP.NET 程序集引用管理
【发布时间】:2011-06-28 21:28:30
【问题描述】:

我有一个简单的疑问:我有一个想要引用的外部程序集。我有一个 Asp.Net 应用程序。我想在我的 Asp.Net 应用程序中使用该程序集。

我添加了一个引用,VS 所做的只是将我的 dll 放在我网站的 Bin 子目录中。

我以为 VS 会修改我的 web.config 文件添加外部引用... 那么只有在 GAC 中引用程序集时才会发生这种情况??? (考虑到需要公共令牌和版本,这是有道理的)。

谢谢

【问题讨论】:

    标签: c# .net asp.net web-config assemblies


    【解决方案1】:

    当 CLR 加载程序集以供执行时,它会检查程序集的清单以确定运行所需的依赖项。它通过一系列步骤来做到这一点:

    1. 检查重定向 - 如果程序集是强命名的,CLR 将首先检查适当的配置(app.config、web.config 等)以查看是否有指定的任何绑定重定向。绑定重定向允许 CLR 说,我应该在哪里加载 v1.0.0.0,而不是加载 v2.0.0.0。如果没有为强名称程序集找到绑定重定向,它将检查 GAC 中的策略文件,如果未找到策略文件,则检查 machine.config。如果未指定绑定重定向,CLR 将使用调用程序集清单中指定的程序集名称来加载程序集。

    2. 检查程序集是否已加载 - CLR 确定程序集之前是否已加载,如果已加载,则使用相同的加载程序集,否则继续。 ..

    3. 从 GAC 加载程序集 - 如果程序集以前无法加载并且是强命名的,CLR 将尝试从全局程序集缓存加载程序集。 p>

    4. CodeBase - 如果 CLR 仍然找不到程序集,它将使用 codeBase 路径尝试定位程序集。

    5. 探测 - 如果 CLR 仍然找不到程序集,它将检查程序集的探测路径。默认探测路径是当前正在加载程序集的 AppDomain 的应用程序基路径。

    (全部改编自一篇名为Understanding .Net Assemblies and References 的精彩文章)。

    对于您的 Web 应用程序,CLR 仍然执行上述所有操作,但 AppDomain 应用程序基本路径是 IIS 应用程序中的 /bin 文件夹。

    【讨论】:

    • 链接已失效,但如果有人找到该文章的副本,我会很感兴趣。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多