You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Azure Functions中使用FluentEmail 2.8.0遇RazorLight异常求助

解决方案:Azure Functions + FluentEmail 2.8.0 元数据引用加载错误

我之前在.NET Core 3.1的Azure Functions v3项目里集成FluentEmail 2.x的时候也踩过这个坑,当时折腾了好一阵才解决,给你几个可行的方向试试:

1. 检查是否开启了程序集裁剪

如果你的csproj里配置了<PublishTrimmed>true</PublishTrimmed>,这大概率是问题根源!这个选项会在发布时自动裁剪它判定为“无用”的程序集,但RazorLight编译视图需要的元数据引用会被误删。

你需要把这个配置改成<PublishTrimmed>false</PublishTrimmed>,或者直接删除这个配置项。

2. 手动给RazorLight指定程序集引用

Azure Functions的沙盒环境和本地开发环境的程序集加载路径有差异,RazorLight默认从入口程序集加载元数据会失败。你可以在初始化FluentEmail时手动添加必要的程序集引用:

// 初始化RazorLight引擎
var razorEngine = new RazorLightEngineBuilder()
    .UseFileSystemProject(Path.Combine(Environment.CurrentDirectory, "EmailTemplates")) // 替换成你的视图路径
    .UseMemoryCachingProvider()
    .AddAssemblyReference(typeof(YourFunctionEntryClass).Assembly) // 添加入口函数程序集
    .AddAssemblyReference(typeof(FluentEmail.Core.Email).Assembly) // 添加FluentEmail核心程序集
    .Build();

// 设置FluentEmail默认渲染器
Email.DefaultRenderer = new RazorRenderer(razorEngine);

3. 改用嵌入式视图资源

把Razor视图文件设置为嵌入式资源,彻底绕开文件系统和运行时编译的元数据问题:

第一步:配置视图为嵌入式资源

在csproj里添加以下配置,把你的视图文件标记为嵌入式资源:

<ItemGroup>
  <EmbeddedResource Include="EmailTemplates\**\*.cshtml" />
</ItemGroup>

第二步:初始化嵌入式资源的RazorLight引擎

var razorEngine = new RazorLightEngineBuilder()
    .UseEmbeddedResourcesProject(typeof(YourFunctionEntryClass).Assembly, "YourProjectNamespace.EmailTemplates")
    // 替换成你的项目命名空间 + 视图文件夹路径
    .UseMemoryCachingProvider()
    .Build();

Email.DefaultRenderer = new RazorRenderer(razorEngine);

4. 确认Azure运行时配置

如果本地开发正常但发布到Azure后出问题,去Azure Portal检查你的Function App配置:

  • 进入“配置” -> “常规设置”
  • 确认运行时堆栈选择.NET,版本为.NET Core 3.1

我当时是结合方案2和3解决的问题,你可以逐个尝试,应该能搞定这个RazorLight的元数据加载异常。

内容的提问来源于stack exchange,提问作者Sam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 15:37:57