使用razor生成代码?

发布于 2024-10-16 08:42:54 字数 1435 浏览 1 评论 0原文

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

黑白记忆 2024-10-23 08:42:54

我第一次尝试 razor.dll 版本 2.1 .4039.23635 比我预期的要容易得多

这是一个小型工作演示

codegenerator

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);
            }
        }
    }
}

template 看起来像这样

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

输出

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 能够实现 @"..."@那就太好了>@'...'@ 作为 ... 的别名。我添加了这个 razorengine.codeplex-Issue 作为改进请求。如果您计划使用 razor 作为代码生成器,请在 razorengine.codeplex-Issue 上投票

编辑:as @ 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);
              }
        }
    }
}

My first try with razor.dll version 2.1.4039.23635 was much easier than i expected

Here is a small working demo

The codegenerator

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);
            }
        }
    }
}

The template looks like this

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>}
        }
    }
}

Note the <text> element that prevents razor from interpreting the Debug.WriteLine

The output is

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);
        }
    }
}

It would be nice if Razor would implement @"..."@ or @'...'@ as alias for <text>...</text> . I added this razorengine.codeplex-Issue as a request to improve. If you plan to use razor as codegenerator please upvote it at razorengine.codeplex-Issue

Edit: as @Epitka suggested, we can use @: in place of a single line text tag:

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);
              }
        }
    }
}
洒一地阳光 2024-10-23 08:42:54

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

You certainly could use Razor to generate C# code, but it's not really designed for non-XML-like languages. You'd have to have a lot of <text> tags.

划一舟意中人 2024-10-23 08:42:54

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

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

You can use razor just like T4 templates to generate any type of text. See this blog post.

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文