ASP.NET核心文档建议我们应该使用appsettings.json文件以及每个环境的文件,其中包含重写值。问题是所有这些文件都已发布,但只有appsettings.json和appsettings。[Environment] .json是相关的。 另一个问题是,要更改服务器上的配置值,必须检查两个文件:基本和特定于环境。
所以我的问题是:在每个部署环境中拥有一个配置文件的最简洁方法是什么?
答案 0 :(得分:5)
关键的区别在于,ASP.NET核心应用程序并未针对特定配置进行部署,就像ASP.NET应用程序一样。以前,您可以直接发布为" Release",如果您想切换部署配置,则必须重新发布。使用ASP.NET Core应用程序,环境由ASPNETCORE_ENVIRONMENT
环境变量或执行期间传递的环境决定。因此,部署所有可能的环境设置是完全有效的,因为环境可以随意改变。
也就是说,如果您确定永远不会改变环境,则只需删除您不需要的任何appsettings.{environment}.json
个文件。此外,您不应该真正覆盖人appsettings.json
中的设置。如果它是特定于环境的,则应该使用其中一个特定于环境的JSON文件。您的主appsettings.json
文件实际上应该只包含不受环境影响的全局设置。如果您以这种方式处理它,那么您不必同时查看两者以查看设置的来源。
最后,如果您不喜欢这种方法,通常情况下,您只需选择其他配置策略,例如环境变量或外部配置源,例如Azure Key Vault。
答案 1 :(得分:2)
我们可以从查看通常如下所示的预定义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
或类似内容,那么请注意添加顺序非常重要。您可以在上面的代码段中看到{{ 1}}在后添加。
这是一个需要理解的重要概念,因为这意味着如果找到的文件与文件名匹配(例如,appsettings.{env}.json
),它将替换。覆盖任何重叠配置。强>
请注意使用替换,覆盖和重叠。
您可以构建自己的层,并以合适的方式分层配置以适合您的项目。您也不会被限制使用appsettings.Production.json
,您可以使用任何类型的条件逻辑来根据需要进行设计。
如果您打算采用这种定制设计的方式。您可能需要注意,在env.EnviornmentName
构建之前(即在调用WebHostBuilder
方法之前),您可以根据需要重新配置和更改配置。因此,您可以非常有创意地想要以编程方式配置项目。