やりたいこと
- コンソールアプリでも接続文字列などをリポジトリに混入させない
- Visual Studio のユーザーシークレットを使う
環境
- Visual Studio Community 2022 Version 17.9.6
- .NET 8
手順
コンソールアプリを追加
いつも通りです。
ユーザーシークレットを有効化
secrets.json
{
"Secrets": {
"Message": "This is a secret message."
}
}
Program.cs で読み込む
IConfiguration を Build()
Program.cs
-// See https://aka.ms/new-console-template for more information
+using Microsoft.Extensions.Configuration;
Console.WriteLine("Hello, World!");
+IConfiguration configuration = new ConfigurationBuilder().AddUserSecrets<Program>().Build();
先ほど作ったユーザーシークレットを読み込む
Program.cs
using Microsoft.Extensions.Configuration;
Console.WriteLine("Hello, World!");
IConfiguration configuration = new ConfigurationBuilder().AddUserSecrets<Program>().Build();
+string message = configuration.GetSection("Secrets:Message").Value ?? "Failed";
+Console.WriteLine(message);
+
+Console.ReadLine();
セクションの指定は JSON のキーをコロンでつなげた文字列で行います。
動作確認
読み込むことができました!
README に書いておく
新たにプルした人がビルドできなくなってしまうので、README にでも書いておいてあげましょう。
README.md
# HigeDaruma.DemoConsoleSecret
## 準備
secrets.json に以下を設定してください。
```json
{
"Secrets": {
"Message": "{適切に設定してください}"
}
}
```
まとめ
ユーザーシークレットをコンソールアプリで読み出すことができました。secrets.json
に書いたシークレットはロカールのみに残り、リポジトリにはプッシュされません。安心して秘密を書き込みましょう。