SlideShare a Scribd company logo
1 of 38
Download to read offline
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

More Related Content

What's hot

Xamarinでも有能な .NET Core
 Xamarinでも有能な .NET Core  Xamarinでも有能な .NET Core
Xamarinでも有能な .NET Core Yuta Matsumura
 
そろそろレガシーな.Net開発をやめなイカ?
そろそろレガシーな.Net開発をやめなイカ?そろそろレガシーな.Net開発をやめなイカ?
そろそろレガシーな.Net開発をやめなイカ?Yuta Matsumura
 
.NET の今と未来 ~ デバイス&クラウド ネイティブを目指して
.NET の今と未来 ~ デバイス&クラウド ネイティブを目指して.NET の今と未来 ~ デバイス&クラウド ネイティブを目指して
.NET の今と未来 ~ デバイス&クラウド ネイティブを目指してAkira Inoue
 
「何もしないのにCIが失敗した」を防ぐ
「何もしないのにCIが失敗した」を防ぐ「何もしないのにCIが失敗した」を防ぐ
「何もしないのにCIが失敗した」を防ぐKazushi Kamegawa
 
PHPerだってサーバーレスしたい!
PHPerだってサーバーレスしたい!PHPerだってサーバーレスしたい!
PHPerだってサーバーレスしたい!Yuta Matsumura
 
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発日本マイクロソフト株式会社
 
C#ユーザー会 //build/ まとめ(サーバー編)
C#ユーザー会 //build/ まとめ(サーバー編)C#ユーザー会 //build/ まとめ(サーバー編)
C#ユーザー会 //build/ まとめ(サーバー編)Keiji Kamebuchi
 
【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ
【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ 【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ
【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ 日本マイクロソフト株式会社
 
[DO02] Jenkins PipelineとBlue Oceanによる、フルスクラッチからの継続的デリバリ
[DO02] Jenkins PipelineとBlue Oceanによる、フルスクラッチからの継続的デリバリ[DO02] Jenkins PipelineとBlue Oceanによる、フルスクラッチからの継続的デリバリ
[DO02] Jenkins PipelineとBlue Oceanによる、フルスクラッチからの継続的デリバリde:code 2017
 
The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#Yuta Matsumura
 
Windows serverとインフラ関連アップデート
Windows serverとインフラ関連アップデートWindows serverとインフラ関連アップデート
Windows serverとインフラ関連アップデートTsukasa Kato
 
[DO09] 獲れたて OSS x DevOps!自動化三昧を満喫セヨ
[DO09] 獲れたて OSS x DevOps!自動化三昧を満喫セヨ[DO09] 獲れたて OSS x DevOps!自動化三昧を満喫セヨ
[DO09] 獲れたて OSS x DevOps!自動化三昧を満喫セヨde:code 2017
 
.NET Coreとツール類の今
.NET Coreとツール類の今.NET Coreとツール類の今
.NET Coreとツール類の今Yuki Igarashi
 
【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること
【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること 【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること
【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること 日本マイクロソフト株式会社
 
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説Takao Tetsuro
 
Write slides and books in VSCode + Markdown
Write slides and books in VSCode + MarkdownWrite slides and books in VSCode + Markdown
Write slides and books in VSCode + Markdownロフト くん
 
Interoperability of webassembly with javascript
Interoperability of webassembly with javascriptInteroperability of webassembly with javascript
Interoperability of webassembly with javascriptTakao Tetsuro
 

What's hot (20)

Xamarinでも有能な .NET Core
 Xamarinでも有能な .NET Core  Xamarinでも有能な .NET Core
Xamarinでも有能な .NET Core
 
そろそろレガシーな.Net開発をやめなイカ?
そろそろレガシーな.Net開発をやめなイカ?そろそろレガシーな.Net開発をやめなイカ?
そろそろレガシーな.Net開発をやめなイカ?
 
.NET の今と未来 ~ デバイス&クラウド ネイティブを目指して
.NET の今と未来 ~ デバイス&クラウド ネイティブを目指して.NET の今と未来 ~ デバイス&クラウド ネイティブを目指して
.NET の今と未来 ~ デバイス&クラウド ネイティブを目指して
 
