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

Posted zhangchunyu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决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=".\\logs\\stdout" hostingModel="OutOfProcess" />
    </system.webServer>
  </location>
</configuration>

需要修改 aspNetCore的hostingModel

InProcess(进程内托管)

OutOfProcess(进程外托管)

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

以上是关于解决ASP.NET Core部署到IIS,更新项目"另一个程序正在使用此文件,进程无法访问"的主要内容,如果未能解决你的问题,请参考以下文章

解决 ASP.NET Core 部署到 IIS,更新项目时"文件夹正在使用"错误

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

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

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

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

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