ASP.NET Core 中的 Web.config 转换等效于什么?
What is the equivalent of Web.config transform in ASP.NET Core?
ASP.NET 核心文档建议我们应该使用 appsettings.json 文件,以及每个环境的文件,其中包含覆盖值。问题是所有这些文件都已发布,但只有 appsettings.json 和 appsettings.[Environment].json 相关。
另一个问题是要更改服务器上的配置值,必须检查两个文件:基础文件和环境文件。
所以我的问题是:在每个部署环境中拥有一个配置文件的最干净的方法是什么?
主要区别在于 ASP.NET 核心应用程序不像 ASP.NET 应用程序那样针对特定配置进行部署。以前,您实际上是发布为 "Release",例如,如果您想要切换部署配置,则必须重新发布。对于 ASP.NET 核心应用程序,环境由 ASPNETCORE_ENVIRONMENT
环境变量或执行期间传递的环境决定。因此,部署所有可能的环境设置是完全有效的,因为环境可以随心所欲地改变。
就是说,如果您确定自己永远不会更改环境,则可以简单地删除任何不需要的 appsettings.{environment}.json
文件。此外,您不应该真正覆盖 man appsettings.json
中的设置。如果它是特定于环境的,它应该进入特定于环境的 JSON 文件之一。您的主 appsettings.json
文件应该只包含不受环境影响的全局设置。如果您以这种方式处理它,那么您就不必查看两者以了解设置来自何处。
最后,如果您不喜欢这种方法,一般来说,您可以简单地选择不同的配置策略,例如环境变量或外部配置源,例如 Azure Key Vault。
我们可以从查看通常看起来像这样的预定义 ConfigurationBuilder
开始:
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
如果您一开始就不需要 AddJosnFile()
,您可以选择删除它们,因为有时您的项目可能不需要它。
如果您确实打算使用 appsettings.json
或类似的,那么请务必 注意它们的添加顺序。 您可以在上面的代码片段中看到, appsettings.{env}.json
添加 在 .
之后
这是一个需要理解的重要概念,因为这意味着如果找到与文件名匹配的文件(例如,appsettings.Production.json
),它将replace.override任何重叠配置。
注意 替换、覆盖 和 重叠.
您可以构建自己的层并以适合您的项目的方式对配置进行分层。 env.EnviornmentName
也不受限制,你可以根据需要使用任何一种条件逻辑来设计它。
如果你打算走这条客制化设计路线。您可能需要注意,在构建 WebHostBuilder
之前(即在调用 .Build()
方法之前),您可以根据需要重新配置和更改配置。因此,您可以非常有创意地以编程方式配置您的项目。
ASP.NET 核心文档建议我们应该使用 appsettings.json 文件,以及每个环境的文件,其中包含覆盖值。问题是所有这些文件都已发布,但只有 appsettings.json 和 appsettings.[Environment].json 相关。 另一个问题是要更改服务器上的配置值,必须检查两个文件:基础文件和环境文件。
所以我的问题是:在每个部署环境中拥有一个配置文件的最干净的方法是什么?
主要区别在于 ASP.NET 核心应用程序不像 ASP.NET 应用程序那样针对特定配置进行部署。以前,您实际上是发布为 "Release",例如,如果您想要切换部署配置,则必须重新发布。对于 ASP.NET 核心应用程序,环境由 ASPNETCORE_ENVIRONMENT
环境变量或执行期间传递的环境决定。因此,部署所有可能的环境设置是完全有效的,因为环境可以随心所欲地改变。
就是说,如果您确定自己永远不会更改环境,则可以简单地删除任何不需要的 appsettings.{environment}.json
文件。此外,您不应该真正覆盖 man appsettings.json
中的设置。如果它是特定于环境的,它应该进入特定于环境的 JSON 文件之一。您的主 appsettings.json
文件应该只包含不受环境影响的全局设置。如果您以这种方式处理它,那么您就不必查看两者以了解设置来自何处。
最后,如果您不喜欢这种方法,一般来说,您可以简单地选择不同的配置策略,例如环境变量或外部配置源,例如 Azure Key Vault。
我们可以从查看通常看起来像这样的预定义 ConfigurationBuilder
开始:
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
如果您一开始就不需要 AddJosnFile()
,您可以选择删除它们,因为有时您的项目可能不需要它。
如果您确实打算使用 appsettings.json
或类似的,那么请务必 注意它们的添加顺序。 您可以在上面的代码片段中看到, appsettings.{env}.json
添加 在 .
这是一个需要理解的重要概念,因为这意味着如果找到与文件名匹配的文件(例如,appsettings.Production.json
),它将replace.override任何重叠配置。
注意 替换、覆盖 和 重叠.
您可以构建自己的层并以适合您的项目的方式对配置进行分层。 env.EnviornmentName
也不受限制,你可以根据需要使用任何一种条件逻辑来设计它。
如果你打算走这条客制化设计路线。您可能需要注意,在构建 WebHostBuilder
之前(即在调用 .Build()
方法之前),您可以根据需要重新配置和更改配置。因此,您可以非常有创意地以编程方式配置您的项目。