「.NET Core/System.Configuration名前空間がない」の版間の差分
ナビゲーションに移動
検索に移動
imported>Administrator (ページの作成:「NuGetサーバーをLinuxで動かすべくASP .NET Coreに移植しようとしたところ、.NET CoreにSystem.Configuration名前空間がないこと...」) |
imported>Administrator |
||
50行目: | 50行目: | ||
{ | { | ||
public static IConfigurationRoot Configuration { get; set; } | public static IConfigurationRoot Configuration { get; set; } | ||
+ | |||
public static void Main(string[] args = null) | public static void Main(string[] args = null) | ||
{ | { |
2017年8月2日 (水) 05:37時点における最新版
NuGetサーバーをLinuxで動かすべくASP .NET Coreに移植しようとしたところ、.NET CoreにSystem.Configuration名前空間がないことが判明した。ググったところ.NET CoreではNuGetにある「Microsoft.Extensions.Configuration」を使うらしい。
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration
設定ファイルの形式は古いSystem.ConfigurationではXML(app.configなど)だけだったが、新しいMicrosoft.Extensions.ConfigurationではINI、XML、JSONから選べる。また、コマンドライン引数や環境変数から設定する手段も用意されている。
各設定値は文字列をキーとするPOCO(単純なプロパティだけのクラス)にバインディングされる。
例:JSON + コンソールアプリ[編集 | ソースを編集]
- 利用するNuGetパッケージ
- Microsoft.Extensions.Configuration
- Microsoft.Extensions.Configuration.Json
- appsettings.json
{
"option1": "value1_from_json",
"option2": 2,
"subsection": {
"suboption1": "subvalue1_from_json"
},
"wizards": [
{
"Name": "Gandalf",
"Age": "1000"
},
{
"Name": "Harry",
"Age": "17"
}
]
}
- Program.cs
using Microsoft.Extensions.Configuration;
using System;
using System.IO;
// Add NuGet <package id="Microsoft.Extensions.Configuration" and
// <package id="Microsoft.Extensions.Configuration.Json"
// .NET Framework 4.x use the following path:
//.SetBasePath(Path.Combine(Directory.GetCurrentDirectory(), @"..\.."))
public class Program
{
public static IConfigurationRoot Configuration { get; set; }
public static void Main(string[] args = null)
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json");
Configuration = builder.Build();
Console.WriteLine($"option1 = {Configuration["option1"]}");
Console.WriteLine($"option2 = {Configuration["option2"]}");
Console.WriteLine($"suboption1 = {Configuration["subsection:suboption1"]}");
Console.WriteLine();
Console.WriteLine("Wizards:");
Console.Write($"{Configuration["wizards:0:Name"]}, ");
Console.WriteLine($"age {Configuration["wizards:0:Age"]}");
Console.Write($"{Configuration["wizards:1:Name"]}, ");
Console.WriteLine($"age {Configuration["wizards:1:Age"]}");
}
}
階層構造は「:(コロン)」区切りで表現する。
Console.WriteLine($"option1 = {Configuration["subsection:suboption1"]}");
配列をは階層構造と同様にコロン区切りを利用し、変数名の部分にインデックス番号(0からスタート)を指定する。
Console.Write($"{Configuration["wizards:0:Name"]}, ");