Структура каталогов для опубликованного проекта gigub, опубликованного в NuGet

Для github размещен открытый проект С#, который также доступен через NuGet, как организовать организацию источника? В частности:

  • должен ли файл .nuspec находиться в репозитории github?
  • должен ли файл .nuspec находиться в той же папке, что и файл .csproj?
  • как насчет дерева пакетов NuGet (файл/lib,/content), поскольку он создается, если он находится в git?

Мое мышление состоит в том, что часть NuGet отделена от хоста github, так как в источнике проекта доступны, но .nuspec нет, поскольку публикация в NuGet не является операцией с открытым исходным кодом. Никто не хочет, чтобы каждая вилка создавала и публиковала новый пакет NuGet, так что пакет Foo с открытым исходным кодом заканчивается в галерее как "Рик Фу" и "Джон Фу" против "Алиса Фу" и т.д.

Но, с другой стороны, я хочу, чтобы источник-источник github выступал в качестве универсального репозитория для проекта, если я открою свой другой ноутбук и вернусь оттуда, я смогу построить/пакет/push w/o воссоздать всю инфраструктуру NuGet с нуля (т.е. ввести только мой ключ API, не более того).

Эти два требования противоречат друг другу, я пропустил что-то очевидное?

Ответ 1

Я бы сделал следующее:

  • Зафиксировать файл .nuspec рядом с файлом .csproj
  • Добавьте файл nuget.config, который перемещает папку пакетов на уровень вверх.
  • Включить восстановление пакета в решении и НЕ зафиксировать содержимое репозитория пакетов NuGet
  • Создайте файл msbuild (или любой другой подходящий для вас автомобиль), который имеет:
    • цель сборки, которая создает источник и создает пакет nuget
    • "публикация" цели, которая подталкивает пакет NuGet к nuget.org и берет ключ API в качестве параметра.

Я лично поддерживаю номер версии пакета nuget в файле .nuspec и вручную обновляю его, когда выполняю "выпуск". Таким образом, я могу пометить точный релиз, который я нажал на канал NuGet.

С помощью этой установки сборка в Visual Studio не создает пакет NuGet, но все инструменты доступны в репозитории для этого.

Структура папки выглядит следующим образом:

   .\Docs\ ==> not in source repo
   .\Packages\ ==> not under source control
   .\Src\ ==> git repo here
   .\Src\MySolution.sln
   .\Src\.gitignore
   .\Src\MuRules.ruleset
   .\Src\build.proj ==> msbuild file to build everything.
   .\Src\MyProject\MyProject.csproj
   .\Src\MyProject\MyProject.nuspec
   .\Src\MyProject\nuget.config
   .\Build\ ==> not under source control
   .\Build\Debug\
   .\Build\Release\
   .\Build\Publish\

Помните об этой ошибке в функции восстановления пакета, она будет игнорировать настроенное вами расположение пакетов. http://nuget.codeplex.com/workitem/1990 == > Это исправлено в Nuget 2.7

Ответ 2

В nuget v2.8 мне просто нужно изменить .gitignore и добавить:

packages/

Это приведет к исключению из nuget packages папки. Когда вы создадите новый извлеченный исходный код, пакеты будут загружены и восстановлены. Убедитесь, что параметр восстановления пакета включен, но я думаю, что он был включен по умолчанию на версии 2.8.