好久没写博客了,回宁波后最近几个月一直忙些线下的事情。

敲代码方面脱产有阵子了,生疏了,回头一看,这行业果然更新飞快。

最近线下的事情基本忙完,准备开始干回老本行,最重要的一件事就是升级abplus库,以符合dotnet standard标准。

本篇就是看到abplus里的T4工具,想着换个模板引擎,据说Razor Engine不错,所以玩了下看看。

Razor Engine

介绍RazorEngine的资料很多,这里就简单提提:

  1. RazorEngine最早出自微软AspNet Mvc框架,经历过那个时期的老人基本有印象,Web开发的网页文件,从.aspx文件变为了.cshtml
  2. Razor语法非常干净利落,用起来比.aspx的视图语法(各种<% %>配对,心累)舒服多了,也正因为此,很多人希望用它替代T4模板(T4模板语法较旧,没有专门编辑器的话,就没有高亮和智能提示)
  3. Razor模板有强类型概念,对于循环生成多个结果比T4方便
  4. Razor使用场景非常灵活,以nuget包形式安装,只要把模板(字符串)和替换数据给它,就能给出替换结果,可以处理运行时动态模板。

但是实际用过后发现,目前RazorEngine在某些地方是不如T4方便的:

  1. RazorEngine只处理模板语法,应用场合很灵活,输入只要模板的内容,所以它不管理模板文件,你需要自己管理模板文件,并读取模板内容丢给它;
  2. 与上面一样,RazorEngine不管理输出文件,只能你自己控制输出文件路径,按照dotnet core之前的framework的情况,你还得手动把输出的代码文件(比如类定义.cs文件)添加到项目里,这个就不如T4(模板文件和输出文件在vs中直接嵌套式关联,并直接可参与当前项目编译)方便;

综上,利大于弊,还是值得使用的,不过目前dotnet core版的RazorEngine还不太稳定,这次没跑成功,略遗憾。

下面给的是framework 4.6下的示例代码。

示例代码

首先,安装包

Install-Package RazorEngine

示例代码

static void Main(string[] args)
{
//读取模板,按照嵌入式资源文件方式管理
var assembly = Assembly.GetExecutingAssembly();
//默认命名空间,这里和程序集名称一致
var defaultNameSpace = assembly.GetName().Name;
//模板文件名,如果有文件夹,则要加上文件夹名
var templateFileName = "template1.cshtml"; var templateContent = string.Empty;
using (var reader = new StreamReader(
assembly.GetManifestResourceStream(
$"{defaultNameSpace}.{templateFileName}")))
{
templateContent = reader.ReadToEnd();
} //编译模板
Engine.Razor.Compile(templateContent, "templateKey", null); //使用模板,这里的model信息通过其他途径获取,就能实现很多工具
//1.连DB,根据表生成类
//2.读dll,根据程序集内定义的实体信息反射得到类名数据等,
// 生成辅助代码,如简单CRUD的DTO
//3.读dll,根据程序集里DTO的定义、AppService接口定义,
// 或WebApi的定义生成js或者ts调用代理和前端的模型定义
var output = Engine.Razor.Run("templateKey", null,
new { Name = "MyRazorEngineTestClass" }); //输出到文件
Console.WriteLine(assembly.Location);
var folderName = "RazorOutput";
var fileName = "tempClass.cs";
var targetFolder = $"{
assembly.Location.Substring(0,
assembly.Location.LastIndexOf('\\'))}\\..\\..\\{folderName}"; if (!Directory.Exists(targetFolder))
{
Directory.CreateDirectory(targetFolder);
}
var targetPath = $"{targetFolder}\\{fileName}";
File.WriteAllText(targetPath, output); Console.Write(output); Console.ReadLine();
}

demo项目解决方案如图

可以看到代码中有一个模板编译的步骤,可以了解下RazorEngine运行的原理

完。

