如何在ASP.NET Core中转换AppSettings

时间:2018-10-11 06:47:10

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

我被认为是appsettings.json及其对应的环境(开发,登台,生产)替代了Web.config转换。

这在开发环境中工作正常,其中launchSettings.json

中存在这些环境的变量

但是,如果我使用发布功能,将发布配置为使用我创建的登台构建配置,则不会显示任何转换。

我在其他地方读过您需要创建环境变量的内容。真!就是这样吗?现在,我们有了针对应用程序的系统环境变量的舰队,这些变量可能(可能)(随着时间的推移)可能正在该框中的IIS(或其他)Web服务器上运行。

目前,我正在执行发布后手动复制和粘贴“登台” appsettings.json。我已经必须将预先准备的Web.config文件复制并粘贴到该文件夹​​中,因为它不再可以在IDE中进行配置(但是奇怪的是,仍然在发布操作期间生成)。

是否还有另一种方法可以对部署进行可维护的转换,这类似于旧配置文件的转换?

2 个答案:

答案 0 :(得分:3)

这实际上使很多人感到困惑,因为Visual Studio中的配置对于ASP.NET Core应用程序实际上没有任何作用。 ASP.NET Core应用旨在针对任何环境进行一次编译。它运行的实际“环境”是通过配置确定的,即ASPNETCORE_ENVIRONMENT环境变量。换句话说,无论您是在Visual Studio中部署为Debug / Staging / Release / Whatever,还是相同的应用程序代码。 (唯一的情况不是这种情况,例如,如果要在代码中使用编译器指令,例如#if DEBUG ... #endif。这不是很常见,老实说也不建议这样做。)

我认为您对环境变量有误解。您仍然可以在生产中使用JSON config等。唯一需要设置的环境变量是上述的ASPNETCORE_ENVIRONMENT

简短的说来,如果您将ASPNETCORE_ENVIRONMENT设置为“生产”,那么appsettings.Production.json将会按照您的期望加载。没有发生任何转换。相反,特定于环境的配置用于扩展和覆盖其他配置。

答案 1 :(得分:2)

我也觉得这很烦人。我喜欢能够更改解决方案配置并使用生产或暂存配置值进行本地测试。

无论如何,这是一种低摩擦的选择。那里可能会更好。

  1. 将所有生产设置放在appsettings.json中。最坏的情况是,某些东西会使用生产服务的所有安全级别,这比意外授予开发访问权限要好。这意味着您的生产环境中不需要环境变量,因此也没有意外删除的情况
  2. 使用开发数据库连接字符串等创建一个appsettings.Development.json。您只需要不同的项目,而不必进行转换,它们将覆盖appsettings.json中的所有匹配项
  3. lauchsettings.json应该已经设置了profiles> {name}> environmentVariables> ASPNETCORE_ENVIRONMENT,其值为Development。您可以将其用作实时测试切换。注释掉该行,您将使用生产设置。

如果要添加暂存级别,请为自己添加一个新的配置文件和appsettings.staging.json文件。您将需要添加环境变量,但是与在生产环境中进行操作相比,这通常不成问题且风险较小。我还没有想到在同一个盒子上使用暂存和开发的简单方法