You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在IIS的DefaultDomain应用域中加载指定目录的C#程序集

解决方案

方案1(优先推荐):无需加载自定义程序集到DefaultDomain

ASP.NET 运行时的所有业务代码默认都执行在你已经配置成功的Web应用域(即名称为/LM/W3SVC/2/ROOT-xxxx的域)中,DefaultDomain是IIS Express宿主进程的根应用域,仅负责加载IIS核心运行组件,正常业务场景完全不需要将自定义业务DLL加载到该域,你已经实现的Web域程序集加载逻辑可以满足全部业务需求。

方案2:修改IIS Express配置实现DefaultDomain探测外部DLL

如果确实需要将DLL加载到DefaultDomain,可通过修改iisexpress.exe的配置文件实现:

  1. 找到IIS Express安装目录,默认路径为 C:\Program Files\IIS Express\(64位版本)或 C:\Program Files (x86)\IIS Express\(32位版本)
  2. 在该目录下手动新建名为iisexpress.exe.config的配置文件,参考如下配置填入内容:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <!-- 若DLL存放在IIS Express安装目录的子目录下,可使用probing配置相对路径 -->
      <!-- <probing privatePath="自定义子目录名"/> -->
      
      <!-- 若DLL存放在任意绝对路径,为每个DLL单独配置codeBase即可 -->
      <dependentAssembly>
        <assemblyIdentity name="你的业务DLL程序集名称" culture="neutral" />
        <codeBase version="1.0.0.0" href="file:///C:/users/Dlls/你的DLL文件名.dll" />
      </dependentAssembly>
      <!-- 有多个DLL可复制多份dependentAssembly节点配置 -->
    </assemblyBinding>
  </runtime>
</configuration>

方案3:手动为DefaultDomain注册程序集解析器

你之前只给Web应用域注册了程序集解析器,没有给DefaultDomain注册才会导致加载失败,可通过你已经实现的GetAppDomain方法拿到DefaultDomain实例后注册解析事件:

AppDomain defaultDomain = GetAppDomain("DefaultDomain");
defaultDomain.AssemblyResolve += (sender, args) =>
{
    var assemblyName = new AssemblyName(args.Name);
    string dllFullPath = Path.Combine(@"C:\users\Dlls", assemblyName.Name + ".dll");
    if (File.Exists(dllFullPath))
    {
        return Assembly.LoadFrom(dllFullPath);
    }
    return null;
};

注意事项

  • 确保IIS Express的运行身份对C:\users\Dlls目录拥有读取权限,否则会出现权限不足导致的加载失败
  • 如果你的业务DLL是强签名的,需要保证配置文件或解析逻辑中的程序集版本、公钥Token与实际DLL的属性一致
  • 生产环境使用IIS时对应的宿主进程为w3wp.exe,修改配置的逻辑与IIS Express完全一致

内容的提问来源于stack exchange,提问作者rle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 22:57:03