【问题标题】:razorengine - run without compiling into dynamic assemblyrazorengine - 在不编译成动态程序集的情况下运行
【发布时间】:2015-05-26 10:27:29
【问题描述】:

在以前的版本中,可以使用 Parse() 来完成这项工作。

https://razorengine.codeplex.com/查看旧文档

string template = "Hello @Model.Name! Welcome to Razor!";
string result = Razor.Parse(template, new { Name = "World" });

性感。但是现在只有 Run() 和 RunCompile()。为了让 Run() 工作,模板需要已经编译 - 我不能只传入模板的名称。

由于我确实有几乎没有重复使用的剃须刀模板,我希望能够不必将这些模板编译成动态程序集并将它们加载到应用程序域中。临时文件问题是另一个原因。

这仍然可以使用 RazorEngine 吗?

【问题讨论】:

    标签: razorengine


    【解决方案1】:

    不必将这些模板编译成动态程序集

    这仍然可以使用 RazorEngine 吗?

    没有,从来没有。 Parse 将像 RunCompile 一样编译模板、加载和执行它。更糟糕的是 Parse 不会缓存模板,因此加载的程序集甚至无法访问(=内存泄漏)

    我不能只传入模板的名称

    如果您将using RazorEngine.Templating 添加到文件顶部,则可以通过扩展方法。您可以使用快速入门的“RunCompile”示例之一:https://github.com/Antaris/RazorEngine#quickstart

    我确实有几乎没有重复使用的剃须刀模板

    你应该看看隔离API,不时重启隔离的AppDomain。另一方面(如果您不想支付 AppDomain-boundary 的费用),您可以自己处理 AppDomain 重启并使用常规 API。

    希望这会有所帮助,

    matthid(披露:RazorEngine 贡献者)

    【讨论】:

    • 感谢您澄清 Parse() 还创建了一个动态程序集。我希望有一种方法可以不为我想“翻译”的任何小字符串创建程序集:-) ### 将查看隔离的应用程序域。我还需要编写自己的 CachingProvider 或 TemplateManager 以实现自动应用程序域回收吗?
    • 取决于您想要做什么:仅计算访问次数或定期重启(每天/每周/每月一次)应该非常简单。任何取决于单个模板重新编译次数的自定义逻辑都需要更多代码。但是回收并没有开箱即用的体验(因为它几乎总是取决于您的需求)。
    猜你喜欢
    • 1970-01-01
    • 2011-05-02
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多