Развертывание пользовательского обработчика директив
Чтобы использовать настраиваемый обработчик директив в Visual Studio на любом компьютере, необходимо зарегистрировать его одним из методов, описанных в этом разделе.
Альтернативные методы таковы:
Расширения Visual Studio. Предоставляет способ установки и удаления процессора директив на вашем и других компьютерах. Обычно можно упаковывать другие функции в тот же VSIX.
VSPackage. Вы определяете VSPackage, содержащий помимо процессора директив и другие функции; это удобный метод регистрации процессора директив.
Определить раздел реестра. При использовании данного метода вы добавляете для процессора директив раздел реестра.
Для преобразования текстового шаблона в Visual Studio или MSBuild необходимо использовать один из этих методов. Если используется в вашем собственном приложении, это пользовательское основное приложение отвечает за поиск процессора директив для каждой директивы.
Развертывание процессора директив в VSIX
Вы можете добавить настраиваемый обработчик директив в расширение Visual Studio (VSIX).
Необходимо убедиться, что следующие два элемента содержатся в файле с расширением vsix:
Сборка (dll), содержащая класс пользовательского процессора директив.
Файл pkgdef, регистрирующий процессор директив. Корневое имя файла сборки должно совпадать с именем сборки. Например, файлы могут называться CDP.dll и CDP.pkgdef.
Чтобы просмотреть или изменить содержимое файла vsix, измените расширение его имени на zip и откройте этот файл. После изменения содержимого снова поменяйте расширение имени файла на vsix.
Файл vsix можно создать несколькими способами. Следующая процедура представляет один из них.
Разработка пользовательского процессора директив в проекте VSIX
Создайте проект проекта VSIX.
В source.extension.vsixmanifest задайте тип контента и поддерживаемые выпуски.
В редакторе манифеста VSIX на вкладке "Активы" выберите "Создать " и задайте свойства нового элемента:
Тип = контента VSPackage
Исходный проект = <текущий проект>
Щелкните выбранные выпуски и проверка типы установки, на которые вы хотите использовать процессор директив.
Добавьте файл pkgdef и установит его свойства для включения в VSIX.
Создайте текстовый файл и назовите его <assemblyName.pkgdef>.
<Имя> сборки обычно совпадает с именем проекта.
Выберите его в обозревателе решений и задайте его свойства следующим образом:
Build Action = Content (Действие при сборке > Содержимое);
Копирование в выходную копию каталога = Always
Включение в VSIX = True
Задайте имя VSIX и убедитесь, что этот идентификатор уникален.
Добавьте в pkgdef-файл следующий текст:
[$RootKey$\TextTemplating] [$RootKey$\TextTemplating\DirectiveProcessors] [$RootKey$\TextTemplating\DirectiveProcessors\ CustomDirectiveProcessorName] @="Custom Directive Processor description" "Class"="NamespaceName.ClassName" "CodeBase"="$PackageFolder$\AssemblyName.dll"
Замените следующие имена собственными именами:
CustomDirectiveProcessorName
,NamespaceName
,ClassName
,AssemblyName
.В проекте добавьте ссылки на следующее:
Microsoft.VisualStudio.TextTemplating.*.0
Microsoft.VisualStudio.TextTemplating.Interfaces.*.0
Microsoft.VisualStudio.TextTemplating.VSHost.*.0
Добавьте в проект класс вашего пользовательского процессора директив.
Это открытый класс, который должен реализовывать тип DirectiveProcessor или RequiresProvidesDirectiveProcessor.
Установка пользовательского процессора директив
В Windows Обозреватель откройте каталог сборки (обычно bin\Debug или bin\Release).
Если требуется установить процессор директив на другой компьютер, скопируйте vsix-файл на другой компьютер.
Дважды щелкните vsix-файл. Откроется установщик расширений Visual Studio.
Перезапустите Visual Studio. Теперь вы сможете запускать текстовые шаблоны, содержащие директивы со ссылками на ваш пользовательский процессор директив. Каждая директива имеет следующую форму:
<#@ CustomDirective Processor="CustomDirectiveProcessorName" parameter1="value1" ... #>
Удаление или временное отключение пользовательского процессора директив
В меню "Инструменты Visual Studio " щелкните "Диспетчер расширений".
Выберите VSIX, содержащий обработчик директив, и нажмите кнопку "Удалить " или "Отключить".
Устранение неполадок процессора директив в VSIX
Если процессор директив не работает, этому могут быть следующие причины:
Имя процессора, заданное в пользовательской директиве, должно соответствовать значению
CustomDirectiveProcessorName
, заданному в pkgdef-файле.Метод
IsDirectiveSupported
должен возвращать значениеtrue
, когда ему передается имяCustomDirective
.Если расширение не отображается в диспетчере расширений, но система не позволит установить его, удалите расширение из %localappdata%\Microsoft\VisualStudio\*.0\Extensions\.
Откройте vsix-файл и проверьте его содержимое. Чтобы его открыть, смените расширение имени файла на zip. Убедитесь, что он содержит файлы с расширениями dll, pkgdef и файл extension.vsixmanifest. Файл extension.vsixmanifest должен содержать соответствующий список в узле SupportedProducts, а также содержать узел VsPackage, расположенный в иерархии ниже узла Content.
<Content>
<VsPackage>CustomDirectiveProcessor.dll</VsPackage>
</Content>
Развертывание процессора директив в VSPackage
Если процессор директив является частью VSPackage, который будет установлен в глобальный кэш сборок, можно сделать так, чтобы система сама сгенерировала pkgdef-файл.
Поместите в класс пакета следующий атрибут.
[ProvideDirectiveProcessor(typeof(DirectiveProcessorClass), "DirectiveProcessorName", "Directive processor description.")]
Примечание.
Этот атрибут следует поместить в класс пакета, не в класс процессора директив.
Файл pkgdef будет автоматически создан во время построения проекта. При установке VSPackage pkgdef-файл будет регистрировать процессор директив.
Убедитесь, что pkgdef-файл содержится в папке построения, которой обычно является bin\Debug или bin\Release. Если там нет этого файла, откройте CSPROJ-файл в текстовом редакторе и удалите следующий узел: <GeneratePkgDefFile>false</GeneratePkgDefFile>
.
Дополнительные сведения см. в разделе VSPackages.
Создание раздела реестра
Данный способ установки пользовательского процессора директив рекомендуется использовать в последнюю очередь. Он не предусматривает удобного способа включения и отключения процессора директив и способа передачи процессора директив другим пользователям.
Внимание
Неправильное изменение реестра может вызвать серьезные проблемы. Перед внесением изменений в реестр необходимо выполнить резервное копирование всех ценных данных на компьютере.
Регистрация процессора директив путем создания раздела реестра
Запустите
regedit
.В программе regedit перейдите следующему разделу:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\*.0\TextTemplating\DirectiveProcessors
Если вы хотите установить процессор директив в экспериментальной версии Visual Studio, вставьте "Exp" после "11.0".
Добавьте раздел реестра с именем, совпадающим с именем класса процессора директив.
- В дереве реестра щелкните правой кнопкой мыши узел DirectiveProcessors , наведите указатель мыши на "Создать", а затем нажмите кнопку "Ключ".
Добавьте в новый узел строковые значения для параметров Class и CodeBase либо Assembly согласно указаниям, приведенным в следующих таблицах.
Щелкните правой кнопкой мыши созданный узел, наведите указатель на "Создать" и щелкните "Строковое значение".
Отредактируйте имя значения.
Дважды щелкните имя и отредактируйте данные.
Если пользовательский процессор директив не находится в глобальном кэше сборок, подраздел реестра должен выглядеть, как в следующей таблице:
Имя. | Тип | Data |
---|---|---|
(по умолчанию) | REG_SZ | (значение не задано) |
Класс | REG_SZ | <Имя пространства имен>.<Имя класса> |
CodeBase | REG_SZ | <Путь>\<имя сборки> |
Если сборка находится в глобальном кэше сборок, подраздел реестра должен выглядеть, как в следующей таблице:
Имя. | Тип | Data |
---|---|---|
(по умолчанию) | REG_SZ | (значение не задано) |
Класс | REG_SZ | <Полное имя класса> |
Сборка | REG_SZ | <Имя сборки в GAC> |
Связанный контент
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по