2013-04-23 99 views
9

我正在使用Microsoft的Web部署遠程代理服務,以便在Visual Studio中輕鬆地將代碼發佈到服務器。由於文件正在使用而導致Web部署失敗

我正在部署的網站使用log4net將消息記錄到日誌文件,每次嘗試部署新版本的代碼時,我都會在Visual Studio中看到此錯誤,指出當前的log4net日誌文件位於使用:

在遠程 計算機上處​​理請求時發生錯誤。文件'Web.log'正在使用中。

該進程無法訪問'C:\ inetpub \ wwwroot \ Logs \ Web.log',因爲其他進程正在使用 。

我可以去到服務器,並在發佈前做一個iisreset解決這個...但是,這是一種擊敗從Visual Studio :)

「容易」出版的一點是有一些方法我可以讓發佈任務自動發佈iisreset,或者我可以通過其他方式解決這個問題?

+0

這是您的log4Net日誌文件嗎? – Tommy 2013-04-23 17:25:27

+0

@Tommy是的,對不起,我應該更清楚:) – Cocowalla 2013-04-23 18:37:36

+0

我想知道是否可以綁定到您的global.asax中的Application_End事件並調用log4Net的關閉選項。這應該釋放文件上的鎖定。我不必這樣做,因此不會作爲答案發布,但有幾個SO問題和其他與關閉記錄服務有關的其他各種原因。 – Tommy 2013-04-23 19:24:13

回答

9

我一直在四處尋找,發現一些小文件被鎖定在其他一些論壇上。你試過在web.config文件中添加

<lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 

要將<appender>元素?從Apache docs

打開文件一次爲每個AcquireLock/RELEASELOCK週期,從而 保持的時間的最小量的鎖。鎖定方法 比FileAppender.ExclusiveLock慢得多,但 允許其他進程移動/刪除日誌文件,同時繼續記錄 。

至於性能方面的考慮,我想你會需要測試這是否會影響到你或不作爲,我假定這真的取決於你是如何經常到寫入日誌文件的多少這將影響性能。我無法相信,獲得/釋放鎖可能需要全部那麼多時間。

6

有一個MSDEPLOY provider called recycleApp正是爲此使用。您可以將其包含在您的部署清單中。

另一種選擇是使用ignoreOnErrors標誌,該標誌將跳過正在使用的文件並繼續部署。

+0

您能否提供有關recycleApp的一些信息以及如何實際包含此信息?我在Visual Studio中看不到任何選項,與ignoreOnErrors相同標誌 – Cocowalla 2013-04-28 20:37:12

+0

您可以手動運行此命令作爲預部署步驟或自動使用VS部署步驟 - 檢查['AfterTargets =「CopyAllFilesToSingleFolderForPackage」'](http: //stackoverflow.com/a/12579589)。 VS中還沒有選擇讓它回收應用程序 - 只有文件+ SQL發佈選項。 – SliverNinja 2014-03-20 15:35:15

相關問題