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.Json
、appsettings.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)