我有一个控制台应用程序,该应用程序使用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";
答案 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>