Поделиться через


Ресурсы в пакетах VSPackage

Вы можете внедрить локализованные ресурсы в библиотеки DLL собственного вспомогательного пользовательского интерфейса, управляемые вспомогательные библиотеки DLL или в управляемый VSPackage.

Некоторые ресурсы нельзя внедрить в VSPackages. Можно внедрить следующие управляемые типы:

  • Строки

  • Ключи загрузки пакета (которые также являются строками)

  • Значки окна инструментов

  • Скомпилированные файлы выходных данных таблицы команд (CTO)

  • Растровые карты CTO

  • Справка по командной строке

  • Сведения о данных диалогового окна

Ресурсы в управляемом пакете выбираются по идентификатору ресурса. Исключением является файл CTO, который должен называться CTMENU. Файл CTO должен отображаться в таблице ресурсов в виде byte[]. Все остальные элементы ресурсов определяются по типу.

Атрибут можно использовать PackageRegistrationAttribute для указания Visual Studio, доступных управляемым ресурсам.

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

В следующем примере показано, как внедрить массив байтов 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 задерживает загрузку VSPackages по возможности. Следствием внедрения CTO-файла в VSPackage является то, что Visual Studio должна загружать все такие VSPackage в память во время установки, то есть при сборке объединенной командной таблицы. Ресурсы можно извлечь из VSPackage, проверив метаданные без выполнения кода в VSPackage. VsPackage в настоящее время не инициализирован, поэтому потеря производительности минимальна.

Когда Visual Studio запрашивает ресурс из VSPackage после установки, этот пакет, скорее всего, будет загружен и инициализирован, поэтому потеря производительности минимальна.