VSPackage のリソース

ローカライズされたリソースは、ネイティブ サテライト UI DLL、マネージド サテライト DLL、またはマネージド VSPackage 自体に埋め込むことができます。

一部のリソースは VSPackage に埋め込むことができません。 次のマネージド型を埋め込むことができます。

  • 文字列

  • パッケージ ロード キー (文字列でもあります)

  • ツール ウィンドウのアイコン

  • コンパイルされたコマンド テーブル出力 (CTO) ファイル

  • CTO ビットマップ

  • コマンド ライン ヘルプ

  • [バージョン情報] ダイアログ ボックスのデータ

マネージド パッケージ内のリソースは、リソース ID によって選択されます。 例外は CTO ファイルです。このファイルには、CTMENU という名前を付ける必要があります。 CTO ファイルは、リソース テーブルに byte[] として表示される必要があります。 他のすべてのリソース項目は、型によって識別されます。

PackageRegistrationAttribute 属性を使用して、管理対象リソースが使用可能であることを Visual Studio に示すことができます。

[PackageRegistration(UseManagedResourcesOnly = true)]
public sealed class MyPackage : Package

この方法で 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 からリソースが要求された場合、そのパッケージは既に読み込まれて初期化されている可能性が高いため、パフォーマンスが低下することはほとんどありません。