时间:2011-02-08 20:38:23

标签: razor code-generation

在我投入大量时间研究Razor及其适用性之前,我想问一下Razor大师是否可以使用Razor生成C#代码?你能立刻想到的任何问题吗?

3 个答案:

答案 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