Asp.net mvc 4 重写代码生成

Asp.net mvc 4 重写代码生成,asp.net-mvc-4,razor,Asp.net Mvc 4,Razor,我需要更改Razor视图引擎生成的视图子类的loginc。 据我所知,MVC解析Razor cshtml文件并生成IView子类Render方法,该方法将html标记写入writer对象。 在我的例子中,因为环境/主机将有更多的信息(元数据),所以我想利用这些信息。 我需要进入Razor从cshtml解析AST并将其传递给CodeGenerator的地方。目前,我正试图在aspnetwebstack源代码中找到该步骤。 我还没有找到,我怀疑这些步骤是混合在一起的,因此没有单独的get AST和g

我需要更改Razor视图引擎生成的视图子类的loginc。 据我所知,MVC解析Razor cshtml文件并生成IView子类Render方法,该方法将html标记写入writer对象。 在我的例子中,因为环境/主机将有更多的信息(元数据),所以我想利用这些信息。 我需要进入Razor从cshtml解析AST并将其传递给CodeGenerator的地方。目前,我正试图在aspnetwebstack源代码中找到该步骤。
我还没有找到,我怀疑这些步骤是混合在一起的,因此没有单独的get AST和generate code步骤。

到目前为止,我所知道的是

Razor模板引擎解析器返回包含Span和Block元素的AST。跨距似乎是叶节点,它是。我做了一些测试代码,问题是span没有分离不同的html节点,而是包含原始html字符串,直到切换到C代码。例如:

<html><body><!-- Single statement block -->@{ var myMessage =   \"Hello World \"+123; }</body></html>
@{var myMessage=\“你好,世界\”+123;}
给我这棵树

* start block  Markup 
** span <html><body><!-- Single statement block -->
** start block  Statement : @{ var myMessage =   "Hello World "+666; }
*** span @
*** span {
*** span  var myMessage =        "Hello World "+123;
*** span }
** end block Statement
** span </body></html>
* end block Markup
*开始块标记
**跨度
**开始块语句:@{var myMessage=“Hello World”+666;}
***跨度@
***跨度{
***span var myMessage=“你好世界”+123;
***span}
**结束块语句
**跨度
*端块标记

有趣的是,如果解析器不提供有关html标记的信息并将连续的html部分合并为一个字符串,那么编辑器如何根据嵌套将它们折叠起来?

在构建AST节点时,解析器似乎为每个节点都附加了代码生成器。