[2018-08-25]模板引擎Razor Engine 用法示例的更多相关文章

  1. 理解模板引擎Razor 的原理

    Razor是ASP.NET MVC 3中新加入的技术,以作为ASPX引擎的一个新的替代项.简洁的语法与.NET Framework 结合,广泛应用于ASP.NET MVC 项目.Razor Pad是一 ...

  2. 理解模板引擎Razor 的原理(转载)

    Razor是ASP.NET MVC 3中新加入的技术,以作为ASPX引擎的一个新的替代项.简洁的语法与.NET Framework 结合,广泛应用于ASP.NET MVC 项目.Razor Pad是一 ...

  3. 模板引擎doT.js用法详解

    作为一名前端攻城师,经常会遇到从后台ajax拉取数据再显示在页面的情境,一开始我们都是从后台拉取再用字符串拼接的方式去更达到数据显示在页面! <!-- 显示区域 --> <div i ...

  4. Handlebars 模板引擎之前后端用法

    前言 不知不觉间,居然已经这么久没有写博客了,坚持还真是世界上最难的事情啊. 不过我最近也没闲着,辞工换工.恋爱失恋.深圳北京都经历了一番,这有起有落的生活实在是太刺激了,就如拿着两把菜刀剁洋葱一样, ...

  5. MVC小系列(二)【Razor 模板引擎】

    Razor 模板引擎 Razor模板页:它使我们不用再使用master模板了 一 :@Url.Content:是可以加载CSS和JS等文件比如: <link href="@Url.Co ...

  6. Express全系列教程之(十一):渲染ejs模板引擎

    一.简介 相比于jade模板引擎,ejs对原HTML语言就未作出结构上的改变,只不过在其交互数据方面做出了些许修改,相比于jade更加简单易用.因此其学习成本是很低的.您也可参考ejs官网:https ...

  7. DotLiquid模板引擎简介

    DotLiquid是一个在.Net Framework上运行的模板引擎,采用Ruby的Liquid语法,这个语法广泛的用在Ruby on rails和Django等网页框架中. DotLiquid相比 ...

  8. express-9 Handlebars模板引擎(2)

    视图和布局 视图通常表现为网站上的各个页面(它也可以表现为页面中AJAX局部加载的内容,或一封电子邮件,或页面上的任何东西).默认情况下,Express会在views子目录中查找视图.布局是一种特殊的 ...

  9. phpcms 源码分析七: 模板引擎实现

    这次是逆雪寒对模板引擎实现的分析: 1 /* 函数 template函数是在global.func.php 里面定义的. 在前面的phpcms 的首页 index.php 里就见到了. 用法: inc ...

随机推荐

  1. 【spring boot】8.spring boot的日志框架logback使用

    在继续上一篇的Debug调试之后,把spring boot的日志框架使用情况逐步蚕食. 参考:http://tengj.top/2017/04/05/springbo 开篇之前,贴上完整applica ...

  2. 【转】如何利用多核CPU来加速你的Linux命令 — awk, sed, bzip2, grep, wc等

    如何利用多核CPU来加速你的Linux命令 — awk, sed, bzip2, grep, wc等   你是否曾经有过要计算一个非常大的数据(几百GB)的需求?或在里面搜索,或其它操作——一些无法并 ...

  3. java基础篇6之代理

    代理的概念与应用 Class clazzProxy = Proxy.getProxyClass(Collection.class.getClassLoader,Collection.class); c ...

  4. MySQL监控工具——innotop

    MySQL监控工具--innotop innotop是一个mysql数据库实时监控工具,其功能强大,信息种类繁多,很能体现数据库的状态. 它实际上是一个perl脚本,整合show status/sho ...

  5. 【重点突破】——使用Canvas进行绘图图像

    一.引言 本文主要是canvas绘图中绘制图像的部分,做了几个练习,综合起来,复习canvas绘图以及定时器的使用. 二.canvas绘制小飞机在指定位置 <!DOCTYPE html> ...

  6. 使用Python+Selenium过程中中常见的问题汇总

    1.提示:UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 542: ordinal not in range( ...

  7. UNP学习笔记(第二章:传输层)

    本章的焦点是传输层,包括TCP.UDP和SCTP. 绝大多数客户/服务器网络应用使用TCP或UDP.SCTP是一个较新的协议. UDP是一个简单的.不可靠的数据报协议.而TCP是一个复杂.可靠的字节流 ...

  8. jquery 创建jquery的dom对象---------------获取自身的html节点及其子节点的html

    1.var domObj = $("<dom>"); 2.var a = $("<a href='www.baidu.com'>"); ...

  9. SQL检索语句及过滤语句

    首先推荐一款比较好用的数据库管理软件:navicat premium. 数据库中最重要的检索功能:SELECT语句 1.检索单个列:select 列名 from 表名: 2.检索多个列:select ...

  10. Character set &#39;utf8mb4&#39; is not a compiled character set

    近期在一次MySQL数据迁移的过程中遭遇了字符集的问题,提示为"Character set 'utf8mb4' is not a compiled character set".即 ...