2012-11-07 13 views
10

Dla hostowanego przez Githuba open-source projektu C#, który jest również dostępny przez NuGet, w jaki sposób zorganizować źródło? W szczególności:Struktura katalogów dla opublikowanego projektu NuGet opublikowanego w githubie

  • czy plik .nuspec powinien znajdować się w repozytorium github?
  • czy plik .nuspec powinien znajdować się w tym samym folderze co plik .csproj?
  • Co powiesz na drzewo pakietów NuGet (pliki/lib,/content), ponieważ jest generowane, czy powinno być w git?

Moje myślenie jest to, że część Nuget jest oddzielony od hostingu github, jak w źródle projektu są dostępne, ale .nuspec nie jest, ponieważ publikowanie w Nuget nie jest to operacja open source per-se. Nikt nie chce, aby każdy z widelców budował i publikował nowy pakiet NuGet , tak aby pakiet Foo o otwartym kodzie źródłowym znalazł się w galerii jako "Rick's Foo" vs. "John's Foo" vs. "Alice's Foo" itd.

Ale z drugiej strony chcę, aby baza źródłowa Github działała jako kompleksowe repozytorium projektu, jeśli otworzę swój drugi laptop i skorzystam z niego, powinienem być w stanie zbudować/pakietować/pchać bez ponownego tworzenia cała infrastruktura NuGet od zera (tj. wpisz tylko mój klucz API, nic więcej).

Te dwa wymagania są ze sobą sprzeczne, Czy brakowało mi czegoś oczywistego?

Odpowiedz

7

chciałbym wykonać następujące czynności:

  • Commit plik .nuspec obok pliku
  • Dodaj nuget.config plik, który moves the packages folder poziom w górę .csproj.
  • Włącz package restore w roztworze i nie popełnić zawartość pakietu repozytorium Nuget
  • Utwórz plik msbuild (lub cokolwiek budowy pojazdu lubisz), która posiada:
    • się „zbudować” target który buduje źródło i tworzy pakiet nugetowy
    • cel "publikuj", który popycha pakiet NuGet do nuget.org i bierze twój klucz API jako parametr.

Osobiście zachować numer wersji pakietu Nuget w pliku .nuspec i ręcznie zaktualizować go kiedy zrobić „uwolnienie”. W ten sposób mogę oznaczyć dokładną wersję, którą przekazałem do kanału NuGet.

Przy tej instalacji kompilacja w Visual Studio nie tworzy pakietu NuGet, ale wszystkie narzędzia są dostępne w repozytorium, aby to zrobić.

Struktura folderu wygląda następująco:

.\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\ 

Bądź świadomy tego błędu w pakiecie funkcji Restore, ignoruje lokalizację pakietów skonfigurowane. http://nuget.codeplex.com/workitem/1990 ==> Naprawiono to w Nuget 2.7

0

Na nuget v2.8, po prostu trzeba zmodyfikować .gitignore i dodać:

packages/ 

To wykluczy folder Nuget packages od popełnienia. Po zbudowaniu nowego wyewidencjonowanego kodu źródłowego pakiety zostaną pobrane i odtworzone. Upewnij się, że ustawienie przywracania pakietów zostało włączone, ale domyślnie jest włączone domyślnie w wersji 2.8.

Powiązane problemy