部署Stage/Production appsettings Asp.net Core

chr*_*ark 8 asp.net json .net-core asp.net-core

关于如何制作生产设置,指南似乎不是很清楚(至少对我来说).他们只是谈论其中一些是如何工作的,但没有一步一步的指导.我做了以下事情:

尝试使用本指南更改Project中的环境变量

尽管Microsoft Doc明确声明要重用,但我收到此错误ASPNETCORE_ENVIRONMENT.我无法保存这些设置

显示一个! 在ASPNETCORE_ENVIRONMENT旁边

忽略此问题,看起来您可以手动创建这些条目,launchSettings.json所以我有:

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:18549/",
      "sslPort": 44319
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "launchUrl": "api/v10Staff",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development",
        "ASPNETCORE_ENVIRONMENT_T": "Test"
      }
    },
    "IIS Express (Stage)": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "launchUrl": "api/v10Staff",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Stage"
      }
    },
    "ApplicationName": {
      "commandName": "Project",
      "launchBrowser": true,
      "launchUrl": "http://localhost:60000",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development",
        "ASPNETCORE_ENVIRONMENT_T": "Test"
      }
    }
  }
Run Code Online (Sandbox Code Playgroud)

将环境变量添加到服务器

我根据我去过的文档添加了环境变量Control Panel > System > Advanced system settings.并添加了"新用户变量"."ASPNETCORE_ENVIRONMENT",价值"舞台"

配置件使用本指南

我的下一个问题是,没有人展示出有效的"转型" appsettings.Stage.json.它是否完全在appsettings文件中使用Stage文件?我是否需要明确说明不同之处?这里说的是我的文件.

appsettings.Stage.json

{
  "WebServiceAccount": {
    "AccountName": "WebUser",
    "AccountPass": "Wedontcarethatthisishere"
  },
  "ServerLocation": {
    "ServerName": "http://appss.domain.com:8080",
    "DBConnection": "server=svAppNameSTG;Max Pool  Size=6000;database=ES;Integrated Security=SSPI;MultipleActiveResultSets=True"
  }
}
Run Code Online (Sandbox Code Playgroud)

appsettings.json

{
  "WebServiceAccount": {
    "AccountName": "WebUser",
    "AccountPass": "testpass1"
  },
  "ServerLocation": {
    "ServerName": "http://appst.domain.com:8080",
    "DBConnection": "server=svAppNameTST;Max Pool  Size=6000;database=ES;Integrated Security=SSPI;MultipleActiveResultSets=True"
  }
}
Run Code Online (Sandbox Code Playgroud)

我知道设置和配置文件已正确设置.因为我们的测试环境有效.当我将它部署到我们的Stage服务器时,我已经确认它仍然指向Test框.

如果有人有导游或者可以发现这有什么问题那就太棒了.

为了后人

这是Startup构建器

var builder = new ConfigurationBuilder()
                .SetBasePath(env.ContentRootPath)
                .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
                .AddEnvironmentVariables();
            Configuration = builder.Build();
Run Code Online (Sandbox Code Playgroud)

Pol*_*ial 8

首先,您似乎试图ASPNETCORE_ENVIRONMENT在第一个屏幕截图中多次使用该变量.您不应该添加新变量,而是更改变量的以反映您要使用的环境.所以测试阶段局部,简单的修改的的ASPNETCORE_ENVIRONMENT自变量DevelopmentStage.

我没有遇到ASPNETCORE_ENVIRONMENT_T任何变量.如果这是你自己添加的东西,我怀疑它源于对上述内容的误解,并且可能有更好的方法来实现你想要的.必须强调的launchSettings.json是,本地机器/开发环境中的所有内容都是如此.


ASPNETCORE_ENVIRONMENT在Stage或Production服务器上设置变量将根据您的托管方式而有所不同.IIS?Azure的?AWS?泊坞窗?以下答案讨论了为IIS设置环境变量:

发布到IIS,设置环境变量


关于appsettings.json,值合并.首先从基本文件中读取所有内容,然后从中读取的所有内容appsettings.{env.EnvironmentName}.json将追加或覆盖基本文件中的内容.在您给出的示例中,可以省略WebServiceAccount/AccountName变量,appsettings.Stage.json因为它与基础中的值相同.