我有一个针对.NET 4.7.1的控制台应用程序。我正在尝试在我的.Net Framework应用程序中使用.net核心配置。我的`App.config是:
<configuration>
<configSections>
<section name="configBuilders" type="System.Configuration.ConfigurationBuildersSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" restartOnExternalChanges="false" requirePermission="false" />
</configSections>
<configBuilders>
<builders>
<add name="SimpleJson"
jsonFile="config.json"
optional="false"
jsonMode="Sectional"
type="Microsoft.Configuration.ConfigurationBuilders.SimpleJsonConfigBuilder, Microsoft.Configuration.ConfigurationBuilders.Json, Version=1.0.0.0, Culture=neutral" /></builders>
</configBuilders>
我有一个文件config.json
,其属性“Copy Always”设置为True
。 config.json
看起来像:
{
"appSettings": {
"setting1": "value1",
"setting2": "value2",
"complex": {
"setting1": "complex:value1",
"setting2": "complex:value2"
}
},
"connectionStrings": {
"mySpecialConnectionString": "Dont_check_connection_information_into_source_control"
}
}
然后,在我的main
方法中,我尝试读取配置值,如:
var config = ConfigurationManager.AppSettings
但是,config
的值始终为null。我尝试了以下方法:
jsonFile
改为~/config.json
;jsonMode
设置为默认值flat;但是,无法让配置工作。我该如何解决这个问题?
我不久前做过这个,但它不只是一个单行。您可以使用Microsoft Nuget Packages Microsoft.Extensions.Configuration
和Microsoft.Extensions.Configuration.Json
并设置您自己的ConfigurationBuilder。
看看this article,我想你应该完成它。
我不确定默认设置现在如何工作,但我会告诉你我是如何在.net核心中加载配置文件的。
在CreateDefaultBuilder之后和UseStartup之前添加如下的ConfigureAppConfiguration方法:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
//HostingEnvironment = hostingContext.HostingEnvironment;
//config.SetBasePath(HostingEnvironment.ContentRootPath);
var workingDirectory = AppContext.BaseDirectory; // HostingEnvironment.ContentRootPath // Directory.GetCurrentDirectory()
foreach (var file in Directory.GetFiles(workingDirectory, "*_config.json"))
{
config.AddJsonFile(file);//);Path.GetFileName(file));
}
})
.UseStartup<Startup>();
在您的情况下,如果您的配置未加载:
config.AddJsonFile(Path.Combine(workingDirectory, "config.json"));
这会将.config文件添加到应用程序中。在ConfigureServices方法中,我们可以按部分访问此配置,并使用此值填充一些类属性。
services.Configure<CommonAppSettings>(this.Configuration.GetSection("appSettings"));
直接访问:
var value1 = this.Configuration.GetSection("appSettings").GetValue(typeof(string), "setting1", "defaultValueIfNotFound");
连接字符串:
//I'm not sure about "ConnectionStrings" section case sensitivity.
var connectionString = this.Configuration.GetConnectionString("mySpecialConnectionString");
有用的链接:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-2.1
看看source code中的例子
您应该添加配置文件部分
<appSettings configBuilders="SimpleJson">
<add key="AppConfiguration:Key1" value="will be replaced by value in json file" />
</appSettings>
并删除jsonMode =“Sectional”属性。
您可以使用访问您的价值
var key1 = ConfigurationManager.AppSettings["AppConfiguration:Key1"];
<appSettings configBuilders="SimpleJson">
这是适合我的代码:
<configBuilders>
<builders>
<add name="SimpleJson" jsonFile="~\developer_config.json" optional="false" jsonMode="Sectional" type="Microsoft.Configuration.ConfigurationBuilders.SimpleJsonConfigBuilder, Microsoft.Configuration.ConfigurationBuilders.Json, Version=1.0.0.0, Culture=neutral" />
</builders>
</configBuilders>
<appSettings configBuilders="SimpleJson">
...
</appSettings>
如果你想在.Net Core中使用config json文件,你可以安装NuGets Microsoft.Extensions.Configuration Microsoft.Extensions.Configuration.Json然后初始化配置
IConfigurationRoot configuration = new ConfigurationBuilder()
.AddJsonFile("config.json", optional: true)
.Build();
在此之后,您可以使用.Net Core中的配置。例如:
{
"myConfig": {
"item1": "config options"
}
}
对于这个json你会打电话:
var configItem = configuration["myConfig:item1"];