Azure中的ClientBuildManager.PrecompileApplication不使用预编译版本

时间:2015-09-22 14:44:53

标签: c# azure azure-web-roles

我已按照here所述向我的Azure网络角色添加了ClientBuildManager.PrecompileApplicaiton。然而,Web角色将开始,需要非常长的时间(15-20分钟),可能来自它必须编译的文件数量(18K +)。

角色开始后,我点击了网站,初始启动时似乎没有任何更快。

当我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();

我是否遗漏了其他会强制该角色使用我预先编译的文件的内容?

1 个答案:

答案 0 :(得分: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();
            }