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


Развертывание сборок пользовательских элементов управления и сборок времени разработки

Когда средство разработки открывает сборку пользовательского элемента управления, оно ищет и связанные сборки времени разработки. В частности, конструкторы ищут сборки, имеющие атрибут уровня сборки ProvideMetadataAttribute. Когда этот атрибут найден, конструктор ищет сборку для класса, реализующего интерфейс IProvideAttributeTable. Конструктор запрашивает свойство AttributeTable этого класса для получения коллекции атрибутов, определяющих поведение времени разработки.

Соглашение об именовании сборок времени разработки

Средства разработки, такие как Visual Studio и Expression Blend, обнаруживают пользовательские сборки времени разработки, используя соглашение об именовании. Это соглашение развивалось в нескольких версиях инструментов. Используйте следующую таблицу для именования сборок для подходящих целевых конструкторов.

Целевая среда

Соглашение об именовании

Примеры имен

Expression Blend 3 и Visual Studio 2010 

<БиблиотекаЭлементовУправления>.Design.<версия>.dll (универсальное)

<БиблиотекаЭлементовУправления>.Expression.Design.<версия>.dll (Expression Blend)

<БиблиотекаЭлементовУправления>.VisualStudio.Design.<версия>.dll (Visual Studio)

TailspinToysControls.Design.4.0.dll

TailspinToysControls.Expression.Design.4.0.dll

TailspinToysControls.VisualStudio.Design.4.0.dll

Expression Blend 2 и Visual Studio 2008 

<БиблиотекаЭлементовУправления>.Design.dll (универсальное)

<БиблиотекаЭлементовУправления>.Expression.Design.dll (Expression Blend)

<БиблиотекаЭлементовУправления>.VisualStudio.Design.dll (Visual Studio)

TailspinToysControls.Design.dll

TailspinToysControls.Expression.Design.dll

TailspinToysControls.VisualStudio.Design.dll

Универсальные имена могут использоваться для реализаций времени разработки, совместно используемых Visual Studio и Expression Blend. Подстрока <версия> указывает соответствующую версию .NET Framework сред. Конструктор WPF. Ее можно узнать, проверив версию сборки Microsoft.Windows.Design.dll.

Специфические для конкретных средств сборки времени разработки могут переопределять совместно используемые реализации в общей сборке. Это означает, что пользовательское взаимодействие разработки может значительно варьироваться в различных средах разработки. Дополнительные сведения см. в разделе Предоставление метаданных времени разработки.

Регистрация сборок времени разработки

Регистрируйте свои элементы управления и связанные сборки времени разработки, используя процедуру регистрации папки сборки, называемую также регистрацией AssemblyFoldersEx. Для регистрации элемента управления с использованием процедуры регистрации папки сборки необходимо лишь, чтобы сборки этого элемента управления имелись на диске и были заданы записи реестра панели элементов. Эта процедура регистрации может быть проведена до или после установки Visual Studio.

AssemblyFoldersEx – это раздел реестра в каждой целевой версии платформы разработки, такой как Silverlight 3 или .NET Framework 4. AssemblyFoldersEx включает набор разделов, задающих папки, содержащие специфические для платформы разработки сборки. Например, если целевой платформой является Silverlight 3, раздел реестра AssemblyFoldersEx расположен по следующему пути в реестре.

[HKCU or HKLM]\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Silverlight\v3.0\AssemblyFoldersEx

Когда подраздел Toolbox и его вспомогательные записи создаются в разделе AssemblyFoldersEx, элементы управления появляются в панели элементов, а также в диалоговых окнах Добавление ссылок и Выбор элементов.

В следующей таблице перечислены записи реестра, которые могут использоваться в разделах AssemblyFoldersEx и Toolbox для регистрации папки сборки.

Запись реестра

Тип записи реестра

Описание

Пример

<сборка>

Ключ

Имя раздела, обычно отвечающее торговой марке.

[TailspinToys Controls]

<папка сборки>

Строковое значение по умолчанию

Определяет полный путь установки для сборки пользовательского элемента управления. Конструкторы будут искать сборки времени разработки в этой папке и подпапке с именем Design.

@="c:\\Program Files\\Reference Assemblies\\TailspinToys Controls\\Bin\\"

Toolbox

Ключ

Добавьте раздел Toolbox, если в сборках, находящихся в папке <папка сборки>, должен выполняться поиск элементов управления для добавления на панель элементов. Если этот раздел не задан, элементы управления отображаются в диалоговом окне Выбор элементов, а сборки в диалоговом окне Добавить ссылку, но не на панели элементов.

[Toolbox]

TabName

Строковое значение

Задает группу панели элементов по умолчанию для элементов управления в папке <папка сборки>. Если этой группы не существует, она создается. Если это значение не задано, элементы управления устанавливаются в группу по умолчанию для данной платформы.

Используйте это значение для задания бренда вместо функциональной категории. Не определяйте как целевые категории Common или All Controls для пользовательских элементов управления WPF и Silverlight. Значение не локализуется.

"TabName"="TailspinToys"

Servicing

Разделы

Для инициирования обновления кэша панели элементов задайте новый раздел или значение в разделе Toolbox. Рекомендуемый способ – создать подраздел Updates, содержащий регистрационное значение для каждого установленного обновления. Обновление кэша выполняется только для элементов управления, найденных в определенной папке, к которой принадлежит раздел Toolbox, а не для всех элементов управления среды разработки.

