理解Web.config文件中ASP.NET程序集引用管理

7
我有一个简单的疑问:我有一个外部程序集,我想引用它。我有一个Asp.Net应用程序,我想在我的Asp.Net应用程序中使用那个程序集。
我添加了一个引用,VS只是将我的dll放置在网站的Bin子目录中。
我以为VS会修改我的web.config文件来添加外部引用......所以这种情况只发生在引用GAC中的程序集吗?(因为需要公共标记和版本)。
谢谢你。
1个回答

6
当CLR加载您的程序集以执行时,它会检查程序集的清单以确定运行所需的依赖项。它经过一系列步骤来完成此操作:
  1. 检查重定向 - 如果程序集是强命名的,CLR 将首先检查相应的配置文件(app.configweb.config 等)是否指定了任何绑定重定向。绑定重定向允许 CLR 说:“在我应该加载 v1.0.0.0 的地方,改为加载 v2.0.0.0”。如果没有针对强命名程序集指定绑定重定向,则会检查 GAC 中的策略文件,如果没有找到策略文件,则会检查 machine.config。如果未指定绑定重定向,则 CLR 将使用调用程序集清单中指定的程序集名称来加载程序集。

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

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

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

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

这些内容都是从一篇名为理解 .Net 程序集和引用的优秀文章中改编而来。

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


链接失效了,但如果有人找到文章的副本,我会感兴趣。 - GuiSim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接