Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Пакет SDK для .NET поставляется со многими шаблонами, уже установленными и готовыми для использования.
Командаdotnet new
— это не только способ использования шаблона, но и установка и удаление шаблонов. Вы можете создать собственные пользовательские шаблоны для любого типа проекта, например приложения, службы, инструмента или библиотеки классов. Можно даже создать шаблон, который выводит один или несколько независимых файлов, например файл конфигурации.
Пользовательские шаблоны можно установить из пакета NuGet на любом веб-канале NuGet, ссылаясь непосредственно на файл NuGet .nupkg или указав каталог файловой системы, содержащий шаблон. Модуль шаблонов предлагает функции, позволяющие заменить значения, включать и исключать файлы, а также выполнять пользовательские операции обработки при использовании шаблона.
Модуль шаблонов является открытым исходным кодом, и репозиторий кода в Сети находится в dotnet/templating на GitHub. Дополнительные шаблоны, включая шаблоны сторонних производителей, можно найти с помощью dotnet new search
. Дополнительные сведения о создании и использовании пользовательских шаблонов см. в разделе "Создание собственных шаблонов для dotnet new" и вики-сайта репозитория dotnet/templating на GitHub.
Замечание
Примеры шаблонов доступны в репозитории dotnet/templating GitHub.
Чтобы выполнить пошаговое руководство и создать шаблон, ознакомьтесь с руководством по созданию пользовательского шаблона для dotnet.
Шаблоны .NET по умолчанию
При установке пакета SDK для .NET вы получаете более десяти встроенных шаблонов для создания проектов и файлов, включая консольные приложения, библиотеки классов, проекты модульных тестов, приложения ASP.NET Core (в том числе проекты Angular и React) и файлы конфигурации. Чтобы получить список встроенных шаблонов, выполните dotnet new list
команду:
dotnet new list
Конфигурация
Шаблон состоит из следующих частей:
- Исходные файлы и папки.
- Файл конфигурации (template.json).
Исходные файлы и папки
Исходные файлы и папки включают все файлы и папки, которые требуется использовать подсистеме шаблонов при выполнении dotnet new <TEMPLATE>
команды. Модуль шаблонов предназначен для использования запускаемых проектов в качестве исходного кода для создания проектов. Это дает ряд преимуществ.
- Обработчик шаблонов не требует внедрения специальных маркеров в исходный код проекта.
- Файлы кода не являются специальными файлами или не изменяются каким-либо образом для работы с модулем шаблонов. Таким образом, средства, которые обычно используются при работе с проектами, также работают с содержимым шаблона.
- Вы создаете, запускаете и выполняете отладку проектов шаблонов так же, как и для любого из других проектов.
- Вы можете быстро создать шаблон из существующего проекта, добавив в проект файл конфигурации ./.template.config/template.json .
Файлы и папки, хранящиеся в шаблоне, не ограничиваются формальными типами проектов .NET. Исходные файлы и папки могут состоять из любого содержимого, которое вы хотите создать при использовании шаблона, даже если модуль шаблонов создает только один файл в качестве выходных данных.
Файлы, созданные шаблоном, можно изменить на основе логики и параметров, предоставленных в файле конфигурации template.json . Пользователь может переопределить эти параметры, передав параметры команде dotnet new <TEMPLATE>
. Распространенный пример пользовательской логики — предоставление имени класса или переменной в файле кода, развернутом шаблоном.
template.json
Файл template.json помещается в папку .template.config в корневом каталоге шаблона. Файл предоставляет сведения о конфигурации для шаблонного движка. Минимальная конфигурация требует элементов, отображаемых в следующей таблице, достаточно для создания функционального шаблона.
Член | Тип | Описание |
---|---|---|
$schema |
УРИ | Схема JSON для файла template.json . Редакторы, поддерживающие схемы JSON, обеспечивают возможности редактирования JSON при указании схемы. Например, Visual Studio Code требует, чтобы этот член мог включить IntelliSense. Используйте значение http://json.schemastore.org/template . |
author |
струна | Автор шаблона. |
classifications |
array(string) | Ноль или более характеристик шаблона, который пользователь может использовать для поиска шаблона. Классификации также отображаются в столбце "Теги" , когда он отображается в списке шаблонов, созданных с помощью dotnet new list команды. |
identity |
струна | Уникальное имя этого шаблона. |
name |
струна | Имя шаблона, который должны видеть пользователи. |
shortName |
струна | Краткое имя по умолчанию для выбора шаблона, применяемого к средам, где имя шаблона указано пользователем, а не выбрано с помощью графического интерфейса пользователя. Например, короткое имя полезно при использовании шаблонов из командной строки с командами CLI. |
sourceName |
струна | Имя в дереве источника, которое нужно заменить именем, которое указывает пользователь. Модуль шаблонов будет искать любое вхождение sourceName , упомянутого в файле конфигурации, и заменять его в именах файлов и содержимом файлов. Значение, которое необходимо заменить, можно указать с помощью -n или --name параметров при запуске шаблона. Если имя не указано, используется текущий каталог. |
preferNameDirectory |
Булев тип | Указывает, следует ли создать каталог для шаблона, если указано имя, но выходной каталог не задан (вместо создания содержимого непосредственно в текущем каталоге). По умолчанию используется значение false. |
Полная схема файла template.json находится в хранилище схем JSON. Дополнительные сведения о файлеtemplate.json см. вики-сайте dotnet. Более подробные примеры и сведения о том, как сделать шаблоны видимыми в Visual Studio, см. в ресурсах, созданных Сайедом Хашими.
Пример
Например, вот папка шаблона, содержащая два файла содержимого: console.cs и readme.txt. Существует также требуемая папка с именем .template.config , содержащая файл template.json .
└───mytemplate
│ console.cs
│ readme.txt
│
└───.template.config
template.json
Файл template.json выглядит следующим образом:
{
"$schema": "http://json.schemastore.org/template",
"author": "Travis Chau",
"classifications": [ "Common", "Console" ],
"identity": "AdatumCorporation.ConsoleTemplate.CSharp",
"name": "Adatum Corporation Console Application",
"shortName": "adatumconsole"
}
Папка mytemplate — это устанавливаемый пакет шаблона. После установки пакета можно использовать shortName
с командой dotnet new
. Например, dotnet new adatumconsole
вывел бы файлы console.cs
и readme.txt
в текущую папку.
Локализация шаблона
Шаблоны .NET можно локализуть. Если шаблон локализован для языка, соответствующего текущему языковому стандарту, его элементы отображаются на том же языке, что и интерфейс командной строки. Локализация является необязательной при создании новых шаблонов.
Локализуемые элементы шаблона:
- Имя
- Автор
- Описание
- Символы
- Описание
- Отображаемое имя
- Описания и отображаемое имя вариантов выбора параметров
- Действия после публикации
- Описание
- Инструкции из руководства
Файлы локализации имеют формат JSON, и для каждой культуры должен существовать только один файл. Соглашение об именовании: templatestrings.<lang code>.json
где lang code
соответствует одному из параметров CultureInfo . Все файлы локализации должны находиться в папке .template-config\localize
.
Код JSON локализации состоит из пар ключ-значение.
- Основное — это ссылка на элемент
template.json
, который должен быть локализован. Если элемент является дочерним, используйте полный путь с/
разделителем. - Значением является строка локализации элемента, заданного ключом.
Дополнительные сведения о локализации шаблонов см. на странице локализации вики dotnet templating.
Пример
Например, вот template.json файл с некоторыми локализуемыми полями:
{
"$schema": "http://json.schemastore.org/template",
"author": "Microsoft",
"classifications": "Config",
"name": "EditorConfig file",
"description": "Creates an .editorconfig file for configuring code style preferences.",
"symbols": {
"Empty": {
"type": "parameter",
"datatype": "bool",
"defaultValue": "false",
"displayName": "Empty",
"description": "Creates empty .editorconfig instead of the defaults for .NET."
}
}
}
И некоторые поля должны быть локализованы в бразильском португальском языке. Имя файла будет templatestrings.pt-BR.json
, чтобы соответствовать культуре, и будет выглядеть следующим образом:
{
"author": "Microsoft",
"name": "Arquivo EditorConfig",
"description": "Cria um arquivo .editorconfig para configurar as preferências de estilo de código.",
"symbols/Empty/displayName": "Vazio",
"symbols/Empty/description": "Cria .editorconfig vazio em vez dos padrões para .NET."
}
Упаковка шаблона в пакет NuGet (nupkg-файл)
Пользовательский шаблон упакован с помощью команды dotnet pack и CSPROJ-файла . Кроме того, NuGet можно использовать с командой nuget pack вместе с файлом .nuspec. Однако NuGet требует .NET Framework в Windows и Mono в Linux и macOS.
.csproj файл немного отличается от традиционного файла .csproj кодового проекта. Обратите внимание на следующие параметры:
- Параметр
<PackageType>
добавляется и устанавливается наTemplate
. - Параметр
<PackageVersion>
добавляется и устанавливается в допустимый номер версии NuGet. - Параметр
<PackageId>
добавляется и устанавливается на уникальный идентификатор. Этот идентификатор используется для удаления пакета шаблонов и используется веб-каналами NuGet для регистрации пакета шаблонов. - Параметры универсальных метаданных должны быть заданы:
<Title>
,<Authors>
,<Description>
и<PackageTags>
. - Этот
<TargetFramework>
параметр должен быть задан, даже если двоичный файл, созданный процессом шаблона, не используется. В приведенном ниже примере задано значениеnetstandard2.0
.
Пакет шаблона в виде пакета NuGet nupkg требует, чтобы все шаблоны хранились в папке содержимого в пакете. Для установки созданного файла .nupkg в виде пакета шаблонов необходимо добавить несколько дополнительных параметров в файл .csproj.
- Для параметра
<IncludeContentInPack>
установленоtrue
, чтобы включить любой файл, который проект определяет как содержимое в пакете NuGet. - Параметр
<IncludeBuildOutput>
установлен наfalse
, чтобы исключить все двоичные файлы, генерируемые компилятором, из пакета NuGet. - Для
<ContentTargetFolders>
параметра заданоcontent
значение . Это гарантирует, что файлы, заданные как содержимое , хранятся в папке содержимого в пакете NuGet. Эта папка в пакете NuGet анализируется системой шаблонов dotnet.
Простой способ исключить все файлы кода, скомпилированные проектом шаблона, — использовать <Compile Remove="**\*" />
элемент в файле проекта внутри <ItemGroup>
элемента.
Простой способ структурировать пакет шаблонов — поместить все шаблоны в отдельные папки, а затем каждую папку шаблона в папку шаблонов , расположенную в том же каталоге, что и csproj-файл . Таким образом, можно использовать один элемент проекта для включения всех файлов и папок в шаблоны в качестве содержимого. Внутри элемента <ItemGroup>
создайте элемент <Content Include="templates\**\*" Exclude="templates\**\bin\**;templates\**\obj\**" />
.
Ниже приведен пример CSPROJ-файла , который следует всем этим рекомендациям. Он упаковывает дочернюю папку шаблонов в папку пакета содержимого и исключает компилируемый файл кода.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<PackageType>Template</PackageType>
<PackageVersion>1.0</PackageVersion>
<PackageId>AdatumCorporation.Utility.Templates</PackageId>
<Title>AdatumCorporation Templates</Title>
<Authors>Me</Authors>
<Description>Templates to use when creating an application for Adatum Corporation.</Description>
<PackageTags>dotnet-new;templates;contoso</PackageTags>
<TargetFramework>netstandard2.0</TargetFramework>
<IncludeContentInPack>true</IncludeContentInPack>
<IncludeBuildOutput>false</IncludeBuildOutput>
<ContentTargetFolders>content</ContentTargetFolders>
</PropertyGroup>
<ItemGroup>
<Content Include="templates\**\*" Exclude="templates\**\bin\**;templates\**\obj\**" />
<Compile Remove="**\*" />
</ItemGroup>
</Project>
В следующем примере демонстрируется структура файлов и папок с помощью CSPROJ для создания пакета шаблона. Папка MyDotnetTemplates.csproj и шаблоны находятся в корне каталога с именем project_folder. Папка шаблонов содержит два шаблона, mytemplate1 и mytemplate2. Каждый шаблон содержит файлы содержимого и папку .template.config с файлом конфигурации template.json .
project_folder
│ MyDotnetTemplates.csproj
│
└───templates
├───mytemplate1
│ │ console.cs
│ │ readme.txt
│ │
│ └───.template.config
│ template.json
│
└───mytemplate2
│ otherfile.cs
│
└───.template.config
template.json
Замечание
Чтобы убедиться, что пакет шаблона отображается в dotnet new search
результате, задайте для типа пакета NuGet значениеTemplate
.
Установка пакета шаблона
Используйте команду dotnet new install для установки пакета шаблона.
Установка шаблонного пакета из NuGet-пакета, доступного на nuget.org
Используйте идентификатор пакета NuGet для установки пакета шаблона.
dotnet new install <NUGET_PACKAGE_ID>
Установка пакета шаблона из пользовательского источника NuGet
Укажите пользовательский источник NuGet (например, https://api.my-custom-nuget.com/v3/index.json
).
dotnet new install <NUGET_PACKAGE_ID> --nuget-source <SOURCE>
Установка пакета шаблона из локального файла nupkg
Укажите путь к файлу пакета NuGet nupkg .
dotnet new install <PATH_TO_NUPKG_FILE>
Установка пакета шаблона из каталога файловой системы
Шаблоны можно установить из папки шаблона, например папку mytemplate1 из предыдущего примера. Укажите путь к папке .template.config . Путь к каталогу шаблона не должен быть абсолютным.
dotnet new install <FILE_SYSTEM_DIRECTORY>
Получение списка установленных пакетов шаблонов
Команда удаления без других параметров выводит список всех установленных пакетов шаблонов и включенных шаблонов.
dotnet new uninstall
Эта команда возвращает примерно следующее выходные данные:
Currently installed items:
Microsoft.Azure.WebJobs.ProjectTemplates
Version: 4.0.1942
Details:
Author: Microsoft
NuGetSource: https://api.nuget.org/v3/index.json
Templates:
Azure Functions (func) C#
Azure Functions (func) F#
Uninstall Command:
dotnet new uninstall Microsoft.Azure.WebJobs.ProjectTemplates
...
Первый уровень элементов после Currently installed items:
— это идентификаторы, используемые при удалении пакета шаблонов. В предыдущем примере Microsoft.Azure.WebJobs.ProjectTemplates
перечислен. Если пакет шаблона был установлен с помощью пути к файловой системе, этот идентификатор — это путь к папке .template.config . Только пакеты шаблонов, установленные через dotnet new install
, отображаются в списке. Пакеты шаблонов, встроенные в пакет SDK для .NET, не отображаются.
Удалите пакет шаблона
Используйте команду dotnet new uninstall для удаления пакета шаблона.
Если пакет был установлен веб-каналом NuGet или nupkg-файлом напрямую, укажите идентификатор.
dotnet new uninstall <NUGET_PACKAGE_ID>
Если пакет был установлен, указав путь к папке .template.config , используйте этот путь для удаления пакета. Абсолютный путь к пакету шаблона можно увидеть в выходных данных, предоставленных командой dotnet new uninstall
. Дополнительные сведения см. в разделе "Получение списка установленных шаблонов ".
dotnet new uninstall <FILE_SYSTEM_DIRECTORY>
Создание проекта с помощью пользовательского шаблона
После установки шаблона используйте шаблон, выполнив dotnet new <TEMPLATE>
команду, как и любой другой предварительно установленный шаблон. Вы также можете указать параметрыdotnet new
для команды, включая параметры для конкретного шаблона, настроенные в параметрах шаблона. Укажите короткое имя шаблона непосредственно в команду:
dotnet new <TEMPLATE>