Dotnet Core 3.1:如何将 AddJsonFile 与文件的绝对路径一起使用?

Posted

技术标签:

【中文标题】Dotnet Core 3.1:如何将 AddJsonFile 与文件的绝对路径一起使用?【英文标题】:Dotnet Core 3.1: How to use AddJsonFile with absolute path to file? 【发布时间】:2020-11-20 00:23:00 【问题描述】:

我有一个 dotnet 应用程序,我需要从两个相对路径(常规 appsettings.Jsonappsettings.Development.json)以及绝对路径 /config/appsettings.json 中提取配置。我找不到办法做到这一点。从the docs,路径arg 是Path relative to the base path stored in Properties of builder. 如何设置它以从绝对路径/config/filename.json 读取配置?

动机: 我正在对 dotnet 应用程序进行 docker 化,因此我计划保留不会通常在常规 publish/appsettings.json 中的部署之间更改的配置,并在 /config/appsettings.json 中部署特定配置(这是我'将在部署时挂载到容器上)。

【问题讨论】:

这个问题你查了吗How can I share config file like appsettings.json across multiple ASP.NET CORE projects in one solution in Visual Studio 2015? 【参考方案1】:

您可以像这样编辑CreateHostBuilder 方法:

public static IHostBuilder CreateHostBuilder(string[] args)

    var builder = Host.CreateDefaultBuilder(args);
    builder.ConfigureAppConfiguration(cfgBuilder =>
       
           var provider = new PhysicalFileProvider("/config"); // Create a dedicated FileProvider based on the /config directory
           cfgBuilder.AddJsonFile(provider, "filename.json", true, true); // Add the filename.json configuration file stored in the /config directory
       );
    builder.ConfigureWebHostDefaults(webBuilder =>
       
            webBuilder.UseStartup<Startup>();
       );

    return builder;

【讨论】:

还没有真正尝试过,但很确定它会起作用。谢谢!【参考方案2】:

agnivesh 试试这个 sn-p 代码示例:

        public static class AppConfigurations
        
            private static IConfigurationRoot BuildConfiguration(this IWebHostEnvironment env)
            
                var builder = new ConfigurationBuilder()
                    .SetBasePath(env.ContentRootPath)
                    .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                    .AddJsonFile("config/appsettings.json", optional: true, reloadOnChange: true);
                //
                //  TODO
                //
                return builder.Build();
            
        

现在在 Startup 类构造器中调用这个类函数:

public Startup(IWebHostEnvironment env)
    
        _appConfiguration = env.BuildConfiguration();
    

【讨论】:

我正在使用 DefaultWebHostBuilder。无法控制整个配置。另外,我认为config/appsettings.json 会寻找 contentrootpath/config/appsettings.json【参考方案3】:

我使用了一个技巧..“相对路径”,但是父级...可以使用“../”

【讨论】:

以上是关于Dotnet Core 3.1:如何将 AddJsonFile 与文件的绝对路径一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 c# dotnet core 3.1 微服务流绑定到涡轮服务器流

抛出异常:'System.PlatformNotSupportedException'。如何在 dotnet core 3.1 中加密和解密安全字符串?

在 Visual Studio 16.6 中将仅内容包导入 DotNet Core 3.1 项目

dotNet Core 3.1 使用 Aspose (部署 Docker)

如何使用 dotnet cli 命令以 VB.NET 语言创建 ASP.NET Core 项目?

同时针对 ef core 3.1 和 5 是个好主意吗?