我希望使用来自comandline的aspnet_compiler.exe来编译我的asp.net MVC应用程序,以加快冷启动。
我想知道它是如何确定是否应该进行发布或调试构建。它总是发布吗?它是否取决于运行aspnet_compiler.exe时web.config文件的内容?
如果有人在web.config文件发布后更改了调试属性,那么使用aspnet_compiler.exe编译的应用程序会发生什么?
对此的任何澄清将不胜感激。
答案 0 :(得分:8)
aspnet_compiler
工具根据web.config文件中的<compilation debug="true|false">
设置确定是否应构建调试版本或发布版本。
调用aspnet_compiler
时<compilation debug="true|false">
可以强制<deployment retail="true|false"/>
生成调试输出。
您还可以通过更改true
选项覆盖machine.config中的false
。将此设置为true将强制释放构建,无论web.config中的设置如何。有关详细信息,请参阅passing the -d flag。
在本文中还要注意,在部署之前,应始终将debug设置为false,因为即使使用发布版本,它也会产生开销。
我不确定aspnet_compiler.exe是否在运行时更改了web.config文件,但您可以通过创建测试应用程序,部署它,更改{{1转到{{1}},反之亦然,看看ASP.NET的作用。至少,通过动态编译,循环将使用更新的值重新编译。
答案 1 :(得分:2)
预编译是编译,如果在调试模式下预编译,则无法恢复发布。
在运行时更改<compilation debug="true|false">
取决于您的预编译模式:仅部署或部署和更新。
仅部署:所有文件都将被预编译,调试对它们没有任何影响。
部署和更新:。asmx,.ashx,App_Themes,App_LocalResources将“按原样”并在首次访问时进行编译。请注意,可以在此模式下更新aspx。
检查出来:<compilation debug="XXX in web config, what scenarios does it affect?
答案 2 :(得分:1)
您是否研究过电动工具Web部署项目?该工具为您的构建提供了很大的灵活性,甚至可以与自动TFS构建一起使用。
Here是VS2010新版WDP的链接。
答案 3 :(得分:1)
一个关键点是预编译站点有两种完全不同的方式:就地或部署。如果你的目标只是让启动更快,那么就地编译就更有意义了。不清楚这是否已经是你在做什么。
你可以运行aspnet_compiler - ?得到例子。就地简单地看起来像这样:
aspnet_compiler -v /MyApp
即它,它不会创建新的部署文件夹。相反,它基本上就像您网站中的所有页面都是请求一样,因此不必在运行时编译它们。
就调试模式而言,就地预编译和常规运行时之间没有区别。也就是说,它尊重标准的web.config标志,以及aspx页面中的调试标志。因此,如果在预编译后更改config中的标志,则会在运行时重新编译该站点(除非您再次运行aspnet_compiler!)