想知道是否有可能在运行时读取一个项目(该项目不是ASP.NET Core解决方案的主要项目)中的包含常量(独立于此对象是否在开发/生产中)的json / xml文件?
我没有考虑将所有内容都移到appsettings.json,也不想将所有内容都转换成一个巨大的类。
显然,在运行时如果我正在运行该行:
var configurationContent = File.ReadAllText(ConfigurationFileName);
当配置文件位于非主项目中时,该过程将在主项目目录中查找该文件。
我该如何解决?
编辑:通常,您可以配置可以作为注入的选项IOptions<MyConfiguredOption>
。这是首选的方式。在您的configureservice方法中
services.Configure<MyConfiguredOption>(options => Configuration.GetSection("MyConfiguredOption").Bind(options));
旧答案:您可以做的是确保将appsettingsfile(或所需的任何文件)复制到输出目录。右键单击它>属性>始终复制到输出目录。
调整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);
这也不是首选方式。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句