2016-05-12 85 views
12

有沒有辦法在Azure Web App上預編譯ASP.NET MVC視圖(特別是通過VSTS上的發佈管理髮布時)?在Azure Web App上預編譯ASP.NET MVC視圖

一旦每個視圖被命中一次,頁面會很快呈現。但是,對於用戶來說,第一次延遲可能會很困難,並且腳本無法觸及每個頁面。

我不確定是否需要更改VSTS上的構建/發佈過程中的某些內容(我正在使用Visual Studio Build構建步驟和Azure Web App發佈任務),或者需要在Azure Web App實例上運行某些內容它被釋放後(或其他什麼東西)。

似乎在發佈之後找到某種方式調用aspnet_compiler可能是我需要的(我已經看到了關於雲服務上的Web角色),但我無法實現這一點。

通過在Azure的門戶控制檯呼叫

%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_compiler -v "/" -p "d:\home\site\wwwroot" 

執行就好了(如果有任何發現錯誤),但不會對啓動時間產生任何影響 - 打一個視圖首次仍需要很長時間。

所以也許這不是正確的方向。我已經看過RazorGenerator(包括.MSBuild nuget包),但是我不能完全理解它的工作原理,但是我真的很猶豫,爲了在發佈時進行預編譯而對項目進行了很多更改。

另請注意,我目前在VSTS中使用TFVC,而不是Git,因此根據我可以告訴的,Kudu/Git集成(根據某些文章似乎確實會觸發預編譯)並不適用於我。

其他想法?在參數「Visual Studio中建立」步:

+0

我想知道,在您的發佈任務完成後,如果在網站上運行基於雲的網絡性能測試,您的視圖會首先受到影響嗎? – majita

回答

15

您可以添加「PrecompileBeforePublish =真/ P」: enter image description here

那麼任務將在構建過程調用aspnet_compiler,併爲部署預編譯的輸出。

+1

當通過'msdeploy.exe'調用直接發佈Azure應用服務時,是否可以使用'PrecompileBeforePublish'參數? –

+0

有趣。我被告知沒有工作。但它很明顯。好吧,真棒。謝謝! – Tim

+9

這將爲每個視圖創建一個dll。如果你還爲參數添加/ p:UseMerge = true/p:SingleAssemblyName = AppCode,你將只有一個dll,加載速度更快。 –

0

在visual studio 2013+中,選擇Build-> Profiles。選擇配置文件,然後選擇「設置」。在「配置」下,展開「文件發佈選項」,然後選中「發佈期間的預編譯」選項。

+0

另外不要忘記取消「允許預編譯站點可更新」。 – Mik