下面给你一份 《.NET Core 项目部署时自动检查并修复缺少的环境变量值脚本编写方法(最新通用方案)》
包括 Linux + Windows 两套脚本,支持:
✔ 自动检测缺失环境变量
✔ 自动写入默认值
✔ 可用于 CI/CD、Docker、Nginx/Kestrel 部署
✔ 针对 .NET Core / .NET 5–8 全版本通用


🟦 一、需要解决的问题

部署 .NET Core 项目时,经常会遇到:

  • 环境变量忘记设置
  • 环境变量为空字符串
  • 格式错误导致程序启动失败
  • Docker 内环境变量未传递
  • Linux systemd 启动时缺失变量导致崩溃

为避免手动排查,我们可以写一套脚本:

自动检查 → 自动修复 → 自动输出最终配置


🟩 二、推荐的检查逻辑(通用)

以以下 4 个环境变量为例:

DB_HOST
DB_USER
DB_PASSWORD
JWT_KEY

脚本需要:

  1. 检查每个变量是否存在
  2. 若不存在 → 自动写入默认值
  3. 若存在但为空 → 自动修复
  4. 输出最终结果
  5. 启动 .NET Core 程序

🟧 三、Linux 部署脚本(bash 版,适合 Docker / Kestrel / systemd)

📌 create file: check-env.sh

#!/bin/bash

# 需要的环境变量及默认值
declare -A DEFAULTS=(
  ["DB_HOST"]="localhost"
  ["DB_USER"]="root"
  ["DB_PASSWORD"]="123456"
  ["JWT_KEY"]="default-key-123"
)

echo "🔍 正在检查环境变量..."

for KEY in "${!DEFAULTS[@]}"; do
    VALUE=${!KEY}

    if [ -z "$VALUE" ]; then
        echo "⚠️ 环境变量 $KEY 缺失或为空,正在自动修复..."
        export "$KEY=${DEFAULTS[$KEY]}"
    else
        echo "✔ $KEY 检测正常"
    fi
done

echo ""
echo "📌 最终使用的环境变量:"
for KEY in "${!DEFAULTS[@]}"; do
    echo "$KEY=${!KEY}"
done

echo ""
echo "🚀 正在启动 .NET Core 应用..."
dotnet MyApp.dll

✔ 使用方式

chmod +x check-env.sh
./check-env.sh

⭐ 自动执行(systemd 示例)

/etc/systemd/system/myapp.service

ExecStart=/bin/bash /var/www/myapp/check-env.sh


🟦 四、Windows 部署脚本(PowerShell 最新版)

📌 create file: check-env.ps1

$defaults = @{
    "DB_HOST"      = "localhost"
    "DB_USER"      = "root"
    "DB_PASSWORD"  = "123456"
    "JWT_KEY"      = "default-key-123"
}

Write-Host "🔍 正在检查环境变量..."

foreach ($key in $defaults.Keys) {
    $value = [Environment]::GetEnvironmentVariable($key, "Machine")

    if ([string]::IsNullOrEmpty($value)) {
        Write-Host "⚠️ 变量 $key 缺失或为空,正在写入默认值..."
        [Environment]::SetEnvironmentVariable($key, $defaults[$key], "Machine")
    }
    else {
        Write-Host "✔ $key 检测正常"
    }
}

Write-Host ""
Write-Host "📌 最终环境变量:"
foreach ($key in $defaults.Keys) {
    Write-Host "$key=" ([Environment]::GetEnvironmentVariable($key, "Machine"))
}

Write-Host ""
Write-Host "🚀 启动 .NET Core 应用..."
dotnet "C:\deploy\MyApp\MyApp.dll"

✔ 使用方式

以管理员权限执行:

powershell.exe -ExecutionPolicy Bypass -File check-env.ps1


🟨 五、在 .NET Core 运行时再次检查(双保险)

Program.cs 中加入:

string RequireEnv(string key)
{
    var val = Environment.GetEnvironmentVariable(key);

    if (string.IsNullOrWhiteSpace(val))
        throw new Exception($"缺少关键环境变量: {key}");

    return val;
}

builder.Configuration["DB_HOST"] = RequireEnv("DB_HOST");
builder.Configuration["DB_USER"] = RequireEnv("DB_USER");
builder.Configuration["DB_PASSWORD"] = RequireEnv("DB_PASSWORD");
builder.Configuration["JWT_KEY"] = RequireEnv("JWT_KEY");


🟪 六、Docker + Kestrel 部署时的自动检查

Dockerfile:

COPY check-env.sh /app/check-env.sh
ENTRYPOINT ["bash", "/app/check-env.sh"]

这样容器启动时自动检查并添加默认值。


🟫 七、最佳实践总结

方案场景
bash 脚本Linux / Docker / Kestrel / Nginx
PowerShell 脚本Windows IIS / Windows Server
Program.cs 双保险防止错漏引发运行时错误
systemd + bash最稳健的生产方式