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

通过GitHub Actions部署.NET Web API至Azure时如何包含邮件模板文件

解决.NET Web API部署至Azure App Service后邮件模板文件缺失问题

问题分析

部署后调用/api/users/new/otp接口报错找不到C:\home\site\wwwroot\EmailTemplates\OtpValidation.htm,本质是邮件模板文件未被包含在CI/CD的部署包中——.NET项目默认不会自动将非代码类文件(如.htm)复制到发布输出目录,导致部署到Azure后缺失该文件。

解决方案

1. 配置项目文件,强制模板文件随发布输出

打开项目的.csproj文件,添加以下配置,将EmailTemplates目录下的htm文件设置为发布时自动复制到输出目录:

<ItemGroup>
  <!-- 单个模板文件配置 -->
  <Content Include="EmailTemplates\OtpValidation.htm">
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </Content>

  <!-- 若有多个模板文件,用通配符批量配置 -->
  <!-- <Content Include="EmailTemplates\*.htm">
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </Content> -->
</ItemGroup>
  • PreserveNewest表示仅当源文件更新时才复制,避免重复操作;若需每次发布强制复制,可改为Always。

2. 修正代码中的文件路径读取逻辑

避免使用硬编码的绝对路径,改用基于程序运行根目录的相对路径,适配本地和Azure环境:

// 获取程序运行的根目录
var templatePath = Path.Combine(AppContext.BaseDirectory, "EmailTemplates", "OtpValidation.htm");
// 读取模板内容
var templateContent = await File.ReadAllTextAsync(templatePath);

3. 确认GitHub Actions部署步骤的正确性

检查你的GitHub Actions工作流文件(通常位于.github/workflows/目录下),确保部署步骤指向正确的发布输出目录。示例配置:

- name: Deploy to Azure App Service
  uses: azure/webapps-deploy@v2
  with:
    app-name: 'bookkeeper'
    publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
    package: ${{ env.DOTNET_ROOT }}/publish

package参数需指向.NET发布命令生成的输出目录,确保该目录包含复制后的模板文件。

验证步骤

  1. 本地执行dotnet publish命令,检查输出目录(默认路径为bin/Release/netX.X/publish)下是否存在EmailTemplates文件夹及对应htm文件。
  2. 提交修改后的代码到GitHub,触发CI/CD流程。
  3. 部署完成后,通过Azure App Service的SCM站点检查wwwroot目录下是否存在EmailTemplates文件夹。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 02:10:09