部署Stage / Production appsettings Asp.net Core

时间:2017-02-15 16:09:43

标签: asp.net json asp.net-core .net-core

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

  

尝试使用此Guide

更改项目中的环境变量

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

Shows an ! next to 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"
      }
    }
  }
  

将环境变量添加到服务器

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

  

使用此Guide

配置件

我的下一个问题是,没有人展示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"
  }
}
  

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"
  }
}

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

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

  

为后代

这是启动构建器

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();

1 个答案:

答案 0 :(得分:6)

首先,您似乎尝试在第一个屏幕截图中多次使用ASPNETCORE_ENVIRONMENT变量。您不应该添加新变量,而是更改变量的以反映您要使用的环境。因此,要在本地测试Stage,只需将ASPNETCORE_ENVIRONMENT变量的Development修改为Stage

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

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

Publish to IIS, setting Environment Variable

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