Visual Studio 拡張機能をバックグラウンドロードに対応させる

Visual Studio 2019 preview 1使っててふと見たら拡張機能に問題ありみたいなバーが出てるのに気付きました。詳細な内容を見るとこんな感じ。

Extension ‘ClaudiaIDE’ uses the ‘synchronous auto-load’ feature of Visual Studio. This feature will no longer be supported in a future Visual Studio 2019 update, at which point this extension will not work. Please contact the extension vendor to get an update. (UI Context: {adfc4e64-0397-11d1-9f4e-00a0c911004f} Package Guid: {7442ac19-889b-4699-a817-e6e054877ee3})

自分が作った拡張機能だったか、、、
それはさておき、古い拡張機能の方式は同期読み込みでした。Visual Studio 2015からは非同期でバックグラウンドでロードすることができるようになっています(AsyncPackage)。
バックグラウンドロードに対応しているとVisual Studioの起動も早くなる可能性が高いです。

さて今現在Preview中のVisual Studio 2019ですが、16.1からはバックグラウンドロードに対応した拡張機能のみサポートとなるようです。

Visual Studio 2019, version 16.0:
The user will be notified when a package is being synchronously auto loaded, but it will load and work like normal.

Visual Studio 2019, version 16.1:
Synchronously auto loading of packages will no longer be supported.

完全に確認するの忘れてました。
対応方法はAsyncPackageにして非同期な自動ロードに対応するか、自動ロードをやめるかなどの選択肢があります。
でもせっかくなのでちゃんと非同期な自動ロードに対応しておきたいですね。

対応方法は基本的には以下のドキュメントの通りです。

パッケージのクラスをPackageから派生するのではなくてAsyncPackageからの派生にしてInitializeをInitializeAsyncに変える、属性でバックグラウンドロードを有効にするといったところでしょうか。

後は一部UIスレッド触る必要があるところでSwitchToMainThreadAsyncを使うようにするとかかな。

という感じでClaudiaIDEは対応させました。AsyncPackageにする為にVisual Studio 2012、2013を非サポートにしてちょっとは綺麗になったかな…(気のせい)

いちおう今のところ機嫌よく動いてる…かな。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中