Как перенести пакеты nuget в другой проект простым переносом packages.config

Nuget очень удобный менеджер пакетов. Однако, когда необходимо подключить сразу множество пакетов или перенести (скопировать) все пакеты из одного проекта в другой - встает вопрос, как это сделать.

Для начала скачиваем файл syncreferece.psm1. Далее копируем файл packages.config в нужный проект. В моем случае это список пакетов для ASP.NET MVC 5 сайта. 

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Antlr" version="3.4.1.9004" targetFramework="net451" />
  <package id="bootstrap" version="3.0.0" targetFramework="net451" />
  <package id="CommonServiceLocator" version="1.3" targetFramework="net451" />
  <package id="EntityFramework" version="6.1.0" targetFramework="net451" />
  <package id="Microsoft.AspNet.Identity.Core" version="2.0.1" targetFramework="net451" />
  <package id="Microsoft.AspNet.Identity.Core.ru" version="2.0.1" targetFramework="net451" />
  <package id="Microsoft.AspNet.Identity.EntityFramework" version="2.0.1" targetFramework="net451" />
  <package id="Microsoft.AspNet.Identity.Owin" version="2.0.1" targetFramework="net451" />
  <package id="Microsoft.AspNet.Mvc" version="5.2.0" targetFramework="net451" />
  <package id="Microsoft.AspNet.Razor" version="3.2.0" targetFramework="net451" />
  <package id="Microsoft.AspNet.Web.Optimization" version="1.1.3" targetFramework="net451" />
  <package id="Microsoft.AspNet.WebApi" version="5.2.0" targetFramework="net451" />
  <package id="Microsoft.AspNet.WebApi.Client" version="5.2.0" targetFramework="net451" />
  <package id="Microsoft.AspNet.WebApi.Core" version="5.2.0" targetFramework="net451" />
  <package id="Microsoft.AspNet.WebApi.Owin" version="5.2.0" targetFramework="net451" />
  <package id="Microsoft.AspNet.WebApi.OwinSelfHost" version="5.2.0" targetFramework="net451" />
  <package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.0" targetFramework="net451" />
  <package id="Microsoft.AspNet.WebPages" version="3.2.0" targetFramework="net451" />
  <package id="Microsoft.Owin" version="2.1.0" targetFramework="net451" />
  <package id="Microsoft.Owin.Diagnostics" version="2.1.0" targetFramework="net451" />
  <package id="Microsoft.Owin.Host.HttpListener" version="2.1.0" targetFramework="net451" />
  <package id="Microsoft.Owin.Host.SystemWeb" version="2.1.0" targetFramework="net451" />
  <package id="Microsoft.Owin.Hosting" version="2.1.0" targetFramework="net451" />
  <package id="Microsoft.Owin.Security" version="2.1.0" targetFramework="net451" />
  <package id="Microsoft.Owin.Security.Cookies" version="2.1.0" targetFramework="net451" />
  <package id="Microsoft.Owin.Security.OAuth" version="2.1.0" targetFramework="net451" />
  <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net451" />
  <package id="Modernizr" version="2.6.2" targetFramework="net451" />
  <package id="Newtonsoft.Json" version="6.0.4" targetFramework="net451" />
  <package id="Owin" version="1.0" targetFramework="net451" />
  <package id="Oxozle.Utilities" version="1.1.2" targetFramework="net451" />
  <package id="Oxozle.Utilities.Web" version="1.1.2" targetFramework="net451" />
  <package id="structuremap" version="3.0.0.108" targetFramework="net451" />
  <package id="StructureMap.MVC5" version="3.0.4.125" targetFramework="net451" />
  <package id="structuremap.web" version="3.0.0.108" targetFramework="net451" />
  <package id="WebActivatorEx" version="2.0.5" targetFramework="net451" />
  <package id="WebGrease" version="1.5.2" targetFramework="net451" />
</packages>

Открываем консоль менеджера пакетов (Package Manager Console). Нажимаем кнопку Restore. Пакеты, которые есть в файле packages.config скачаются локально (но ссылки в проекте не добавятся).

nuget manager console

Импортируем скачанный файл как модуль в менеджер пакетов.

Import-Module "F:\Projects\!Code\SyncReferece.psm1"

И вызываем только что установленный модуль.

синхронизация пакетов nuget

Скрипт работает довольно долго. После выполнения получится проект с установленными ссылками из всех пакетов.

установленные ссылки

Код скрипта приведен ниже (источник).

function Sync-References([string]$PackageId) {
  get-project -all | %{
    $proj = $_ ;
    Write-Host $proj.name; 
    get-package -project $proj.name | ? { $_.id -match $PackageId } | % { 
      Write-Host $_.id; 
      uninstall-package -projectname $proj.name -id $_.id -version $_.version -RemoveDependencies -force ;
      install-package -projectname $proj.name -id $_.id -version $_.version
    }
  }
}

Export-ModuleMember Sync-References

Скачать файл syncreferece.psm1.

Комментарии

comments powered by Disqus