メインメニューを開く

差分

.NET Core/System.Configuration名前空間がない

3,039 バイト追加, 2017年8月2日 (水) 05:29
ページの作成:「NuGetサーバーをLinuxで動かすべくASP .NET Core移植しようとしたところ、.NET CoreにSystem.Configuration名前空間がないこと...」
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
<source lang="javascript" >
{
"option1": "value1_from_json",

"option2": 2,

"subsection": {
"suboption1": "subvalue1_from_json"
},

"wizards": [
{
"Name": "Gandalf",
"Age": "1000"
},
{
"Name": "Harry",
"Age": "17"
}
]
}
</source>

; Program.cs
<source lang="csharp">
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"]}");
}
}
</source>

階層構造は「:(コロン)」区切りで表現する。

Console.WriteLine($"option1 = {Configuration["subsection:suboption1"]}");

配列をは階層構造と同様にコロン区切りを利用し、変数名の部分にインデックス番号(0からスタート)を指定する。

Console.Write($"{Configuration["wizards:0:Name"]}, ");

== 関連項目 ==
* [[.NET Core]]
* [[.NET Core/macOSにインストールする]]

[[category: .NET Core]]
匿名利用者