Visual Studio Extensibility
2017/10/21
Fukuoka.NET Conf 2017 ~ハンズオンで体験する最新.NETテクノロジー~
株式会社 アイキューブドシステムズ
藤本 武
自己紹介
 connpass
 tafuji
 https://connpass.com/user/Takeshi_Fujimoto/
 CLOMO MDM Agent (iOS)
 Xamairn
 DevOps
 Visual Studio Team Services Extension
(Internal Tool)
Agenda
Visual Studio Extensibility
Hello World
その他の拡張機能
まとめ
Resources
Appendix
Visual Studio Extensibility
Visual Studio そのものを拡張するための SDK など
Visual Studio の拡張可能な主な機能
コマンド
メニュー・ツールバー
ツール・ウィンドウ
エディター
言語サービス
プロジェクト/項目 テンプレート
etc.
Visual Studio の機能を Visual Studio を使って開発できる
Visual Studio Extensibility - インストール
 「Visual Studio 拡張機能の開発」にチェックを入れる
Visual Studio Extensibility - インストール
 SDK に加えて拡張機能用の Visual Studio のテンプレートがインス
トールされる
Hello World
Visual Studio のカスタムコマンドを例に
Hello World – プロジェクトの作成
 [Extensibility] の [VSIX Project] テンプレートからプロジェクトを作成
Hello World – カスタムコマンドの作成
 [Custom Command] を新規追加
Hello World – 実行
デバッグ実行すると…
Visual Studio (Visual Studio 実験的なインスタンス)が起動する
Visual Studio 拡張機能の検証環境
[ツール] メニューに作成した
コマンドが表示される
Hello World – Internals
 VSIX ファイル
 Command
 マニフェストファイル
 VSPackage
Hello World – Internals : VSIX ファイル
プロジェクトのビルド:vsix ファイルが出力される
拡張機能のインストーラー
実体は zip ファイル
実行すると
インストーラーが起動する
Hello World – Internals : Command の処理
 Custom Command テンプレートから作成したクラス
コールバック関数の中に実装する
Hello World – Internals : Command 表示設定
 vsct ファイル
実体は XML ファイル
Menu の Command の配置を定義する
Command の文言
Command のアイコン
Hello World – Internals : vsixmanifest
拡張機能に関する設定を定義(実体は XML ファイル)
Hello World – Internals : vsixmanifest
 Metadata
説明
アイコン
Etc.
Hello World – Internals : vsixmanifest
 Install Targets
サポートする Visual Studio のエディションとバージョンを指定
記号 意味
[ 以上
( 大なり
] 以下
) 小なり
Visual Studio Community Edition 以上
Hello World – Internals : vsixmanifest
Assets
拡張機能に含めるコンテンツを指定する
Hello World – Internals : vsixmanifest
Dependencies
拡張機能が依存する .NET Framework のバージョンなどを指定
Hello World – Internals : vsixmanifest
 Prerequisites
 値は、Install Targets の設定と合わせる
VSIX Extension Schema 2.0 Reference
https://docs.microsoft.com/en-US/visualstudio/extensibility/vsix-
extension-schema-2-0-reference
Hello World – Internals : VSPackage
Visual Studio の機能を拡張するためのモジュール
https://docs.microsoft.com/ja-jp/visualstudio/extensibility/internals/inside-the-visual-studio-sdk
Visual Studio IDE
Package API
Interop Assemblies
Managed Package Framework
VS Package 1 VS Package 1 …
Hello World – Internals : VSPackage
 MPF(Managed Package Framework)
Visual Studio の機能を利用するための Framework
Package クラスの GetService メソッド経由で
Visual Studio の機能を利用する
Hello World – Internals : VSPackage
 例:Visual Studio でアクティブなドキュメントを取得
Hello World – Internals : VSPackage
 例:Visual Studio で開いている Solution, Project を取得する
 EnvDTE インターフェースを利用する
 EnvDTE Interface
 https://msdn.microsoft.com/ja-jp/library/envdte.dte.aspx
Hello World – まとめ
VSIX プロジェクトの作成
必要な機能の追加(Custom Command)
機能の実装
テスト
リリース
その他の拡張機能
• Tool Window
• Project / Item Template
Tool Window
Visual Studio 上に表示される Window の拡張機能
Tool Window
 実体は WPF の UserControl
Project / Item Template
プロジェクト、項目テンプレートが作成できる
Project / Item Template
 Visual Studio 上でカスタムテンプレートを選択できるようになる
まとめ
Visual Studio を
自分好みに育てましょう!
Resources
 Sample
 https://github.com/tafuji/Fukuoka-NET-Conf-2017
 Visual Studio SDK
 https://docs.microsoft.com/en-us/visualstudio/extensibility/visual-studio-sdk
 Starting to Develop Visual Studio Extensions
 https://docs.microsoft.com/en-us/visualstudio/extensibility/starting-to-develop-
