• 解决ASP.NET Core部署到IIS,更新项目"另一个程序正在使用此文件,进程无法访问"


    问题:部署到IIS上的ASP.NET Core项目,在更新的时候会进程占用的错误

    初步解决方案:

    1,关闭应用程序池

    2,关闭网站

    3,更新项目

    缺点:网站没法访问,部署项目停的时间过长

     

    查询官方文档后,官方给出的方案:

    结合官方文档,找到了一个目前看算是比较好的解决方案(一定要看底部的特别注意)

    好点的解决方案(一次配置后,1秒钟更新):

    1,在D盘根目录创建一个app_offline.htm文件,注意是.htm文件,不是.html

    2,创建一个待发布文件夹,把需要更新的项目文件放到该目录下

    3,创建一个bat执行文件,内容如下,通过bat文件完成更新

    @echo off
    call xcopy D:app_offline.html D:运行的项目
    call xcopy D:待发布项目 D:运行的项目 /s /e /Q /Y /I
    del D:运行的项目app_offline.htm

    注释:

    1,复制D盘根目录的app_offline.htm文件到项目运行的目录,接管所有的请求

    2,复制待发布的文件到项目运行的目录完成覆盖更新

    3,删除app_offline.htm文件恢复项目正常运行

    特别注意

    部署到 IIS 的 ASP.NET Core 应用程序可以选择两种不同的托管模式,分别是“进程内托管” 和 “进程外托管”,选择不同的托管模式可通过修改配置文件 web.config 来完成配置选择

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <location path="." inheritInChildApplications="false">
        <system.webServer>
          <handlers>
            <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
          </handlers>
          <aspNetCore processPath="dotnet" arguments=".Property.Api.dll" stdoutLogEnabled="false" stdoutLogFile=".logsstdout" hostingModel="OutOfProcess" />
        </system.webServer>
      </location>
    </configuration>

    需要修改 aspNetCore的hostingModel

    InProcess(进程内托管)

    OutOfProcess(进程外托管)

    好点的解决方案需要把项目修改为OutOfProcess(进程外托管)

  • 相关阅读:
    xxl-job如何保证调度的一致性
    mac安装homebrew
    JDBC自动加载驱动的SPI机制
    JDBC使用
    mysql的limit分页,越往后为什么越慢,怎么解决
    解决idea报错 "cannot access class
    BeanUtils.copyProperties复制失败探究
    xxl-job任务定时触发流程
    xxl-job一致性
    xxl-job高可用部署
  • 原文地址:https://www.cnblogs.com/zhangchunyu/p/11066078.html
Copyright © 2020-2023  润新知