「何もしないのにCIが失敗した」を防ぐ
「何もしないのにCIが失敗した」を防ぐ「何もしないのにCIが失敗した」を防ぐ
「何もしないのにCIが失敗した」を防ぐ
 
PHPerだってサーバーレスしたい!
PHPerだってサーバーレスしたい!PHPerだってサーバーレスしたい!
PHPerだってサーバーレスしたい!
 
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
 
C#ユーザー会 //build/ まとめ(サーバー編)
C#ユーザー会 //build/ まとめ(サーバー編)C#ユーザー会 //build/ まとめ(サーバー編)
C#ユーザー会 //build/ まとめ(サーバー編)
 
Azure Functions Tips
Azure Functions TipsAzure Functions Tips
Azure Functions Tips
 
【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ
【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ 【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ
【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ
 
[DO02] Jenkins PipelineとBlue Oceanによる、フルスクラッチからの継続的デリバリ
[DO02] Jenkins PipelineとBlue Oceanによる、フルスクラッチからの継続的デリバリ[DO02] Jenkins PipelineとBlue Oceanによる、フルスクラッチからの継続的デリバリ
[DO02] Jenkins PipelineとBlue Oceanによる、フルスクラッチからの継続的デリバリ
 
The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#
 
Windows serverとインフラ関連アップデート
Windows serverとインフラ関連アップデートWindows serverとインフラ関連アップデート
Windows serverとインフラ関連アップデート
 
Web matrix2とvisual studio
Web matrix2とvisual studioWeb matrix2とvisual studio
Web matrix2とvisual studio
 
[DO09] 獲れたて OSS x DevOps!自動化三昧を満喫セヨ
[DO09] 獲れたて OSS x DevOps!自動化三昧を満喫セヨ[DO09] 獲れたて OSS x DevOps!自動化三昧を満喫セヨ
[DO09] 獲れたて OSS x DevOps!自動化三昧を満喫セヨ
 
.NET Coreとツール類の今
.NET Coreとツール類の今.NET Coreとツール類の今
.NET Coreとツール類の今
 
【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること
【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること 【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること
【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること
 
Azure Cloud Shell
Azure Cloud ShellAzure Cloud Shell
Azure Cloud Shell
 
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説
 
Write slides and books in VSCode + Markdown
Write slides and books in VSCode + MarkdownWrite slides and books in VSCode + Markdown
Write slides and books in VSCode + Markdown
 
Interoperability of webassembly with javascript
Interoperability of webassembly with javascriptInteroperability of webassembly with javascript
Interoperability of webassembly with javascript
 

Similar to Visual studio extensibility

Visual Studio Code 拡張の勘所
Visual Studio Code 拡張の勘所Visual Studio Code 拡張の勘所
Visual Studio Code 拡張の勘所Masaki Takeda
 
Empower Every App, Every Developer ~ 統合開発プラットフォーム Visual Studio の進化 ~
Empower Every App, Every Developer ~ 統合開発プラットフォーム Visual Studio の進化 ~Empower Every App, Every Developer ~ 統合開発プラットフォーム Visual Studio の進化 ~
Empower Every App, Every Developer ~ 統合開発プラットフォーム Visual Studio の進化 ~Akira Inoue
 
C#版人狼知能エージェントの作り方~Visual Studio編~(AIWolf.NET 1.0.6版)
C#版人狼知能エージェントの作り方~Visual Studio編~(AIWolf.NET 1.0.6版)C#版人狼知能エージェントの作り方~Visual Studio編~(AIWolf.NET 1.0.6版)
C#版人狼知能エージェントの作り方~Visual Studio編~(AIWolf.NET 1.0.6版)takots
 
Qlik Sense Extension開発 - Extensionの概要から実際の開発詳細まで
Qlik Sense Extension開発 - Extensionの概要から実際の開発詳細までQlik Sense Extension開発 - Extensionの概要から実際の開発詳細まで
Qlik Sense Extension開発 - Extensionの概要から実際の開発詳細までQlikPresalesJapan
 
