在我投入大量时间研究Razor及其适用性之前,我想问一下Razor大师是否可以使用Razor生成C#代码?你能立刻想到的任何问题吗?
答案 0 :(得分:13)
我第一次尝试使用razor。dll版本2.1.4039.23635比我预期的要容易得多
这是一个小型的工作演示
代码生成器
using System.Diagnostics;
using RazorEngine;
namespace CodeGen3b
{
class Program
{
static void Main(string[] args)
{
string template = ... see below;
try
{
string generatedCode = Razor.Parse(template,
new { UserNamespace = "MyOwnNamespace" });
Debug.WriteLine(generatedCode);
}
catch (System.Exception ex)
{
Debug.WriteLine(ex.Message);
Debug.WriteLine(ex.StackTrace);
}
}
}
}
模板看起来像这样
using System;
namespace @Model.UserNamespace
{
class Program
{
static void Main(string[] args)
{
@for(int i = 0; i < 3; i++){
<text>Debug.WriteLine("hello @i " + @Model.UserNamespace);
</text>}
}
}
}
请注意阻止razor解释<text>
Debug.WriteLine
元素
输出是
using System;
namespace MyOwnNamespace
{
class Program
{
static void Main(string[] args)
{
Debug.WriteLine("hello 0 " + MyOwnNamespace);
Debug.WriteLine("hello 1 " + MyOwnNamespace);
Debug.WriteLine("hello 2 " + MyOwnNamespace);
}
}
}
如果Razor将@"..."@
或@'...'@
作为<text>...</text>
的别名实现,那就太好了。我添加了此razorengine.codeplex-Issue作为改进请求。如果您计划将razor用作代码生成器,请在razorengine.codeplex-Issue
编辑:正如@Epitka建议的那样,我们可以使用@:
代替单行文字标记:
using System;
namespace @Model.UserNamespace
{
class Program
{
static void Main(string[] args)
{
@for(int i = 0; i < 3; i++){
@:Debug.WriteLine("hello @i " + @Model.UserNamespace);
}
}
}
}
答案 1 :(得分:7)
你肯定可以使用Razor生成C#代码,但它并不是真正设计用于非类似XML的语言。你必须有很多&lt; text&gt;标签
答案 2 :(得分:4)
您可以像使用T4模板一样使用剃刀来生成任何类型的文本。请参阅此博客文章。
http://weblogs.asp.net/mikaelsoderstrom/archive/2010/08/03/use-razor-for-t4-templates.aspx