Razor模板解密

原创 2015年07月08日 21:11:14

RazorEngine将模板cshtml编译成了。一个程序集,每次编译运行,都会产生一个程序集;
可以用一个控制台程序打印出来,生成的“动态程序集“的名字(动态程序集是不能打印出磁盘中的位置的)

using RazorEngine;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;

namespace Razor解密
{
    class Program
    {
        static void Main(string[] args)
        {
            string cshtml = File.ReadAllText(@"C:\Users\Administrator\Desktop\ceshi\Web2\Web2\Razor.cshtml");
            for (int i = 0; i < 5; i++)
            {
                string html = Razor.Parse(cshtml);//将一个模板页转化为一个程序集
               // Console.WriteLine(html);
            }

            //找到本程序中所有引用的程序集
            Assembly[] asd = AppDomain.CurrentDomain.GetAssemblies(); //Assembly  添加using
            foreach(Assembly a in asd)
            {
                Console.WriteLine(a.FullName+"\r\n");            
            }
            Console.ReadKey();
        }
    }
}

生成的程序集如下;
这里写图片描述
产生的问题:

可以看到生成的程序集非常的多,模板每一次,有新的变量添加(页面内容的添加,就会重复编译,动态生成多个的程序集),大量程序集的影响网站的打开速度的性能

解决办法:给模板页取个别名”缓存名字“

using RazorEngine;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;

namespace Razor解密
{
    class Program
    {
        static void Main(string[] args)
        {
            /*
            string cshtml = File.ReadAllText(@"C:\Users\Administrator\Desktop\ceshi\Web2\Web2\Razor.cshtml");
             */

           /*
            for (int i = 0; i < 5; i++)
            {

                //给要解析模板文件cshtml一个别名字"缓存名",c1
                //这次一旦编成功后,下次如果是再次编译这个相同的模板文件cshtml的话,就让RazorEngine引擎来转换c1好了
                string html = Razor.Parse(cshtml, null, "c1");
                //为了好理解,可以给这个cshtml相同的模板文件再起个别的缓存名字"c2"
                //
            }
            */

            /*
            string html = Razor.Parse(cshtml, null, "c1");
            Razor.Parse(cshtml, null, "c2");

            */
            //1.取得文件的路径
            string fullPath=File.ReadAllText(@"C:\Users\Administrator\Desktop\ceshi\Web2\Web2\Razor.cshtml");


            for (int i = 0; i < 10; i++)
            {
                //2.读出模板中的内容
                string cshtml = File.ReadAllText(fullPath);
                //取文件的全路径+文件修改的时间做cacheName不一样(每一次文件的编译的时候用的都是同一个缓存的名字)
                //修改时间保证相同文件做了内容修改之后的cacheName不一样(也可以用文件内容的MD5值,)
                string cacheName = fullPath + File.GetLastWriteTime(fullPath);
                string html = Razor.Parse(cshtml, null, cacheName);
                Console.WriteLine(html);
            }

            //找到本程序中所有引用的程序集
            Assembly[] asd = AppDomain.CurrentDomain.GetAssemblies(); //Assembly  添加using
            foreach(Assembly a in asd)
            {
                Console.WriteLine(a.FullName+"\r\n");            
            }
            Console.ReadKey();
        }
    }
}

取了一个别名字后动态程序集生成的效果

发现只有一个了
这里写图片描述

给同一个模板页取两个不同的别名字后效果

这里写图片描述

给同一个模板页取加上时间的别名字后效果

这里写图片描述
这里写图片描述

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Razor模板引擎工作原理及怎么调用外部方法演示

工作原理:RazorEngine引擎就是将cshtml模板文件进行了字符串的拼接,然后,再封装为一个程序集。。。再通过一般处理程序,进行调用。。下面来封装一个方法。来简化上一节内容的操作; 1.获...

Razor模板引擎

为什么使用Reazor原因:类似于前边写的模板页,自己写了。还需要用replace来替换成自己想要的变量。。常见的模板引擎:Razor、Nvelocity、Vtemplate。 Razor有VS自动提...

MVC| Razor 布局-模板页 | ViewStart.cshtml

ViewStart.cshtml视图页面 要点1 MVC中执行任何一个视图之前都要先执行Views文件夹下的 _ViewStart.cshtml 视图的内容 注意点:想要上面的描述成立,则在actio...

Mvc示例之四Razor模板(一)

Razor模板是Mvc3开始引用的模板,是Mvc开发推荐模板。本节主要介绍Mvc模板及局部页使用、Razor语法,下一节介绍MvcHelper用法并通过一个示例详细讲解Razor模板前后台传值。 Mv...

使用Razor拼接一个CheckBox标签

为什么不在cshtm模板页中直接写一个select标签呢? @{ for(int i=0;i<Model.Count;i++) ...

自己写一个Raw方法

遇到的的问题 如果在RPcshtmHelper的类中写一个返回值类型是 ‘ string ’类型的方法 public static string Test3() { ...

C#模板引擎 RazorEngine3.7的简单使用

RazorEngine是什么,可以用来做什么就不多介绍了,网上的说明还是很多的。 但网上大多的示例都是2.0版本的,RazorEngine的3.7版本还是改动很大的,有必要做下简单的记录。 可通过nu...

Razor模板引擎

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)