在dotnet core 2中生成Razor HTML电子邮件

在dotnet core 2中生成Razor HTML电子邮件,razor,.net-core,asp.net-core-2.0,razorengine,Razor,.net Core,Asp.net Core 2.0,Razorengine,如何在dotnetcore中使用Razor生成电子邮件(html),而不是从MVC应用程序(从控制台应用程序思考)生成 RazorEngine在.NET4.x中做得很好,但在DotnetCore中不起作用 RazorEngineLight在DotnetCore1.x中工作,但在2.x中不工作 本文还提到了一些其他的选项:但是没有一个在.NETCore2.0中真正起作用 两年后编辑: 万一有人来这里找答案。。。我(OP)已经不再完全依赖Razor使用模板等生成电子邮件。它非常脆弱,而且容易出错——

如何在dotnetcore中使用Razor生成电子邮件(html),而不是从MVC应用程序(从控制台应用程序思考)生成

RazorEngine在.NET4.x中做得很好,但在DotnetCore中不起作用

RazorEngineLight在DotnetCore1.x中工作,但在2.x中不工作

本文还提到了一些其他的选项:但是没有一个在.NETCore2.0中真正起作用

两年后编辑: 万一有人来这里找答案。。。我(OP)已经不再完全依赖Razor使用模板等生成电子邮件。它非常脆弱,而且容易出错——一个不停的头痛问题。现在我更喜欢使用模板的Mandrill或Sendgrid

我没办法让它工作。我收到错误:在尝试激活“Mvc.RenderViewToString.RazorViewToStringRenderer”时,无法解析类型“Microsoft.AspNetCore.Mvc.Razor.IRazorViewEngine”的服务

这通常表示所需的服务未在服务集合中注册,因此提供程序无法在需要时解析该服务

该答案没有提及附加服务配置,只提供了

public void ConfigureServices(IServiceCollection services)
{
     services.AddScoped<IViewRender, ViewRender>();
}
这将向服务集合添加相关的视图引擎依赖项

目前呈现的所有其他内容都是合理的,应该按照预期工作

你应该复习

并遵循类似的结构使代码在您的场景中工作。从那里,您可以开始进行自定义修改,并监视它在何处中断


.Net Core的模块化特性允许进行自定义,因为不同的模块可以剥离出来并在其他环境中使用。

有一个很长的回复,可以为您提供指导。谢谢,Mark。它们是很好的选择,但我无法让它们中的任何一个发挥作用(您提到建议的选项不起作用。您能说明到目前为止您所做的工作以及它们在a中造成问题的位置,以用于重现问题。也许我们可以从那里提供帮助。根据您对其中一个建议答案所作的评论,您似乎尚未注册依赖项服务,但无法从w中确定您目前展示的内容我可以向您展示我所研究的4个不同示例中的每一个,但由于我无法使其中任何一个都正常工作,并且没有一个在MVC项目之外的.net core 2中工作过,我认为这只会增加混乱。我希望有人出现并说“嘿,我让RazorLight在控制台应用程序的.NETCore2中工作"-然后我们可以从那里开始。很公平。你留下评论的答案。这个答案简化了它的示例。我相信它在启动期间配置时省略了一些依赖的服务,但想看看你做了什么,这样我就可以根据你得到的错误识别缺少的服务。回答很好,我想这很接近……现在,我不明白的是,为了获得服务,我需要引用什么要工作吗?@Kjensen该扩展方法存在于
Microsoft.Extensions.DependencyInjection
命名空间中,但属于
Microsoft.AspNetCore.Mvc
项目。请检查Github上源代码的链接。设法进一步了解了一点……现在我被一个CS0012卡住了:类型“Attribute”是在一个不是r的程序集中定义的引用。您必须添加对程序集“netstandard,Version=2.0.0.0,Culture=neutral,PublicKeyToken=CC7B13FFCD2DD51”的引用。我已经添加了对.net标准的引用。这已经花费了我将近两天的时间,所以我放弃了,并准备创建一个特殊的.net 4.x项目,仅用于生成电子邮件,包装在Web服务中。I w我会给你奖金,因为这是最好的答案。@Kjensen尝试将
true
添加到你的csproj文件中。我尝试过(在某处看到过),但没有帮助。:(但谢谢
private static void ConfigureDefaultServices(IServiceCollection services) {
    var applicationEnvironment = PlatformServices.Default.Application;
    services.AddSingleton(applicationEnvironment);

    var appDirectory = Directory.GetCurrentDirectory();

    var environment = new HostingEnvironment
    {
        WebRootFileProvider = new PhysicalFileProvider(appDirectory),
        ApplicationName = "RenderRazorToString"
    };
    services.AddSingleton<IHostingEnvironment>(environment);

    services.Configure<RazorViewEngineOptions>(options =>
    {
        options.FileProviders.Clear();
        options.FileProviders.Add(new PhysicalFileProvider(appDirectory));
    });

    services.AddSingleton<ObjectPoolProvider, DefaultObjectPoolProvider>();

    var diagnosticSource = new DiagnosticListener("Microsoft.AspNetCore");
    services.AddSingleton<DiagnosticSource>(diagnosticSource);

    services.AddLogging();
    services.AddMvc();
    services.AddSingleton<RazorViewToStringRenderer>();
}
services.AddMvc();
public static IMvcBuilder AddMvc(this IServiceCollection services) {

    //...code removed for brevity

    // Default framework order
    builder.AddFormatterMappings();
    builder.AddViews();
    builder.AddRazorViewEngine();
    builder.AddRazorPages();
    builder.AddCacheTagHelper();

    //...code removed for brevity

}