如何读取子项目中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);

这也不是