2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

VisualStudio.Extensibilityを用いて拡張機能を作ってみた

Last updated at Posted at 2023-09-19

VisualStudio.Extensibilityを用いて拡張機能を作ってみた

はじめに

前回記事でVisualStudio.Extensibilityという作り方の導入を紹介しました。
その後もちょくちょく触り、最低限元々やりたかったことは形になってきましたので、成果の共有も含めてご紹介しようと思います。

ただ、配布方法などもわかっておらず、デバッグでしか動かせないです。。。公式ドキュメントにも紹介されていないのですが、詳しい方がもしいらっしゃれば教えていただけると幸いです。

やりたいこと

デバッグ中のアプリがあったら強制終了→ビルド→デバッグ実行をワンクリック・ワンコマンドで実行、です。

WPF開発をしているとデバッグ中に見た目やロジックをいじったりした後に、デバッグを停止→ビルドして実行、ということをよくします。実質2ステップではあるのですが、それが一発でできたら楽だな~と思ったのがきっかけです。
あと、デバッグなし実行で動かしているのを忘れてビルドしようとしたら裏でプロセスを掴んでいてビルドに失敗することもあります。
アプリの規模が大きくなるほどビルドに時間がかかるので、一発で確実に動かせるのは個人的にかなり助かります。

試作中の拡張機能

以下が作成中の拡張機能です。
https://github.com/niimima/MySampleExtension/tree/main

[Force Debug]コマンドを実行することで、やりたいことの一連の動きをやってくれます。ただ、かなり穴だらけのプログラムなので思わぬ挙動になる可能性もありますのでご注意ください。
Animation5.gif

拡張機能を作るにあたり学んだこと

ショートカットキーを利用する

上記のGIF画像ではメニューから実行していましたが、ショートカットキーからも実行できます。既存のショートカットキーと重複すると動かないようでしたので、自分は[LeftAlt]+[F5]キーで動かせるようにしました。

以下のURLに示す通り、CommandConfiguration の Shortcuts プロパティに設定することでショートカットキーを設定できました。
https://github.com/niimima/MySampleExtension/blob/main/src/MySampleExtension/MySampleExtension/ForceDebugCommand.cs#L39

プロジェクトから情報を取得する

VisualStudio.Extensibility ではクエリを用いてプロジェクトから取得したいパラメータを指定します。プロジェクト名やパス、ファイル名などなどいろんな情報が取得できるようです。
https://github.com/niimima/MySampleExtension/blob/main/src/MySampleExtension/MySampleExtension/ForceDebugCommand.cs#L55

APIでできることには以下に整理されています。が、正直自分にはいまいち理解しきれていないです。。
https://learn.microsoft.com/ja-jp/visualstudio/extensibility/visualstudio.extensibility/project/project-concepts?view=vs-2022
https://learn.microsoft.com/ja-jp/visualstudio/extensibility/visualstudio.extensibility/project/project?view=vs-2022

ソリューションから情報取得・コマンド実行

以下ではプロジェクトから情報を取得するのと同様の方法で、ソリューションからも情報を取得できます。
https://github.com/niimima/MySampleExtension/blob/main/src/MySampleExtension/MySampleExtension/ForceDebugCommand.cs#L85

また、ビルドやデバッグの実行なども実行できます。ただ、コマンドを実行するにはQueryableに変換する必要があるようなのですが、そこの使い分けが自分にはまだわかっていないです。
自分の理解で伝えると、一度情報を取得するとその時点の情報はとれるがプロセス間のやり取りが切れてしまっている状態なので、もう一度つなぎ直すためにQueryableに変換しているイメージです。
https://github.com/niimima/MySampleExtension/blob/main/src/MySampleExtension/MySampleExtension/ForceDebugCommand.cs#L96-L97

おわりに

色々と手探りではありますが、とりあえずひとつ拡張機能を作ることができました。
ただ、プレビュー機能で配布することもできないので、公式な Visual Studio でも動作するようになることを楽しみにしています!

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?