首页 > 解决方案 > 当我将 ASP.NET Core Web 应用程序部署到 Azure 时,为什么没有检测到我的环境设置?

问题描述

我正在尝试在我的 Web 应用程序中定义一些环境变量。我在 Azure 上托管我的站点,该站点具有站点首先进入的暂存部署槽,然后,如果更改已签署,则将其发布到生产环境。

这两个地方的网址是:

生产

"BaseUrl": "https://mycompany.azurewebsites.net"

分期

"BaseUrl": "https://mycompany-staging2n1h.azurewebsites.net"

我希望appsettings.Staging.json在站点到达暂存区域时使用我的文件,然后一旦将其发布到生产环境中,我希望它使用appsettings.json.

据我了解,如果您未 appsettings.Production.json在应用程序中定义生产文件,则默认为 appsettings.json.

因此,我appsettings.Staging.json在我的应用程序中创建了一个文件,其中包含与生产环境不同的连接字符串。

应用设置.json

{
  "AzureAd": {
    "CallbackPath": "/signin-oidc",    
    "BaseUrl": "https://mycompany.azurewebsites.net"       
  },      
  "ConnectionStrings": {
    "MyCompanyConnection": "production connection string"        
  },
  "AllowedHosts": "*"
}

appsettings.Staging.json

{
  "AzureAd": {
    "CallbackPath": "/signin-oidc",
    "BaseUrl": "https://mycompany-staging2n1h.azurewebsites.net"
  },     
  "ConnectionStrings": {
    "MyCompanyConnection": "staging connection string"
  },
  "AllowedHosts": "*"
}

然后我进入launchSettings.json文件进行如下设置:

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:xxxx",
      "sslPort": xxxx
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "MyCompany": {
      "commandName": "Project",
      "launchBrowser": true,
      "environmentVariables": { 
        "ASPNETCORE_ENVIRONMENT": "Development"
      },
      "applicationUrl": "https://localhost:5001;http://localhost:5000"
    },
    "MyCompany Staging": {
      "commandName": "Project",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Staging"
      }
    }
  }
}

当我将我的应用程序部署到 Azure 并到达暂存区域时,它正在查看错误的连接字符串,这意味着它没有使用正确的 appsettings 文件。我是否错过了一个步骤或设置不正确?

标签: c#azureasp.net-coreenvironment-variables

解决方案


您需要ASPNETCORE_ENVIRONMENT在 Azure 上设置 - 对于应用服务,它位于配置部分:

显示环境的应用服务配置图像

(部署应用时更改launchSettings.json无效,仅由 Visual Studio 使用)

正如文档所说:

为了确定运行时环境,ASP.NET Core 从以下环境变量中读取:

  1. DOTNET_ENVIRONMENT
  2. ASPNETCORE_ENVIRONMENT 当调用 ConfigureWebHostDefaults 时。默认的 ASP.NET Core Web 应用模板调用 ConfigureWebHostDefaults。值 ASPNETCORE_ENVIRONMENT 覆盖 DOTNET_ENVIRONMENT

框架提供以下值:

  • Development :launchSettings.json 文件 ASPNETCORE_ENVIRONMENT 在本地机器上设置为 Development。
  • 分期
  • 生产 : 如果 未设置DOTNET_ENVIRONMENT ,则为默认值。 ASPNETCORE_ENVIRONMENT

推荐阅读