Ang*_*ker 6 .net c# iis windows-server-2016
我的网站设置在D:\RW_System\RW_Webroot\BrokerOffice.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
Run Code Online (Sandbox Code Playgroud)
并且它不仅仅是.dll被锁定 - 它是\bin文件夹中的所有DLL .我的理解是IIS将所有内容复制到文件夹下C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\并从那里执行操作.
我在盒子上有许多其他网站有多个DLL引用,正如预期的那样,w3wp.exe将它们锁定在Temporary ASP.NET Files文件夹中.
IIS中是否有设置或我的代码中的某些内容导致IIS将DLL锁定在/ bin文件夹中?
如果有人遇到这个问题,请回答我自己的问题.原来web.config文件有<hostingEnvironment shadowCopyBinAssemblies="false" />指令,我甚至不知道存在.
此设置告诉IIS执行所有内容而不是Temporary ASP.NET Files文件夹.
关闭准备部署的站点的一种快速可靠的方法是在您的网站的根文件夹中创建一个名为App_Offline.htm(~/App_Offline.htm)的文件.内容是可选的,如果存在,则在删除App_Offline.htm之前将其提供给所有请求.这种方法几乎适用于所有情况 - 包括用于的任何值shadowCopyBinAssemblies.
基本上,App_Offline是Web Deploy使用的IIS的一项功能,可确保它可以正确部署 - 避免任何锁定问题等.它似乎在IIS中运行的级别非常低,它实际上是一个文件系统观察程序,可以杀死应用程序池.这意味着您可以轻松地自行创建和删除此文本文件,而无需使用Web部署来停止和重新启动(或至少重新启用)您的应用.
取自MS docs:
当ASP.Net检测到名称为"App_Offline.htm"的文件存在时,它将自动关闭托管该应用程序的应用程序域.发布过程完成后,将删除App_Offline.htm文件,该站点将再次联机.
请参阅:https://docs.microsoft.com/en-us/iis/publish/deploying-application-packages/taking-an-application-offline-before-publishing