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

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

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

初步解决方案:

1,关闭应用程序池

2,关闭网站

3,更新项目

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

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

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

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

好点的解决方案(一次配置后,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 Core部署到IIS服务器