在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反编译