非ASP.NET Core、特にGeneric Host で開発するなら必要になるVS拡張を公開していたのを忘れていました。*1
今回は、GenericHost など非ASP.NET Coreなプロジェクトでも、ASP.NET Core なプロジェクトにある Manage UserSecrets
(ユーザーシークレットの管理) と同様の手助けをするVisual Studio 拡張 Open UserSecrets を作った話です。
目次
- 目次
- TL;DR
- UserSecrets とは
- ASP.NET Core なプロジェクトではUserSecrets が空気のように利用できる
- 非ASP.NET Core なプロジェクトでUserSecretsを利用する難しさ
- Open UserSecrets の紹介
- まとめ
TL;DR
Open UserSecrets拡張をいれることで、UserSecrets を開くためのメニューが 非ASP.NET Core プロジェクトでも表示されます。
appsettings.Development.json
にはCD先の開発環境を設定しておいて、ローカル開発環境はUserSecrets で実行時にコンフィグ上書きするのが楽になるのでぜひどうぞ。
身近そうな例として、MicroBatchFramework の Config を利用した例は、この Open UserSecrets を使うとローカルテストが圧倒的に楽になります。
むしろ、これなしでUserSecrets 使うのつらすぎませんか?
UserSecrets とは
ASP.NET Core を開発していて、開発環境とローカル開発でコンフィグを分けたい時に使うのが UserSecrets です。
UserSecrets を使うことで、appsettings.json
、appsettings.Development.json
以外に secrets.json
を %APPDATA%\Microsoft\UserSecrets\<user_secrets_id>\secrets.json
に保持できるようになります。
ASP.NET Core なプロジェクトではUserSecrets が空気のように利用できる
ASP.NET Core ではこれを管理するためのVisual Studio のメニュー拡張が自動的に追加され、Visual Studio 2017/2019 で プロジェクト名を右クリックすると Manage UserSecrets
(ユーザーシークレットの管理) がコンテキストメニューに表示されます。
これを選択するだけで、自動的に secrets.json が開かれます。
非ASP.NET Core なプロジェクトでUserSecretsを利用する難しさ
UserSecretsは何も ASP.NET Core なプロジェクト専用の機能ではありません。
.NET Framework でも .NET Coreでも Microsoft.Extensions.Configuration.UserSecrets
nuget をプロジェクトに追加することで利用できるようになります。
ただしNuGetをいれても素のVisual Studio のままでは、次の方法で管理することになります。
dotnet user-secrets を使った管理
- Enable secret storageに従い、csproj のPropertyGroup の中に、
UserSecretsId
要素でGUID を指定して保存 - .csproj のあるパスで
dotnet user-secrets set KEY VALUE
コマンドで%APPDATA%\Microsoft\UserSecrets\<user_secrets_id>\secrets.json
を作成 - 以降も
dotnet user-secrets
で管理
手で管理
- Enable secret storageに従い、csproj のPropertyGroup の中に、
UserSecretsId
要素でGUID を指定して保存 %APPDATA%\Microsoft\UserSecrets\<user_secrets_id>\secrets.json
を作成- secrets.json を開き編集
ASP.NET Core とはずいぶんと異なるフローであることに気づきます。 ASP.NET Coreが提供する Manage UserSecrets は、上記フローを1つのコマンドで実施しVisual Studio で secrets.json も開いてくれます。
Visual Studio Code で開発しているなら、dotnet user-secrets でもいいのですが、Visual Studio でプロジェクトに関わるファイルを別のエディタをいちいち開くのは辛いでしょう。
Open UserSecrets の紹介
Open UserSecrets を作った動機はまさにこの難しさをASP.NET Core のプロジェクトと同等まで簡単にすることです。
Visual Studio 2019 (VS2017 も同様です)を Open UserSecrest を使う流れを見てみましょう。とはいってもふつうのVisual Studio 拡張と同じです。
Visual Studio > Extensions で Online から Open UserSecrets を検索してください。
では Console App で利用してみましょう。
サンプルプロジェクトをリポジトリに用意してあります。
適当な .NET Core Console プロジェクトに、Microsoft.Extensions.Configuration.UserSecrets
Nuget を入れます。(これで UserSecrets が利用できるようになります)
あとはプロジェクトを右クリックして Open UserSecrets を選ぶだけです。
Manage UserSecrets と同様に secrets.json
が Visual Studio で開くので好きに編集してください。
まとめ
みなさんが幸せになりますように。
ASP.NET Core チームでも .NET Core チームでもいいから早く Visual Studio 拡張かなにか用意してほしいです..... (Issue なのか?
*1:公開して3カ月がたっていました。スターで気づいた