2017-03-14 3 views
19

TLDR: Wo ist dotnet pack ziehen die Versionsinformationen, wenn es das Nugget-Paket für eine Baugruppe erstellt?Paketversion ist immer 1.0.0 mit dotnet pack

Ich habe eine Bibliothek, die ich von einem .NET 4.6.1-Projekt in ein .NET Core-Projekt mit project.json überging. Für mein CI während dieser Zeit (mit TFS 2015 vnext), würde ich meine Versionsnummer bekommen und die Versionsnummer in der Datei project.json durch die neue Version ersetzen. Der Befehl dotnet pack würde die Version problemlos auswählen und ein neues Paket mit der aktualisierten Versionsnummer erstellen.

Letzte Woche habe ich von TFS 2015 auf TFS 2017 aktualisiert. Es stellte sich heraus, dass project.json durch eine aktualisierte .csproj-Datei ersetzt wurde. Ich habe mein CI aktualisiert. Während meines CI - ich aktualisiere meine /Properties/AssemblyInfo.cs Datei und ersetze den AssemblyVersion Tag durch die Version für den aktuellen Build. Dann baue ich die Lösung - die gut funktioniert. Dann verpacke ich die Lösung.

Doch trotz der AssemblyVersion und AssemblyFileVersion wird in AssemblyInfo.cs auf die richtige Buildnummer gesetzt - dotnet pack noch produziert .nupkg Dateien, die *.1.0.0.nupkg sind.

Was fehlt mir?

Hier ist mein Pack-Befehl:

dotnet pack $projectFile -o $currentDirectory 
+0

Ist das nur ' value'? –

Antwort

13

Wenn Sie dotnet pack verwenden, die Version von der Projektdefinition (bisher project.json, jetzt *.csproj), nicht AssemblyInfo.cs gezogen wird. Ihr neuer Workflow wird also sehr ähnlich dem sein, was er mit project.json war.

Von der project.json to csproj migration docs können Sie die Eigenschaften VersionPrefix und VersionSuffix Eigenschaften verwenden.

Vorher:

{ 
    "version": "1.0.0-alpha-*" 
} 

Jetzt:

<PropertyGroup> 
    <VersionPrefix>1.0.0</VersionPrefix> 
    <VersionSuffix>alpha</VersionSuffix> 
</PropertyGroup> 

können Sie verwenden auch die einzelnen Version Eigenschaft, aber die docs warnen, dass diese "Version Einstellungen während des Verpackens außer Kraft setzen kann".

<PropertyGroup> 
    <Version>1.0.0-alpha</Version> 
</PropertyGroup> 
+1

Ich verwendete Powershell, um das .csproj als Teil des Builds neu zu schreiben, um das Versionspräfix und das Versionssuffix zu ersetzen. –

+1

@AlexanderMatusiak jede Chance, die Sie den Powershell-Code veröffentlichen könnten?danke – mcintyre321

+3

Um das hinzuzufügen, können Sie die VersionPrefix und VersionSuffix (oder nur die einzige Eigenschaft Version) in der Befehlszeile bereitstellen, indem Sie etwas wie "/ p:Version=1.0.0-alpha" zum Befehl dotnet pack hinzufügen. –

27

Noch besser wäre es, geben /p:Version=$(Build.BuildNumber) (TFS/VSTS) auf dem dotnet Pack Befehl, und es wird sie mit der angegebenen Version in dem nuget Paket bauen. Beispiel (nicht TFS-spezifisch):

dotnet pack .\src\example\example.csproj -o c:\published\example -c Release /p:Version=1.2.3 

Beispiel (TFS-spezifisch) < - nutzen wir dies für unsere TFS 2017 Verpackung eines Powershell-Skript Schritt verwendet wird.

dotnet pack $(Build.SourcesDirectory)\src\example\example.csproj -o $(Build.ArtifactStagingDirectory)\Pack -c Release /p:Version=$(Build.BuildNumber) 

Hinweis: Paketversionsversionen werden nicht aktualisiert.

+4

Für jeden, der damit zu kämpfen hat - stellen Sie sicher, dass Sie keine '' oder '' Werte in Ihrer '* .csproj' Datei haben. Andernfalls überschreiben diese, was auch immer Sie in Ihrer Befehlszeile angeben. – trailmax

+0

Danke Edward. Nach der Suche im Internet kam ich zum selben Schluss (ich möchte die Version über ci build setzen). Ich habe einen Standard im csproj hinzugefügt, damit ich feststellen kann, ob ein Entwickler auf seinem persönlichen PC gebaut wurde. Ich habe eine Bedingung in der csproj verwendet, um VersionSuffix nur zu setzen, wenn nicht definiert. Ich habe die Versionsdefinition NICHT überschrieben. Auf diese Weise hat die Version am Ende "private. $ USERNAME". Hier ist, wie alles zusammen in Build-Quelltext https://github.com/dotnet/sdk/blob/94a3f2856cb09e66ee7472820b4e26fb576b4686/src/Tasks/Microsoft.NET.Build.Tasks/build/Microsoft.NET.DefaultAssemblyInfo.targets geht – ripvlan

Verwandte Themen