我想使用ConfigurationBuidler读取我的appsettings.json文件.我看不到我在做什么错.
我的文件是
{ "comment": "this gets copied to bin\\debug on build. the app updates the copy. However to remember the settings you need to paste them here", "col1Width": "344" }我的测试失败
[TestMethod] public void TestMethod1() { var configuration = Helper.LoadConfiguration("appsettings.json"); Assert.IsTrue(configuration.Properties.Keys.Contains("col1Width")); // fails here }我的助手班是
public static class Helper { public static ConfigurationBuilder LoadConfiguration(string filename) { var configuration = new ConfigurationBuilder(); var currentDirectory = System.IO.Directory.GetCurrentDirectory(); configuration.SetBasePath(currentDirectory); configuration.AddJsonFile(path: filename, optional: false, reloadOnChange: true); configuration.Build(); return configuration; } }[更新]
根据Marco Marco指向我的博客文章,我更正了问题标题并按如下所示更新了代码.
仅.Bind不可用
public static class Helper { public static FeedReadConfiguration GetApplicationConfiguration( ) { var configuration = new FeedReadConfiguration(); var currentDirectory = System.IO.Directory.GetCurrentDirectory(); var iConfig = GetIConfigurationRoot(currentDirectory); iConfig .GetSection("FeedRead") .Bind(configuration); // Not available return configuration; } public static IConfigurationRoot GetIConfigurationRoot(string outputPath) { return new ConfigurationBuilder() .SetBasePath(outputPath) .AddJsonFile("appsettings.json") .Build(); } } public class FeedReadConfiguration { public int Col1Width { get; set; } }解决方案
基于显示的设置文件,没有"FeedRead"部分
需要直接从根目录读取设置.
public static class Helper { public static FeedReadConfiguration GetApplicationConfiguration( ) { var currentDirectory = System.IO.Directory.GetCurrentDirectory(); var iConfig = GetIConfigurationRoot(currentDirectory); //Microsoft.Extensions.Configuration.Binder.dll FeedReadConfiguration configuration = iConfig.Get<FeedReadConfiguration>(); return configuration; } public static IConfiguration GetIConfigurationRoot(string outputPath) { return new ConfigurationBuilder() .SetBasePath(outputPath) .AddJsonFile("appsettings.json") .Build(); } }参考 ASP.NET Core中的配置
参考 ASP.NET Core中的选项模式
I want to use ConfigurationBuidler to read my appsettings.json file. I cant see what I am doing wrong.
My file is
{ "comment": "this gets copied to bin\\debug on build. the app updates the copy. However to remember the settings you need to paste them here", "col1Width": "344" }My test fails
[TestMethod] public void TestMethod1() { var configuration = Helper.LoadConfiguration("appsettings.json"); Assert.IsTrue(configuration.Properties.Keys.Contains("col1Width")); // fails here }My helper class is
public static class Helper { public static ConfigurationBuilder LoadConfiguration(string filename) { var configuration = new ConfigurationBuilder(); var currentDirectory = System.IO.Directory.GetCurrentDirectory(); configuration.SetBasePath(currentDirectory); configuration.AddJsonFile(path: filename, optional: false, reloadOnChange: true); configuration.Build(); return configuration; } }[Update]
I corrected the question title and updated the code as follows according to the Blog Post Marco pointed me to.
Only .Bind is not available
public static class Helper { public static FeedReadConfiguration GetApplicationConfiguration( ) { var configuration = new FeedReadConfiguration(); var currentDirectory = System.IO.Directory.GetCurrentDirectory(); var iConfig = GetIConfigurationRoot(currentDirectory); iConfig .GetSection("FeedRead") .Bind(configuration); // Not available return configuration; } public static IConfigurationRoot GetIConfigurationRoot(string outputPath) { return new ConfigurationBuilder() .SetBasePath(outputPath) .AddJsonFile("appsettings.json") .Build(); } } public class FeedReadConfiguration { public int Col1Width { get; set; } } 解决方案Based on the shown settings file, there is no "FeedRead" section
The settings would need to be read directly from the root.
public static class Helper { public static FeedReadConfiguration GetApplicationConfiguration( ) { var currentDirectory = System.IO.Directory.GetCurrentDirectory(); var iConfig = GetIConfigurationRoot(currentDirectory); //Microsoft.Extensions.Configuration.Binder.dll FeedReadConfiguration configuration = iConfig.Get<FeedReadConfiguration>(); return configuration; } public static IConfiguration GetIConfigurationRoot(string outputPath) { return new ConfigurationBuilder() .SetBasePath(outputPath) .AddJsonFile("appsettings.json") .Build(); } }Reference Configuration in ASP.NET Core
Reference Options pattern in ASP.NET Core
更多推荐
如何在.net Core 3.1中使用ConfigurationBulder绑定到配置类
发布评论