2013-02-10 3 views
37

Vor kurzem habe ich angefangen, nugget Pakete aus meinen verschiedenen Projekten zu packen. Zuerst habe ich mit der Anwendung Package Explorer begonnen. Es ist ein nettes Werkzeug, aber es ist weniger nützlich, wenn Sie kontinuierliche Integration machen. Dann schaute ich in die Angabe der Nuspec Vorlagendatei und übergibt wechselnde Daten, z. Versionsnummer als Befehlszeilenargumente. Später habe ich mich gefragt, wie man die nugget-Paketabhängigkeiten definiert. Es stellt sich heraus, dass nuget.exe dies bereits auf Basis der package.config wenn Sie einen csproj angeben. Darüber hinaus extrahiert es relevante Daten wie Autor, Version, Copyright direkt aus der Assembly-Info. Was ich gerade vermisse, ist die Möglichkeit, ein licenseUrl in der Kommandozeile anzugeben. Aber ich wollte, dass die Frage generischer wird. Und so frage ich:Unterschiede zwischen nuget-packing a csproj vs. nuspec

Was ist die bevorzugte Möglichkeit, nugget Pakete zu packen?

Antwort

62

Hier ist eine wenig bekannte Tatsache, einschließlich: Sie beide kombinieren! Targetieren Sie eine csproj-Datei und stellen Sie sicher, dass sich im selben Verzeichnis eine nuspec-Datei mit demselben Namen wie die csproj-Datei befindet. NuGet wird die beiden während der Paketerstellung zusammenführen.

Also kurz gesagt: Ziel <ProjectName>.csproj, fügen Sie gegebenenfalls eine entsprechende tokenized<ProjectName>.nuspec Datei als Metadaten von NuGet.exe verwendet werden.

Es erspart Ihnen die Verwaltung von Ausgabeort, Abhängigkeiten, Version und anderen Dingen, die vom Projekt abgeleitet werden können.

+0

Hallo Xavier, Dank für den Hinweis :) ich bereits diese [Blog-Post] gefunden (http://blog.davidebbo.com/2011/04/easy-way-to-publish- nugget-packages-with.html), die auch diesen Ansatz nahelegen. Ist das auch in dem Buch beschrieben, das ich von dir auf der WarmCrocConf bekommen habe?;) Tolle Präsentation übrigens !;) – Matthias

+0

Hallo Matthias, danke! Wenn ich mich nicht irre, wird es auf Seite 71 erwähnt :) –

+3

ist es möglich, die Version von der Assemblyinfo zu bekommen und eine nuspec zu haben? Ich möchte die Nuspec-Autor und Releasenotes Bits, aber es scheint dann würde ich mit der Version Tag in der Nuspec sowie die Assemblyinfo –

14

Für einfache Pakete können Sie direkt die Pakete aus .csproj oder .vbproj erstellen. Aber für weitere Pakete, vor allem, wenn Sie benutzerdefinierte Dateien in Ihr Paket ziehen müssen, müssen Sie .nuspec verwenden. Ich beginne normalerweise mit dem csproj und gehe nach Bedarf zu nupec. Sie können den nuspec immer mit dem Befehl nuget spec auf dem csproj erhalten.

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

Sie können alle Eigenschaften angeben licenseUrl mit dem Properties Parameter nuget pack

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

Mit einem .csproj für Visual Studio 2017 benötigen Sie keine .nuspec-Datei. Sie können die Werte direkt zu Ihrem csproj hinzufügen und es wird sie abholen.

Klicken Sie mit der rechten Maustaste auf das Projekt in Visual Studio, Edit xxxxx.csproj. Notizblock funktioniert auch gut.

<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. Da ich nicht genügend Reputation habe, um zu kommentieren, hinterlasse ich eine Antwort anstatt einen Kommentar zu Xaviers Antwort. :)

+0

Wenn Sie die '.csproj 'Datei von Visual Studio bearbeiten möchten, müssen Sie _Unload Project_ vor der Option _Edit csproj_ auswählen wird verfügbar. – Chrono

+2

@Chrono Das hängt vom Projekttyp ab, es ist nicht notwendig für .NET Core und .NET Standard Projekte. – Stijn

+2

@Chrono @Stijn Es ist nicht notwendig, wenn Sie das neue csproj-Format verwenden (d. H. Beginnt mit ''). Sie können das neue csproj-Format mit .net-Framework-Projekten verwenden, einschließlich WPF- und WinForms-Projekten. – cube45

1

Mit .NET Core ab Februar 2018 müssen Sie eine .nuspec Datei für mehr als die grundlegenden Eigenschaften der Spezifikationsdatei liefern.

Der Befehl dotnet pack verwendet jedoch nicht die Datei .nuspec, es sei denn, Sie fügen der Datei <NuspecFile>relative path to nuspec</NuspecFile> die Datei .csproj hinzu.

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