エクステンションロード機構
背景
V2.0 では、V1.1 のエクステンションにおける次の問題を解消するため、エクステンションのロード機構を変更しました。
- Next Design 本体が参照するライブラリより新しいバージョンのライブラリをロードできません。そのためエクステンションで 3rd Party が提供する 新しいバージョンのライブラリが提供する機能が利用できませんでした。
- 複数のエクステンションで異なるバージョンの同じライブラリをロードできません。そのためインストールするすべてのエクステンションでライブラリのバージョンを揃える必要がありました。
- ネイティブライブラリが含まれるエクステンションがロードできません。そのためネイティブライブラリに依存するエクステンションを配布できませんでした。
エクステンションロード機構の変更点
エクステンション単位で異なるバージョンのライブラリ利用を可能としました
V2.0 では、エクステンション単位で異なる領域にライブラリをロードするように変更しました。
ただし、Next Design 本体が参照するライブラリについては、Next Design 本体が参照するライブラリの方がバージョンが新しい、または、バージョンが同じ である場合に限り、エクステンション側で新たにライブラリのロードを行わず、Next Design 本体でロード済みのライブラリを優先します。
これは、以下の理由によります。
- ライブラリロード領域のために確保するメモリサイズを抑制する
- Next Design 本体側の動作を保証する
- Next Design 本体とエクステンション間のデータ交換によるインタフェース不整合を抑制する
変更による効果
- V2.0 のエクステンションでは、Next Design 本体が参照するライブラリより新しいバージョンのライブラリを利用できます。
注記
- 例えば、V1.1 のエクステンションでは、Next Design 本体が参照する
Microsoft.WindowsAPICodePack
より新しいバージョンのライブラリを利用できませんでした。 - V2.0 のエクステンションでは、Next Design 本体が参照する
Microsoft.WindowsAPICodePack
より新しいバージョンのライブラリを利用できます。
- V2.0 のエクステンションでは、複数のエクステンションで異なるバージョンの同じライブラリを利用できます。
注記
- 例えば、あるエクステンションAが
System.Text.Json
のバージョン4.7.1
を利用している場合、V1.1 では、別のエクステンションBでSystem.Text.Json
の新しいバージョン5.0.2
を利用できませんでした。 - V2.0 では、別のエクステンションBで
System.Text.Json
の新しいバージョン5.0.2
を利用できます。この場合、それぞれ、エクステンションAはバージョン4.7.1
のAPIを、エクステンションBはバージョン5.0.2
のAPIを利用します。
エクステンションの依存ライブラリの解決方法を変更しました
V2.0 では、エクステンションの依存ライブラリの配置場所の解決方法を変更しました。
依存ライブラリの配置場所の解決には、アセンブリメタデータの記述ファイル(*.deps.jsonファイル)を利用します。
また、依存するライブラリがネイティブライブラリの場合であっても正しく認識できるように変更しました。
変更による効果
- アセンブリメタデータの記述により、依存ライブラリの配置構成をエクステンション側でカスタマイズできます。
ヒント
- 依存ライブラリを NuGet パッケージ管理機能を用いて解決している場合、アセンブリメタデータの記述ファイル(*.deps.jsonファイル)はビルド時に自動生成されます。
- そのため、V2.0 のエクステンションでは、依存ライブラリを NuGet パッケージ管理機能を用いて解決することを推奨します。
- ネイティブライブラリに依存するエクステン ションを配布できます。
注記
- V1.1 ではエクステンションフォルダ配下にネイティブライブラリを配置したエクステンションはロードできませんでした。
- V2.0 では、アセンブリメタデータを記述することでネイティブライブラリに依存するエクステンションを配置できます。
- また、OS や CPU の違いにより"依存するネイティブライブラリが異なる"場合においても、エクステンションの実行時に解決するため、例えば、
win-x64
向けとwin-x86
向けのネイティブライブラリを1つのエクステンションに同梱できます。