visual-studio-extensions
 Visual Studio SDK Reference
 https://docs.microsoft.com/en-us/visualstudio/extensibility/visual-studio-sdk-
reference
 Visual Studio Extensibility (VSX)
 http://www.visualstudioextensibility.com/
Appendix - Extensibility Tool
 拡張機能開発をサポートする拡張機能
VSCT ファイルの IntelliSense
Etc.
 Extensibility Tool
 https://marketplace.visualstudio.com/items?itemName=MadsKristensen.ExtensibilityTools
Appendix – OutOfMemoryException
プロジェクト新規作成後 OutOfMemoryException でビルドが失敗
 原因:テンプレートから作成されたイメージファイルが破損
 対処方法
Qiita : Visual Studio 拡張機能を新規作成後、
System.OutOfMemoryException が発生し、ビルドエラーが出るときの
対処法
https://qiita.com/tafuji/items/e17d86c4f29e9fc73045
Appendix – 厳密名のないライブラリの利用
拡張機能が参照するアセンブリは、厳密名が必要
厳密名のない 3rd Party 製のライブラリ利用時の回避策
ソースがある場合は、厳密名を付与してビルドする(原則)
StrongNameSigner
https://github.com/brutaldev/StrongNameSigner
Costura.Fody
参照するアセンブリをリソースとして埋め込むライブラリ
https://github.com/Fody/Costura
Appendix – Project テンプレートのサンプル
Visual Studio 2017 のテンプレートが参考になります
インストールされているテンプレートの場所は?
診断ログを出力させて調べることができます
具体的な方法
Qiita : Visual Studio 2017 のプロジェクト・項目テンプレートがイ
ンストールされている場所を調べる方法
https://qiita.com/tafuji/items/e0a6b9921247f54551c2
Appendix - Visual Studio for Mac の拡張
Visual Studio for Mac も拡張可能
Extending Visual Studio for Mac
https://docs.microsoft.com/en-
us/visualstudio/mac/extending-visual-studio-mac
IED の内部構造が異なる(Xamarin Studio ベース)ので、
拡張機能の作り方も Visual Studio(Windows)の場合と
異なる
Appendix - Visual Studio Code の拡張
 Visual Studio Code も拡張機能が開発できます
Extending Visual Studio Code
https://code.visualstudio.com/docs/extensions/overview
VS Code Extension Examples
https://code.visualstudio.com/docs/extensions/samples

