你可以在发布过程中让你的应用程序离线,这有望释放文件上的锁,并允许你更新它.
我不久前go 过blogged about this家.概述的支持在Azure SDK和Visual Studio更新中提供.我不记得确切的版本,但如果需要的话我可以找到.在那篇博文前后的任何更新都可以.
前提条件:
- VS 2012+VS更新/VS 2013+VS更新/VS2015
- MSDeploy v3
Note: if you are publishing from a CI server the CI server will need the updates above as well
编辑发布配置文件
在VS中,当创建Web发布配置文件时,对话框中的设置在Properties\PublishProfiles\
中存储为以.pubxml结尾的文件.Note: there is also a 101 file, that file should not be modified
要使应用程序在.pubxml
文件中脱机,请添加以下属性.
<EnableMSDeployAppOffline>true</EnableMSDeployAppOffline>
注意事项
ASP.净需求
在MSDeploy端实现这一点的方式是,应用程序离线.htm文件被放置在网站/应用程序的根目录中.从那里开始asp.net运行时将检测到这一点,并使您的应用程序脱机.因此,如果你的网站/应用程序没有asp.net启用此功能将不起作用.
可能不起作用的 case
这一点的实现使得应用程序在发布开始之前可能不会严格地处于离线状态.首先删除app_offline.htm文件,然后MSDeploy将开始发布文件.它不会等待ASP.NET检测到文件并使其真正脱机.因此,您可能会遇到仍然遇到文件锁定的情况.默认情况下,VS会启用重试,因此通常情况下,应用程序会在其中一次重试期间离线,一切正常.在某些情况下,ASP.NET可能需要更长时间才能做出响应.这就有点棘手了.
如果你添加了<EnableMSDeployAppOffline>true</EnableMSDeployAppOffline>
个应用程序,但你的应用程序并没有很快离线,那么我建议你在发布开始之前将应用程序离线.远程执行此操作有几种方法,但这取决于您的设置.如果您只有MSDeploy访问权限,可以try 以下顺序:
- 使用
msdeploy.exe
通过删除app_offline.htm使您的站点离线
- 使用
msdeploy.exe
发布你的应用程序(确保同步不会删除app_offline.htm文件)
- 等一段时间
- 发布网站
- 使用
msdeploy.exe
通过删除app_offline使应用程序联机.htm
我在博客上写过你如何在http://sedodream.com/2012/01/08/howtotakeyourwebappofflineduringpublishing.aspx岁时做到这一点.这篇博文中唯一缺少的是等待网站真正离线的延迟.您还可以创建一个只直接调用msdeploy.exe
的脚本,而不是将其集成到项目构建/发布过程中.