Программная установка пакета NuGet

#nuget #nuget-package

#nuget #nuget-пакет

Вопрос:

Я пытаюсь установить простой nuget-пакет программно. Я создал пакет с файлом Site.css в нем. Таким образом, он находится в папке содержимого пакета.

Используя этот код

 public void TestInstall(string packageID, string physicalPath)
{
   var rep = PackageRepositoryFactory.Default.CreateRepository(new PackageSource("http://nuget.testserver.lan/nuget", "Default"));

   var packagemgr = new PackageManager(
                rep,
                new DefaultPackagePathResolver("http://nuget.testserver.lan/nuget"),
                    new PhysicalFileSystem(physicalPath)
                    );

   var package = rep.FindPackagesById(packageID).First();

   packagemgr.InstallPackage(package, false);
}
  

Допустим, я предоставляю PackageID = ‘Testpackage’ и physicalPath = ‘c:inetpubtest ‘ это создает:

c:InetpubtestTestpackage

и эта папка содержит:

папка содержимого с Site.css И тестовый пакет.0.1.nupkg

Не совсем то, что я пытаюсь сделать, но вроде того 🙂

Возможно ли изменить это так:

  • Я могу указать, куда он должен поместить пакет для его функциональности кэша

  • Заставить его размещать все, что находится в папке содержимого, по указанному пути?

  • Если пакет содержит библиотеки dll в папке lib, поместите их в каталог bin (создайте, если не существует)

Комментарии:

1. К сожалению, API direct PackageManager не настолько гибкий. Но вы можете взглянуть на то, что он делает внутренне, и изменить поведение.

Ответ №1:

Большая часть функциональности NuGet в настоящее время зависит от автоматизации Visual Studio, поэтому за пределами VS сложно добиться одинакового поведения.

Многие люди просили функциональность, которая потребовала бы изменений при использовании VS automation, поэтому я подозреваю, что это, вероятно, в дорожной карте, поскольку это значительная работа, я не думаю, что это будет скоро.

Не забывайте, что вы можете устанавливать пакеты в консоли Visual Package Manager, так что это всего лишь одна команда ( Install-Package MarkdownHelper ) и не требует перехода через пользовательский интерфейс.

Комментарии:

1. На самом деле это не так. Базовый API никоим образом не привязан к VS, просто у VS-клиента самая богатая реализация.

2. @dfowler Возможно, я неправильно сформулировал это. Я имел в виду, что некоторые функциональные возможности (например, добавление ссылок на проект и любых скриптов PS, которые управляют проектом / решением) будут работать только изнутри VS. Или, по крайней мере, так я понял?