0

我正在将我的 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但没有帮助

4

2 回答 2

0

我遇到过类似的问题。@Model尝试用大括号包裹你的每一个电话。例如。@(Model.Username). 1.3.0 的最新稳定版本刚刚发布,您也应该更新。

于 2014-03-06T00:50:13.603 回答
0

对于那些在 .Net Core 中遇到此问题的人。我使用 EmbeddedResources 作为我的电子邮件模板,并且我正在使用 DI 添加 razor 渲染,如下所示: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 测试RazorLight DocFluentEmail 问题

于 2019-11-26T13:56:39.343 回答