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

在GitHub Actions中替换.NET 6应用appsettings.json变量的方案咨询

替换.NET 6 appsettings.json变量的GitHub Actions方案

以下是几种官方或通用的实现方案,无需自行开发:

1. 利用.NET原生环境变量覆盖机制

.NET 6本身支持通过环境变量覆盖appsettings.json中的配置项,规则是用双下划线__替换配置路径中的冒号:。比如要覆盖ConnectionStrings:Default,对应的环境变量名是ConnectionStrings__Default。

在GitHub Actions部署作业中,直接将仓库/组织密钥或环境变量注入到部署步骤的环境变量里即可:

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: 下载应用包工件
        uses: actions/download-artifact@v4
        with:
          name: app-package
          path: ./app
      
      - name: 注入环境变量并部署
        env:
          ConnectionStrings__Default: ${{ secrets.DB_CONNECTION_STRING }}
          AppSettings__ApiKey: ${{ vars.API_KEY }}
        run: |
          # 这里填写你的部署命令,比如部署到Azure App Service或启动自托管应用
          dotnet ./app/YourApp.dll

这种方案完全依赖.NET原生能力,不需要额外工具,稳定性最高。

2. 用脚本直接替换文件内容

如果必须修改appsettings.json文件本身(比如部署到传统IIS需要物理文件),可以用简单的Shell或PowerShell脚本完成变量替换。

Bash版本(适用于Ubuntu Runner)

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: 下载应用包工件
        uses: actions/download-artifact@v4
        with:
          name: app-package
          path: ./app
      
      - name: 替换appsettings.json中的变量
        run: |
          sed -i "s/\"ConnectionStrings\": {\"Default\": \"PLACEHOLDER\"}/\"ConnectionStrings\": {\"Default\": \"${{ secrets.DB_CONNECTION_STRING }}\"}/" ./app/appsettings.json
          sed -i "s/\"ApiKey\": \"PLACEHOLDER\"/\"ApiKey\": \"${{ vars.API_KEY }}\"/" ./app/appsettings.json
      
      - name: 执行部署
        run: # 填写部署命令

PowerShell版本(适用于Windows Runner)

jobs:
  deploy:
    runs-on: windows-latest
    steps:
      - name: 下载应用包工件
        uses: actions/download-artifact@v4
        with:
          name: app-package
          path: ./app
      
      - name: 替换appsettings.json中的变量
        shell: pwsh
        run: |
          $content = Get-Content ./app/appsettings.json -Raw
          $content = $content -replace '"ConnectionStrings": {"Default": "PLACEHOLDER"}', '"ConnectionStrings": {"Default": "${{ secrets.DB_CONNECTION_STRING }}"}'
          $content = $content -replace '"ApiKey": "PLACEHOLDER"', '"ApiKey": "${{ vars.API_KEY }}"'
          $content | Set-Content ./app/appsettings.json
      
      - name: 执行部署
        run: # 填写部署命令

这种方案灵活无依赖,适用于任何需要修改物理文件的场景。

3. 使用社区维护的变量替换Action

虽然微软官方的variable-substitution已弃用,但社区有成熟的替代工具,比如cschleiden/replace-tokens,支持在JSON、YAML等文件中替换占位符。

首先在appsettings.json中用占位符标记需要替换的项:

{
  "ConnectionStrings": {
    "Default": "#{DB_CONNECTION_STRING}#"
  },
  "AppSettings": {
    "ApiKey": "#{API_KEY}#"
  }
}

然后在GitHub Actions中配置:

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: 下载应用包工件
        uses: actions/download-artifact@v4
        with:
          name: app-package
          path: ./app
      
      - name: 替换appsettings.json中的占位符
        uses: cschleiden/replace-tokens@v1
        with:
          files: ./app/appsettings.json
          tokenPrefix: '#{'
          tokenSuffix: '}#'
        env:
          DB_CONNECTION_STRING: ${{ secrets.DB_CONNECTION_STRING }}
          API_KEY: ${{ vars.API_KEY }}
      
      - name: 执行部署
        run: # 填写部署命令

这个Action功能丰富,支持多种文件格式和占位符规则,社区使用广泛,稳定性有保障。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 17:11:18