Dieser Artikel wurde maschinell übersetzt.

NuGet

Werden Sie NuGet-Autor

Clark Sell

In der November-Ausgabe, Phil Haack eingeführt NuGet, ein neues Paket Verwaltung Ökosystem für Entwickler (msdn.microsoft.com/magazine/hh547106).NuGet ist ein Projekt der Outercurve Stiftung, deren Ziel ist es zu einer erstklassigen Paketverwaltungssystem für die Microsoft.NET Framework.Das Projektteam besteht hauptsächlich aus Microsoft-Entwicklern in Zusammenarbeit mit der Entwickler-Community.Die Einführung von NuGet für unsere Entwicklung Ökosystem gibt.NET-Entwickler eine Art und Weise konsumieren, verfassen und veröffentlichen Pakete.

Auf den ersten Blick NuGet möglicherweise als Instrument für die open Source Community angezeigt, aber das ist nur ein Teil einer größeren Geschichte.NuGet wurde speziell nicht nur helfen, Verteilung von Paketen in der open-Source-Gemeinschaft, sondern auch um interne Pakete hinter der Firewall in einem Unternehmen zu liefern.Dies bedeutet, dass Sie NuGet verwenden können, auf vielfältige Weise zu installieren und Softwareupdatepakete von Microsoft und aus der open-Source-Gemeinschaft insgesamt, wie auch Ihre eigenen internen Server.

In diesem Artikel werde ich untersuchen, was es braucht, um ein NuGet Paketautor werden.Einbeziehung der NuGet in Ihren Entwicklungszyklus ist nicht kompliziert, und es ergibt erhebliche Awesomeness.Sobald Sie dies getan haben, werden Ihr Paket Verbrauch, Erstellung und Verteilung Probleme an eine ferne Erinnerung verblassen.Nächsten Monat werde ich Eintauchen in was es braucht, um Ihre eigenen Pakete hosten.

Ökosystem definiert

