one*_*ill 5 c# appsettings asp.net-core asp.net-core-2.1
我相信它appsettings.json及其环境对应物(开发、暂存、生产)取代了 Web.config 转换。
这在开发环境中工作正常,其中这些环境的变量存在于 launchSettings.json
但是,如果我使用发布功能,将发布配置为使用我创建的暂存构建配置,则不会出现转换。
我在其他地方读过你需要创建环境变量。真的!事情就是这样吗?我们现在有一个系统环境变量的舰队,这些应用程序可能会或可能不会(随着时间的推移)在该机器上的 IIS(或其他)Web 服务器上运行。
目前,我正在appsettings.json发布后手动复制和粘贴“暂存” 。我已经必须将预先准备好的 Web.config 文件复制并粘贴到该文件夹中,因为它不再可用于在 IDE 中进行配置(但奇怪的是,仍然会在发布操作期间生成)。
是否有另一种方法可以为部署进行可维护的转换,类似于旧配置文件的转换?
这实际上让很多人感到困惑,因为 Visual Studio 中的配置实际上对 ASP.NET Core 应用程序没有任何作用。ASP.NET Core 应用程序旨在为任何环境编译一次。它运行的实际“环境”是通过配置确定的,即ASPNETCORE_ENVIRONMENT环境变量。换句话说,无论您在 Visual Studio 中部署为“调试”/“暂存”/“发布”/“其他”,它都是相同的应用程序代码。(唯一一次不是这种情况的情况是,如果您要在代码中使用编译器指令,例如#if DEBUG ... #endif,这不是很常见,而且老实说也不建议这样做。)
我认为您对环境变量有误解。您仍然可以在生产中使用 JSON 配置等。唯一需要设置的环境变量是前面提到的ASPNETCORE_ENVIRONMENT。
总而言之,如果您设置ASPNETCORE_ENVIRONMENT为“Production”,那么您appsettings.Production.json将按照您的预期加载。没有发生任何转变。相反,特定于环境的配置用于扩展和覆盖其他配置。
我也觉得这很烦人。我喜欢能够更改我的解决方案配置并使用生产或暂存配置值进行(本地)测试。
不管怎样,这是一个低摩擦的选择。那里可能有更好的。
appsettings.json. 最坏的情况是某些东西使用了生产服务的所有安全级别,这比意外授予开发访问权限要好。这意味着您的生产设备上不需要环境变量,因此也不会意外删除任何内容appsettings.Development.json。您只需要不同的项目,并且不必转换它们,它们将覆盖 appsettings.json 中的任何匹配项lauchsettings.json应该已经设置了值为的profiles>> {name}> 。您可以使用它作为实时测试开关。注释掉该行,您将使用生产设置。environmentVariablesASPNETCORE_ENVIRONMENTDevelopment如果您想添加暂存级别,请为自己添加新的配置文件和appsettings.staging.json文件。您将需要添加环境变量,但这通常不是一个问题,也比在生产环境中进行的风险更小。不过,我还没有想到在同一个盒子上使用登台和开发的简单方法