由于文件正在使用,Web部署失败

Coc*_*lla 9 asp.net-mvc web-deployment webdeploy log4net-appender

我使用Microsoft的Web Deploy Remote Agent服务,允许我从Visual Studio中轻松地将代码发布到服务器.

我正在部署的网站使用log4net将消息记录到日志文件,每次我尝试部署新版本的代码时,我在Visual Studio中收到此错误,指出当前的log4net日志文件正在使用中:

在远程计算机上处​​理请求时发生错误.文件'Web.log'正在使用中.

该进程无法访问"C:\ inetpub\wwwroot\Logs\Web.log",因为它正由另一个进程使用.

我可以通过进入服务器并iisreset在发布之前进行解决来解决这个问题...但这有点打败了从Visual Studio中"轻松"发布的观点:)

有没有什么方法可以让发布任务自动发出iisreset,或者其他方式我可以解决这个问题?

Tom*_*mmy 9

我一直在四处寻找并发现文件周围的一些花絮被锁定在其他几个论坛中.你试过添加吗?

<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
Run Code Online (Sandbox Code Playgroud)

<appender>web.config文件中的元素?来自Apache文档

为每个AcquireLock/ReleaseLock循环打开一次文件,从而在最短的时间内保持锁定.这种锁定方法比FileAppender.ExclusiveLock慢得多,但允许其他进程在继续记录时移动/删除日志文件.

就性能考虑而言,我认为您需要测试这是否会影响您,因为我认为它实际上取决于您写入日志文件的频率,这将影响性能.我不能相信,获取/释放锁可以采取一切那么多时间,虽然.


Sha*_*ais 6

有一个MSDEPLOY提供程序被调用recycleApp,它正好用于此.您可以在部署清单中包含此内容.

另一种选择是使用ignoreOnErrorsflag,它将跳过正在使用的文件并继续部署.