Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Från och med .NET 11 är NuGet-paket deterministiska (eller reproducerbara) som standard.
Det innebär att återskapa samma paket bör generera en identisk nupkg-fil.
Den enda kända varning är ändringstiden för filer. NuGet-paket innehåller olika filer. Tidsstämpeln för filändring på dessa filer baseras på tidsstämpeln för de ursprungliga filerna på disken, vilket kan ändras på grund av flera orsaker även om filinnehållet annars är identiskt.
Om du vill skapa lite identiska NuGet-paket kan du ange DeterministicTimestamp egenskapen till ett känt/fast värde. Om du vill återskapa ett befintligt paket kan du hitta värdet DeterministicTimestamp som används av den versionen och skicka det till en ny version som du vill göra.
Den välkända SOURCE_DATE_EPOCH miljövariabeln kan ställas in för att aktivera samma beteende som inställningen DeterministicTimestamp.
Skapa deterministiska paket
Att kompilera i deterministiskt läge är standard från och med .NET 11.
Använd kommandoraden:
dotnet pack
Om du vill ange tiden baserat på incheckningstiden för den senaste Git-incheckningen kan du använda något liknande:
export DeterministicTimestamp=$(git log -1 --pretty=%ct)
echo $DeterministicTimestamp
dotnet pack
Då anges miljövariabeln DeterministicTimestamp till tidsstämpeln git commit, som msbuild automatiskt använder. Att återskapa paketet handlar sedan om att köra samma kommandouppsättning igen.
Återskapa ett paket
Om du vill återskapa ett lite identiskt paket tar du reda på värdet DeterministicTimestamp som användes i den första versionen och använder det sedan igen:
dotnet pack -p:DeterministicTimestamp=<value from previous build>
Inaktivera fasta tidsstämplar
Om du vill behålla de ursprungliga tidsstämplarna för filändring i dina NuGet-paket kan du ange DeterministicTimestamp till false.
Använd kommandoraden:
dotnet pack -p:DeterministicTimestamp=falseAnvända filen
.csproj:<PropertyGroup> <DeterministicTimestamp>false</DeterministicTimestamp> </PropertyGroup>