使用.net代码更新cshtml文件时,为什么不需要编译?

我正在使用Asp.net Mvc,我想知道为什么我不需要在cshtml文件中更新.net代码时编译我的项目? 现在,如果我们谈论html \ css更新,那么我清楚地理解为什么简单的刷新就足够了,但是在这些情况下.net代码如何动态编译?

让我说我有一个视图,我想添加一些c#代码,如Datetime.Now.ToString();
现在我通常可以将这行代码添加到我的cshtml文件中,保存文件,刷新页面并查看结果而不编译。

如果我通过向我的模型添加属性来“按书”执行相同操作,在我的控制器中分配Datetime.Now.ToString()并简单地渲染新的var我需要编译我的代码以便查看更改。

这个神奇的工作原理如何? 如果这么简单,为什么不能用.cs文件呢?

Ps同样的问题与asp.net应用程序和aspx \ ascx页面相关。

.cshtml文件将被及时编译,即当请求到达那些页面时。

但是,控制器已预编译并存储到项目的DLL文件中。

决定使用哪一个取决于您的需求。 预编译可以缩短响应时间(因为您之前编译过代码),但即时编译为您提供了灵活性。

ASP.NET基础结构的一部分是ASP.NET编译器。 它负责将声明性资源(* .aspx,* .ascx,* .cshtml等)编译为可执行代码。

没有魔力,运行时决定何时运行编译器(例如,自上次运行以来资源已更改)然后调用编译器从声明性代码中创建命令性代码(例如* .aspx编译为*的.cs)。 然后它调用常规语言编译器来获取包含CIL的* .dll。

这首次访问资源需要一些时间,提前预编译所有声明性资源可能很方便。

概述:

http://msdn.microsoft.com/en-us/library/vstudio/ms178466(v=vs.100).aspx

预编译:

http://msdn.microsoft.com/en-us/library/aa983464(v=vs.110).aspx