受管理的 VSPackages 中的資源
Visual Studio SDK設計用來結束之原生的附屬使用者介面 (UI) 的 Dll,只要可以 VSPackage 所撰寫的受管理的資源。 在原生附屬 UI 的 Dll,受管理的附屬 Dll,或受管理的 VSPackage 本身中,您可以內嵌當地語系化的資源。
有些資源無法內嵌在 VSPackages 中。 下列的 managed 型別可以內嵌:
字串
套件載入金鑰 (這也是字串)
工具視窗圖示
編譯過的指令表格輸出 (cto 能夠) 檔
Cto 能夠點陣圖
命令列說明
關於對話方塊資料
受管理的套件中的資源被選取的資源 id。 例外狀況是 cto 能夠檔,它必須命名為 CTMENU。 Cto 能夠檔案必須出現在 [資源] 表格,做為byte[]。 所有其他的資源項目會識別型別。
您可以使用PackageRegistrationAttribute屬性來向Visual Studio受管理的資源可供使用。
<PackageRegistration(UseManagedResourcesOnly:=True)>
Public NotInheritable Class MyPackage
Inherits Package
[PackageRegistration(UseManagedResourcesOnly = true)]
public sealed class MyPackage : Package
設定PackageRegistrationAttribute以這種方式表示Visual Studio應該忽略未受管理的附屬 Dll 時,它會搜尋資源,例如,藉由使用LoadPackageString。 如果Visual Studio遇到兩個或多個資源具有相同的資源識別碼,它會使用第一個找到的資源。
範例
下列範例是受管理的工具視窗圖示表示。
<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>
下列範例會示範如何內嵌必須命名為 CTMENU 的 cto 能夠位元組陣列。
<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不論何時儘可能 VSPackages 的延遲載入。 Cto 能夠檔案嵌入 VSPackage 的結果是Visual Studio必須在安裝期間,它會建置合併的指令資料表時才會載入記憶體中的所有這類 VSPackages。 資源可以從 VSPackage 中擷取,藉由檢查中繼資料,而不會發生在 VSPackage 中的程式碼。 VSPackage 未初始化在這個階段中,因此效能損失降到最低。
當Visual Studio VSPackage,以在安裝之後從資源的要求,該套件很可能已經載入並初始化,所以效能損失降到最低。