Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ab .NET 11 sind NuGet-Pakete standardmäßig deterministisch (oder reproduzierbar).
Dies bedeutet, dass beim Neuerstellen desselben Pakets eine identische nupkg-Datei generiert werden soll.
Die einzige bekannte Einschränkung ist die Änderungszeit für Dateien. NuGet-Pakete enthalten verschiedene Dateien. Der Zeitstempel der Dateiänderung auf diesen Dateien basiert auf dem Zeitstempel der ursprünglichen Dateien auf dem Datenträger, was sich aus mehreren Gründen ändern kann, auch wenn der Dateiinhalt andernfalls identisch ist.
Um Bit-identische NuGet-Pakete zu erstellen, können Sie die DeterministicTimestamp Eigenschaft auf einen bekannten/festen Wert festlegen. Um ein vorhandenes Paket zu reproduzieren, finden Sie den von diesem Build verwendeten DeterministicTimestamp-Wert und übergeben ihn an einen neuen Build, den Sie ausführen möchten.
Die bekannte SOURCE_DATE_EPOCH Umgebungsvariable kann so festgelegt werden, dass das gleiche Verhalten wie die Einstellung DeterministicTimestampaktiviert wird.
Erstellen von deterministischen Paketen
Das Erstellen im deterministischen Modus ist die Standardeinstellung beginnend mit .NET 11.
Verwenden Sie die Befehlszeile:
dotnet pack
Wenn Sie die Zeit basierend auf der Commit-Zeit des neuesten Git-Commits festlegen möchten, können Sie etwas wie folgt verwenden:
export DeterministicTimestamp=$(git log -1 --pretty=%ct)
echo $DeterministicTimestamp
dotnet pack
Dadurch wird die Umgebungsvariable "DeterministicTimestamp" auf den Git-Commit-Zeitstempel festgelegt, den msbuild automatisch verwendet. Die Wiedergabe des Pakets ist dann eine Frage der erneuten Ausführung desselben Befehlssatzes.
Reproduzieren eines Pakets
Wenn Sie ein bitidentisches Paket reproduzieren möchten, ermitteln Sie den beim ersten Build verwendeten DeterministicTimestampWert und verwenden Sie ihn dann erneut:
dotnet pack -p:DeterministicTimestamp=<value from previous build>
Deaktivieren von festen Zeitstempeln
Wenn Sie die ursprünglichen Zeitstempel für die Dateiänderung in Ihren NuGet-Paketen beibehalten möchten, können Sie auf .DeterministicTimestamp festlegenfalse.
Verwenden Sie die Befehlszeile:
dotnet pack -p:DeterministicTimestamp=falseVerwenden der
.csprojDatei:<PropertyGroup> <DeterministicTimestamp>false</DeterministicTimestamp> </PropertyGroup>