能否在同一个IIS站点中同时部署.NET Framework 4.8.2和.NET 5应用?
结论
完全可以在同一个IIS站点中同时部署基于.NET Framework 4.8.2的ASP.NET MVC应用和基于.NET 5的Blazor ASP.NET Core托管应用。核心实现逻辑是将Blazor应用作为主站点下的子应用部署,两个应用分别使用独立的应用池运行,避免运行环境冲突。
前置准备
- 服务器端同时安装 .NET Framework 4.8.2 运行时、.NET 5 托管捆绑包(Hosting Bundle),安装完成后执行
iisreset命令重启IIS生效 - 分别准备两个应用的可发布包:ASP.NET MVC使用面向IIS的发布配置,Blazor应用根据需求选择依赖框架/独立部署模式发布即可
具体操作步骤
步骤1:配置主站点(.NET Framework 4.8.2 MVC应用)
- 在IIS中新建站点,物理路径指向MVC应用的发布目录,关联的应用池选择
.NET Framework v4.0.30319版本,托管管道模式设置为集成 - 访问主站点域名测试功能,确认MVC应用运行正常
步骤2:创建Blazor专用应用池
- 在IIS应用池管理界面新建应用池,名称可自定义如
Blazor_Net5_Pool,.NET CLR版本选择无托管代码,托管管道模式设置为集成后保存
步骤3:添加Blazor子应用
- 在MVC主站点的物理发布根目录下新建子文件夹,名称自定义如
blazor(对应访问路径为主站点域名/blazor) - 将Blazor应用的全部发布文件拷贝到上述
blazor文件夹中 - 回到IIS管理器,右键点击主站点,选择添加应用程序
- 别名填写
blazor,应用池选择刚才新建的Blazor_Net5_Pool,物理路径指向blazor文件夹,确认保存
步骤4:调整Blazor应用适配子路径部署
- 打开Blazor应用目录下的
web.config,在aspNetCore节点添加pathBase属性,示例配置:<aspNetCore processPath="dotnet" arguments=".\你的Blazor项目名.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" pathBase="/blazor" /> - 打开Blazor的
wwwroot/index.html,将默认的<base href="/" />修改为<base href="/blazor/" />,注意末尾的斜杠不可省略 - 如果Blazor应用内有写死的绝对路径路由、静态资源引用,统一调整为适配子路径的相对写法
步骤5:部署验证
- 访问主站点地址,确认MVC应用功能正常
- 访问
主站点地址/blazor,确认Blazor应用的页面、接口、静态资源均可正常加载
常见问题排查
- 静态资源404:优先检查
index.html的base标签路径是否正确,Blazor应用内的静态资源引用是否存在硬编码绝对路径 - 502.5启动错误:检查.NET 5托管捆绑包是否安装正确,Blazor关联的应用池是否设置为无托管代码,
web.config中指定的Blazor dll路径是否正确 - 路由冲突:在MVC的路由配置中添加忽略规则,忽略
blazor/*开头的路径,避免MVC路由拦截Blazor的访问请求
内容的提问来源于stack exchange,提问作者Hernan
相关产品推荐
相关产品推荐

