Ресурсы в пакетах VSPackage
Вы можете внедрить локализованные ресурсы в библиотеки DLL собственного вспомогательного пользовательского интерфейса, управляемые вспомогательные библиотеки DLL или в управляемый VSPackage.
Некоторые ресурсы нельзя внедрить в VSPackages. Можно внедрить следующие управляемые типы:
Строки
Ключи загрузки пакета (которые также являются строками)
Значки окна инструментов
Скомпилированные файлы выходных данных таблицы команд (CTO)
Растровые карты CTO
Справка по командной строке
Сведения о данных диалогового окна
Ресурсы в управляемом пакете выбираются по идентификатору ресурса. Исключением является файл CTO, который должен называться CTMENU. Файл CTO должен отображаться в таблице ресурсов в виде byte[]
. Все остальные элементы ресурсов определяются по типу.
Атрибут можно использовать PackageRegistrationAttribute для указания Visual Studio, доступных управляемым ресурсам.
Это 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 после установки, этот пакет, скорее всего, будет загружен и инициализирован, поэтому потеря производительности минимальна.