asp.net - 为什么 ASP.NET 页面(表单和 MVC)是动态编译的?

标签 asp.net

ASP.NET 中有一个模式 - 每当有一段标记生成代码时(例如 WebForms 或 中的 .aspx/.ascx 文件) MVC3 中的 >.cshtml 文件),这些文件在运行时动态编译。 aspnet_compiler 将为它们生成另一个程序集,该程序集引用您的代码隐藏程序集。

这种方法对我来说似乎很尴尬,我不明白为什么它还没有停止。更好的方法(在我看来)就像在 Winforms 或资源文件中一样 - 您有 .whatever 文件,然后是 .whatever.desginer.cs 文件。该设计器文件是在您键入时在运行时创建的。当您编译时,编译器不会关心您的 .whatever 文件,它只是采用 .whatever.designer.cs 文件并生成单个实体程序集。

这提供了几个好处:

  • 您可以相互继承表单,类似于 Windows 表单;
  • 您始终可以查看正在生成的代码,可能会调整标记以生成更好的代码;
  • 您可以轻松实例化表单的强类型实例;

我从动态编译中看到的唯一好处是

  • 您可以随时更改标记文件,无需重新编译应用。

说实话,我经常想要前三个好处之一,但从来不想要最后一个。重新编译应用程序以查看您的更改并不是什么大问题。特别是因为在使用代码隐藏时无论如何都必须这样做,而这将是您花费最多时间的地方。当您将应用程序交付给客户端时,您将其作为整体的预编译 block 交付。当您更新时,您会更新所有内容,而不仅仅是单个 .aspx 文件 - 没有意义。

那么……为什么会这样呢?我错过了什么?

最佳答案

听起来您指的是 ASP.Net 网站。 ASP.Net Web 应用程序类似于 ASP.Net 网站,但使用 .designer.cs 文件并生成单个程序集。

参见ASP.NET Web Site or ASP.NET Web Application? .

关于asp.net - 为什么 ASP.NET 页面(表单和 MVC)是动态编译的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5030233/

相关文章:

c# - 根据文化将日期和时间正则表达式设置为 RegularExpressionValidator

.net - 为每个用户创建子域

ASP.net 检查页面是 http 还是 https

asp.net - Web.Debug.config 不会将连接字符串转换为 MVC 5 项目中的 Web.config

用于生成表行的 JavaScript

c# - 覆盖 AspNetCore.Identity 表中的默认索引

简单 Aurelia ASP.Net 5.0 RC1 设置中的 Javascript 错误

c# - .NETCoreApp是哪个MVC版本,版本=v1.0?

c# - 获取文本文件并随应用程序一起提供

asp.net - 响应式网页设计不适用于图片