Freigeben über


Ressourcen in VSPackages

Sie können lokalisierte Ressourcen in native Satelliten-UI-DLLs, verwaltete Satelliten-DLLs oder in ein verwaltetes VSPackage selbst einbetten.

Einige Ressourcen können nicht in VSPackages eingebettet werden. Die folgenden verwalteten Typen können eingebettet werden:

  • Zeichenfolgen

  • Paketladeschlüssel (auch Zeichenfolgen)

  • Toolfenstersymbole

  • Kompilierte Befehlstabellenausgabedateien (CTO)

  • CTO-Bitmaps

  • Befehlszeilenhilfe

  • Informationen zu Dialogfelddaten

Ressourcen in einem verwalteten Paket werden anhand der Ressourcen-ID ausgewählt. Eine Ausnahme ist die CTO-Datei, die als CTMENU bezeichnet werden muss. Die CTO-Datei muss in der Ressourcentabelle als ein byte[]. Alle anderen Ressourcenelemente werden nach Typ identifiziert.

Sie können das PackageRegistrationAttribute Attribut verwenden, um Visual Studio anzugeben, dass verwaltete Ressourcen verfügbar sind.

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

Diese Einstellung PackageRegistrationAttribute gibt an, dass Visual Studio nicht verwaltete Satelliten-DLLs ignorieren soll, wenn sie nach Ressourcen sucht, z. B. mithilfe von LoadPackageString. Wenn Visual Studio auf zwei oder mehr Ressourcen trifft, die dieselbe Ressourcen-ID aufweisen, wird die erste gefundene Ressource verwendet.

Beispiel

Das folgende Beispiel ist eine verwaltete Darstellung eines Toolfenstersymbols.

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

Im folgenden Beispiel wird veranschaulicht, wie das CTO-Bytearray eingebettet wird, das als CTMENU bezeichnet werden muss.

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

Hinweise zur Implementierung

Visual Studio verzögert das Laden von VSPackages, wenn möglich. Eine Folge des Einbettens einer CTO-Datei in ein VSPackage ist, dass Visual Studio während des Setups alle solchen VSPackages im Arbeitsspeicher laden muss. Dies ist der Zeitpunkt, an dem eine zusammengeführte Befehlstabelle erstellt wird. Ressourcen können aus einem VSPackage extrahiert werden, indem sie die Metadaten untersuchen, ohne Code im VSPackage auszuführen. Das VSPackage wird zurzeit nicht initialisiert, sodass der Leistungsverlust minimal ist.

Wenn Visual Studio nach dem Setup eine Ressource aus einem VSPackage anfordert, wird dieses Paket wahrscheinlich bereits geladen und initialisiert, sodass der Leistungsverlust minimal ist.