.NET Core 5 ~ Windows, Linux, OS X そして Docker まで ~
.NET Core 5 ~ Windows, Linux, OS X そして Docker まで ~.NET Core 5 ~ Windows, Linux, OS X そして Docker まで ~
.NET Core 5 ~ Windows, Linux, OS X そして Docker まで ~Akira Inoue
 
デスクトップ アプリ開発における Visual Studio の進化
デスクトップ アプリ開発における Visual Studio の進化デスクトップ アプリ開発における Visual Studio の進化
デスクトップ アプリ開発における Visual Studio の進化Katsuhiro Aizawa
 
はじめてのコンテナーDocker & Windows & Linux
はじめてのコンテナーDocker & Windows & LinuxはじめてのコンテナーDocker & Windows & Linux
はじめてのコンテナーDocker & Windows & LinuxKazushi Kamegawa
 
App Service の DevOps と Visual Studio Team Services 最新アップデート
App Service の DevOps と Visual Studio Team Services 最新アップデートApp Service の DevOps と Visual Studio Team Services 最新アップデート
App Service の DevOps と Visual Studio Team Services 最新アップデートMicrosoft Azure Japan
 
OSSを利用したプロジェクト管理
OSSを利用したプロジェクト管理OSSを利用したプロジェクト管理
OSSを利用したプロジェクト管理Tadashi Miyazato
 
Enterprise Development Conference 2016 プライベートPaaSが実現するアジャイル開発と次世代型アプリケーションの実例
Enterprise Development Conference 2016 プライベートPaaSが実現するアジャイル開発と次世代型アプリケーションの実例Enterprise Development Conference 2016 プライベートPaaSが実現するアジャイル開発と次世代型アプリケーションの実例
Enterprise Development Conference 2016 プライベートPaaSが実現するアジャイル開発と次世代型アプリケーションの実例JUNICHI YOSHISE
 
App017 power shellの新しい相棒_visual_studio_
App017 power shellの新しい相棒_visual_studio_App017 power shellの新しい相棒_visual_studio_
App017 power shellの新しい相棒_visual_studio_Tech Summit 2016
 
App017 power shellの新しい相棒_visual_studio
App017 power shellの新しい相棒_visual_studioApp017 power shellの新しい相棒_visual_studio
App017 power shellの新しい相棒_visual_studioTech Summit 2016
 
2021 01-30 Visual Studio 2019 知っているか!?この機能 in BuriKaigi2021
2021 01-30 Visual Studio 2019 知っているか!?この機能 in BuriKaigi20212021 01-30 Visual Studio 2019 知っているか!?この機能 in BuriKaigi2021
2021 01-30 Visual Studio 2019 知っているか!?この機能 in BuriKaigi2021Hiroyuki Mori
 
Visual Studio を使わず .NET する
Visual Studio を使わず .NET するVisual Studio を使わず .NET する
Visual Studio を使わず .NET するm ishizaki
 
DEV-001_オープンソース エディタ Visual Studio Code の極意
DEV-001_オープンソース エディタ Visual Studio Code の極意DEV-001_オープンソース エディタ Visual Studio Code の極意
DEV-001_オープンソース エディタ Visual Studio Code の極意decode2016
 
Getting started with Windows Containers
Getting started with Windows ContainersGetting started with Windows Containers
Getting started with Windows ContainersKazuki Takai
 
NuGet でゲット! Visual Studio パッケージ マネージャ―概要
NuGet でゲット! Visual Studio パッケージ マネージャ―概要NuGet でゲット! Visual Studio パッケージ マネージャ―概要
NuGet でゲット! Visual Studio パッケージ マネージャ―概要Akira Inoue
 

Similar to Visual studio extensibility (20)

Visual Studio Code 拡張の勘所
Visual Studio Code 拡張の勘所Visual Studio Code 拡張の勘所
Visual Studio Code 拡張の勘所
 
