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

ASP.NET Core API部署至AWS Elastic Beanstalk Windows Server后代码变更未生效

排查思路与修复建议

针对你遇到的“构建部署成功但服务器未更新代码”的问题,从构建流程、部署环节、环境配置三个维度给出具体排查方向:

一、验证CodeBuild构建产物的正确性

  1. 修复buildspec.yml的缩进问题
    你提供的buildspec.yml存在严重缩进错误(YAML对缩进敏感),这可能导致CodeBuild无法正确执行指定步骤。正确的格式应该是:

    version: 0.2
    
    phases:
      install:
        runtime-versions:
          dotnet: 7.0
      pre_build:
        commands:
          - dotnet restore .\project\foo.csproj
      build:
        commands:
          - dotnet build .\project\foo.csproj --configuration Release
      post_build:
        commands:
          - dotnet publish .\project\foo.csproj --configuration Release --output ./publish
    artifacts:
      files:
        - 'publish/**/*'
      base-directory: './'
    

    关键调整:

    • 给所有phases下的子节点添加正确缩进
    • 明确指定--configuration Release,避免默认用Debug模式构建
    • 将publish输出到单独的./publish目录,artifacts仅收集该目录内容,避免混入源码文件
  2. 检查CodeBuild构建日志
    进入CodeBuild控制台查看对应任务的完整日志,确认:

    • dotnet publish步骤是否成功生成publish目录及其中的foo.dll、web.config等文件
    • artifacts打包是否正确包含了publish目录下的所有产物,无遗漏最新代码

二、验证CodeDeploy的文件部署结果

  1. 登录EC2实例检查部署目录
    Windows环境下Elastic Beanstalk默认部署目录为C:\inetpub\wwwroot或C:\Program Files\Amazon\ElasticBeanstalk\applications\<你的应用名称>,手动检查:

    • foo.dll、web.config等文件的修改时间是否与最新构建时间一致
    • 文件内容是否包含你推送的最新代码变更(比如查看dll版本号或web.config修改痕迹)
  2. 查看CodeDeploy本地日志
    在EC2实例的C:\ProgramData\Amazon\CodeDeploy目录下,找到对应部署任务的日志文件,确认:

    • 文件复制过程是否有报错、跳过或权限不足的记录
    • 是否成功覆盖了旧版本文件

三、检查Elastic Beanstalk的环境配置

  1. 确保应用池自动重启
    Windows IIS环境下,文件更新后应用池可能不会自动重启,导致旧dll持续被占用。可以通过.ebextensions脚本解决:
    在应用根目录创建.ebextensions/restart_apppool.config文件,内容如下:

    commands:
      01_restart_apppool:
        command: 'C:\Windows\System32\inetsrv\appcmd recycle apppool /apppool.name:DefaultAppPool'
        ignoreErrors: false
    

    该脚本会在部署完成后自动重启默认应用池,确保加载最新文件

  2. 验证web.config路径配置
    检查web.config中的<aspNetCore>节点:

    <aspNetCore processPath="dotnet" arguments=".\foo.dll" ... />
    

    确认部署目录下确实存在foo.dll,若publish后文件存放在子目录,需调整arguments为对应相对路径(比如.\publish\foo.dll)

  3. 优化健康检查路径
    若健康检查指向静态页面,可能在应用未真正更新时返回成功。建议修改为你的API接口(比如/swagger或某个业务接口),确保健康状态能反映应用实际运行版本

四、修复项目依赖的版本兼容问题

你的foo.csproj中,Microsoft.AspNetCore.Server.Kestrel和Microsoft.AspNetCore.Server.IISIntegration使用2.2.0版本,与目标框架net7.0严重不兼容,可能导致新代码逻辑无法加载。将这两个包升级到与net7.0匹配的版本(比如7.0.5):

<ItemGroup>
  <PackageReference Include="Microsoft.AspNetCore.Server.Kestrel" Version="7.0.5" />
</ItemGroup>
<ItemGroup>
  <PackageReference Include="Microsoft.AspNetCore.Server.IISIntegration" Version="7.0.5" />
</ItemGroup>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 00:57:02