Visual studio extensibility

  • 1.
    Visual Studio Extensibility 2017/10/21 Fukuoka.NETConf 2017 ~ハンズオンで体験する最新.NETテクノロジー~ 株式会社 アイキューブドシステムズ 藤本 武
  • 2.
    自己紹介  connpass  tafuji https://connpass.com/user/Takeshi_Fujimoto/  CLOMO MDM Agent (iOS)  Xamairn  DevOps  Visual Studio Team Services Extension (Internal Tool)
  • 3.
    Agenda Visual Studio Extensibility HelloWorld その他の拡張機能 まとめ Resources Appendix
  • 4.
    Visual Studio Extensibility VisualStudio そのものを拡張するための SDK など Visual Studio の拡張可能な主な機能 コマンド メニュー・ツールバー ツール・ウィンドウ エディター 言語サービス プロジェクト/項目 テンプレート etc. Visual Studio の機能を Visual Studio を使って開発できる
  • 5.
    Visual Studio Extensibility- インストール  「Visual Studio 拡張機能の開発」にチェックを入れる
  • 6.
    Visual Studio Extensibility- インストール  SDK に加えて拡張機能用の Visual Studio のテンプレートがインス トールされる
  • 7.
    Hello World Visual Studioのカスタムコマンドを例に
  • 8.
    Hello World –プロジェクトの作成  [Extensibility] の [VSIX Project] テンプレートからプロジェクトを作成
  • 9.
    Hello World –カスタムコマンドの作成  [Custom Command] を新規追加
  • 10.
    Hello World –実行 デバッグ実行すると… Visual Studio (Visual Studio 実験的なインスタンス)が起動する Visual Studio 拡張機能の検証環境 [ツール] メニューに作成した コマンドが表示される
  • 11.
    Hello World –Internals  VSIX ファイル  Command  マニフェストファイル  VSPackage
  • 12.
    Hello World –Internals : VSIX ファイル プロジェクトのビルド:vsix ファイルが出力される 拡張機能のインストーラー 実体は zip ファイル 実行すると インストーラーが起動する
  • 13.
    Hello World –Internals : Command の処理  Custom Command テンプレートから作成したクラス コールバック関数の中に実装する
  • 14.
    Hello World –Internals : Command 表示設定  vsct ファイル 実体は XML ファイル Menu の Command の配置を定義する Command の文言 Command のアイコン
  • 15.
    Hello World –Internals : vsixmanifest 拡張機能に関する設定を定義(実体は XML ファイル)
  • 16.
    Hello World –Internals : vsixmanifest  Metadata 説明 アイコン Etc.
  • 17.
    Hello World –Internals : vsixmanifest  Install Targets サポートする Visual Studio のエディションとバージョンを指定 記号 意味 [ 以上 ( 大なり ] 以下 ) 小なり Visual Studio Community Edition 以上
  • 18.
    Hello World –Internals : vsixmanifest Assets 拡張機能に含めるコンテンツを指定する
  • 19.
    Hello World –Internals : vsixmanifest Dependencies 拡張機能が依存する .NET Framework のバージョンなどを指定
  • 20.
    Hello World –Internals : vsixmanifest  Prerequisites  値は、Install Targets の設定と合わせる VSIX Extension Schema 2.0 Reference https://docs.microsoft.com/en-US/visualstudio/extensibility/vsix- extension-schema-2-0-reference
  • 21.
    Hello World –Internals : VSPackage Visual Studio の機能を拡張するためのモジュール https://docs.microsoft.com/ja-jp/visualstudio/extensibility/internals/inside-the-visual-studio-sdk Visual Studio IDE Package API Interop Assemblies Managed Package Framework VS Package 1 VS Package 1 …
  • 22.
    Hello World –Internals : VSPackage  MPF(Managed Package Framework) Visual Studio の機能を利用するための Framework Package クラスの GetService メソッド経由で Visual Studio の機能を利用する
  • 23.
    Hello World –Internals : VSPackage  例:Visual Studio でアクティブなドキュメントを取得
  • 24.
    Hello World –Internals : VSPackage  例:Visual Studio で開いている Solution, Project を取得する  EnvDTE インターフェースを利用する  EnvDTE Interface  https://msdn.microsoft.com/ja-jp/library/envdte.dte.aspx
  • 25.
    Hello World –まとめ VSIX プロジェクトの作成 必要な機能の追加(Custom Command) 機能の実装 テスト リリース
  • 26.
  • 27.
    Tool Window Visual Studio上に表示される Window の拡張機能
  • 28.
    Tool Window  実体はWPF の UserControl
  • 29.
    Project / ItemTemplate プロジェクト、項目テンプレートが作成できる
  • 30.
    Project / ItemTemplate  Visual Studio 上でカスタムテンプレートを選択できるようになる
  • 31.
  • 32.
    Resources  Sample  https://github.com/tafuji/Fukuoka-NET-Conf-2017 Visual Studio SDK  https://docs.microsoft.com/en-us/visualstudio/extensibility/visual-studio-sdk  Starting to Develop Visual Studio Extensions  https://docs.microsoft.com/en-us/visualstudio/extensibility/starting-to-develop- visual-studio-extensions  Visual Studio SDK Reference  https://docs.microsoft.com/en-us/visualstudio/extensibility/visual-studio-sdk- reference  Visual Studio Extensibility (VSX)  http://www.visualstudioextensibility.com/
  • 33.
    Appendix - ExtensibilityTool  拡張機能開発をサポートする拡張機能 VSCT ファイルの IntelliSense Etc.  Extensibility Tool  https://marketplace.visualstudio.com/items?itemName=MadsKristensen.ExtensibilityTools
  • 34.
    Appendix – OutOfMemoryException プロジェクト新規作成後OutOfMemoryException でビルドが失敗  原因:テンプレートから作成されたイメージファイルが破損  対処方法 Qiita : Visual Studio 拡張機能を新規作成後、 System.OutOfMemoryException が発生し、ビルドエラーが出るときの 対処法 https://qiita.com/tafuji/items/e17d86c4f29e9fc73045
  • 35.
    Appendix – 厳密名のないライブラリの利用 拡張機能が参照するアセンブリは、厳密名が必要 厳密名のない3rd Party 製のライブラリ利用時の回避策 ソースがある場合は、厳密名を付与してビルドする(原則) StrongNameSigner https://github.com/brutaldev/StrongNameSigner Costura.Fody 参照するアセンブリをリソースとして埋め込むライブラリ https://github.com/Fody/Costura
  • 36.
    Appendix – Projectテンプレートのサンプル Visual Studio 2017 のテンプレートが参考になります インストールされているテンプレートの場所は? 診断ログを出力させて調べることができます 具体的な方法 Qiita : Visual Studio 2017 のプロジェクト・項目テンプレートがイ ンストールされている場所を調べる方法 https://qiita.com/tafuji/items/e0a6b9921247f54551c2
  • 37.
    Appendix - VisualStudio for Mac の拡張 Visual Studio for Mac も拡張可能 Extending Visual Studio for Mac https://docs.microsoft.com/en- us/visualstudio/mac/extending-visual-studio-mac IED の内部構造が異なる(Xamarin Studio ベース)ので、 拡張機能の作り方も Visual Studio(Windows)の場合と 異なる
  • 38.
    Appendix - VisualStudio Code の拡張  Visual Studio Code も拡張機能が開発できます Extending Visual Studio Code https://code.visualstudio.com/docs/extensions/overview VS Code Extension Examples https://code.visualstudio.com/docs/extensions/samples