Шаблон проекта VS с общедоступными пакетами NuGet

Документы NuGet описывают два возможных репозитория для файлов пакетов, определенных в шаблоне VS: 1) в VSIX или 2) в шаблоне. Также есть третий вариант реестра для «установленных» пакетов.

У нас есть настраиваемые шаблоны проектов, в которых будут использоваться общедоступные пакеты NuGet, еще не определенные в реестре. Это слишком раздует VSIX и/или шаблоны, чтобы включить файлы nupkg. Есть ли какая-то скрытая опция или трюк, позволяющий репозиторию вместо этого указывать на источник (и) пакета, определенный пользователем Visual Studio?


person Kim Johnson    schedule 07.09.2012    source источник


Ответы (1)


Поскольку я не нашел никакого простого «трюка», я написал собственный мастер проекта для этого обсуждения - http://nuget.codeplex.com/discussions/385955.

Исходники пакетов можно найти через PackageSourceProvider, который можно импортировать через MEF вместе с PackageInstaller. Затем вы создаете репозиторий из исходников пакета и передаете его установщику:

var factory = NuGet.PackageRepositoryFactory.Default;
var packageSources = PackageSourceProvider.LoadPackageSources().Select(s => s.Source).ToList();
var repository = new AggregateRepository(factory, packageSources, true);
NuGetPackageInstaller.InstallPackage(repository, project, package.Id, package.Version, false, false);

Прямой вызов InstallPackage также позволяет устанавливать зависимые пакеты и ссылки на сборки, которые отключены стандартным установщиком пакетов NuGet VSIX.

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

person Kim Johnson    schedule 12.09.2012