gpt4 book ai didi

json - 您可以预览 ASP.NET Core 的 appsettings.json 环境覆盖吗?

转载 作者:行者123 更新时间:2023-12-05 03:00:11 26 4
gpt4 key购买 nike

在 ASP.NET Core 中,JsonConfigurationProvider 将从 appsettings.json 加载配置,然后读取环境版本,appsettings.{Environment}.json,基于 IHostingEnvironment.EnvironmentName 是什么。环境版本可以覆盖基础 appsettings.json 的值。

是否有任何合理的方法来预览生成的覆盖配置的外观?

显然,您可以编写单元测试来明确测试元素是否按照您的期望被覆盖,但每次更改设置时都要进行维护,这将是一个非常费力的解决方法。如果您只是想验证您没有错放括号或拼错元素名称,这不是一个好的解决方案。

回到 ASP.NET 的 web.config 转换,您只需在 Visual Studio 中右键单击转换并选择“预览转换”。还有许多其他方法可以在 Visual Studio 之外预览 XSLT 转换。即使对于使用 Parameters.xml 的 web.config 参数化,您至少可以执行 Web 部署并检查生成的 web.config 以确保它正确显示。

似乎没有任何内置方法可以预览 appsettings.{Environment}.json 对 Visual Studio 中的基本文件的影响。我也找不到 VS 之外的任何东西来帮助解决这个问题。 JSON 重写似乎并不那么普遍,尽管它现在是 ASP.NET Core 不可或缺的一部分。

最佳答案

我发现在将 appsettings 文件加载到 JObjects 后,您可以使用 Json.NET 的 Merge 功能实现预览。

这是一个演示此操作的简单控制台应用程序。向它提供您的 appsettings 文件所在的路径,它会发出它们在每个环境中的外观预览。

    static void Main(string[] args)
{
string targetPath = @"C:\path\to\my\app";

// Parse appsettings.json
var baseConfig = ParseAppSettings($@"{targetPath}\appsettings.json");

// Find all appsettings.{env}.json's
var regex = new Regex(@"appsettings\..+\.json");
var environmentConfigs = Directory.GetFiles(targetPath, "*.json")
.Where(path => regex.IsMatch(path));

foreach (var env in environmentConfigs)
{
// Parse appsettings.{env}.json
var transform = ParseAppSettings(env);

// Clone baseConfig since Merge is a void operation
var result = (JObject)baseConfig.DeepClone();

// Merge the two, making sure to overwrite arrays
result.Merge(transform, new JsonMergeSettings
{
MergeArrayHandling = MergeArrayHandling.Replace
});

// Write the preview to file
string dest = $@"{targetPath}\preview-{Path.GetFileName(env)}";
File.WriteAllText(dest, result.ToString());
}
}

private static JObject ParseAppSettings(string path)
=> JObject.Load(new JsonTextReader(new StreamReader(path)));

虽然这不能保证在部署后不会有其他配置源不会覆盖这些,但这至少可以让您验证这两个文件之间的交互是否会得到正确处理。

关于json - 您可以预览 ASP.NET Core 的 appsettings.json 环境覆盖吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57080076/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com