更新JNTemplate后,无法生成html

起因

博客项目是14年创建的,写的很简单,只是满足自己的使用,因为当时买的阿里云单核1G内存的ECS,当时考虑的资源毕竟有限,文章是生成静态页,最初是使用NVelocity生成静态页.后面改成国产组件JNTemplate,打开项目,发现JNTemplate组件有更新了,便进行了更新.然后单文件发布到ECS,在生成静态页的时候,无法生成.

升级JNTemplate

JNTemplate是国产开源组件:
  1. 源码地址: gitee源码地址 ,从1.4.1,开源协议改为MIT,可以大胆使用
  2. 文档地址: 中文手册  
JNTemplate从1.4.2升级到2.2.5
升级JNTemplate版本
错误信息:
查看错误日志

看到日志错误中,有匿名类型,加上failed. on  [line:6,col:13],还有Render,大体知道问题在哪里了,应该是出现无法解析匿名类型.新建一个项目进行测试:
using JinianNet.JNTemplate;

//因为博客项目,在使用匿名类型后,使用Render解析html模板
var article = new
{
    Name = ".Net 7源码编译",
    CreateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
};

var template = Engine.CreateTemplate("<p>你好,$art.Name 创建时间:$art.CreateTime</p>");
template.Set("art", article);
var result = template.Render();
Console.WriteLine(result);

重现错误

改为具体类型

using JinianNet.JNTemplate;

//不在使用匿名类型
var article = new Article
{
    Name = ".Net 7源码编译",
    CreateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
};
var template = Engine.CreateTemplate("<p>你好,$art.Name 创建时间:$art.CreateTime</p>");
template.Set("art", article);
var result = template.Render();
Console.WriteLine(result);

public class Article
{
    public string Name { get; set; }

    public string CreateTime { get; set; }
}

改为具体类型,打印结果

后面在查看JNTemplate更新日志,在2.0.0,JNTemplate组件作者,为了性能,将解释性改为编译型模板引擎.

JNTemplate在2.0.0,由解释性模板引擎改为编译型模板引擎


秋风 2022-01-02