解决NET Core发布iis项目覆盖原有的项目时"另一个程序正在使用此文件,进程无法访问"

简介: 解决NET Core发布iis项目覆盖原有的项目时"另一个程序正在使用此文件,进程无法访问"

解决NET Core发布iis项目覆盖原有的项目时"另一个程序正在使用此文件,进程无法访问"

现在net core运用的多了,一系列的问题接踵而来,更新项目发布到iis时就有一个坑。

 

 

应急办法是直接停站点进行发布。

但是这样做会导致,部署项目停的时间过长,网站暂时没法访问。(项目发布完成后记得“启动”)

 

 


 

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

锁定的部署文件

如果应用正在运行,部署文件夹中的文件会被锁定。 在部署期间,无法覆盖已锁定的文件。 若要在部署中解除已锁定的文件,请使用以下方法之一 停止应用池:

  • 使用 Web 部署并在项目文件中引用 Microsoft.NET.Sdk.Web系统会在 Web 应用目录的根目录中放置一个 app_offline.htm 文件 。 该文件存在时,ASP.NET Core 模块会在部署过程中正常关闭该应用并提供 app_offline.htm 文件 。 有关详细信息,请参阅 ASP.NET Core 模块配置参考
  • 在服务器上的 IIS 管理器中手动停止应用池。
  • 使用 PowerShell 删除 app_offline.html (需要使用 PowerShell 5 或更高版本):
$pathToApp = 'PATH_TO_APP'
# Stop the AppPool
New-Item -Path $pathToApp app_offline.htm
# Provide script commands here to deploy the app
# Restart the AppPool
Remove-Item -Path $pathToApp app_offline.htm

结合官方文档,找到了一个目前看算是比较好的解决方案

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

  1. 在D盘根目录创建一个app_offline.htm文件,注意是.htm文件,不是.html
  2. 创建一个待发布文件夹,把需要更新的项目文件放到该目录下
  3. 创建一个bat执行文件,内容如下,通过bat文件完成更新

 

bat执行文件内容,直接拷贝后替换路径即可

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

bat文件对应每一行的注释:

  1. 复制D盘根目录的app_offline.htm文件到项目运行的目录,接管所有的请求
  2. 复制待发布的文件到项目运行的目录完成覆盖更新
  3. 删除app_offline.htm文件恢复项目正常运行

 

 

注意:iis发布net core时,应用程序池的版本为【无托管代码】,托管管道模式选为【集成】,如下图:

相关文章
|
1月前
|
开发框架 .NET 开发者
简化 ASP.NET Core 依赖注入(DI)注册-Scrutor
Scrutor 是一个简化 ASP.NET Core 应用程序中依赖注入(DI)注册过程的开源库,支持自动扫描和注册服务。通过简单的配置,开发者可以轻松地从指定程序集中筛选、注册服务,并设置其生命周期,同时支持服务装饰等高级功能。适用于大型项目,提高代码的可维护性和简洁性。仓库地址:<https://github.com/khellang/Scrutor>
48 5
|
2天前
|
开发框架 前端开发 .NET
一个适用于 .NET 的开源整洁架构项目模板
一个适用于 .NET 的开源整洁架构项目模板
40 26
|
2月前
|
开发框架 .NET C#
在 ASP.NET Core 中创建 gRPC 客户端和服务器
本文介绍了如何使用 gRPC 框架搭建一个简单的“Hello World”示例。首先创建了一个名为 GrpcDemo 的解决方案,其中包含一个 gRPC 服务端项目 GrpcServer 和一个客户端项目 GrpcClient。服务端通过定义 `greeter.proto` 文件中的服务和消息类型,实现了一个简单的问候服务 `GreeterService`。客户端则通过 gRPC 客户端库连接到服务端并调用其 `SayHello` 方法,展示了 gRPC 在 C# 中的基本使用方法。
53 5
在 ASP.NET Core 中创建 gRPC 客户端和服务器
|
1月前
|
开发框架 缓存 .NET
GraphQL 与 ASP.NET Core 集成:从入门到精通
本文详细介绍了如何在ASP.NET Core中集成GraphQL,包括安装必要的NuGet包、创建GraphQL Schema、配置GraphQL服务等步骤。同时,文章还探讨了常见问题及其解决方法,如处理复杂查询、错误处理、性能优化和实现认证授权等,旨在帮助开发者构建灵活且高效的API。
34 3
|
20天前
|
开发框架 算法 中间件
ASP.NET Core 中的速率限制中间件
在ASP.NET Core中,速率限制中间件用于控制客户端请求速率,防止服务器过载并提高安全性。通过`AddRateLimiter`注册服务,并配置不同策略如固定窗口、滑动窗口、令牌桶和并发限制。这些策略可在全局、控制器或动作级别应用,支持自定义响应处理。使用中间件`UseRateLimiter`启用限流功能,并可通过属性禁用特定控制器或动作的限流。这有助于有效保护API免受滥用和过载。 欢迎关注我的公众号:Net分享 (239字符)
43 0
|
2月前
|
开发框架 网络协议 .NET
C#/.NET/.NET Core优秀项目和框架2024年10月简报
C#/.NET/.NET Core优秀项目和框架2024年10月简报
|
7月前
|
监控 Linux 应用服务中间件
探索Linux中的`ps`命令:进程监控与分析的利器
探索Linux中的`ps`命令:进程监控与分析的利器
151 13
|
6月前
|
运维 关系型数据库 MySQL
掌握taskset:优化你的Linux进程,提升系统性能
在多核处理器成为现代计算标准的今天,运维人员和性能调优人员面临着如何有效利用这些处理能力的挑战。优化进程运行的位置不仅可以提高性能,还能更好地管理和分配系统资源。 其中,taskset命令是一个强大的工具,它允许管理员将进程绑定到特定的CPU核心,减少上下文切换的开销,从而提升整体效率。
掌握taskset:优化你的Linux进程,提升系统性能
|
6月前
|
弹性计算 Linux 区块链
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
207 4
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
|
5月前
|
算法 Linux 调度
探索进程调度:Linux内核中的完全公平调度器
【8月更文挑战第2天】在操作系统的心脏——内核中,进程调度算法扮演着至关重要的角色。本文将深入探讨Linux内核中的完全公平调度器(Completely Fair Scheduler, CFS),一个旨在提供公平时间分配给所有进程的调度器。我们将通过代码示例,理解CFS如何管理运行队列、选择下一个运行进程以及如何对实时负载进行响应。文章将揭示CFS的设计哲学,并展示其如何在现代多任务计算环境中实现高效的资源分配。

热门文章

最新文章