在dotnet core 2中生成Razor HTML电子邮件
如何在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”的服务 这通常表示所需的服务未在服务集合中注册,因此提供程序无法在需要时解析该服务 该答案没有提及附加服务配置,只提供了在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使用模板等生成电子邮件。它非常脆弱,而且容易出错——
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
}