Empower Every App, Every Developer ~ 統合開発プラットフォーム Visual Studio の進化 ~
Empower Every App, Every Developer ~ 統合開発プラットフォーム Visual Studio の進化 ~Empower Every App, Every Developer ~ 統合開発プラットフォーム Visual Studio の進化 ~
Empower Every App, Every Developer ~ 統合開発プラットフォーム Visual Studio の進化 ~
 
C#版人狼知能エージェントの作り方~Visual Studio編~(AIWolf.NET 1.0.6版)
C#版人狼知能エージェントの作り方~Visual Studio編~(AIWolf.NET 1.0.6版)C#版人狼知能エージェントの作り方~Visual Studio編~(AIWolf.NET 1.0.6版)
C#版人狼知能エージェントの作り方~Visual Studio編~(AIWolf.NET 1.0.6版)
 
Qlik Sense Extension開発 - Extensionの概要から実際の開発詳細まで
Qlik Sense Extension開発 - Extensionの概要から実際の開発詳細までQlik Sense Extension開発 - Extensionの概要から実際の開発詳細まで
Qlik Sense Extension開発 - Extensionの概要から実際の開発詳細まで
 
Visual Studio 2010
Visual Studio 2010Visual Studio 2010
Visual Studio 2010
 
.NET Core 5 ~ Windows, Linux, OS X そして Docker まで ~
.NET Core 5 ~ Windows, Linux, OS X そして Docker まで ~.NET Core 5 ~ Windows, Linux, OS X そして Docker まで ~
.NET Core 5 ~ Windows, Linux, OS X そして Docker まで ~
 
デスクトップ アプリ開発における Visual Studio の進化
デスクトップ アプリ開発における Visual Studio の進化デスクトップ アプリ開発における Visual Studio の進化
デスクトップ アプリ開発における Visual Studio の進化
 
07 devops
07 devops07 devops
07 devops
 
はじめてのコンテナーDocker & Windows & Linux
はじめてのコンテナーDocker & Windows & LinuxはじめてのコンテナーDocker & Windows & Linux
はじめてのコンテナーDocker & Windows & Linux
 
App Service の DevOps と Visual Studio Team Services 最新アップデート
App Service の DevOps と Visual Studio Team Services 最新アップデートApp Service の DevOps と Visual Studio Team Services 最新アップデート
App Service の DevOps と Visual Studio Team Services 最新アップデート
 
OSSを利用したプロジェクト管理
OSSを利用したプロジェクト管理OSSを利用したプロジェクト管理
OSSを利用したプロジェクト管理
 
ZendStudioのご紹介
ZendStudioのご紹介ZendStudioのご紹介
ZendStudioのご紹介
 
Enterprise Development Conference 2016 プライベートPaaSが実現するアジャイル開発と次世代型アプリケーションの実例
Enterprise Development Conference 2016 プライベートPaaSが実現するアジャイル開発と次世代型アプリケーションの実例Enterprise Development Conference 2016 プライベートPaaSが実現するアジャイル開発と次世代型アプリケーションの実例
Enterprise Development Conference 2016 プライベートPaaSが実現するアジャイル開発と次世代型アプリケーションの実例
 
App017 power shellの新しい相棒_visual_studio_
App017 power shellの新しい相棒_visual_studio_App017 power shellの新しい相棒_visual_studio_
App017 power shellの新しい相棒_visual_studio_
 
App017 power shellの新しい相棒_visual_studio
App017 power shellの新しい相棒_visual_studioApp017 power shellの新しい相棒_visual_studio
App017 power shellの新しい相棒_visual_studio
 
2021 01-30 Visual Studio 2019 知っているか!?この機能 in BuriKaigi2021
2021 01-30 Visual Studio 2019 知っているか!?この機能 in BuriKaigi20212021 01-30 Visual Studio 2019 知っているか!?この機能 in BuriKaigi2021
2021 01-30 Visual Studio 2019 知っているか!?この機能 in BuriKaigi2021
 
Visual Studio を使わず .NET する
Visual Studio を使わず .NET するVisual Studio を使わず .NET する
Visual Studio を使わず .NET する
 
