asp.net 中的混合模式程序集加载

Mixed mode assembly loading in asp.net

我有一个引用混合模式 dll 的 asp.net 网络服务。混合模式程序集引用的本机 dll 位于添加到 SYSTEM PATH 的目录中。

我想从 SYSTEM PATH 中删除本机 dll 的目录,所以我将所有本机 dll 复制到 webservice 的 bin 目录,但我得到文件未找到异常。

asp.net 是否不在 webservice 的 bin 目录中查找本机 dll?有没有办法动态设置系统路径?我怎样才能让它工作。

如果有人遇到类似情况,我就是这样做的,以便能够从不在这些位置的位置加载混合模式程序集:

  1. 应用程序加载的目录。在 ASP.Net 的情况下,对于 IIS 6,这将解析为 %windir%\Microsoft.Net\Framework\v###\ 或 %windir%\system32\inetsrv。
  2. 当前目录。在 ASP.Net 的情况下,对于 IIS 6,这将解析为 %windir%\System32\inetsrv。如果使用内置 Web 服务器,这将解析为 C:\Program Files\Microsoft 下的路径Visual Studio8.
  3. Windows系统目录。使用 GetSystemDirectory 函数获取此目录的路径。
  4. Windows 目录。使用 GetWindowsDirectory 函数获取该目录的路径。
  5. PATH 环境变量中列出的目录。

我将混合模式程序集上的本机 dll 设置为延迟加载。然后我按照 http://blogs.msdn.com/b/jorman/archive/2007/08/31/loading-c-assemblies-in-asp-net.aspx

中的选项 2b

我只需要对选项 2b 进行一点小调整。它说要更新 Global.asax 中的 "Application_Start" 方法,但我必须更新 "Application_BeginRequest" 方法才能使其与我的网络服务一起使用。