Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
A partir de .NET 11, los paquetes NuGet son deterministas (o reproducibles) de forma predeterminada.
Esto significa que volver a generar el mismo paquete debe generar un archivo nupkg idéntico.
La única salvedad conocida es la fecha de modificación de los archivos. Los paquetes NuGet contienen varios archivos. La marca de tiempo de modificación del archivo en esos archivos se basa en la marca de tiempo de los archivos originales en el disco, lo que puede cambiar debido a varios motivos incluso si el contenido del archivo es idéntico.
Para que los paquetes NuGet sean idénticos a bits, puede establecer la DeterministicTimestamp propiedad en un valor conocido o fijo. Para reproducir un paquete existente, puede encontrar el valor DeterministicTimestamp usado por esa compilación y pasarlo a una nueva compilación que quiera hacer.
La variable de entorno conocida SOURCE_DATE_EPOCH se puede establecer para activar el mismo comportamiento que establecer DeterministicTimestamp.
Creación de paquetes deterministas
La creación en modo determinista es la predeterminada a partir de .NET 11.
Usando la línea de comandos:
dotnet pack
Si desea establecer la hora en función de la hora de confirmación de la confirmación más reciente de Git, puede usar algo parecido a esto:
export DeterministicTimestamp=$(git log -1 --pretty=%ct)
echo $DeterministicTimestamp
dotnet pack
Esto establecerá la variable de entorno denominada DeterministicTimestamp en la marca de tiempo de confirmación de Git, que msbuild usará automáticamente. La reproducción del paquete es una cuestión de volver a ejecutar el mismo conjunto de comandos.
Reproducir un paquete
Si desea reproducir un paquete idéntico a un bit, averigüe el DeterministicTimestamp valor usado en la primera compilación y después úselo de nuevo:
dotnet pack -p:DeterministicTimestamp=<value from previous build>
Deshabilitación de marcas de tiempo fijas
Si desea mantener las marcas de tiempo originales de modificación de archivos en los paquetes NuGet, puede establecer DeterministicTimestamp en false.
Usando la línea de comandos:
dotnet pack -p:DeterministicTimestamp=falseUso del archivo
.csproj:<PropertyGroup> <DeterministicTimestamp>false</DeterministicTimestamp> </PropertyGroup>