【问题标题】: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 相关。 另一个问题是,要更改服务器上的配置值,必须检查两个文件:基础文件和特定环境文件。

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

【问题讨论】:

    标签: asp.net-core publish configuration-files appsettings


    【解决方案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() 方法之前)尽可能多地重新配置和更改配置。因此,您可以非常有创意地以编程方式配置您的项目。

    【讨论】:

      猜你喜欢
      • 2017-07-24
      • 2018-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多