在Azure Web App上预编译ASP.NET MVC视图

26
有没有办法在Azure Web App上预编译ASP.NET MVC视图(特别是通过VSTS的发布管理发布时)?
一旦每个视图被访问一次,页面随后就会快速渲染。但对于用户来说,第一个延迟可能是一个大问题,而且没有办法脚本化每个页面的触摸。
我不确定是否需要更改VSTS的构建/发布过程(我正在使用Visual Studio Build构建步骤和Azure Web应用程序发布任务),或者是否需要在发布后在Azure Web应用程序实例上运行某些东西(或者完全是其他内容)。
看起来在发布后调用aspnet_compiler可能是我需要的(我已经在云服务Web角色中看到了这一点),但我无法做到这一点。
调用
%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_compiler -v "/" -p "d:\home\site\wwwroot" 

通过 Azure 门户中的控制台可以很好地执行(并在有错误时找到错误),但对启动时间没有任何影响-第一次访问视图仍然需要很长时间。

所以也许那不是正确的方向。

我看过 RazorGenerator(包括 .MSBuild nuget 包),但我无法完全使其工作,而且我真的不愿意为了在发布时获得预编译而对项目进行如此多的更改。

还要注意,我目前在 VSTS 中使用 TFVC 而不是 Git,因此 Kudu/Git 集成(根据某些文章似乎会触发预编译)对我来说是不可用的。

其他想法?


我想知道在发布任务后对网站进行基于云的Web性能测试是否会使第一次访问变慢? - majita
2个回答

40
您可以在“Visual Studio Build”步骤中添加"/p:PrecompileBeforePublish=true"参数: enter image description here 然后该任务将在构建过程中调用aspnet_compiler,并生成预编译输出以进行部署。

2
在通过msdeploy.exe调用直接发布Azure App Service时,是否可以使用PrecompileBeforePublish参数? - Ilya Chumakov
有趣。我被告知这不起作用。但它显然有效。太棒了。谢谢! - Tim
14
这将为每个视图创建一个dll。如果你还添加/p:UseMerge=true /p:SingleAssemblyName=AppCode到参数中,你只会得到一个单独的dll,加载速度更快。 - David De Sloovere
我正在尝试,但在Azure DevOps中我收到以下错误:##[error]Project\obj\release\aspnetcompilemerge\source\web.config(52,0):错误ASPCONFIG:在应用程序级别之外使用注册为allowDefinition='MachineToApplication'的部分是错误的。此错误可能是由于虚拟目录未在IIS中配置为应用程序引起的。 - Albert
@Albert 你好,你是怎么解决这个问题的?我也遇到了同样的问题。 - Omkar
@Omkar 通过使用'/p:BaseIntermediateOutputPath=$(build.artifactstagingdirectory)\tmp_obj'参数指定另一个路径来解决obj文件夹的问题。 - Albert

2
在Visual Studio 2013+中,选择“生成”->“配置文件”。选择配置文件,然后选择“设置”。在“配置”下面,展开“文件发布选项”,然后勾选“发布期间预编译”的选项。

2
还要记得取消勾选“允许预编译站点可更新”。 - Mik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接