尝试使用Razor引擎解析模板时,来自程序集“ mscorlib”的“ System.Security.Principal.WindowsImpersonationContext”错误

时间:2018-11-19 15:05:42

标签: .net asp.net-web-api razorengine

我必须创建一个能够发送电子邮件的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'."

我正试图从字符串中解析模板,而且我也遇到了同样的错误。

2 个答案:

答案 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的答案有一个“建议的编辑队列已满”标志]