发布选项期间新的预编译对MVC4应用程序有什么影响?

Els*_*mer 81 asp.net-mvc-4 visual-studio-2012

因此,我最近将Visual Studio 2012更新为更新2.请注意,下次我发布我的应用程序时(在这种情况下通过文件发布)我注意到有三个新选项:

  1. 在发布之前删除所有现有文件
  2. 发布期间预编译(带有指向配置的链接)
  3. 从App_Data文件夹中排除文件

第一个和第三个选项非常明显,但我找不到第二个选项的任何文档,因为它适用于MVC.当我检查它时,网站上生成的文件似乎没有任何变化,我没有看到任何真正的性能变化.

Jim*_*mmy 81

使用ASP.NET预编译器可能会对您的MVC应用程序产生以下影响:

  • 如果App_Code中有任何内容,则会在部署之前将其预编译为DLL.如果没有预编译,这将由ASP.NET运行时动态发生.
  • 如果您选择使页面可更新的选项(即取消选中高级设置对话框中的第一个复选框),它还将预编译您的视图(ASPX和Razor),而不是在运行时动态编译它们."允许预编译站点可更新"的默认(已选中)设置允许您更新视图内容,而无需重建整个项目.

如果App_Code中没有任何文件,并且您希望您的站点保持可更新状态,那么它似乎没有做太多.

  • 没有更新页面的一个额外好处是,VS会发现类型错误在你的意见,他们让你直播的网站之前. (15认同)
  • 什么是cshtml文件的良好测试策略? (13认同)
  • @Elsimer你的.cshtml文件仍然存在,但如果它们的内容是预编译的,你会发现它们的内容被替换为"这是一个由预编译工具生成的标记文件,不应该被删除!". (7认同)
  • 此外,当为每个页面动态调用编译器时,perf增益主要在初始站点启动时.一旦页面被命中一次(并编译),即使您没有预编译,该编译结果也将用于后续页面加载. (4认同)
  • @Chris你应该重新考虑你的测试策略,如果这些错误在没有预编译选项的情况下没有被捕获. (4认同)
  • @AndersLindén:只测试控制器动作的实际渲染响应.这将调用Razor,如果它产生异常,那将导致您的测试失败.但是,这也是为什么您的观点应该*非常轻松的代码.您无法像在课堂上那样对视图代码进行细粒度的单元测试.它几乎只是通过或失败,即便如此,传递只是意味着它没有产生任何异常,而不是它实际上做了它应该做的事情. (2认同)
  • @Stijn在编译之前,你不应该费心去测试. (2认同)