DEV-001_オープンソース エディタ Visual Studio Code の極意
DEV-001_オープンソース エディタ Visual Studio Code の極意DEV-001_オープンソース エディタ Visual Studio Code の極意
DEV-001_オープンソース エディタ Visual Studio Code の極意
 
Getting started with Windows Containers
Getting started with Windows ContainersGetting started with Windows Containers
Getting started with Windows Containers
 
NuGet でゲット! Visual Studio パッケージ マネージャ―概要
NuGet でゲット! Visual Studio パッケージ マネージャ―概要NuGet でゲット! Visual Studio パッケージ マネージャ―概要
NuGet でゲット! Visual Studio パッケージ マネージャ―概要
 

More from Takeshi Fujimoto

2019-11-22 JXUG Introduction to Xamarin.Essentials #4 Launcher
2019-11-22 JXUG Introduction to Xamarin.Essentials #4 Launcher2019-11-22 JXUG Introduction to Xamarin.Essentials #4 Launcher
2019-11-22 JXUG Introduction to Xamarin.Essentials #4 LauncherTakeshi Fujimoto
 
2019-10-18 JXUG Xamarin.Essentials - #3 File System Helpers
2019-10-18 JXUG Xamarin.Essentials - #3 File System Helpers2019-10-18 JXUG Xamarin.Essentials - #3 File System Helpers
2019-10-18 JXUG Xamarin.Essentials - #3 File System HelpersTakeshi Fujimoto
 
2019-09-20 JXUG Introduction to Xamarin.Essentials #2 Preferences
2019-09-20 JXUG Introduction to Xamarin.Essentials #2 Preferences2019-09-20 JXUG Introduction to Xamarin.Essentials #2 Preferences
2019-09-20 JXUG Introduction to Xamarin.Essentials #2 PreferencesTakeshi Fujimoto
 
2019 08-30 JXUG Xamarin.Essentials #1 Xamarin.Essentials とは
2019 08-30 JXUG Xamarin.Essentials #1 Xamarin.Essentials とは2019 08-30 JXUG Xamarin.Essentials #1 Xamarin.Essentials とは
2019 08-30 JXUG Xamarin.Essentials #1 Xamarin.Essentials とはTakeshi Fujimoto
 
2019 07-20 JXUG Xamarin.Forms の今
2019 07-20 JXUG Xamarin.Forms の今2019 07-20 JXUG Xamarin.Forms の今
2019 07-20 JXUG Xamarin.Forms の今Takeshi Fujimoto
 
Portable class library to .NET Standard Extension
Portable class library to .NET Standard ExtensionPortable class library to .NET Standard Extension
Portable class library to .NET Standard ExtensionTakeshi Fujimoto
 
Xamarin in Microsoft Build 2018 - JXUG Fukuoka May-25-2018
Xamarin in Microsoft Build 2018 - JXUG Fukuoka May-25-2018Xamarin in Microsoft Build 2018 - JXUG Fukuoka May-25-2018
Xamarin in Microsoft Build 2018 - JXUG Fukuoka May-25-2018Takeshi Fujimoto
 
Xamarin with Entity Framework Core
Xamarin with Entity Framework CoreXamarin with Entity Framework Core
Xamarin with Entity Framework CoreTakeshi Fujimoto
 
Introduction to Visual Studio App Center
Introduction to Visual Studio App CenterIntroduction to Visual Studio App Center
Introduction to Visual Studio App CenterTakeshi Fujimoto
 
Introduction to Xamarin - JXUG 20171209
Introduction to Xamarin - JXUG 20171209Introduction to Xamarin - JXUG 20171209
Introduction to Xamarin - JXUG 20171209Takeshi Fujimoto
 
20170625 JXUG Fukuoka 発表資料 : Unit / UI Testing - Xamarin
20170625 JXUG Fukuoka 発表資料 : Unit / UI Testing - Xamarin20170625 JXUG Fukuoka 発表資料 : Unit / UI Testing - Xamarin
20170625 JXUG Fukuoka 発表資料 : Unit / UI Testing - XamarinTakeshi Fujimoto
 

