Asp.net 从一个文件生成Razor和Webforms标记

Asp.net 从一个文件生成Razor和Webforms标记,asp.net,webforms,razor,t4,Asp.net,Webforms,Razor,T4,在我们的项目中,我们偶然发现了以下问题:我们需要向开发人员提供两种母版页(基于Razor和基于Webforms),每种母版页都将生成完全相同的HTML输出 我们最初的想法是使用T4模板引擎,并且只有一个模板将生成两个文件:*.master和*.cshtml,其中,例如@usingRazor指令将对应于,在一些头脑风暴自定义模板()完成之后 其想法是拥有两个模板:一个模板用于保存HTML和条件呈现逻辑,另一个模板用于使用不同参数运行前一个模板两次 模板运行程序可能如下所示: <#@ incl

在我们的项目中,我们偶然发现了以下问题:我们需要向开发人员提供两种母版页(基于Razor和基于Webforms),每种母版页都将生成完全相同的HTML输出


我们最初的想法是使用T4模板引擎,并且只有一个模板将生成两个文件:
*.master
*.cshtml
,其中,例如
@using
Razor指令将对应于
,在一些头脑风暴自定义模板()完成之后

其想法是拥有两个模板:一个模板用于保存HTML和条件呈现逻辑,另一个模板用于使用不同参数运行前一个模板两次

模板运行程序可能如下所示:

<#@ include file="GenericMasterPageTemplate.tt" #>
<#
GenericMasterPageTemplate genericMasterPageTemplate = new  GenericMasterPageTemplate();
genericMasterPageTemplate._viewEngine = "Razor";
genericMasterPageTemplate.Output.File = @"PATH_TO_OUTPUT_RAZOR_TEMPLATE";
genericMasterPageTemplate.Render();

genericMasterPageTemplate._viewEngine = "Webforms";
genericMasterPageTemplate.Output.File = @"PATH_TO_OUTPUT_WEBFORMS_TEMPLATE";
genericMasterPageTemplate.Render();
#>


显然,第一个模板中的条件逻辑将分析_viewEngine参数的值,并适当地呈现必要的指令。

如果这对您有效,我觉得没问题。如果您将所有生成代码放在T4文件中的一个函数中并调用两次,您可能会有一个TT文件,但由于我从未将模板呈现给多个文件,因此我无法100%确定这种方法是否有效。谢谢您的评论。我的想法是,有一个模板可以解释不同的输入参数,另一个文件可以设置并运行模板,这对于职责分离来说是一件好事。除了考虑T4内部函数之外,我认为从技术上讲,不可能将可重用模板与运行它的参数和代码结合起来。也许我在这一点上错了,但这是一个不同的问题。在不知道模板外观的细节的情况下,我不能说这是否不可能,但找到一个你喜欢的解决方案是好的。