Udostępnij za pośrednictwem


Zasoby w pakietach VSPackage

Zasoby zlokalizowane można osadzać w natywnych bibliotekach DLL interfejsu użytkownika satelitarnego, zarządzanych bibliotekach DLL satelity lub w zarządzanym programie VSPackage.

Niektórych zasobów nie można osadzać w pakietach VSPackage. Można osadzić następujące typy zarządzane:

  • Ciągi

  • Klucze ładowania pakietów (które są również ciągami)

  • Ikony okien narzędzi

  • Skompilowane pliki wyjściowe tabeli poleceń (CTO)

  • Mapy bitowe obiektu CTO

  • Pomoc wiersza polecenia

  • Informacje o danych okna dialogowego

Zasoby w pakiecie zarządzanym są wybierane według identyfikatora zasobu. Wyjątkiem jest plik CTO, który musi mieć nazwę CTMENU. Plik CTO musi zostać wyświetlony w tabeli zasobów jako byte[]. Wszystkie inne elementy zasobów są identyfikowane według typu.

Możesz użyć atrybutu PackageRegistrationAttribute , aby wskazać programowi Visual Studio, że zasoby zarządzane są dostępne.

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

Ustawienie PackageRegistrationAttribute w ten sposób wskazuje, że program Visual Studio powinien ignorować niezarządzane biblioteki DLL satelitarne podczas wyszukiwania zasobów, na przykład przy użyciu polecenia LoadPackageString. Jeśli program Visual Studio napotka co najmniej dwa zasoby, które mają ten sam identyfikator zasobu, używa pierwszego znalezionego zasobu.

Przykład

Poniższy przykład to zarządzana reprezentacja ikony okna narzędzi.

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

W poniższym przykładzie pokazano, jak osadzić tablicę bajtów CTO, która musi mieć nazwę 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>

Uwagi dotyczące implementacji

Program Visual Studio opóźnia ładowanie pakietów VSPackage zawsze, gdy jest to możliwe. Konsekwencją osadzania pliku CTO w pakietach VSPackage jest to, że program Visual Studio musi załadować wszystkie takie pakiety VSPackage w pamięci podczas instalacji, czyli podczas kompilowania scalonej tabeli poleceń. Zasoby można wyodrębnić z pakietu VSPackage, sprawdzając metadane bez uruchamiania kodu w programie VSPackage. Pakiet VSPackage nie jest obecnie inicjowany, więc utrata wydajności jest minimalna.

Gdy program Visual Studio żąda zasobu z pakietu VSPackage po instalacji, prawdopodobnie pakiet zostanie już załadowany i zainicjowany, więc utrata wydajności jest minimalna.