Dela via


Resurser i VSPackages

Du kan bädda in lokaliserade resurser i nativa satellitgränssnitts-DLL:er, hanterade satellit-DLL:er eller i en hanterad VSPackage.

Vissa resurser kan inte bäddas in i VSPackages. Följande hanterade datatyper kan bäddas in:

  • Strängar

  • Paketladdningsnycklar (som också är strängar)

  • Ikoner för verktygsfönster

  • Kompilerade kommandotabellutdata (CTO) filer

  • CTO-bitmappar

  • Hjälp om kommandorad

  • Om dialogrutedata

Resurser i ett hanterat paket väljs av resurs-ID. Ett undantag är CTO-filen, som måste ha namnet CTMENU. CTO-filen måste visas i resurstabellen som en byte[]. Alla andra resursobjekt identifieras efter typ.

Du kan använda attributet PackageRegistrationAttribute för att ange för Visual Studio att hanterade resurser är tillgängliga.

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

Inställningen PackageRegistrationAttribute på det här sättet anger att Visual Studio bör ignorera ohanterade satellit-DLL:er när det söker efter resurser, till exempel med hjälp av LoadPackageString. Om Visual Studio stöter på två eller flera resurser som har samma resurs-ID använder den den första resursen som hittas.

Example

Följande exempel är en hanterad representation av en verktygsfönsterikon.

<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>

I följande exempel visas hur du bäddar in CTO-bytematrisen, som måste ha namnet 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>

Implementeringsanteckningar

Visual Studio fördröjer inläsningen av VSPackages när det är möjligt. En konsekvens av att bädda in en CTO-fil i en VSPackage är att Visual Studio måste läsa in alla sådana VSPackages i minnet under installationen, vilket är när en sammanslagen kommandotabell skapas. Resurser kan extraheras från en VSPackage genom att undersöka metadata utan att köra kod i VSPackage. VSPackage initieras inte just nu, så prestandaförlusten är minimal.

När Visual Studio begär en resurs från en VSPackage efter installationen kommer paketet troligen redan att läsas in och initieras, så prestandaförlusten är minimal.