在visual studio 2022中使用Web Deploy的方式部署到iis,可远程更新程序
部署过程中遇到的问题, 500.38
HTTP Error 500.38 - Failed to locate ASP.NET Core app
Common solutions to this issue:
The app couldn’t be found. Confirm the app’s main DLL is present. Single-file deployments are not supported in IIS. Troubleshooting steps:
- Check the system event log for error messages
- Enable logging the application process’ stdout messages
- Attach a debugger to the application process and inspect
For more guidance on diagnosing and handling these errors, visit Troubleshoot ASP.NET Core on Azure App Service and IIS.
由于项目在发布的属性中,在文件发布选项,勾选了生成单个文件
选项,而iis网站的web.config
文件中hostingModels
属性设置的是inprocess
,只要将值改成outofprocess。
或者,取消勾选生成单个文件
选项,也可以解决这个问题 参考链接
两种托管进程类型
- 进程内(inprocess),使用的是iis服务器
- 进程外(outofprocess),使用的是Kestrel 服务器
进程内和进程外托管之间的差异
在进程内托管时,将应用以下特征:
使用 IIS HTTP 服务器 (IISHttpServer),而不是 Kestrel 服务器。 对于进程内托管,CreateDefaultBuilder 会调用 UseIIS 来进行以下操作:
- 注册 IISHttpServer。
- 在 ASP.NET Core 模块后运行时,配置服务器应侦听的端口和基本路径。
- 配置主机以捕获启动错误。
requestTimeout 属性不适用于进程内托管。
不支持在应用之间共享应用池。 每个应用使用一个应用池。
应用和已安装的运行时(x64 或 x86)的体系结构(位数)必须与应用池的体系结构匹配。 例如,为 32 位 (x86) 发布的应用必须已为其 IIS 应用程序池启用 32 位。 有关详细信息,请参阅创建 IIS 站点部分。
检测到客户端连接断开。 客户端断开连接时,将取消 HttpContext.RequestAborted 取消标记。
在进程内托管时,不会在内部调用 AuthenticateAsync 来初始化用户。 因此,默认情况下不激活每次身份验证后用于转换声明的 IClaimsTransformation 实现。 使用 IClaimsTransformation 实现转换声明时,请调用 AddAuthentication 以添加身份验证服务:
不支持 Web 包(单文件)部署。
单文件反编译
使用ILSpy反编译