2013-06-04 34 views
2

我遇到了Visual Studio 2012的問題,這讓我瘋狂。我們正在開發一個ASP.NET Web應用程序,並且在應用程序啓動時它必須將許多內容加載到內存中。它有時需要20-30秒才能啓動並準備好服務於第一個http請求。TFS 2012 Visual Studio插件在簽出文件時立即創建並刪除「app_offline.htm」,導致ASP.NET AppDomain回收

我們使用TFS源代碼控制,基本上,每次有人編輯文件時,TFS都會將文件標記爲「已簽出」(在解決方案資源管理器中,文件名圖標旁會出現小紅色複選標記),並立即創建並刪除Web應用程序根目錄中的「app_offline.htm」文件。

這會導致Web應用程序卸載。我在Application_Start和Application_End事件中使用了日誌記錄來查找。然後我使用SysInternals Process Monitor來查看正在發生的活動。當我在procmon的神祕輸出中看到app_offline.htm時,我使用了一個名爲Directory Monitor的獨立文件系統監視器,它確認app_offline.htm確實正在創建並立即刪除。

這種連鎖反應的效果是,如果你做了一些改變,應用程序在開發過程中必須多次卸載/重新加載。這是浪費時間。

不僅如此,不斷重新加載應用程序域會導致IIS最終耗盡內存,然後我們必須執行IISRESET。

有誰知道爲什麼TFS創建這個文件?是否有任何方法阻止它?

回答

4

我發現瞭解決方法。

1)進入其中的Visual Studio緩存app_offline.htm文件 C中的位置:用您的用戶名\用戶[用戶] \應用程序數據\漫遊\微軟\ VisualStudio的\ 11.0 \(更換[用戶])

2)刪除app_offline.htm文件

(注:這本身不足以解決它,因爲VS再生時再次它沒有找到該文件)

3)創建一個目錄名爲app_offline.htm(一DIRECTORY!)

這實際上會導致嘗試使用該文件的進程發生錯誤,因爲它不是文件,名稱衝突意味着VS無法嘗試重新創建該文件。幸運的是,錯誤沒有不必要的副作用。

現在繼續使用VS和Team Foundation Server,並且不會經常重新加載appdomain!

0

如果您將從Visual Studio發佈到IIS下的目錄,則會發生。並且VS 2012在該位置保存該文件

C:\Users\[user]\AppData\Roaming\Microsoft\VisualStudio\11.0\app_offline.htm 

易於使用的版本可能會被直接發佈到您的服務器。我相信你不應該,你可以發佈到本地文件夾,然後複製該網站到所需的位置。

一旦你刪除了映射(直接發佈到服務器),那麼我確定當你「檢出」一個文件時,它不會立即創建並刪除Web應用程序根目錄下的「app_offline.htm」文件。 希望它有幫助。

+0

嗨,我沒有發佈該應用程序。只是開發它。我試圖從您提到的位置刪除app_offline.htm文件,但不幸的是系統重新創建它。 – krisdyson

+0

您是否使用Visual Studio直接在IIS下發布文件? – Microtechie

+0

你好,根本沒有發佈,只是IIS像正常一樣指向源目錄。 thx – krisdyson

相關問題