想知道这是否可能在运行时读取一个项目(该项目不是ASP.NET Core解决方案的主要项目)中的包含常量负载的json / xml文件(与它是否在开发/生产中无关)?
我不打算将所有内容都移到appsettings.json,也不想将所有内容都转换成一个巨大的类。
如果在运行该行,那么在运行时很明显:
var configurationContent = File.ReadAllText(ConfigurationFileName);
当配置文件位于非主项目中时,该过程将在主项目目录中查找该文件。
我该如何解决?
答案 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。