我必须创建一个能够发送电子邮件的Asp.Net Web Api。 我设法发送了电子邮件,但仅使用一个简单的模板存储在本地变量中。 下一步是从外部文件渲染模板,如下所示:
string filePath = @"C:\Data\EmailClient\EmailClient\EmailClient\EmailTemplate\ReceiptTemplate.cshtml";
var config = new TemplateServiceConfiguration
{
TemplateManager = new ResolvePathTemplateManager(new[] { "EmailTemplates" }),
DisableTempFileLocking = true
};
Engine.Razor = RazorEngineService.Create(config);
if (File.Exists(filePath))
{
emailHtmlBody = Engine.Razor.RunCompile(filePath, null, email);
mail.Body = emailHtmlBody;
}
问题在于,当剃刀引擎尝试解析模板时,出现以下错误:
"Could not load type 'System.Security.Principal.WindowsImpersonationContext' from assembly 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'."
我正试图从字符串中解析模板,而且我也遇到了同样的错误。
答案 0 :(得分:0)
我今天在调试项目时遇到了同样的问题,发现该项目引用的是RazorEngine的.Net Framework版本而不是.NetCore版本。
删除引用并使用正确的数据包后,该应用程序开始工作。
这将解释为什么您创建基于4.6.1的Web Api的决议有效。
答案 1 :(得分:0)
您可能会看到
<PackageReference Include="RazorEngine" Version="3.10.0" />
或.csproj文件中的类似内容,当您真正需要的是
<PackageReference Include="RazorEngine.Netcore" Version="3.1.0" />
所以
$ dotnet remove package RazorEngine
$ dotnet add package RazorEngine.Netcore --version 3.1.0
(或与版本更新类似)看起来像是答案
[Matt的答案有一个“建议的编辑队列已满”标志]