設定ファイルはアプリ名.jsonという形式で.exeと同じ場所に保存されていることが前提のプログラムになっています。
ファイル名:ConfigurationBuilderSample01.csproj
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net9.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Configuration" Version="9.0.8" />
<PackageReference Include="Microsoft.Extensions.Configuration.CommandLine" Version="9.0.8" />
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="9.0.8" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="9.0.8" />
</ItemGroup>
</Project>
ファイル名:Program.cs
using Microsoft.Extensions.Configuration;
namespace ConfigurationBuilderSample01;
public class Program
{
readonly static string _appName = "ConfigurationBuilderSample01";
static string DefaultDir() =>
Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "MyConsoleApp");
static void Main(string[] args)
{
var cfg = new ConfigurationBuilder()
.SetBasePath(AppContext.BaseDirectory)
.AddJsonFile($"{_appName}.json", optional: true/*, reloadOnChange: true*/)
.AddEnvironmentVariables(prefix: $"{_appName}_") // 例: MYAPP_OutputDir=/tmp/myapp
.AddCommandLine(args) // 例: --OutputDir C:\work\data
.Build();
string dir = cfg["OutputDir"] ?? DefaultDir();
Directory.CreateDirectory(dir);
Console.WriteLine($"SaveDir = {dir}");
}
}
ファイル名:ConfigurationBuilderSample01.json
{
"OutputDir": "C:\\csharp\\console\\ConfigurationBuilderSample01"
}
コメント