Пользовательские настройки панели элементов для элементов управления папки сборки может быть утрачено при обновлении папки сборки.

[Updates]

"Update3"="1"

"Update7"="1"

В следующем примере скрипт реестра регистрирует сборки, предназначенные для .NET Framework 4 и расположенные по пути Reference Assemblies. Все элементы управления, у которых ToolboxBrowsableAttribute имеет значение true, отображаются на панели элементов на вкладке Tailspin Toys.

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0\AssemblyFoldersEx\TailspinToys]
@="c:\\\\Program Files\\\\Reference Assemblies\\\\TailspinToys Controls\\\\Bin\\\\"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0\AssemblyFoldersEx\TailspinToys\Toolbox]
"TabName"="Tailspin Toys"

ToolboxBrowsableAttribute и раздел реестра панели элементов

Чтобы указать, должен ли пользовательский элемент управления отображаться на панели элементов. нужно добавить ToolboxBrowsableAttribute к метаданным элемента управления времени разработки. Дополнительные сведения см. в разделе Пошаговое руководство. Предоставление метаданных для значков панели инструментов.

Диалоговое окно Выбрать элементы используется для просмотра новых сборок и добавления на панель элементов новых элементов управления. В следующей таблице показано, как взаимодействие атрибута ToolboxBrowsableAttribute и раздела реестра Toolbox определяет, когда пользовательский элемент управления появится на панели элементов и в диалоговом окне Выбрать элементы.

Раздел реестра Toolbox.

Раздел реестра Toolbox отсутствует

ToolboxBrowsable = true

  • В панели элементов

  • В диалоговом окне "Выбор элементов"

  • Не в панели элементов

  • В диалоговом окне "Выбор элементов"

ToolboxBrowsable = false

  • Не в панели элементов

  • Не в диалоговом окне "Выбор элементов"

  • Не в панели элементов

  • Не в диалоговом окне "Выбор элементов"

Загрузка сборок времени разработки

Конструкторы загружают пользовательские сборки времени разработки в определенном порядке. Это позволяет реализациям, предназначенным для конкретных конструкторов, заменять универсальные реализации. Для пользовательского элемента управления, развернутого в сборку с именем ControlLibrary.dll, следующий список показывает порядок загрузки сборок времени разработки.

  1. ControlLibrary.dll (сборка элемента управления)

  2. ControlLibrary.Design.<версия>.dll

  3. Design\ControlLibrary.Design.<версия>.dll

  4. ControlLibrary.[Expression|VisualStudio].Design.<версия>.dll

  5. Design\ControlLibrary.[Expression|VisualStudio].Design.<версия>.dll

Сборки, предназначенные для конкретных конструкторов, заменяют реализации, развернутые в универсальных сборках. Например, TailspinToysControlLibrary.VisualStudio.Design.dll может заменить реализацию в TailspinToysControlLibrary.Design.dll.

Кроме того, сборка времени разработки загружается согласно <версии>, заданной в ее первом файле. Следующие правила показывают, как <версия> интерпретируется конструктором.

  • Если <версия> имеет иной основной номер версии, чем версия платформы разработки конструктора, сборка времени разработки не загружается.

  • Если более чем одна сборки времени разработки совместима с версией платформы разработки конструктора, конструктор загружает версию, скомпилированную для наивысшей версии платформы разработки, которая не превышает версию платформы разработки конструктора.

В следующей таблице приведен пример конструктора, построенного с версией платформы разработки 4.1.3.0, который загружает сборки времени разработки с другими версиями.

Пример имени сборки времени разработки

Конструктор загружает?

ControlLibrary.Design.3.0.1.0.dll

Нет. Версия несовместима.

ControlLibrary.Design.4.0.1.0.dll

Нет. Мог бы загрузить, но доступна старшая версия.

ControlLibrary.Design.4.1.1.0.dll

Да. Ближе всего к версии конструктора.

ControlLibrary.Design.4.3.dll

Нет. Построено для старшей версии платформы разработки, чем у конструктора.

Обновление панели элементов

При обновлении сборок в папках, заданных разделом AssemblyFoldersEx, может потребоваться обновить кэш Visual Studio. Этот кэш содержит имена, категории и значки для элементов управления, которые отображаются на панели элементов. Этот кэш не включает элемент управления или сборки времени разработки. При компиляции проектов все предоставленные элементы управления или сборки времени разработки автоматически обновляются.

Кэш панели элементов для папки сборки обновляется, если раздел AssemblyFoldersEx каким-либо образом изменяется (изменяются любые из его значений или подразделов). Обновление происходит при инициализации панели элементов когда область задач панели элементов впервые отображается (обычно при загрузке Visual Studio или загрузке проекта).

Для инициирования обновления кэша панели элементов задайте новый раздел или значение в разделе Toolbox. Рекомендуемый способ – создать подраздел Servicing, содержащий регистрационное значение для каждого установленного обновления. Обновление кэша выполняется только для элементов управления, найденных в определенной папке, к которой принадлежит раздел Toolbox, а не для всех элементов управления среды разработки. Пользовательские настройки панели элементов для элементов управления папки сборки может быть утрачено при обновлении папки сборки.

См. также

Ссылки

ToolboxBrowsableAttribute

ProvideMetadataAttribute

Другие ресурсы

Общее представление о расширяемости конструктора WPF

Основные понятия расширяемости

Предоставление метаданных времени разработки