VSPackage のリソース
ローカライズされたリソースは、ネイティブ サテライト UI DLL、マネージド サテライト DLL、またはマネージド VSPackage 自体に埋め込むことができます。
一部のリソースは VSPackage に埋め込むことができません。 次のマネージド型を埋め込むことができます。
文字列
パッケージ ロード キー (文字列でもあります)
ツール ウィンドウのアイコン
コンパイルされたコマンド テーブル出力 (CTO) ファイル
CTO ビットマップ
コマンド ライン ヘルプ
[バージョン情報] ダイアログ ボックスのデータ
マネージド パッケージ内のリソースは、リソース ID によって選択されます。 例外は CTO ファイルです。このファイルには、CTMENU という名前を付ける必要があります。 CTO ファイルは、リソース テーブルに byte[]
として表示される必要があります。 他のすべてのリソース項目は、型によって識別されます。
PackageRegistrationAttribute 属性を使用して、管理対象リソースが使用可能であることを Visual Studio に示すことができます。
この方法で PackageRegistrationAttribute を設定すると、Visual Studio で LoadPackageString などを使用してリソースを検索するときに、アンマネージド サテライト DLL が無視されるように指定されます。 Visual Studio で同じリソース ID を持つ 2 つ以上のリソースが検出された場合は、最初に検出されたリソースが使用されます。
例
次の例は、ツール ウィンドウのアイコンのマネージド表現です。
<data name="1001"
type="System.Resources.ResXFileRef,System.Windows.Forms">
<value>
MyToolWinIcon.bmp;
System.Drawing.Bitmap,
System.Drawing,
Version=1.0.0.0,
Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a
</value>
</data>
次の例では、CTO のバイト配列を埋め込む方法を示します。この配列には、CTMENU という名前を付ける必要があります。
<data name="CTMENU"
type="System.Resources.ResXFileRef,System.Windows.Forms">
<value>
MyPackage.cto;
System.Byte[],
mscorlib,
Version=1.0.0.0,
Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a
</value>
</data>
実装に関するメモ
Visual Studio では、可能な限り VSPackage の読み込みが遅延されます。 VSPackage に CTO ファイルを埋め込むと、Visual Studio では、セットアップ中 (マージされたコマンド テーブルを構築するとき) に、このような VSPackage をすべてメモリに読み込む必要があります。 リソースを VSPackage から抽出するには、VSPackage でコードを実行せずにメタデータを調べます。 VSPackage は現時点で初期化されていないため、パフォーマンスが低下することはほとんどありません。
Visual Studio でセットアップ後に VSPackage からリソースが要求された場合、そのパッケージは既に読み込まれて初期化されている可能性が高いため、パフォーマンスが低下することはほとんどありません。