2013-02-10 9 views
37

Niedawno zacząłem pakować pakiety nuget z moich kilku projektów. Najpierw zacząłem od aplikacji Eksplorator pakietów. Jest to dobre narzędzie, ale jest mniej przydatne, jeśli robisz ciągłą integrację. Następnie przyjrzałem się określeniu pliku szablonu nulli przekazywaniu zmieniających się danych, np. numer wersji, jako argumenty linii poleceń. Później zastanawiałem się, jak zdefiniować zależności pakietu nuget. Okazuje się, że nuget.exe robi to już na podstawie package.config, jeśli podasz csproj csproj. Co więcej, wydobywa istotne dane, takie jak autor, wersja, prawa autorskie bezpośrednio z informacji o montażu. W tej chwili brakuje mi możliwości określenia licenseUrl w linii poleceń. Ale chciałem, aby pytanie było bardziej ogólne. A więc pytam:Różnice między nuget-packing a csproj vs. nuspec

Jaki jest preferowany sposób pakowania pakietów nuget?

Odpowiedz

62

Oto mało znany fakt: można połączyć zarówno! Kieruj plik csproj i upewnij się, że istnieje plik Nuspec w tym samym katalogu o tej samej nazwie co plik csproj. NuGet połączy oba podczas tworzenia pakietu.

tak w skrócie celu <ProjectName>.csproj ewentualnie dodawać odpowiednią tokenized<ProjectName>.nuspec plik do wykorzystania jako dane metadata NuGet.exe.

To pozwala na zarządzanie lokalizacją wyjściową, zależnościami, wersją i innymi elementami, które można uzyskać z projektu.

+0

Xavier Cześć, dzięki za wskazanie tego :) Ja już znalazł [blogu] (http://blog.davidebbo.com/2011/04/easy-way-to-publish- nuget-packages-with.html), które również sugerują takie podejście. Czy jest to również opisane w książce, którą otrzymałem od ciebie na WarmCrocConf ?;) Świetna prezentacja btw !;) – Matthias

+0

Cześć Matthias, dziękuję! Jeśli się nie mylę, to jest wspomniane na stronie 71 :) –

+3

czy jest możliwe, aby uzyskać wersję z assemblyinfo ORAZ mieć nuspec? Chciałbym nuspec autora i releasenotes bitów, ale wygląda na to, że musiałbym obsłużyć tag wersji w nuspec oraz assemblyinfo –

14

W przypadku prostych paczek można bezpośrednio utworzyć paczki od .csproj lub .vbproj. Jednak w przypadku większej liczby pakietów, zwłaszcza gdy musisz pobrać niestandardowe pliki do swojego pakietu, musisz użyć .nuspec. Zwykle zaczynam od csproj i w razie potrzeby przechodzę do Nuspec. Zawsze można uzyskać nuspec za pomocą polecenia nuget spec na csproj.

https://docs.nuget.org/create/creating-and-publishing-a-package

Możesz określić którąkolwiek z właściwości, w tym licenseUrl pomocą parametru Properties do nuget pack

nuget pack -properties licenseUrl=http://blah 
9

Z plikiem .csproj for Visual Studio 2017, nie potrzebujesz pliku .nuspec. Możesz faktycznie dodać wartości bezpośrednio do twojego csproj, a on je odbierze.

Kliknij prawym przyciskiem myszy projekt w Visual Studio, Edit xxxxx.csproj. Notatnik też działa dobrze.

<Project Sdk="Microsoft.NET.Sdk"> 
    <PropertyGroup> 
    <Version>1.0.1</Version> 
    <authors>Subtracts</authors> 
    <TargetFrameworks>netstandard1.6;net452</TargetFrameworks> 
    <AssemblyName>Checkout.net</AssemblyName> 
    <PackageId>Checkout.net</PackageId> 

... 

</Project> 

p.s. Ponieważ nie mam wystarczającej reputacji do komentowania, pozostawiam odpowiedź, zamiast komentować odpowiedź Xaviera. :)

+0

Gdy chcesz edytować plik '.csproj' z Visual Studio, musisz wybrać _Unload Project_ przed opcją _Edit csproj_ będzie dostępny. – Chrono

+2

@Chrono To zależy od typu projektu, nie jest konieczne w przypadku projektów .NET Core i .NET Standard. – Stijn

+2

@Chrono @Stijn Nie jest to konieczne, gdy używasz nowego formatu csproj (zaczyna się od ''). Możesz użyć nowego formatu csproj z projektami ramowymi .net, w tym projektami WPF i WinForms. – cube45

1

W przypadku .NET Core od lutego 2018 konieczne będzie dostarczenie pliku .nuspec o więcej niż podstawowe właściwości pliku spec.

Polecenie dotnet pack nie będzie jednak używać pliku .nuspec, chyba że dodasz <NuspecFile>relative path to nuspec</NuspecFile> do pliku .

Zobacz https://github.com/dotnet/cli/issues/2170

Powiązane problemy