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

.NET 6 Azure App Service部署遇System.Text.Json加载异常求助

问题分析与解决方案

核心原因

你遇到的System.IO.FileLoadException本质是依赖版本不匹配:本地开发环境中项目引用的是System.Text.Json 6.0.4,但部署到Azure App Service后,运行时尝试加载框架自带的6.0.0.0版本,导致清单定义不匹配。


针对你的疑问解答

  1. 是否是绑定重定向问题?
    .NET 5+(包括.NET 6)不再使用传统.NET Framework的绑定重定向机制,而是通过运行时依赖解析策略处理版本问题。但这个场景下的版本冲突可以通过版本强制配置解决,本质是依赖解析逻辑问题,而非传统绑定重定向。

  2. 发布到Azure时是否需要显式包含某些程序集?
    是的。当你引用了比.NET 6框架自带版本更高的System.Text.Json包时,必须确保该程序集及其依赖被打包到发布目录中,避免Azure运行时使用自带的旧版本。

  3. GitHub Actions配置中是否有遗漏的内容?
    有可能。需要确认构建/发布步骤是否正确处理了依赖,比如是否完整还原NuGet包、是否正确生成包含所有依赖的发布输出。


具体解决方案

1. 强制复制依赖到发布目录

在.csproj文件中添加以下配置,确保所有NuGet依赖都被复制到发布输出:

<PropertyGroup>
  <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
</PropertyGroup>

该配置会强制将lock.json中记录的所有依赖程序集复制到输出目录,避免依赖Azure运行时的系统版本。

2. 配置运行时版本绑定

在项目根目录创建runtimeconfig.template.json文件,添加以下内容,强制指定System.Text.Json的版本:

{
  "dependencies": {
    "System.Text.Json": {
      "version": "6.0.4"
    }
  }
}

发布时,这个配置会被合并到生成的.runtimeconfig.json中,告诉运行时优先使用指定版本的程序集。

3. 检查GitHub Actions的发布命令

确保你的GitHub Actions workflow中的构建/发布步骤正确,示例如下:

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Setup .NET 6
        uses: actions/setup-dotnet@v4
        with:
          dotnet-version: '6.x'

      - name: Restore dependencies
        run: dotnet restore

      - name: Build
        run: dotnet build --configuration Release --no-restore

      - name: Publish
        run: dotnet publish --configuration Release --no-build --output ./publish

      - name: Deploy to Azure App Service
        uses: azure/webapps-deploy@v3
        with:
          app-name: 'your-app-name'
          slot-name: 'production'
          publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
          package: ./publish

重点确保:

  • 使用了正确的.NET 6 SDK版本
  • dotnet publish命令生成了完整的发布输出
  • 部署步骤正确指向./publish目录

4. 清理Azure App Service的残留文件

旧的部署文件可能导致版本冲突,可通过Kudu工具清理:

  1. 登录Azure门户,进入你的App Service
  2. 点击左侧菜单「高级工具」→「Go」打开Kudu
  3. 进入「Debug console」→「CMD」
  4. 删除site/wwwroot下的所有文件:rmdir /s /q wwwroot
  5. 重新执行GitHub Actions部署

5. 统一解决方案内的NuGet版本

如果项目是解决方案的一部分,确保所有项目引用的System.Text.Json版本一致,避免跨项目版本冲突。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 22:52:35