Создание шаблона проекта с ссылками на NuGet пакеты

в 19:24, , рубрики: Песочница

Добрый день!

Передо мной встала задача создать шаблон c# проекта, в котором есть ссылки на другие библиотеки, а также ссылки на NuGet пакеты. В интернете есть информация с решениями данной задачи, но в них были раскрыты возможные проблемы, из-за которых я не смог легко и просто создать шаблон проекта. Поэтому я решил разместить мануал по решению данной задачи.

Под катом много картинок с пошаговой инструкцией создания шаблона проекта.

1. Выбираем рабочий проект из которого будем создавать шаблон.

image

Проект называется WorkProject, имеет ссылку на второй проект ToysLibrary и на NuGet пакеты Lucene.Net и ICSharpCode.SharpZipLib.

2. Для создания шаблона проекта, в котором будет ссылка на библиотеку ToysLibrary, создаем каталог Libs в WorkProject и помещаем туда библиотеку ToysLibrary.dll, которую можно найти в bindebug текущего проекта.

Создание шаблона проекта с ссылками на NuGet пакеты - 2

3. Ссылку на соседний проект ToysLibrary изменяем, чтобы она указывала на добавленный ToysLibrary.dll файл.

Создание шаблона проекта с ссылками на NuGet пакеты - 3

4. Создаем шаблон проекта. File-Export Template…

Создание шаблона проекта с ссылками на NuGet пакеты - 4

Снимаем галку автоматического добавления шаблона проекта в Visual Studio, даем наименование шаблона и его описание.

Создание шаблона проекта с ссылками на NuGet пакеты - 5

Получаем zip-файл шаблона.

Создание шаблона проекта с ссылками на NuGet пакеты - 6

5. Добавляем VSIX проект.

Создание шаблона проекта с ссылками на NuGet пакеты - 7

Задаем наименование автора:

Создание шаблона проекта с ссылками на NuGet пакеты - 8

6. Распаковываем zip архив, созданный на шаге 4. Изменяем файл MyTemplste.vstemplate. В элемент VSTemplate добавляем следующий текст.

Создание шаблона проекта с ссылками на NuGet пакеты - 9

В WizardDatapackages repositoryId вставляем ProdictId из VSIX проекта, созданного на шаге 5.

Создание шаблона проекта с ссылками на NuGet пакеты - 10

В WizardDatapackages вставляем пакеты, которые находятся в проекте WorkProjectpackages.config

Создание шаблона проекта с ссылками на NuGet пакеты - 11

Текст:

<WizardExtension>
    <Assembly>NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</Assembly>
    <FullClassName>NuGet.VisualStudio.TemplateWizard</FullClassName>
  </WizardExtension>
  <WizardData>
    <packages repository="extension" repositoryId="VSIXWorkProject.Ilya.7f9929e6-945f-4302-8e54-e19d45ab8ffa">
		<package id="Lucene.Net" version="3.0.3" targetFramework="net452" />
		<package id="SharpZipLib" version="0.86.0" targetFramework="net452" />
    </packages>
  </WizardData>

7. Если в Вашем Solution нет папки .nuget, данный пункт можете пропустить. В противном случае необходимо изменить файл WorkProject.csproj. Находим строки:

<Import Project="$(SolutionDir).nugetNuGet.targets" Condition="Exists('$(SolutionDir).nugetNuGet.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
    <PropertyGroup>
      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
    </PropertyGroup>
    <Error Condition="!Exists('$(SolutionDir).nugetNuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir).nugetNuGet.targets'))" />
  </Target>

Удаляем их, т.к. при создании проекта по нашему шаблону, в Solution не будет появляться папка .nuget.

8. Все распакованные файлы на шаге 6, снова архивируем в zip файл.

9. В VSIXWorkProject создаем папку Packages. Добавляем в нее файлы расширения nupkg тех пакетов, на которые ссылался исходный проект WorkProject.

Создание шаблона проекта с ссылками на NuGet пакеты - 12

Каждому из добавленных файлов, устанавливаем свойства:

  • BuildAction — Content
  • CopyToOutputDirectory — CopyAlways
  • IncludeInVsix — True

10. В VSIXWorpProject в файле source.extension.vsixmanifest в закладке Metadata изменяем описание.

Создание шаблона проекта с ссылками на NuGet пакеты - 13

11. В закладке Assets добавляем новый источник.
Тип – шаблон проекта, источник – файл, путь – указываем путь до zip файла, созданного на шаге 8.

Создание шаблона проекта с ссылками на NuGet пакеты - 14

В проект VSIXWorkProject добавился каталог ProjectTemplates с вложенным шаблоном нашего проекта.

Создание шаблона проекта с ссылками на NuGet пакеты - 15

12. Перестраиваем проект VSIXWorkProject. В окне Output видим путь до созданного vsix файла.

Создание шаблона проекта с ссылками на NuGet пакеты - 16

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

Создание шаблона проекта с ссылками на NuGet пакеты - 17

Надеюсь, что данная статья кому-то будет полезной. Конструктивная критика приветствуется.

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js