C# 为什么IIS工作进程会锁定文件?
我的网站设置在C# 为什么IIS工作进程会锁定文件?,c#,.net,iis,windows-server-2016,C#,.net,Iis,Windows Server 2016,我的网站设置在D:\RW\u System\RW\u Webroot\brokerofice.Admin文件夹中(下面的屏幕截图)。这是一个.NET、C#WebForms应用程序 无论出于何种原因,当我想将更改部署到站点时,我会尝试复制文件,但IIS会在站点设置的路径中锁定DLL: C:\Users\rizzo\Desktop>handle64 hiqpdf Nthandle v4.11 - Handle viewer Copyright (C) 1997-2017 Mark Russi
D:\RW\u System\RW\u Webroot\brokerofice.Admin
文件夹中(下面的屏幕截图)。这是一个.NET、C#WebForms应用程序
无论出于何种原因,当我想将更改部署到站点时,我会尝试复制文件,但IIS会在站点设置的路径中锁定DLL:
C:\Users\rizzo\Desktop>handle64 hiqpdf
Nthandle v4.11 - Handle viewer
Copyright (C) 1997-2017 Mark Russinovich
Sysinternals - www.sysinternals.com
w3wp.exe pid: 3700 type: File 2954: D:\RW_System\RW_Webroot\BrokerOffice.Admin\bin\HiQPdf.dll
锁定的不仅仅是.dll,还有\bin
文件夹中的所有dll。我的理解是,IIS将所有内容复制到C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\
下的文件夹中,并从中执行操作
我在盒子上有许多其他站点,它们有多个DLL引用,正如预期的那样,w3wp.exe将它们锁定在临时ASP.NET文件
文件夹中
IIS或我的代码中是否存在导致IIS锁定/bin文件夹中DLL的设置
回答我自己的问题,以防有人遇到这个问题。原来web.config文件有
指令,我甚至不知道它的存在
此设置告诉IIS就地执行所有内容,而不是在
临时ASP.NET文件
文件夹中执行。关闭准备部署的站点的一种快速可靠的方法是在名为App\u Offline.htm(~/App\u Offline.htm
)的网站根文件夹中创建一个文件。如果在删除App_Offline.htm之前为所有请求提供内容,则内容是可选的。此方法在几乎所有情况下都能工作-包括用于shadowCopyBinAssemblies
的任何值
基本上,App_Offline是Web Deploy使用的IIS的一项功能,用于确保能够正确部署—避免任何锁定问题等。它在IIS中的运行级别似乎很低,它实际上是一个文件系统监视程序,可以杀死应用程序池。这意味着您可以轻松地自己创建和删除此文本文件,而无需web deploy停止和重新启动(或至少重新启用)您的应用程序
摘自MS文档:
当ASP.Net检测到名为“App_Offline.htm”的文件存在时,它将自动关闭承载应用程序的应用程序域。发布过程完成后,App_Offline.htm文件将被删除,网站将再次联机
看
更新日期:2019年5月22日
通过创建app_离线文件可能值得指出,它会导致两种不同的情况发生:
w3wp.exe
实例的终止,该实例是您的“应用程序域”(如任务管理器中所示),也称为锁的所有者。当该进程终止时,所有锁都将被释放。根据我的经验,这通常是非常快的李>
基于几个高流量网站的个人/痛苦经历,作为绝对的最后手段。。。如果出于任何原因,IIS站点不会停止/释放锁定/中止现有请求,那么它可能会停止加载,或者有什么东西阻止进程退出-在正常情况下,app_offline应该会很快杀死该站点。在这些情况下,假设您知道请求无法完成,或者您不在乎,需要站点停止或重新启动,请创建应用程序脱机文件,使用任务管理器终止w3wp.exe进程,执行更改,然后删除应用程序脱机文件。下一个请求将启动一个新的应用程序域(并且显然会放弃任何挂起的请求-因此请谨慎操作-这可能是一个问题,也可能不是,取决于您的站点) 似乎是visual studio的问题 在我使用Configuration manager的“Release”和“Debug”选项时,我开始遇到相同的错误
- 我也尝试删除bin和obj文件夹,但无法成功,因为IIS Express工作进程锁定了dll文件
- 试图在没有任何运气的情况下重新启动visual studio
在那之后,我甚至将配置改回“Release”,它仍然没有显示任何dll文件锁定错误。所以,这很可能是VisualStudio的内部缺陷 在任务栏中右键单击IIS express,然后将鼠标悬停在项目上。然后选择停止您的项目。
@mjwills所有引用的DLL都会出现问题。我想它们被锁定了,因为我无法覆盖它们。另外,我运行的
handle
命令(请参见问题)显示w3wp.exe已锁定hiqpdf.dll。该问题是否仅在使用hiqpdf.dll
的网站中出现?你提到你的一些网站上没有出现这种情况。他们在用那个DLL吗?@mjwills哦,我明白你的意思了。其他网站确实使用HiQPdf.dll,但它们将其锁定在临时ASP.NET文件
文件夹中。以下是handle
命令的完整输出:当应用程序脱机时,并非所有被IIS锁定的文件都会被释放。添加app_offline.htm会停止创建新锁,但不会使IIS释放锁。@gburton-我扩展了我的答案一点-这是否涵盖了您的情况?看起来我的问题现在已经解决了..:D