用于在运行时生成字符串的文本模板(如Razor或T4)

本文关键字:Razor T4 文本 运行时 字符串 用于 | 更新日期: 2023-09-27 18:10:49

是否有任何工具可以用来从模板生成字符串,我正在寻找类似于Razor的东西。

字符串应该能够在运行时生成,并且不依赖于Visual Studio(如T4)。这个框架应该可以在Silverlight中工作。

RazorEngine是一个满足要求的框架,但不能在Silverlight中工作。

用于在运行时生成字符串的文本模板(如Razor或T4)

希望我理解你所要求的,但我认为你可以使T4在SL中工作。可以要求T4生成有时称为运行时模板的东西。我已经定义了我的模板(非常简单)并将其添加到我的Silverlight项目中。

<#
    for (var iter = 0; iter < 10; ++iter)
    {
#>
    This is just a test: #<#=iter#>
<#
    }
#>

通常会生成如下输出:

This is just a test: #0
This is just a test: #1
This is just a test: #2
This is just a test: #3
This is just a test: #4
This is just a test: #5
This is just a test: #6
This is just a test: #7
This is just a test: #8
This is just a test: #9

但是在这种情况下,我喜欢生成生成输出的代码,即运行时模板。为了做到这一点,我将自定义工具切换为:TextTemplatingFilePreprocessor

现在模板生成生成该输出的代码。如果不使用hostspecific=true,就不会得到Visual Studio依赖项。通过使用成员变量扩展分部类,并从模板文件中引用它们,您可以在运行时修改模板上的行为。

Silverlight的问题是Silverlight缺少System.CodeDom.Compiler.CompilerError和System.CodeDom.Compiler.CompilerErrorCollection类。

我通过创建自己的类来解决这个问题(只是为了这个目的):
namespace System.CodeDom.Compiler
{
    public class CompilerError
    {
        public string ErrorText;
        public bool IsWarning;
    }
    public class CompilerErrorCollection : List<CompilerError>
    {
    }
}

现在我的模板编译了,我从Silverlight应用程序中这样做来产生输出:

var runtimeTemplate = new MyRuntimeTemplate();
string output = runtimeTemplate.TransformText();