2015-12-23 4 views
1

Я искал везде лучший способ автоматизировать создание пакета NuGet из проекта Visual Studio. This - это последний набор инструкций по настройке, но у меня возникают проблемы после этого из-за недавних изменений. Я ищу инструкции по установке, которые включают в себя:MSBuild NuGet Package

  • Какие NuGet packages мне нужно, чтобы включить
    • Ничего я нашел использовал эти что кажется странным для меня
    • Описания не очень полезны
  • Какие изменения мне необходимо внести в файл .csproj для автоматизации упаковки через MSBuild
    • Пожалуйста, включите инструкции для обоих .csproj и .nuspec файлов (если есть различия)
    • Бонус: Пакет конкретных файлов в .nuspec с символической заменой от .csproj

Я использую Visual Studio 2015 Было бы неплохо, если бы инструкции были совместимы с 2013 годом, но это не прерывание сделки.

+0

@AaronCarlson бонусной — на сегодняшний день, и, насколько я зная — невозможно. Существующие инструкции включают функцию восстановления пакетов, которая [не существует] (http://stackoverflow.com/a/31811461/1680677) в моей версии Visual Studio. Я пробовал загружать пакеты NuGet, но я могу найти _nothing_ о том, как их использовать. Я могу сделать все из командной строки, поэтому в настоящее время у меня есть событие после сборки, которое может это сделать, но оно самонадеянно. – ricksmt

+0

@AaronCarlson Да. Я хотел бы использовать целевые объекты MSBuild в пакетах NuGet для создания пакета NuGet проекта. – ricksmt

+0

Если вы находитесь в VS 2015, тогда создайте .xproj, можете сэкономить время, поскольку он напрямую генерирует пакет NuGet в качестве вывода. –

ответ

0

Для удобства использования, вот мой файл NuGet.targets. У вас есть одна и та же идея. https://gist.github.com/makhdumi/71e7701b87b69f3cde1d/revisions

Я использую это с помощью команды MSBuild, и она работает хорошо, поэтому я предполагаю, что внутри VS2015 должно быть хорошо. Либо запустить MSBuild с /p:BuildPackage=true или раскомментировать эту строку, чтобы всегда строить пакеты для проектов, которые имеют .nuspec файлы:

<!-- <BuildPackage>true</BuildPackage --> 

нажимать, вам потребуется несколько больше параметров:

/p:PublishPackage=true;PackageDestination="https://<your-nuget-site.com>";PackageDestinationApiKey="<your-api-key>" 

шаги

  1. Скопируйте папку .nuget из решения VS2013. Это должно содержать nuget.targets, nuget.exe и (возможно) nuget.config. Замените nuget.targets на один, указанный выше.

  2. Изменить каждый .csproj вы должны включить файл .targets (NuGet в VS2013 автоматически делает это):

    <Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />` 
    
+0

Я бы очень хотел использовать пакеты NuGet, поэтому мне не нужно хранить материал NuGet в исходном управлении. Можете ли вы обратиться к этому вопросу? – ricksmt

+0

Вам не нужен nuget.exe, поскольку материал в файле .targets будет загружать его автоматически. Вам нужно будет сохранить файл .targets, и я думаю, вы можете уйти с удалением .config, если вы не используете TFS или не имеете .tfignore вместо этого, чтобы игнорировать пакеты/папку. Что касается пакетов NuGet - в VS2015 им больше не нужно, теперь восстановление пакета выполняется до любых сборок, запуская 'nuget restore' (nuget.exe предположительно устанавливается с VS2015) – makhdumi

+0

Я также посмотрел новый VS2015 восстановление пакета, и это, по общему признанию, намного лучше. Вы все равно можете создавать/публиковать пакеты автоматически, просто запуская команды 'nuget.exe package' и' nuget.exe push', которые запускает файл .targets для вас. Я бы просто сохранил файл .targets, разделил все, что не связано с созданием пакетов/нажатием, и включил это во все ваши проекты (назовите его чем-то другим, кроме nuget.targets). – makhdumi