tech.guitarrapc.cóm

Technical updates

非ASP.NET Coreなプロジェクトで UserSecretsを使うためのVisual Studio 拡張を作りました

非ASP.NET Core、特にGeneric Host で開発するなら必要になるVS拡張を公開していたのを忘れていました。*1

今回は、GenericHost など非ASP.NET Coreなプロジェクトでも、ASP.NET Core なプロジェクトにある Manage UserSecrets (ユーザーシークレットの管理) と同様の手助けをするVisual Studio 拡張 Open UserSecrets を作った話です。

marketplace.visualstudio.com

目次

TL;DR

Open UserSecrets拡張をいれることで、UserSecrets を開くためのメニューが 非ASP.NET Core プロジェクトでも表示されます。

f:id:guitarrapc_tech:20190501024218p:plain
Open UserSecrets

appsettings.Development.json にはCD先の開発環境を設定しておいて、ローカル開発環境はUserSecrets で実行時にコンフィグ上書きするのが楽になるのでぜひどうぞ。

marketplace.visualstudio.com

身近そうな例として、MicroBatchFramework の Config を利用した例は、この Open UserSecrets を使うとローカルテストが圧倒的に楽になります。

github.com

むしろ、これなしでUserSecrets 使うのつらすぎませんか?

UserSecrets とは

ASP.NET Core を開発していて、開発環境とローカル開発でコンフィグを分けたい時に使うのが UserSecrets です。

docs.microsoft.com

UserSecrets を使うことで、appsettings.jsonappsettings.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 (ユーザーシークレットの管理) がコンテキストメニューに表示されます。

f:id:guitarrapc_tech:20190501023926p:plain
ASP.NET Core なプロジェクトを右クリックすると UserSecrets を管理するためのメニューが追加されている

これを選択するだけで、自動的に secrets.json が開かれます。

f:id:guitarrapc_tech:20190501025347p:plain
secrets.json をVSで編集できるようになる

非ASP.NET Core なプロジェクトでUserSecretsを利用する難しさ

UserSecretsは何も ASP.NET Core なプロジェクト専用の機能ではありません。

.NET Framework でも .NET Coreでも Microsoft.Extensions.Configuration.UserSecrets nuget をプロジェクトに追加することで利用できるようになります。

www.nuget.org

ただしNuGetをいれても素のVisual Studio のままでは、次の方法で管理することになります。

Enable secret storage

dotnet user-secrets を使った管理

  1. Enable secret storageに従い、csproj のPropertyGroup の中に、UserSecretsId 要素でGUID を指定して保存。
  2. .csproj のあるパスで dotnet user-secrets set KEY VALUE コマンドで %APPDATA%\Microsoft\UserSecrets\<user_secrets_id>\secrets.json を作成
  3. 以降もdotnet user-secrets で管理

手で管理

  1. Enable secret storageに従い、csproj のPropertyGroup の中に、UserSecretsId 要素でGUID を指定して保存。
  2. %APPDATA%\Microsoft\UserSecrets\<user_secrets_id>\secrets.json を作成
  3. secrets.json を開き編集

ASP.NET Core とはずいぶんと異なるフローであることに気づきます。 ASP.NET Coreが提供する Manage UserSecrets は、上記フローを一つのコマンドで実施し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 を検索してください。

f:id:guitarrapc_tech:20190501031131p:plain
Visual Studio拡張でOpen UserSecretsを検索

f:id:guitarrapc_tech:20190501031221p:plain
ダウンロードしたらVSを再起動します

f:id:guitarrapc_tech:20190501031303p:plain
拡張ダイアログがでるのでインストールします

f:id:guitarrapc_tech:20190501031326p:plain
インストール完了

では Console App で利用してみましょう。

サンプルプロジェクトをリポジトリに用意してあります。

github.com

適当な .NET Core Console プロジェクトに、Microsoft.Extensions.Configuration.UserSecrets Nuget を入れます。(これで UserSecrets が利用できるようになります)

あとはプロジェクトを右クリックして Open UserSecrets を選ぶだけです。

f:id:guitarrapc_tech:20190501031805p:plain
Open UserSecrets を選ぶ

Manage UserSecrets と同様に secrets.json が Visual Studio で開くので好きに編集してください。

f:id:guitarrapc_tech:20190501031819p:plain
自動的に secrets.json がVisual Studio で開く

まとめ

みなさんが幸せになりますように。

ASP.NET Core チームでも .NET Core チームでもいいから早く Visual Studio 拡張かなにか用意してほしいです..... (Issue なのか?

なんならこの拡張あげるのではよ....

github.com

*1:公開して3カ月がたっていました。スターで気づいた