Bevor Sie beginnen auf der Reise zu einem Paketautor, lassen Sie uns kurz rekapitulieren des größeren Ökosystems.NuGet, aus der Sicht des Verteilers Paket, bestehend aus ein paar wesentliche Bestandteile, vor allem ein Befehlszeilendienstprogramm namens NuGet.exe (nuget.codeplex.com/releases/view/58939) und ein Server zum Hosten der Pakete, wie z. B. die Offi­Veröff NuGet Gallery, nuget.org.Wie Artikel des letzten Monats gezeigt hat, können Sie auf drei Arten mit NuGet interagieren: mit NuGet.exe unter Verwendung NuGet innerhalb von Visual Studio (die Paket-Manager-Konsole-Fenster (Ansicht | Andere Windows), und mit dem NuGet Paket-Explorer (npe.codeplex.com).Diese Dienstprogramme interagieren mit einem oder mehreren NuGet Repositories.Auf der anderen Seite nuget.org ist eine öffentliche Galerie können Sie zu speichern, zu hosten und zu veröffentlichen NuGet Pakete.Nuget.org basiert auf einem anderen open-Source Projekt bekannt als NuGetGallery, welche Sie an github.com/nuget/nugetgallery.Ich werde mehr über wie Sie Ihre eigene Galerie NuGet in der nächsten Ausgabe hosten sprechen.

Als Paketautor eines kann können Sie viele verschiedene Pakete auf einem NuGet Repository veröffentlichen, und jedes Paket mehrere Versionen.Nuget.org bietet seinen Kunden eine Chance, um Informationen über ein Paket, installieren Sie das Paket, an den Inhaber der Paket und lesen, was sollte seltenen Fällen Missbrauch melden.

Als der Paketautor können Sie steuern, z. B. Versionsnummern, Abhängigkeiten und wie Ihr Paket installiert wird.

Erste einrichten

Veröffentlichen Sie ein Paket, vorausgesetzt, dass Sie nuget.orgas dem Repository verwenden werden müssen Sie melden Sie sich für ein Konto in der NuGet Galerie.Immer ein Autor ist einfach: Durchstöbern Sie Contribute für die NuGet Galerie Abschnitt am nuget.org/contribute/index, und wählen Sie Get Started.Klicken Sie auf jetzt registrieren, um das Anmeldeformular aus und füllen Sie die erforderlichen Informationen zum Erstellen eines neuen Kontos.Nuget.org sendet eine E-mail mit einer URL, wo können Sie Ihre E-mail-Adresse und Konto bestätigen.

Nach der Bestätigung Ihres Kontos, können Sie auf der Website anmelden und erhalten Ihre Schlüssel, ein eindeutiges Token, die Sie zum nuget.org-Repository identifiziert und ermöglicht es Ihnen, verschiedene Paket-Verwaltungsaufgaben, wie z. B. ein Update zu Ihrem Paket drängen zu automatisieren.

In diesem Artikel werde ich zeigen, der NuGet.exe-Befehlszeile und die NuGet Paket-Explorer.Ein Punkt zu beachten: Sobald Sie die Befehlszeilenversion herunterladen, werden Sie wahrscheinlich Ihr System Path-Umgebungsvariable auf seine Lage aktualisieren möchten.Dies macht es einfach zu bedienen NuGet von überall auf Ihrem System.

Anatomie eines Pakets

Wie im letzten Artikel darauf hingewiesen, ein NuGet-Paket ist eine Konvention (Open Packaging Conventions, OPC) Containerdatei mit der.Nupkg-Datei-Erweiterung.Das Format für das Paket stützt sich auf Konventionen, mit eine manifest-Datei im Stammverzeichnis, bekannt als die Nuspec-Datei.Eine Beispielverzeichnisstruktur könnte zunächst wie folgt aussehen:

Root Folder
|   package.manifest
+---lib
+---content
+---tools

Wie Sie sehen können, gibt es drei Ordner im Stammverzeichnis:

  • Lib enthält alle Assemblys verwiesen werden
  • Inhalt enthält Dateien und Verzeichnisse, die zum Stamm des Projekts Ziel kopiert werden
  • Tools ist ein Ort für benutzerdefinierte Windows PowerShell-Skripts, die ausgeführt werden könnte, zur Installation Ihres Pakets oder jedes Mal, wenn das Target-Projekt in Visual Studio geladen wird

Von diesen ist der Lib Ordner den komplexesten. Es enthält Unterordner, die Rahmen Abhängigkeiten, entsprechen, wie hier gezeigt:

Root
| package.manifest
\---lib
    | MyFirstAssembly.dll
    \---net11
        | MySecondAssembly.dll
    \---net20
         | MySecondAssembly.dll
           \---sl
        | MySecondAssembly.dll
    \---netmf
         | MySecondAssembly.dll
+---content
+---tools

Wenn die Assembly in allen Versionen der Funktionsweise der.NET Framework (selten!), Sie müssen es nur im Stammverzeichnis des Ordners Lib Gehören wie bei MyFirstAssembly.dll.

Wie selten dieses Szenario ist gegeben, schreckt das NuGet-Team stark die Praxis. Es ist besser, Ihre Assembly einer bestimmten Framework-Version abhängig zu machen. Zu tun, fügen Sie einen Ordner für die Framework-Version und die richtige Version der Assembly in dem Ordner enthalten. Wie Sie, im Beispielordner sehen können, MySecondAssembly.dll hat eine andere Version für das.NET Framework 1.1, 2.0, Silverlight und.NET MicroFramework. Dadurch NuGet installiert das Paket ordnungsgemäß für die Zielframeworks.

Wenn Ihr Kunde das Paket installiert, wird NuGet die richtigen Assemblys basierend auf das Zielframework für das Projekt installiert. Im vorherigen Beispiel nehmen wir an Ihr Kunde versucht, Ihr Paket in ein Projekt zu installieren, die Version 4 von der.NET Framework. Weil es als Rahmen im Beispielordner Lib nicht aufgeführt ist, wird NuGet nehmen Sie die nächste Framework-Version verfügbar und verwenden, die. In diesem Beispiel würde es dauern, die Assemblys im Ordner net20 gefunden und diese verwenden.

Der Ordner "Content" ist ein Klon des das Zielprojekt Stammordner. Nichts gefunden in diesem Ordner werden kopiert werden wie in das Zielprojekt ist. Wenn Sie einige Bilder in das Ziel/Images Ordner kopieren wollten, müssten Sie diese Bilder in die /content/images Ordner enthalten.

Der Ordner Tools enthält alle Windows PowerShell-Skripts, die NuGet aufgerufen wird, während der Paketinstallation oder wenn das Projekt geöffnet ist, oder die später durch den Kunden verwendet werden. Sobald der Ordner in das Zielprojekt kopiert ist, wird es zu den "$ Env: Umgebungsvariable Path (Pfad) in der Visual Studio-Paket-Manager-Konsole.

NuGet hat eine integrierte Möglichkeit zur Automatisierung der Auffüllen Ihres Pakets — den Knoten Dateien. Der Knoten Dateien ist ein Weg, um explizit die Dateien auflisten kopiert in die Strukturen Ihrer Paket beim erstellen soll der. Nupkg-Datei. Dadurch wird die gesamte automatisieren Verpackung Prozess. Das File-Element ist einfach, Src, Ziel und Exclude-Attribute definiert. Wie Sie sich vorstellen können, definiert Src die Datei, die kopiert werden soll. Ziel definiert das Ziel, die, dem Sie wollen, dass es in kopiert; und ausschließen definiert, was Sie nicht kopierten wollen:

<files>
  <file src="bin\Debug\*.dll" target="lib" />
  <file src="bin\Debug\*.pdb" target="lib" />
  <file src="tools\**\*.*" exclude="*.log" />
</files>

Wenn Sie einen anderen Prozess Ihr Paket erstellt haben, können Sie den Knoten Dateien in ignorieren die. Nuspec-Datei.

Die. Nuspec Datei

Die Nuspec-Datei ist Ihr Paket-Manifest. Es ist eine einfache XML-Datei, die Ihre gesamte Paket definiert und Dinge wie Name, Nummer, Paketverweise enthält und so weiter. Um Ihre neue Manifest zu erstellen, hat NuGet.exe einen Befehl namens Spezifikation, die Sie als Ausgangspunkt verwenden können:

> NuGet.exe spec

Der spec-Befehl erstellt eine neue Datei namens Paket. Nuspec, eine gültige Datei, der Beispieldaten enthält. Abbildung 1 zeigt eine Beispieldatei erstellt von Spec.

Abbildung 1 Beispiel. Nuspec Datei

<?xml version="1.0"?>
  <package >
    <metadata>
      <id>Package</id>
      <version>1.0</version>
      <authors>csell5</authors>
      <owners>csell5</owners>
      <licenseUrl>http://LICENSE_URL_HERE_OR_DELETE_THIS_LINE</licenseUrl>
      <projectUrl>http://PROJECT_URL_HERE_OR_DELETE_THIS_LINE</projectUrl>
      <iconUrl>http://ICON_URL_HERE_OR_DELETE_THIS_LINE</iconUrl>
      <requireLicenseAcceptance>false</requireLicenseAcceptance>
      <description>Package description</description>
      <copyright>Copyright 2011</copyright>
      <tags>Tag1 Tag2</tags>
      <dependencies>
        <dependency id="SampleDependency" version="1.0" />
      </dependencies>
    </metadata>
  </package>

Nachdem die Datei erstellt wurde, ersetzen Sie die Beispielwerte. Für die meisten Werte tun Sie nur einmal, aber einige häufiger ändert. Beispielsweise sollte nicht die Id Ihres Pakets ändern, nachdem es erscheint, aber die Versionsnummer sich mit jedem Release ändert.

Sie können auch nuget.exe-Spezifikation für eine Visual Studio-Projektdatei (z. B. csproj oder vbproj) ausführen. In diesem Fall werden die Standardwerte bereits aufgefüllt basierend auf Metadaten in der Projektdatei. Hier sind einige der einfacheren Elemente der. Nuspec Datei:

  • ID eindeutiger Bezeichner für das Paket
  • Titel Menschen-freundliche Titel des Pakets
  • lange Beschreibung des Pakets
  • kurze Zusammenfassung des Pakets
  • LicenseURl einen Link zur Lizenz
  • Urheberrechte copyright Informationen für das Paket

Zur Zeit sind 28 verschiedene Elemente der obersten Ebene. Während die. Nuspec Datei ist ziemlich selbsterklärend, können Sie alle Details auf bit.ly/lgQ4J4. Jetzt werfen wir einen Blick auf einige der je komplexer. Nuspec Elemente.

Abhängigkeiten und Referenzen

Wir alle wissen, dass Verwalten von Abhängigkeiten schwierig sein kann, besonders wenn die Kette von Abhängigkeiten lang und ineinander wird. Lassen Sie uns haben sagen Sie PackageA gebaut. Ihr Paket geschieht mithilfe von PackageB, die auch in NuGet gefunden werden können. Als auch PackageB innerhalb Ihres Pakets, müssen Sie nur eine "Abhängigkeit" auf der Festplatte erstellen. Wenn jemand anfängt, um Ihr Paket zu installieren, überprüft NuGet zuerst Ihre Nuspec-Datei für den deren Abhängigkeiten. Anschließend befasst sich mit jeder Abhängigkeits-Paket und überprüft die Abhängigkeiten und so weiter, bis es ein Diagramm für jedes Paket muss es herunterladen baut, um alle Abhängigkeiten zu erfüllen. Es dann das gesamte Diagramm von Paketen downloadet und installiert sie. Dieses Feature von NuGet vereinfacht drastisch Paketerstellung und Installation.

Lassen Sie uns einige Paketabhängigkeiten definiert, wie in der Abhängigkeit Knoten hier dargestellt:

<package>
<metadata>
<dependencies>
<dependency id="SampleDependency" version="1.0" />
  <dependency id="AnotherSampleDependency" version="[1.2,2.5)" />
</dependencies>
</metadata>
</package>

Sie können so viele Abhängigkeiten wie Sie benötigen auflisten. In jedem Fall das Id-Attribut gibt das Paket, die Sie eine Abhängigkeit auf, und das Version-Attribut stellt der Versionsbereich, die Sie benötigen. Mein Beispiel hier zeigt eine Abhängigkeit des SampleDependency-Projekts gleich Version 1.0 oder höher.

Die NuGet Version den Quellbereich gibt Ihnen die Möglichkeit, den bestimmten Bereich von Versionen festzulegen, die Ihnen erlauben. Dies sieht etwa wie Version = "[1.2, 2.5)", wo die eckige Klammer Aufnahme definiert und die Klammer Ausgrenzung. In diesem Beispiel weist darauf hin, dass jedes Paket gleich oder größer als 1.2 und weniger als 2,5 zulässig ist. NuGet dauert die neueste Version in diesem Bereich gefunden. Für detaillierte Informationen über die Version den Quellbereich, besuchen Sie bitte bit.ly/qVXWxs.

In einigen Fällen müssen die Person, installiert das Paket zum Programmieren von Typen in einem.NET Framework-Assembly. Fügen Sie den entsprechenden Verweis hinzufügen, den FrameworkAssemblies-Knoten, um die. Nuspec-Datei, enthält die Liste der erforderlichen Framework-Assemblys, etwa so:

<package>
  <metadata>
    <frameworkAssemblies>
      <frameworkAssembly assemblyName="System.Something" targetFramework="net40" />
      <frameworkAssembly assemblyName="System.SomethingElse" />
    </frameworkAssemblies>
  </metadata>
</package>

Transformationen

Viele Projekte erfordern mehr als nur einen Assemblyverweis ordnungsgemäß funktioniert. Sie müssen möglicherweise eine .config-Datei ändern oder sogar einige Quellcode geändert — und NuGet unterstützt beide Szenarien. Ich werde auf config-Datei Transformationen hier konzentrieren. Weitere Informationen zu Transformationen finden Sie unter bit.ly/jqzry2.

Während der Installation des Pakets NuGet läuft NuGet die Umstellung auf Ihre neue config-Werte hinzufügen. Um dies zu ermöglichen, müssen Sie den Inhaltsordner Ihres Pakets eine Transformationsdatei hinzu. Dies ist eine gültige XML-Datei mit der Erweiterung "Transformation", deren Dateiname die Datei entspricht, die Transformation angewendet werden soll. Beispielsweise würden Sie zum Anwenden einer Transformations auf eine web.config-Datei eine Datei namens web.config.transformation enthalten.

Die Transformationsdatei sollte nur die Abschnitte der Konfigurationsdatei enthalten, die Ziel-Datei hinzugefügt werden soll. Lassen Sie uns sagen, dass Sie ein neues Modul des Kunden system.webServer-Abschnitt hinzufügen möchten. Fügen Sie einfach diesen Abschnitt in seiner Gesamtheit zu der Transformationsdatei, wie folgt:

<configuration>
  <system.webServer>
    <modules>
      <add name="NewModule" type="My.NewModule" />
    </modules>
  <system.webServer>
</configuration>

NuGet wird nicht vorhandene Abschnitte mit den Abschnitten ersetzen Sie hinzufügen, aber sie eher zusammengeführt. Also wenn Ihr Ziel bereits einen Modules-Abschnitt mit eigenen Modul aufgeführt wurde, würde das Ergebnis der beiden zusammenzuführenden Dateien, nach der Installation wie folgt aussehen:

<configuration>
  <system.webServer>
    <modules>
      <add name="ExistingModule" type="Their.ExistingModule" />
      <add name="NewModule" type="My.NewModule" />
    </modules>
  <system.webServer>
</configuration>

Wie Sie sehen können, wird Ihr Modul bis zum Ende des vorhandenen Stapels von Modulen hinzugefügt. Wenn ein Benutzer Ihr Paket zu entfernen wollten, nur Ihre Änderungen würden entfernt werden (vorausgesetzt, Sie haben keine Änderungen für die betreffenden Teile), den Rest verlassen, wie es in erster Linie war.

Versionskontrolle

Die Versionsverwaltung ist das Herzstück der alles, was wir bauen. Version des NuGet-Pakets bezieht sich auf das Paket und nicht unbedingt die Assemblys enthalten (obwohl es üblich ist, diese synchron zu halten). Sie definieren die Paket-Versionsnummer in der. Nuspec-Datei, mit einem Format N.N.N.N, wie folgt.

<package>
  <metadata>
    <version>1.2.3.4</version>
  </metadata>
</package>

Es gibt ein paar Eigenschaften in der. Nuspec-Datei, wo Sie ein Ersatztoken anstatt nur eine statische Zeichenfolge verwenden können. Das Version-Element ist eine davon. Statt definieren eine statische Zeichenfolge wie 1.2.3.4, können Sie also ein Token [$Version], einfügen, der später durch NuGet.exe ersetzt werden. Mit diesem Token vorhanden, die in der Assembly AssemblyVersionAttribute angegebene Version werden durchgeführt durch um die. Nuspec Datei:

<package>
  <metadata>
    <version>$version$</version>
  </metadata>
</package>

Dies ist eine gute Option, wenn Sie wollt zu aufhalten die Pakete und Version synchronisiert, obwohl es viele Gründe gibt, warum Sie nicht wählen können, dies zu tun.

Das Paket Verpackung

Wie bereits erwähnt, ein NuGet-Paket ist eine OPC-Datei mit einer. Nupkg-Datei-Erweiterung. Zum Erstellen eines Pakets über die Befehlszeile Sie rufen Sie einfach NuGet.exe mit den Pack-Befehl übergeben sie Ihre. Nuspec Datei:

> NuGet.exe Pack YourPackage.
nuspec

Wie können Sie mit Spec, Pack gegen Ihre Projektdatei sowie ausführen. NuGet baut ein komplettes NuGet-Paket (. Nupkg Datei) ausschließlich auf der Grundlage der Metadaten in Ihrer csproj oder vbproj-Datei gefunden. Wenn Sie bereits erstellt haben ein. Nuspec Datei, würde Pack verwenden. Nuspec Datei:

> NuGet.exe pack [path]\MyProject.csproj

Sie haben gerade erstellt Ihre erste NuGet Paket, herzlichen Glückwunsch!

Symbolunterstützung

Visual Studio verfügt über ein großartiges Feature, mit dem Entwickler Schritt durch Quellcode auf Nachfrage. NuGet unterstützt dies durch den Paket Autoren die Möglichkeit zum Erstellen und veröffentlichen ein Symbol Paket. Um ein Symbol-Paket erstellen, mithilfe der –symbols-Option beim Pack verwenden:

> NuGet.exe pack MyProject.
nuspec -symbols
> NuGet.exe pack MyProject.csproj –symbols

Pack generiert zwei. Nupkg Pakete, MyProject. Nupkg und MyProject.Symbols. Nupkg. Die .symbols. Nupkg kann später zu SymbolSource.org mit die Befehl NuGet.exe Push abgelegt werden. Weitere Informationen zum Erstellen von Symbol-Pakete mit NuGet finden Sie unter bit.ly/jqzry2.

Veröffentlichung in NuGet.org

Mit Ihrem Paket erstellt ist es jetzt Zeit, es zu drücken. Push ist den Befehl NuGet, um Ihr Paket auf dem Server veröffentlichen und es ist wie die meisten modernen Quelle Steuerung von Systemen verwendet. Anders als die Befehle, die ich bereits erwähnt habe, nimmt drücken eine Anzahl von Argumenten:

> NuGet.exe push <package path> [API key] [options]
  • Paketpfad den Pfad zu Ihrem Paket
    Beispiel c:\MyPackge\MyPackage.1.0. nupkg
  • API key Ihre einzigartige Zugriffstoken
    Beispiel: ABFC2E12-40B3-41A1-A7CC-8FC9AB3A71E0
    Optional, werden mithilfe des Befehls SetApiKey NuGet.exe festgelegt
  • -Quelle (Src) des Servers, wo das Paket wird.
    Beispiel: -Quelle http://packages. nuget.org/v1/
    Optional, es sei denn, Sie sind an einen alternativen Ort schieben
  • -CreateOnly (co) Paket Galerie drückt aber nicht veröffentlichen
    Optional, Standard = False

Der folgende Beispielbefehl schiebt das MyPackage-Paket an NuGet:

> NuGet.exe push MyPackage.1.0.
nupkg ABFC2E12-40B3-41A1-A7CC-8FC9AB3A71E0

Sie können auch NuGet Paket-Explorer verwenden, wie in gezeigt Abbildung 2.

Publishing with the NuGet Package ExplorerAbbildung 2 Publishing mit dem NuGet Paket-Explorer

Wenn Sie ein Symbol-Paket erstellt, würde automatisch NuGet finden es und drücken sie die Repositorys, nuget.org und symbolsource.org.Wenn der Zielcomputer so eingerichtet ist, symbolsource.org als Symbol Quelle verwenden, kann der Entwickler jetzt Schritt in Ihre Paketquelldateien auf Nachfrage aus innerhalb von Visual Studio.

Sie sind veröffentlicht!Ist dies Ihre zweite Version Ihres Pakets, werden diese Version jetzt die Standardversion.Wie in Artikel des letzten Monats, wenn jemand nach Paket-Updates sucht, wird Ihr Paket nun als eine mit einem Update aufgeführt.

Nachbereitung

Die Chancen stehen, dass Ihr Entwickler-Team hat einige Art erstellen und bereitstellen Prozess vorhanden.Wenn Sie wie ich sind, fangen Sie nun über Möglichkeiten zur Integration von NuGet in diesem Prozess zu denken.Klar könnte Sie alle Befehle, die ich, hier gezeigt habe in den Buildprozess einbinden, aber wenn Sie Team Foundation Server (TFS) bereits verwenden, gibt es eine einfachere Weise.

TFS-NuGetter (nugetter.codeplex.com) ist ein open-Source-Projekt, das den Build-Prozess für TFS 2010, erweitert durchführen aller erforderlichen Versionsverwaltung, Verpackung und Bereitstellung-Funktionen in einer anpassbaren und wiederholbare Weise, mit NuGet im Kern.Unabhängig von Ihrem Paket Ziel sparen TFS NuGetter Sie viel Zeit.

NuGet ist kein neues Konzept für unsere Industrie, sondern auch für die.NET-Entwickler kann es auch bahnbrechende scheinen.NuGet bietet einen dringend benötigten Paket Verwaltung, nützlich für alle von Garage Entwickler bis zu großen Unternehmen.Es gibt Ihnen nicht nur ein Ort, um Ihre Pakete zu veröffentlichen, sondern auch ein Ort für Kunden, Ihre Arbeit zu entdecken.Veröffentlichen Sie Ihre Pakete in NuGet und erhalten gefunden!

Finden Sie alle Verknüpfungen verwendet in diesem Artikel und mehr auf on.csell.net/BeANuGetAuthor.

Clark Sell arbeitet als senior Web Evangelist für Microsoft außerhalb von Chicago. Er Blogs auf csell.net, Podcasts bei DeveloperSmackdown.com und finden Sie auf Twitter bei twitter.com/csell5.

Dank der folgenden technischen Experten für die Überprüfung dieses Artikels: David Ebbo, Phil Haack, Mark Nichols und Brandon Satrom