ClientBuildManager.未使用预编译版本的Azure中的预编译应用程序

本文关键字:编译 应用程序 Azure 版本 未使用 ClientBuildManager | 更新日期: 2023-09-27 18:14:10

我已经将ClientBuildManager.PrecompileApplicaiton添加到我的Azure web角色中,如下所述。然而,web角色将启动,需要非常长的时间(15-20分钟),大概是因为它必须编译的文件数量(18K+)。

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

当我RDP到我的web角色时,我可以在临时ASP中看到2个单独的文件夹。. NET文件,一个包含我所有的预编译代码(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();

我是否错过了其他会迫使角色使用我的预编译文件的东西?

ClientBuildManager.未使用预编译版本的Azure中的预编译应用程序

下面是完整的代码,注意一个重要的区别是不要在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();
            }