首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用razor生成代码?

使用razor生成代码?
EN

Stack Overflow用户
提问于 2011-02-09 04:38:23
回答 3查看 5.5K关注 0票数 10

在我花很多时间研究Razor和它的适用性之前,我想问你Razor大师们,是否可以使用Razor生成C#代码?你现在能想到什么问题吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-02-09 05:53:09

您当然可以使用Razor来生成C#代码,但它并不是真正为非XML语言设计的。你必须要有很多标签。

票数 7
EN

Stack Overflow用户

发布于 2011-03-21 18:44:59

我第一次尝试使用razor.dll版本2.1.4039.23635比我预想的要简单得多

这是一个小的工作演示

代码生成器

代码语言:javascript
复制
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);
            }
        }
    }
}

模板如下所示

代码语言:javascript
复制
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解释Debug.WriteLine<text>元素

输出

代码语言:javascript
复制
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建议的那样,我们可以使用@:来代替单行文本标记:

代码语言:javascript
复制
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);
              }
        }
    }
}
票数 14
EN

Stack Overflow用户

发布于 2011-02-09 04:40:51

您可以像使用T4模板一样使用razor来生成任何类型的文本。请看这篇博文。

http://weblogs.asp.net/mikaelsoderstrom/archive/2010/08/03/use-razor-for-t4-templates.aspx

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4938134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档