More from Takeshi Fujimoto (12)

2019-11-22 JXUG Introduction to Xamarin.Essentials #4 Launcher
2019-11-22 JXUG Introduction to Xamarin.Essentials #4 Launcher2019-11-22 JXUG Introduction to Xamarin.Essentials #4 Launcher
2019-11-22 JXUG Introduction to Xamarin.Essentials #4 Launcher
 
2019-10-18 JXUG Xamarin.Essentials - #3 File System Helpers
2019-10-18 JXUG Xamarin.Essentials - #3 File System Helpers2019-10-18 JXUG Xamarin.Essentials - #3 File System Helpers
2019-10-18 JXUG Xamarin.Essentials - #3 File System Helpers
 
2019-09-20 JXUG Introduction to Xamarin.Essentials #2 Preferences
2019-09-20 JXUG Introduction to Xamarin.Essentials #2 Preferences2019-09-20 JXUG Introduction to Xamarin.Essentials #2 Preferences
2019-09-20 JXUG Introduction to Xamarin.Essentials #2 Preferences
 
2019 08-30 JXUG Xamarin.Essentials #1 Xamarin.Essentials とは
2019 08-30 JXUG Xamarin.Essentials #1 Xamarin.Essentials とは2019 08-30 JXUG Xamarin.Essentials #1 Xamarin.Essentials とは
2019 08-30 JXUG Xamarin.Essentials #1 Xamarin.Essentials とは
 
2019 07-20 JXUG Xamarin.Forms の今
2019 07-20 JXUG Xamarin.Forms の今2019 07-20 JXUG Xamarin.Forms の今
2019 07-20 JXUG Xamarin.Forms の今
 
Portable class library to .NET Standard Extension
Portable class library to .NET Standard ExtensionPortable class library to .NET Standard Extension
Portable class library to .NET Standard Extension
 
Mastering Xamarin.UITest
Mastering Xamarin.UITestMastering Xamarin.UITest
Mastering Xamarin.UITest
 
Xamarin in Microsoft Build 2018 - JXUG Fukuoka May-25-2018
Xamarin in Microsoft Build 2018 - JXUG Fukuoka May-25-2018Xamarin in Microsoft Build 2018 - JXUG Fukuoka May-25-2018
Xamarin in Microsoft Build 2018 - JXUG Fukuoka May-25-2018
 
Xamarin with Entity Framework Core
Xamarin with Entity Framework CoreXamarin with Entity Framework Core
Xamarin with Entity Framework Core
 
Introduction to Visual Studio App Center
Introduction to Visual Studio App CenterIntroduction to Visual Studio App Center
Introduction to Visual Studio App Center
 
Introduction to Xamarin - JXUG 20171209
Introduction to Xamarin - JXUG 20171209Introduction to Xamarin - JXUG 20171209
Introduction to Xamarin - JXUG 20171209
 
20170625 JXUG Fukuoka 発表資料 : Unit / UI Testing - Xamarin
20170625 JXUG Fukuoka 発表資料 : Unit / UI Testing - Xamarin20170625 JXUG Fukuoka 発表資料 : Unit / UI Testing - Xamarin
20170625 JXUG Fukuoka 発表資料 : Unit / UI Testing - Xamarin
 

Visual studio extensibility

  • 1. Visual Studio Extensibility 2017/10/21 Fukuoka.NET Conf 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 Hello World その他の拡張機能 まとめ Resources Appendix
  • 4. Visual Studio Extensibility Visual Studio そのものを拡張するための 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) 機能の実装 テスト リリース
  • 27. Tool Window Visual Studio 上に表示される Window の拡張機能
  • 28. Tool Window  実体は WPF の UserControl
  • 29. Project / Item Template プロジェクト、項目テンプレートが作成できる
  • 30. Project / Item Template  Visual Studio 上でカスタムテンプレートを選択できるようになる
  • 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 - Extensibility Tool  拡張機能開発をサポートする拡張機能 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 - 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)の場合と 異なる
  • 38. 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