ASP.NET Core 中 Web.config 转换的等价物是啥?

Posted

技术标签:

【中文标题】ASP.NET Core 中 Web.config 转换的等价物是啥?【英文标题】:What is the equivalent of Web.config transform in ASP.NET Core?ASP.NET Core 中 Web.config 转换的等价物是什么? 【发布时间】:2017-10-23 14:25:38 【问题描述】:

ASP.NET Core 文档建议我们应该使用 appsettings.json 文件以及每个环境的文件,其中包含覆盖值。问题是所有这些文件都已发布,尽管只有 appsettings.json 和 appsettings.[Environment].json 相关。 另一个问题是,要更改服务器上的配置值,必须检查两个文件:基础文件和特定环境文件。

所以我的问题是:在每个部署环境中拥有一个配置文件的最简洁方法是什么?

【问题讨论】:

【参考方案1】:

主要区别在于 ASP.NET Core 应用程序不会像 ASP.NET 应用程序那样针对特定配置进行部署。例如,以前,您实际上会以“发布”的形式发布,如果您想切换部署配置,则必须重新发布。对于 ASP.NET Core 应用程序,环境由 ASPNETCORE_ENVIRONMENT 环境变量或在执行期间传递的环境确定。因此,部署所有可能的环境设置是完全有效的,因为环境可以随心所欲地更改。

也就是说,如果您确定自己永远不会更改环境,则可以简单地删除任何您不需要的 appsettings.environment.json 文件。此外,您不应该真正覆盖 man appsettings.json 中的设置。如果它是特定于环境的,它应该放在特定于环境的 JSON 文件之一中。您的主要appsettings.json 文件实际上应该只包含不受环境影响的全局设置。如果您以这种方式处理它,那么您不必同时查看设置的来源。

最后,如果您不喜欢这种方法,一般来说,您可以简单地选择不同的配置策略,例如环境变量或 Azure Key Vault 等外部配置源。

【讨论】:

如果我理解正确,应该将特定于环境的配置设置外部化。例如,如果 app 部署到 5 个服务器并使用不同的连接字符串,则此配置应位于 appsettings.json 之外。这样一来,所有环境都只有一个应用版本。 嗯,是的,也不是。这里没有真正的“规则”——只是建议。你可以随心所欲地处理它。是的,外部化特定于环境的设置通常是一个好主意,但是对于 .NET Core,构建就是构建就是构建。就像我说的,没有“发布”构建、“暂存”构建等。环境本身是外部化的。 @ChrisPratt 嗨,我正在处理.net core 2.1's API 项目,我想在 IIS 服务器上发布它,但是如何使用配置文件进行 diff 的配置设置。环境?【参考方案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 或类似名称,那么请务必注意它们的添加顺序。您可以在上面的代码 sn-p 中看到 @987654325 @被添加之后。

这是一个需要理解的重要概念,因为这意味着如果找到与文件名匹配的文件(例如,appsettings.Production.json),它将替换.覆盖任何重叠的配置。

注意replaceoverrideoverlapping这些词的使用。

您可以构建自己的层并以适合您项目的方式分层配置。 env.EnviornmentName 的使用也不受限制,您可以根据需要使用任何类型的条件逻辑来设计它。

如果您打算走这条定制设计路线。您可能需要注意,您可以在构建 WebHostBuilder 之前(即在调用 .Build() 方法之前)尽可能多地重新配置和更改配置。因此,您可以非常有创意地以编程方式配置您的项目。

【讨论】:

以上是关于ASP.NET Core 中 Web.config 转换的等价物是啥?的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core 中 Web.config 转换的等价物是啥?

asp.net web.Config 配置httpHandlers无效 求解,在线等!

如何在 ASP.NET Core 的 web.config 中设置会话超时

asp.net web.config的设置问题

我的 ASP.NET Core 应用程序说它无法读取 web.config

ASP.Net Core MVC 需要 web.config 中的 <environmentVariables> 才能工作