如何在子项目中读取appsettings文件的内容

时间:2018-08-01 07:18:27

标签: c# .net json asp.net-core appsettings

想知道这是否可能在运行时读取一个项目(该项目不是ASP.NET Core解决方案的主要项目)中的包含常量负载的json / xml文件(与它是否在开发/生产中无关)?

我不打算将所有内容都移到appsettings.json,也不想将所有内容都转换成一个巨大的类。

如果在运行该行,那么在运行时很明显:

var configurationContent = File.ReadAllText(ConfigurationFileName);

当配置文件位于非主项目中时,该过程将在主项目目录中查找该文件。

我该如何解决?

1 个答案:

答案 0 :(得分:1)

编辑:通常,您可以配置可以作为IOptions<MyConfiguredOption>注入的选项。这是首选的方式。在您的configureservice方法中

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);

这也不是preferred way