2013-04-09 15 views
3

有誰知道是否有可能從azure角色啓動任務調用aspnet_compiler強制進行預編譯。 (如果是這樣的foregroudn /背景或簡單的任務?)aspnet_compiler在Azure starup任務

也許類似於: %windir%\ Microsoft.NET \ Framework64 \ v4.0.30319 \ aspnet_precompile.exe -v/-p「F:\ siteroot \ 0「

或者有沒有更好的方法來實現這個目標?

+0

您的命令是正確的,除了輸入錯誤,應該是siteroot而不是siteroots。 – zbarrier 2016-01-01 20:54:46

+0

也應該是aspnet_compiler.exe(而不是aspnet_precompile) – 2016-09-25 15:13:05

回答

2

是的,一旦你找出編譯器的正確路徑,這應該工作,雖然我還沒有嘗試過這種具體的方法。

我試過的另一種方法是使用ClientBuildManager.PrecompileApplication,如in this answer所述。我試圖從OnStart()內部調用它,但是您可以將C#代碼編譯爲.NET程序集並使用PowerShell中的代碼,或者只需按照here中所述從PowerShell中調用.NET基元,並以此方式從啓動任務中調用它。

+1

ClientBuildManager.PrecompileApplication聽起來像是一個很好的方法。 從開始調用它時,你爲ClientBuildManager指定了哪些構造器參數? 我不太清楚應該如何獲得糾正路徑。 – jmw 2013-04-09 14:01:10

+1

@JWendel:你可以使用'Microsoft.Web.Administration.ServerManager',枚舉所有的'Sites',每個'Sites',枚舉所有'Applications',每個'VirtualDirectories',每個'Path'和'PhysicalPath' - 你可以將這兩個傳遞給'ClientBuildManager'構造者。 – sharptooth 2013-04-09 14:18:46

+0

非常感謝!去嘗試一下。對於其他正在尋找Microsoft.Web.Administration的用戶,可以將其作爲NuGet軟件包提供 - http://nuget.org/packages/Microsoft.Web.Administration/。 – jmw 2013-04-09 14:26:18

0

啓動任務是可能的,但有一個問題是,siteroot路徑是硬編碼的,可以更改。請將以下內容添加到RoleEntryPoint OnStart方法中:

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(); 
     }