【问题标题】:How to read the content of appsettings file in subprojects如何在子项目中读取 appsettings 文件的内容
【发布时间】:2018-08-01 16:53:06
【问题描述】:

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

我不考虑将所有内容都移到 appsettings.json 中,并且我不想将所有内容都转换为一个巨大的类。

如果我正在运行该行,则显然在运行时:

var configurationContent = File.ReadAllText(ConfigurationFileName);

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

我该如何解决这个问题?

【问题讨论】:

  • 请改写你的标题,它具有误导性。需要注意的是,它是关于配置 json 文件的(当前建议读取任意 json 文件)。另外请不要用标签填充问题标题,这就是标签部分的用途。阅读What are tags, and how should I use them?

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


【解决方案1】:

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

services.Configure<MyConfiguredOption>(options => Configuration.GetSection("MyConfiguredOption").Bind(options));

旧答案:您可以做的是确保将 appsettingsfile(或您想要的任何文件)复制到输出目录。右键单击它 > 属性 > 始终复制到输出目录。

调整webhostbuilder并将basedirectory设置为它

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 以访问 appsettings。

services.AddSingleton(typeof(IConfiguration), Configuration);

这也不是preferred way

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多