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
),它将替换.覆盖任何重叠的配置。
注意replace、override和overlapping这些词的使用。
您可以构建自己的层并以适合您项目的方式分层配置。 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 Core 应用程序说它无法读取 web.config
ASP.Net Core MVC 需要 web.config 中的 <environmentVariables> 才能工作