【发布时间】:2016-09-19 21:56:37
【问题描述】:
在 Asp.NET Core appsettings.json 中是否有 Web.config Transormations 的替代方案?
我想在从 VS 部署到 staging.production 服务器时更改连接字符串和其他设置。
【问题讨论】:
在 Asp.NET Core appsettings.json 中是否有 Web.config Transormations 的替代方案?
我想在从 VS 部署到 staging.production 服务器时更改连接字符串和其他设置。
【问题讨论】:
首先,请记住,
ASP.NET Core 的配置系统是从以前版本的 ASP.NET 重新构建的,它依赖于
System.Configuration和 web.config 等 XML 配置文件。新的配置模型提供了对基于键/值的设置的简化访问,这些设置可以从各种来源中检索。要使用 ASP.NET 应用程序中的设置,建议您仅在应用程序的 Startup 类中实例化配置。简而言之,Configuration 只是源的集合,提供了读取和写入名称/值对的能力。
ASP.NET Core 提供对 JSON、XML 和 INI 配置文件作为源的内置支持,并允许根据当前环境选择源。 ASPNETCORE_ENVIRONMENT 环境变量用于设置/确定当前环境。预定义值为Development、Staging、Production,但也可以是任何自定义值。
假设您想使用 JSON 文件(命名为 appsettings.json 用于约定)来存储连接字符串。您需要做的是创建一个单独的 appsettings.{EnvironmentName}.json 文件(对于您拥有的每个环境),例如:
appsettings.Development.jsonappsettings.Staging.jsonappsettings.Production.json并根据环境加载其中一个:
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);
在 ASP.NET Core 文档的 “Configuration” chapter 和 “Working with multiple environments” chapter 中阅读有关所有这些的更多信息。
【讨论】:
是的,您必须在目标系统上使用环境变量。
ASP.NET Core 引用一个特定的环境变量 ASPNETCORE_ENVIRONMENT 来描述应用程序当前运行的环境。这个变量可以设置为您喜欢的任何值,但按照惯例使用三个值:开发、暂存和生产.您将在 ASP.NET Core 提供的示例和模板中找到这些值。
在运行时确定环境
IHostingEnvironment 服务提供用于处理环境的核心抽象。该服务由 ASP.NET 托管层提供,可以通过依赖注入注入到您的启动逻辑中。 Visual Studio 中的 ASP.NET Core 网站模板使用此方法来加载特定于环境的配置文件(如果存在)并自定义应用程序的错误处理设置。在这两种情况下,此行为都是通过在传递给适当方法的 IHostingEnvironment 实例上调用 EnvironmentName 或 IsEnvironment 来引用当前指定的环境来实现的。
https://docs.asp.net/en/latest/fundamentals/environments.html
【讨论】: