我被认为是appsettings.json
及其对应的环境(开发,登台,生产)替代了Web.config转换。
这在开发环境中工作正常,其中launchSettings.json
但是,如果我使用发布功能,将发布配置为使用我创建的登台构建配置,则不会显示任何转换。
我在其他地方读过您需要创建环境变量的内容。真!就是这样吗?现在,我们有了针对应用程序的系统环境变量的舰队,这些变量可能(可能)(随着时间的推移)可能正在该框中的IIS(或其他)Web服务器上运行。
目前,我正在执行发布后手动复制和粘贴“登台” appsettings.json
。我已经必须将预先准备的Web.config文件复制并粘贴到该文件夹中,因为它不再可以在IDE中进行配置(但是奇怪的是,仍然在发布操作期间生成)。
是否还有另一种方法可以对部署进行可维护的转换,这类似于旧配置文件的转换?
答案 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)
我也觉得这很烦人。我喜欢能够更改解决方案配置并使用生产或暂存配置值进行本地测试。
无论如何,这是一种低摩擦的选择。那里可能会更好。
appsettings.json
中。最坏的情况是,某些东西会使用生产服务的所有安全级别,这比意外授予开发访问权限要好。这意味着您的生产环境中不需要环境变量,因此也没有意外删除的情况appsettings.Development.json
。您只需要不同的项目,而不必进行转换,它们将覆盖appsettings.json中的所有匹配项lauchsettings.json
应该已经设置了profiles
> {name}
> environmentVariables
> ASPNETCORE_ENVIRONMENT
,其值为Development
。您可以将其用作实时测试切换。注释掉该行,您将使用生产设置。如果要添加暂存级别,请为自己添加一个新的配置文件和appsettings.staging.json
文件。您将需要添加环境变量,但是与在生产环境中进行操作相比,这通常不成问题且风险较小。我还没有想到在同一个盒子上使用暂存和开发的简单方法