如何读取子项目中appsettings文件的内容
How to read the content of appsettings file in subprojects
想知道这是否有可能在运行时读取一个 json / xml 文件,其中包含一个项目中的大量常量(独立于它是否在开发/生产中工作)不是ASP.NET 核心解决方案中的主要项目?
我不考虑将所有内容都移至 appsettings.json,我也不想将所有内容都转换成一个巨大的 class。
如果我是 运行 那行:
在运行时很明显
var configurationContent = File.ReadAllText(ConfigurationFileName);
虽然配置文件位于非主项目中,但进程将在主项目目录中查找该文件。
我该如何解决?
编辑: 通常,您可以配置可作为 IOptions<MyConfiguredOption>
注入的选项。这是首选的做法。在你的配置服务方法中
services.Configure<MyConfiguredOption>(options => Configuration.GetSection("MyConfiguredOption").Bind(options));
旧答案:您可以做的是确保将 appsettings 文件(或您想要的任何文件)复制到输出目录。右键单击它 > 属性 > 始终复制到输出目录。
调整 webhostbuilder 并为其设置基本目录
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseKestrel()
.UseContentRoot(AppContext.BaseDirectory) // <--- this line
.UseStartup<Startup>();
文件现在将始终位于可运行应用程序的输出目录中,因此它引用的每个程序集都可以访问。
现在当你想加载文件内容时,就这样做
var configurationContent = File.ReadAllText(Path.Combine(AppContext.BaseDirectory, ConfigurationFileName));
虽然这可行,但您可以只注册配置并注入 IConfiguration 来访问应用程序设置。
services.AddSingleton(typeof(IConfiguration), Configuration);
这也不是。
想知道这是否有可能在运行时读取一个 json / xml 文件,其中包含一个项目中的大量常量(独立于它是否在开发/生产中工作)不是ASP.NET 核心解决方案中的主要项目?
我不考虑将所有内容都移至 appsettings.json,我也不想将所有内容都转换成一个巨大的 class。
如果我是 运行 那行:
在运行时很明显var configurationContent = File.ReadAllText(ConfigurationFileName);
虽然配置文件位于非主项目中,但进程将在主项目目录中查找该文件。
我该如何解决?
编辑: 通常,您可以配置可作为 IOptions<MyConfiguredOption>
注入的选项。这是首选的做法。在你的配置服务方法中
services.Configure<MyConfiguredOption>(options => Configuration.GetSection("MyConfiguredOption").Bind(options));
旧答案:您可以做的是确保将 appsettings 文件(或您想要的任何文件)复制到输出目录。右键单击它 > 属性 > 始终复制到输出目录。
调整 webhostbuilder 并为其设置基本目录
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseKestrel()
.UseContentRoot(AppContext.BaseDirectory) // <--- this line
.UseStartup<Startup>();
文件现在将始终位于可运行应用程序的输出目录中,因此它引用的每个程序集都可以访问。
现在当你想加载文件内容时,就这样做
var configurationContent = File.ReadAllText(Path.Combine(AppContext.BaseDirectory, ConfigurationFileName));
虽然这可行,但您可以只注册配置并注入 IConfiguration 来访问应用程序设置。
services.AddSingleton(typeof(IConfiguration), Configuration);
这也不是