2017-05-11 3 views
0

Momentan evaluieren wir das NuGet-Tool für unser dot net-Projekt, das auf Framework 4.6.2 mit VS2017 aufbaut. Unser Ziel ist es, unsere gemeinsamen Bibliotheken in unserer Lösung als Referenz (wie Maven-Abhängigkeiten) zu beziehen, indem wir sie aus dem internen Nexus-Repository holen.Nuget MsBuild Integration - Snapshot und Release-Versionierung

Wir sind mit Maven-Konzepten wie Snapshot und Release vertraut. Das möchten wir mit dem NuGet-Tool erreichen. Kurze Suche im Internet sagt, dass dies in Nuget nicht unterstützt wird. Irgendwelche Hinweise, um es auf elegante Weise für dotnet-Projekte mit NuGet zu tun?

Jede Unterstützung in dieser Hinsicht wird geschätzt. Danke

Antwort

0

Mit dem neuen SDK-basierten Projektsystem sind NuGet und MSBuild integriert. Es gibt derzeit kein Projektvorlage für das in VS2017, aber Sie können eine .NET-Standard-Bibliothek erstellen und den <TargetFramework> Wert in der .csproj Datei ändern:

<TargetFramework>net462</TargetFramework> 

Dann müssen Sie eine Versionsnummer für Ihre Bibliothek definieren . Dies kann durch Setzen einer Version Eigenschaft ODER Einstellung einer Kombination aus VersionPrefix und VersionSuffix Eigenschaft, die während des Builds kombiniert werden, erfolgen. Für CI-Szenarien, möchten Sie in der Regel nur den VersionPrefix Wert in Ihrer .csproj Datei setzen, innerhalb eines <PropertyGroup> Element:

<VersionPrefix>1.2.3</VersionPrefix> 

Dies kann auch in einer Directory.Build.props Datei in der Lösung Verzeichnis haben einen einzigen Ort eingestellt werden die Eigenschaft für alle Projekte an einem Ort zu setzen:

<Project> 
    <PropertyGroup> 
    <VersionPrefix>1.2.3</VersionPrefix> 
    </PropertyGroup> 
</Project> 

Wenn durch CI Aufbau oder lokal, können Sie die VersionSuffix Eigenschaft über die Befehlszeile festgelegt, das Paket Befehl des dotnet cli bietet eine Komfortoption für diese:

dotnet pack -c Release --version-suffix SNAPSHOT 

Alternativ kann das gleiche Ergebnis erreicht werden, wenn die VS-Version von MSBuild über die Eingabeaufforderung Entwickler Befehl: (. VS 2017 15.2, .NET CLI 1,0 *)

msbuild /t:Pack /p:Configuration=Release /p:VersionSuffix=SNAPSHOT 

Derzeit gibt ist ein Fehler, wenn mehrere Projekte sich gegenseitig referenzieren - die Abhängigkeitsversionen werden nicht mit dem angegebenen Versionssuffix erzeugt. Es gibt eine Lösung: Führen Sie eine zusätzliche Wiederherstellung vor dem Verpacken die gleiche Eigenschaft mit:

dotnet msbuild "/t:Pack;Restore" /p:Configuration=Release /p:VersionSuffix=SNAPSHOT 

Auf Ihrem CI-System würde Sie in der Regel das Suffix mit einer Build-Nummer überschreiben eine Version wie 1.2.3-ci-20170102 zu erzeugen oder erzeugen nur SNAPSHOT/PREVIEW etc . Pakete.

Da msbuild Scripting ermöglicht, können Sie die Datei csproj auch so erweitern, dass das Versionssuffix automatisch gesetzt wird, wenn bestimmte Bedingungen erfüllt sind - z. Generieren Sie immer ein Suffix für Debug-Builds, damit Sie nicht versehentlich einen Debug-Build veröffentlichen.

<VersionSuffix Condition=" '$(Configuration)' != 'Release' ">SNAPSHOT</VersionSuffix> 
+0

Dank Martin. Wir sind nicht in der Lage, unsere poc wegen Nexus Repo Problem zu verlängern. Werde diese Lösung einmal sortiert versuchen. –