在我花很多时间研究Razor和它的适用性之前,我想问你Razor大师们,是否可以使用Razor生成C#代码?你现在能想到什么问题吗?
发布于 2011-02-09 05:53:09
您当然可以使用Razor来生成C#代码,但它并不是真正为非XML语言设计的。你必须要有很多标签。
发布于 2011-03-21 18:44:59
我第一次尝试使用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解释Debug.WriteLine的<text>元素
输出为
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);
}
}
}
}发布于 2011-02-09 04:40:51
您可以像使用T4模板一样使用razor来生成任何类型的文本。请看这篇博文。
http://weblogs.asp.net/mikaelsoderstrom/archive/2010/08/03/use-razor-for-t4-templates.aspx
https://stackoverflow.com/questions/4938134
复制相似问题