2015-09-22 16 views
1

我已將ClientBuildManager.PrecompileApplicaiton添加到我的Azure Web角色中,如here所述。網絡角色將會開始,然而,需要花費很長時間(15-20分鐘),大概來自它必須編譯的文件數量(18K +)。Azure中的ClientBuildManager.PrecompileApplication未使用預編譯版本

角色啓動後,我點擊該網站,在初始啓動時似乎沒有更快的速度。

當我將RDP添加到我的web角色時,我可以在Temporary ASP.NET Files中看到2個單獨的文件夾,其中一個包含我的所有預編譯代碼(3K +文件),另一個包含一組較小的文件這將在我最初的請求期間使用(50個文件)。

從我所知道的,該網站是預編譯的,但是,實際的請求並沒有利用這個預編譯和做一個正常的即時編譯,如前所述的請求。

查看上述內容後,我又向我的站點中的另一個頁面發出了另一個請求,並確認了50個文件增加到58個文件的文件夾,告訴我它實際上仍在進行即時編譯。 3K文件的其他文件夾保持不變。

這裏是我用我的預編譯的代碼在我OnStart方法:

var siteName = RoleEnvironment.CurrentRoleInstance.Id + "_Web"; 
var mainSite = serverManager.Sites[siteName]; 
var rootVirtualPath = String.Format("/LM/W3SVC/{0}/ROOT/", mainSite.Id); 
var clientBuildManager = new ClientBuildManager(rootVirtualPath, null); 
clientBuildManager.PrecompileApplication(); 

我失去了別的東西,這將迫使作用,用我的預編譯的文件?

+0

正如一個後續,我也嘗試了預編譯下面的代碼,但是這並沒有在Azure模擬器中。 的foreach(在serverManager.Sites VAR站點) { 的foreach(在site.Applications VAR應用) { 的foreach(在app.VirtualDirectories VAR DIR) { 變種clientBuildManager =新ClientBuildManager(dir.Path,DIR。 PhysicalPath); clientBuildManager.PrecompileApplication(); } } } – Bryan

+0

我想嘗試提供第二個參數給ClientBuildManager的構造函數。並嘗試不同的構造函數。 https://msdn.microsoft.com/en-us/library/system.web.compilation.clientbuildmanager.clientbuildmanager(v=vs.110).aspx看起來,IIS無法將預編譯的文件夾與源代碼進行匹配。 – rocky

回答

0

下面是工作的全部代碼,請注意一個重要的區別是不包括尾部斜槓appVirtualDir

using (var serverManager = new ServerManager()) 
      { 
       string siteName = RoleEnvironment.CurrentRoleInstance.Id + "_" + "Web"; 
       var siteId = serverManager.Sites[siteName].Id; 
       var appVirtualDir = $"/LM/W3SVC/{siteId}/ROOT"; // Do not end this with a trailing/

       var clientBuildManager = new ClientBuildManager(appVirtualDir, null, null, 
              new ClientBuildManagerParameter 
              { 
               PrecompilationFlags = PrecompilationFlags.Default, 
              }); 

       clientBuildManager.PrecompileApplication(); 
      }