Используйте файл / скрипт.nuspec для автоматической установки пакетов nuget в новый проект

Я пытаюсь автоматизировать процесс установки пакетов nuget в новые проекты Visual Studio. Моя идея состоит в том, чтобы сократить время, необходимое для получения всех пакетов через менеджер пакетов nuget, указав пакеты в настраиваемом файле, который можно запустить для установки этих пакетов. Поэтому требуется только каждый новый проект, чтобы включить этот файл и запускать его каждый раз. Я очень новичок в nuget, и мне было поручено это задание без особых знаний. Мне сообщили, что маршрут.nuspec приведет меня в правильном направлении, поскольку он содержит метаданные о пакете. Хотя потребители не имеют прямого доступа к файлу.nuspec пакета, я не понимаю, как его можно использовать в рамках этой автоматизации. Я также слышал об автоматическом восстановлении пакетов, но поскольку это работает только для потерянных ссылок, я не понимаю, как это поможет в новых проектах, которые не обязательно ссылаются на что-либо, имеющее отношение к этому проекту.

2 ответа

Решение

Nuget уже поддерживает автоматизацию установки, и мы можем использовать командную строку nuget для достижения этой цели.

Каждый раз, когда вы добавляете пакет nuget в Visual Studio, он добавляется в файл с именем файл packages.config.

Например, будет выглядеть так

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Autofac" version="3.5.2" targetFramework="net451" />  
  <package id="Microsoft.Owin" version="3.1.0" targetFramework="net452" />
  <package id="Microsoft.Owin.Host.HttpListener" version="3.0.1" targetFramework="net451" />
  <package id="Microsoft.Owin.Hosting" version="3.1.0" targetFramework="net452" />
  <package id="Newtonsoft.Json" version="9.0.1" targetFramework="net451" />
  <package id="Owin" version="1.0" targetFramework="net451" /> 
  <package id="Topshelf" version="3.2.0" targetFramework="net451" />
</packages>

Каждый проект в вашем решении будет иметь файл packages.config. Вы можете перейти в родительскую папку всех проектов и просто запустить команду 'nuget restore', она получит все пакеты для вас.

Чтобы это работало, nuget.exe нужно загружать отдельно. Более подробную информацию о командной строке nuget можно найти здесь, а также ссылку на командную строку.

Редактировать:

Спасибо @Martin Ullrich за указание. Просто чтобы прояснить, вышеупомянутый метод не будет добавлять ссылки на файл проекта автоматически, он только получит пакеты в папку пакетов. В VS2017 есть поддержка, на которую @ Martin отвечает в ответах.

Надеюсь это поможет!

Обратите внимание, что вы не можете просто сбросить предварительно построенный packages.config файл в новый проект и ожидать, что он будет работать. При установке NuGet изменяет файл проекта (.csproj) включить ссылки и использование packages.config для загрузки отсутствующих файлов (и обновления / конфликта логики).

Использование VS 2017 (выпущены стабильные версии 15.2 и выше) и PackageReference стиль ссылок проектов, вы можете просто оставить Directory.Build.props файл в корневой каталог вашего решения, содержащий все необходимые вам проекты:

<Project>
  <ItemGroup>
    <PackageReference Include="Autofac" Version="3.5.2 />
    <PackageReference Include="Topshelf" Version="3.2.0 />
  </ItemGroup>
</Project>

Это добавит эти пакеты NuGet ко всем новым проектам в решении без необходимости .csproj файлы, которые будут изменены. (обратите внимание, что после добавления / редактирования этого файла вам необходимо закрыть и снова открыть решение. Это должно быть исправлено в предстоящем обновлении VS 2017 15.3 для редактирования файла).

Другие вопросы по тегам