我正在将我的mvc 3.0项目更新为.net 4.0和mvc 4.0,并发现Fluent电子邮件停止工作。 我尝试使用最新版本http://www.nuget.org/packages/fluent-email/1.2.2和预发布版本以及http://www.nuget.org/packages/fluent-email/1.3.0-RazorEngine
但是收到错误Unable to compile template
An exception of type 'RazorEngine.Templating.TemplateCompilationException' occurred in RazorEngine.dll but was not handled in user code
Additional information: Unable to compile template. Source file 'C:\Windows\TEMP\xrhyjmc5.0.cs' could not be found
可能有人知道如何解决这个问题?
我的主叫代码:
email = Email
.From(model.FromEmail, model.Username)
.To(betsTipsterEmail)
.Subject(emailSubject)
.UsingTemplateFromFile(emailBodyFile, model)
.Body(model.Body)
.UsingClient(client);
我的Confirmation.html
模板:
<html>
<body>
<p>
Hi @Model.Username,
bla<br /><br />
bla<br /><br />
<a href="@Model.Url">@Model.Url</a><br /><br />
bla
</p>
<p>
Kind Regards,<br /><br />
bla
</p>
</body>
</html>
RazorEngine版本3.2.0 期待这篇文章http://www.britishdeveloper.co.uk/2011/07/razorengine-templatecompilationexceptio.html但没有帮助
答案 0 :(得分:0)
我遇到过类似的问题。尝试用大括号包装每个@Model
来电。例如。 @(Model.Username)
。 1.3.0的最新稳定版刚刚发布,你也应该更新。
答案 1 :(得分:0)
对于那些在.Net Core中有此问题的人。
我使用EmbeddedResources作为电子邮件模板,并使用DI添加剃刀渲染,如下所示:services.AddRazorRenderer()
在检查了FluentEMail Razor和RazorLight doc的单元测试之后
我发现我应该将typeof(rootType)
传递给services.AddRazorRenderer(typeof(rootType))
,以使我的代码正常工作,否则RazorLight无法找到TemplateKey。
从FluentEmail Razor测试中获取的示例波纹管展示了如何添加RazorRender:
public void Should_be_able_to_use_project_layout_with_viewbag()
{
var projectRoot = Directory.GetCurrentDirectory();
Email.DefaultRenderer = new RazorRenderer(projectRoot);
string template = @"
@{
Layout = ""./Shared/_Layout.cshtml"";
}
sup @Model.Name here is a list @foreach(var i in Model.Numbers) { @i }";
dynamic viewBag = new ExpandoObject();
viewBag.Title = "Hello!";
var email = new Email(fromEmail)
.To(toEmail)
.Subject(subject)
.UsingTemplate(template, new ViewModelWithViewBag{ Name = "LUKE", Numbers = new[] { "1", "2", "3" }, ViewBag = viewBag});
Assert.AreEqual($"<h1>Hello!</h1>{Environment.NewLine}<div>{Environment.NewLine}sup LUKE here is a list 123</div>", email.Data.Body);
}
FluentEmail提供3种添加RazorRenderer的方法,您可以选中FluentEmailRazorBuilderExtensions.cs,然后选择正确的方法。
如果遇到相同的问题,请参考FluentEmail Razor Test和RazorLight Doc和FluentEmail issue。