Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Первое пошаговое руководство в этой серии, создание базовой системы проектов, часть 1, показывает, как создать базовую систему проектов. В этом пошаговом руководстве базовая система проектов расширяется, включая шаблон Visual Studio, страницу свойств и другие функции. Перед началом этого прохождения необходимо выполнить первое прохождение.
В этом пошаговом руководстве показано, как создать тип проекта с расширением myproj имени файла проекта. Чтобы завершить пошаговое руководство, вам не нужно создавать собственный язык, так как пошаговое руководство заимствовано из существующей системы проектов Visual C#.
В этом пошаговом руководстве показано, как выполнить следующие задачи:
Создайте шаблон Visual Studio.
Разверните шаблон Visual Studio.
Создайте дочерний узел типа проекта в диалоговом окне "Новый проект ".
Включите подстановку параметров в шаблоне Visual Studio.
Создайте страницу свойств проекта.
Замечание
Действия, описанные в этом пошаговом руководстве, основаны на проекте C#. Однако за исключением конкретных особенностей, таких как расширения имени файла и код, можно использовать те же действия для проекта Visual Basic.
Создание шаблона Visual Studio
- Создание базовой системы проекта, часть 1 показывает, как создать базовый шаблон проекта и добавить его в систему проекта. В нем также показано, как зарегистрировать этот шаблон в Visual Studio с помощью атрибута ProvideProjectFactoryAttribute , который записывает полный путь к папке \Templates\Projects\SimpleProject\ в системном реестре.
Используя шаблон Visual Studio (vstemplate-файл ) вместо базового шаблона проекта, вы можете управлять тем, как шаблон отображается в диалоговом окне "Новый проект " и как заменяются параметры шаблона. VSTEMPLATE-файл — это XML-файл, который описывает, как должны быть включены исходные файлы при создании проекта с помощью шаблона системы проекта. Сама система проекта создается путем сбора файла .vstemplate и исходных файлов в файле .zip и развертывается путем копирования файла .zip в расположение, известное Visual Studio. Этот процесс более подробно описан далее в этом пошаговом руководстве.
В Visual Studio откройте решение SimpleProject, созданное после создания базовой системы проектов, часть 1.
В файле SimpleProjectPackage.cs найдите атрибут ProvideProjectFactory. Замените второй параметр (имя проекта) null и четвертый параметр (путь к папке шаблона проекта) на ".\\NullPath", как показано ниже.
[ProvideProjectFactory(typeof(SimpleProjectFactory), null, "Simple Project Files (*.myproj);*.myproj", "myproj", "myproj", ".\\NullPath", LanguageVsTemplate = "SimpleProject")]Добавьте XML-файл SimpleProject.vstemplate в папку \Templates\Projects\SimpleProject\ .
Замените содержимое SimpleProject.vstemplate следующим кодом.
<VSTemplate Version="2.0.0" Type="Project" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005"> <TemplateData> <Name>SimpleProject Application</Name> <Description> A project for creating a SimpleProject application </Description> <Icon>SimpleProject.ico</Icon> <ProjectType>SimpleProject</ProjectType> </TemplateData> <TemplateContent> <Project File="SimpleProject.myproj" ReplaceParameters="true"> <ProjectItem ReplaceParameters="true" OpenInEditor="true"> Program.cs </ProjectItem> <ProjectItem ReplaceParameters="true" OpenInEditor="false"> AssemblyInfo.cs </ProjectItem> </Project> </TemplateContent> </VSTemplate>В окне "Свойства" выберите все пять файлов в папке \Templates\Projects\SimpleProject\ и установите действие сборки на ZipProject.
Раздел <TemplateData> определяет расположение и внешний вид типа проекта SimpleProject в диалоговом окне "Новый проект ", как показано ниже.
Элемент <Name> называет шаблон проекта приложением SimpleProject.
Элемент <Description> содержит описание, которое отображается в диалоговом окне "Новый проект " при выборе шаблона проекта.
Элемент <Icon> указывает значок, который отображается вместе с типом проекта SimpleProject.
Элемент <ProjectType> называет тип Project в диалоговом окне "Новый проект ". Это имя заменяет параметр имени проекта атрибута ProvideProjectFactory.
Замечание
Элемент <ProjectType> должен соответствовать
LanguageVsTemplateаргументу атрибутаProvideProjectFactoryв файле SimpleProjectPackage.cs.В <разделе TemplateContent> описываются эти файлы, созданные при создании нового проекта:
SimpleProject.myproj
Program.cs
AssemblyInfo.cs
Все три файла имеют
ReplaceParametersзначение true, что обеспечивает подстановку параметров. Файл Program.cs имеетOpenInEditorзначение true, что приводит к открытию файла в редакторе кода при создании проекта.Дополнительные сведения об элементах схемы шаблона Visual Studio см. в справочнике по схеме шаблонов Visual Studio.
Замечание
Если проект имеет несколько шаблонов Visual Studio, каждый шаблон находится в отдельной папке. Каждый файл в этой папке должен иметь значение "Действие сборки " в ZipProject.
Добавление минимального VSCT-файла
Visual Studio необходимо запустить в режиме установки, чтобы распознать новый или измененный шаблон Visual Studio. Для режима установки требуется наличие VSCT-файла . Поэтому необходимо добавить в проект минимальный VSCT-файл .
Добавьте XML-файл SimpleProject.vsct в проект SimpleProject .
Замените содержимое файла SimpleProject.vsct следующим кодом.
<?xml version="1.0" encoding="utf-8" ?> <CommandTable xmlns="http://schemas.microsoft.com/VisualStudio/2005-10-18/CommandTable"> </CommandTable>Установите действие сборки для этого файла на VSCTCompile. Это можно сделать только в CSPROJ-файле , а не в окне свойств . Убедитесь, что для действия сборки этого файла задано значение None на данный момент.
Щелкните правой кнопкой мыши узел SimpleProject и выберите Edit SimpleProject.csproj.
В CSPROJ-файле найдите элемент SimpleProject.vsct .
<None Include="SimpleProject.vsct" />Измените действие сборки на VSCTCompile.
<VSCTCompile Include="SimpleProject.vsct" />файл проекта и закройте редактор.
Сохраните узел SimpleProject, а затем в обозревателе решений выберите "Перезагрузить проект".
Изучение шагов сборки шаблона Visual Studio
Система сборки проекта VSPackage обычно запускает Visual Studio в режиме настройки, когда файл .vstemplate изменяется или проект, содержащий файл .vstemplate, перестраивается. Вы можете следовать процессу, установив уровень подробности MSBuild на "Нормальный" или выше.
В панелиПараметры инструментов>" разверните раздел "Все параметры>Проекты и решения>Сборка и запуск".
Задайте для параметра детализации выходных данных сборки проекта MSBuild значение Normal.
В диалоговом окне"Параметры>" разверните раздел "Проекты и решения>сборка и запуск".
Установите для параметра детализации выходных данных сборки проекта MSBuildзначение "Обычный" и нажмите кнопку "ОК".
- Перестройте проект SimpleProject.
Шаг сборки для создания файла проекта .zip должен выглядеть следующим образом.
ZipProjects:
1> Zipping ProjectTemplates
1> Zipping <path>\SimpleProject\SimpleProject\obj\Debug\SimpleProject.zip...
1> Copying file from "<path>\SimpleProject\SimpleProject\obj\Debug\SimpleProject.zip" to "<%LOCALAPPDATA%>\Microsoft\VisualStudio\14.0Exp\ProjectTemplates\\\\SimpleProject.zip".
1> Copying file from "<path>\SimpleProject\SimpleProject\obj\Debug\SimpleProject.zip" to "bin\Debug\\ProjectTemplates\\\\SimpleProject.zip".
1> SimpleProject -> <path>\SimpleProject\SimpleProject\bin\Debug\ProjectTemplates\SimpleProject.zip
1>ZipItems:
1> Zipping ItemTemplates
1> SimpleProject ->
Развертывание шаблона Visual Studio
Шаблоны Visual Studio не содержат сведения о пути. Поэтому файл .zip шаблона должен быть развернут в расположении, известном коллективу Visual Studio. Расположение папки ProjectTemplates обычно <%LOCALAPPDATA%>\Microsoft\VisualStudio\14.0Exp\ProjectTemplates.
Чтобы развернуть фабрику проектов, программа установки должна иметь права администратора. Он устанавливает шаблоны в категории установки Visual Studio: ...\Microsoft Visual Studio 14.0\Common7\IDE\ProjectTemplates.
Тестирование шаблона Visual Studio
Проверьте фабрику проектов, чтобы узнать, создает ли она иерархию проектов с помощью шаблона Visual Studio.
Сбросьте экспериментальный экземпляр SDK для Visual Studio.
В Windows 7. В меню "Пуск " найдите папку Microsoft Visual Studio и Microsoft Visual Studio SDK/Tools , а затем выберите "Сброс экспериментального экземпляра Microsoft Visual Studio".
В последующих версиях Windows: на начальном экране введите "Сброс экспериментального экземпляра версии< Microsoft Visual Studio>".
Откроется окно командной строки. Когда вы увидите слова нажмите любую клавишу, чтобы продолжить, выберите ВВОД. После закрытия окна откройте Visual Studio.
Перестройте проект SimpleProject и запустите отладку. Экспериментальный экземпляр появляется.
В экспериментальном экземпляре создайте проект SimpleProject. В диалоговом окне "Создать проект" выберите SimpleProject.
Вы увидите новый экземпляр SimpleProject.
Создание дочернего узла типа проекта
Дочерний узел можно добавить в узел типа проекта в диалоговом окне "Новый проект ". Например, для типа проекта SimpleProject можно использовать дочерние узлы для консольных приложений, оконных приложений, веб-приложений и т. д.
Дочерние узлы создаются путем изменения файла проекта и добавления <дочерних элементов OutputSubPath> в <элементы ZipProject> . При копировании шаблона во время сборки или развертывания каждый дочерний узел становится подпапкой в папке шаблонов проекта.
В этом разделе показано, как создать дочерний узел консоли для типа проекта SimpleProject.
Переименуйте папку \Templates\Projects\SimpleProject\ в \Templates\Projects\ConsoleApp\.
В окне "Свойства" выберите все пять файлов в папке \Templates\Projects\ConsoleApp\ и убедитесь, что действие сборки имеет значение ZipProject.
В файле SimpleProject.vstemplate добавьте следующую строку в конце <раздела TemplateData> непосредственно перед закрывающим тегом.
<NumberOfParentCategoriesToRollUp>1</NumberOfParentCategoriesToRollUp>Это приводит к отображению шаблона консольного приложения как в дочернем узле консоли, так и в родительском узле SimpleProject, который находится на одном уровне над дочерним узлом.
Сохраните файл SimpleProject.vstemplate .
В CSPROJ-файле добавьте <OutputSubPath> к каждому из элементов ZipProject. Выгрузите проект, как и раньше, и измените файл проекта.
<Найдите элементы ZipProject>. Для каждого <элемента ZipProject> добавьте <элемент OutputSubPath> и присвойте ему значение Console. The ZipProject
<ZipProject Include="Templates\Projects\ConsoleApp\AssemblyInfo.cs"> <OutputSubPath>Console</OutputSubPath> </ZipProject> <ZipProject Include="Templates\Projects\ConsoleApp\Program.cs"> <OutputSubPath>Console</OutputSubPath> </ZipProject> <ZipProject Include="Templates\Projects\ConsoleApp\SimpleProject.myproj"> <OutputSubPath>Console</OutputSubPath> </ZipProject> <ZipProject Include="Templates\Projects\ConsoleApp\SimpleProject.vstemplate"> <OutputSubPath>Console</OutputSubPath> </ZipProject> <ZipProject Include="Templates\Projects\ConsoleApp\SimpleProject.ico"> <OutputSubPath>Console</OutputSubPath> </ZipProject>Добавьте эту <группу свойств> в файл проекта:
<PropertyGroup> <VsTemplateLanguage>SimpleProject</VsTemplateLanguage> </PropertyGroup>Сохраните файл проекта и перезагрузите проект.
Тестирование дочернего узла типа проекта
Проверьте измененный файл проекта, чтобы узнать, отображается ли дочерний узел консоли в диалоговом окне "Новый проект ".
Запустите инструмент сброса экспериментального экземпляра Microsoft Visual Studio.
Перестройте проект SimpleProject и запустите отладку. Должен появиться экспериментальный экземпляр.
В диалоговом окне "Создать проект" выберите узел SimpleProject . Шаблон консольного приложения должен отображаться в области шаблонов .
Разверните узел SimpleProject. Должен появиться дочерний узел консоли . Шаблон приложения SimpleProject продолжает отображаться в области шаблонов .
Выберите "Отмена " и остановите отладку.
Замена параметров шаблона проекта
-
Создание базовой системы проекта, часть 1 показано, как переопределить метод
ProjectNode.AddFileFromTemplateдля выполнения простой замены параметров шаблона. В этом разделе описано, как использовать более сложные параметры шаблона Visual Studio.
При создании проекта с помощью шаблона Visual Studio в диалоговом окне "Новый проект" параметры шаблона заменяются строками для настройки проекта. Параметр шаблона — это специальный маркер, который начинается и заканчивается знаком доллара, например $time$. Следующие два параметра особенно полезны для включения настройки в проектах, основанных на шаблоне:
$GUID[1–10]$ заменяется новым GUID. Можно указать до 10 уникальных графических идентификаторов, например $guid 1$.
$safeprojectname$ — это имя, предоставленное пользователем в диалоговом окне "Новый проект ", измененное для удаления всех небезопасных символов и пробелов.
Полный список параметров шаблона см. в разделе "Параметры шаблона".
Замена параметров шаблона проекта
В файле SimpleProjectNode.cs удалите
AddFileFromTemplateметод.В файле \Templates\Projects\ConsoleApp\SimpleProject.myproj найдите <свойство RootNamespace> и измените его значение на $safeprojectname$.
<RootNamespace>$safeprojectname$</RootNamespace>В файле \Templates\Projects\SimpleProject\Program.cs замените содержимое файла следующим кодом:
using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; // Guid namespace $safeprojectname$ { [Guid("$guid1$")] public class $safeprojectname$ { static void Main(string[] args) { Console.WriteLine("Hello VSX!!!"); Console.ReadKey(); } } }Перестройте проект SimpleProject и запустите отладку. Должен появиться экспериментальный экземпляр.
Создайте новое консольное приложение SimpleProject. (В области "Типы проектов " выберите SimpleProject. В разделе установленных шаблонов Visual Studio выберите консольное приложение.)
В созданном проекте откройте Program.cs. Он должен выглядеть примерно следующим образом (значения GUID в файле отличаются.):
using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; // Guid namespace Console_Application1 { [Guid("00000000-0000-0000-00000000-00000000)"] public class Console_Application1 { static void Main(string[] args) { Console.WriteLine("Hello VSX!!!"); Console.ReadKey(); } } }
Создание страницы свойств проекта
Вы можете создать страницу свойств для типа проекта, чтобы пользователи могли просматривать и изменять свойства в проектах, основанных на шаблоне. В этом разделе показано, как создать страницу свойств, не зависящих от конфигурации. Эта базовая страница свойств использует сетку свойств для отображения общедоступных свойств, предоставляемых в классе страницы свойств.
Наследуйте класс страницы свойств от SettingsPage базового класса. Сетка свойств, SettingsPage предоставляемая классом, знает о большинстве примитивных типов данных и знает, как их отображать. Кроме того, класс SettingsPage умеет сохранять значения свойств в файле проекта.
Страница свойств, созданная в этом разделе, позволяет изменять и сохранять следующие свойства проекта:
Имя сборки
ТипВыхода
RootNamespace.
В файле SimpleProjectPackage.cs добавьте этот
ProvideObjectатрибут вSimpleProjectPackageкласс:[ProvideObject(typeof(GeneralPropertyPage))] public sealed class SimpleProjectPackage : ProjectPackageЭто регистрирует класс
GeneralPropertyPageстраницы свойств с помощью COM.В файл SimpleProjectNode.cs добавьте два переопределённых метода в класс
SimpleProjectNode.protected override Guid[] GetConfigurationIndependentPropertyPages() { Guid[] result = new Guid[1]; result[0] = typeof(GeneralPropertyPage).GUID; return result; } protected override Guid[] GetPriorityProjectDesignerPages() { Guid[] result = new Guid[1]; result[0] = typeof(GeneralPropertyPage).GUID; return result; }Оба этих метода возвращают массив GUID страниц свойств. GUID GeneralPropertyPage является единственным элементом в массиве, поэтому в диалоговом окне "Страницы свойств " отображается только одна страница.
Добавьте файл класса с именем GeneralPropertyPage.cs в проект SimpleProject.
Замените содержимое этого файла следующим кодом:
using System; using System.Runtime.InteropServices; using Microsoft.VisualStudio; using Microsoft.VisualStudio.Project; using System.ComponentModel; namespace SimpleProject { [ComVisible(true)] [Guid("6BC7046B-B110-40d8-9F23-34263D8D2936")] public class GeneralPropertyPage : SettingsPage { private string assemblyName; private OutputType outputType; private string defaultNamespace; public GeneralPropertyPage() { this.Name = "General"; } [Category("AssemblyName")] [DisplayName("AssemblyName")] [Description("The output file holding assembly metadata.")] public string AssemblyName { get { return this.assemblyName; } } [Category("Application")] [DisplayName("OutputType")] [Description("The type of application to build.")] public OutputType OutputType { get { return this.outputType; } set { this.outputType = value; this.IsDirty = true; } } [Category("Application")] [DisplayName("DefaultNamespace")] [Description("Specifies the default namespace for added items.")] public string DefaultNamespace { get { return this.defaultNamespace; } set { this.defaultNamespace = value; this.IsDirty = true; } } protected override void BindProperties() { this.assemblyName = this.ProjectMgr.GetProjectProperty("AssemblyName", true); this.defaultNamespace = this.ProjectMgr.GetProjectProperty("RootNamespace", false); string outputType = this.ProjectMgr.GetProjectProperty("OutputType", false); this.outputType = (OutputType)Enum.Parse(typeof(OutputType), outputType); } protected override int ApplyChanges() { this.ProjectMgr.SetProjectProperty("AssemblyName", this.assemblyName); this.ProjectMgr.SetProjectProperty("OutputType", this.outputType.ToString()); this.ProjectMgr.SetProjectProperty("RootNamespace", this.defaultNamespace); this.IsDirty = false; return VSConstants.S_OK; } } }Класс
GeneralPropertyPageпредоставляет три общедоступных свойства AssemblyName, OutputType и RootNamespace. Так как AssemblyName не имеет метода set, он отображается как свойство только для чтения. OutputType — это перечисляемая константа, поэтому она отображается в раскрывающемся списке.Базовый
SettingsPageкласс предоставляетProjectMgrдля сохранения свойств. МетодBindPropertiesиспользуетсяProjectMgrдля получения сохраненных значений свойств и задания соответствующих свойств. МетодApplyChangesиспользуетсяProjectMgrдля получения значений свойств и сохранения их в файле проекта. Метод установки свойства задает значениеIsDirtyравным true, чтобы указать, что свойства должны быть сохранены. Сохраняемость возникает при сохранении проекта или решения.Перестройте решение SimpleProject и запустите отладку. Должен появиться экспериментальный экземпляр.
В экспериментальном экземпляре создайте новое приложение SimpleProject.
Visual Studio вызывает генератор проектов для создания проекта с использованием шаблона Visual Studio. Новый файл Program.cs открывается в редакторе кода.
Щелкните правой кнопкой мыши узел проекта в обозревателе решений и выберите пункт "Свойства". Откроется диалоговое окно "Страницы свойств ".
Проверка страницы свойств проекта
Теперь вы можете проверить, сможете ли вы модифицировать и изменять значения свойств.
В диалоговом окне "Страницы свойств MyConsoleApplication" измените пространство DefaultNamespace на MyApplication.
Выберите свойство OutputType и выберите библиотеку классов.
Нажмите кнопку "Применить" и нажмите кнопку "ОК".
Откройте диалоговое окно "Страницы свойств" и убедитесь, что изменения сохранены.
Закройте экспериментальный экземпляр Visual Studio.
Повторно откройте экспериментальный экземпляр.
Откройте диалоговое окно "Страницы свойств" и убедитесь, что изменения сохранены.
Закройте экспериментальный экземпляр Visual Studio.