RazorEngine无法解析模板

时间:2018-07-20 19:24:03

标签: razorengine

我有一个控制台应用程序,该应用程序使用RazorEngine根据应用程序的运行情况发送电子邮件。我可以在开发IDE中以及通过可执行文件运行控制台应用程序成功发送电子邮件。但是,当我从预定任务运行控制台应用程序时,我在行上收到错误“无法解析模板”,

var emailHtmlBody = Engine.Razor.RunCompile("ResponseErrors.cshtml", null, model);

有人碰到这个吗?

var config = new TemplateServiceConfiguration
 {
    TemplateManager = new ResolvePathTemplateManager(new[] {"EmailTemplates"}),
    DisableTempFileLocking = true
 };

 Engine.Razor = RazorEngineService.Create(config);
 var emailHtmlBody = Engine.Razor.RunCompile("ResponseErrors.cshtml", null, model);

更新1:

  • 执行计划任务的服务器与控制台应用程序所在的服务器相同。
  • 在计划任务中执行控制台应用程序的帐户是对服务器具有本地管理员权限的域帐户。

更新2:

在用户的temp文件夹中没有创建RazorEngine ...文件夹。

更新3:

我刚刚创建了一个示例控制台应用程序,现在它在IDE中做同样的事情。我把它放在GitHub as RazorEngine_Test

更新4:

似乎TemplateServiceConfiguration不能按设计工作,或者我处理的示例不正确。我用下面的2行更新了测试项目,这解决了我的问题。我不认为这是预期的实现方法,但它可行。发布消息是因为我知道有人会遇到同样的问题。

string path = AppDomain.CurrentDomain.BaseDirectory;
string filePath = $"{path}EmailTemplates\\ExceptionEmail.cshtml";

2 个答案:

答案 0 :(得分:1)

因此,我能够确认今天的Production中的修复。添加这两行确实可以解决问题。因此,完整的代码块是

 var config = new TemplateServiceConfiguration
 {
    TemplateManager = new ResolvePathTemplateManager(new[] {"EmailTemplates"}),
    DisableTempFileLocking = true
 };

 string path = AppDomain.CurrentDomain.BaseDirectory;
 string filePath = $"{path}EmailTemplates\\ExceptionEmail.cshtml";

 Engine.Razor = RazorEngineService.Create(config);
 var emailHtmlBody = Engine.Razor.RunCompile(filePath, null, model);

答案 1 :(得分:1)

遇到相同的问题,我的解决方案是外部更改项目文件ProjectName.csproj并将视图添加为内容而不是无 来自

    <None Include="Views/Folder/Name.cshtml"/>

    <Content Include="Views\Emails\Name.cshtml">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>