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

在IIS上托管.NET 7 API时遇无法加载w3wp程序集错误求助

解决IIS托管.NET 7 API时的HTTP Error 500.30及w3wp程序集加载失败问题

问题核心

在Windows Server 2019的IIS上托管.NET 7 API时,出现HTTP Error 500.30 - ASP.NET Core应用启动失败,事件查看器显示无法加载程序集w3wp。本地直接运行exe正常,但IIS环境下报错,异常触发于builder.Services.AddControllers();调用。本质是ASP.NET Core在InProcess托管模式下错误地将IIS工作进程w3wp.exe识别为应用入口程序集,导致尝试加载不存在的w3wp程序集。

解决方法

1. 强制指定入口程序集(推荐InProcess模式下使用)

在Program.cs中,调用AddControllers()之前,显式配置ApplicationPartManager,指定你的API项目的实际程序集名称(例如项目输出程序集是WebApi.dll,则程序集名称为WebApi):

using Microsoft.AspNetCore.Mvc.ApplicationParts;
using System.Reflection;

// 在builder.Services.AddControllers()前添加以下代码
var targetAssembly = Assembly.Load("WebApi"); // 替换为你的API项目程序集名称
builder.Services.AddSingleton<ApplicationPartManager>(manager =>
{
    manager.ApplicationParts.Add(new AssemblyPart(targetAssembly));
    manager.FeatureProviders.Add(new ControllerFeatureProvider());
    return manager;
});

builder.Services.AddControllers();

此方法绕过默认的入口程序集检测逻辑,直接指定正确的应用程序集,避免错误加载w3wp进程文件。

2. 切换到OutOfProcess托管模式

修改web.config中的hostingModel为outofprocess,让应用在独立的dotnet进程中运行,彻底规避InProcess模式下的进程识别问题:

<aspNetCore processPath="dotnet" arguments=".\WebApi.dll" stdoutLogEnabled="true"
            stdoutLogFile=".\logs\stdout" hostingModel="outofprocess" />

同时开启stdoutLogEnabled为true,便于后续排查其他潜在问题(需确保站点目录下存在logs文件夹,或配置的日志路径有写入权限)。

3. 验证.NET Hosting Bundle完整性

  • 停止IIS服务,重新下载并安装.NET 7 Hosting Bundle,确保安装过程无报错。
  • 安装完成后,重启IIS,检查IIS管理器的“模块”列表中是否存在AspNetCoreModuleV2。

4. 恢复应用程序池正确配置

将之前修改过的应用程序池设置恢复为.NET Core应用的标准配置:

  • .NET CLR版本:无托管代码
  • 托管管道模式:集成
  • 禁用“启用32位应用程序”(64位服务器环境下)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 19:43:14