问题:部署到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(进程外托管)