.NET 11부터 NuGet 패키지는 기본적으로 결정적이거나 재현 가능합니다.
즉, 동일한 패키지를 다시 빌드하면 동일한 nupkg 파일이 생성됩니다.
한 가지 알려진 주의 사항은 파일에 대한 수정 시간입니다. NuGet 패키지에는 다양한 파일이 포함되어 있습니다. 해당 파일의 파일 수정 타임스탬프는 디스크에 있는 원래 파일의 타임스탬프를 기반으로 하며, 파일 내용이 동일하지 않은 경우에도 여러 가지 이유로 인해 변경 될 수 있습니다.
비트 단위로 동일한 NuGet 패키지를 만들려면 DeterministicTimestamp 속성을 알려진 고정 값으로 설정할 수 있습니다. 기존 패키지를 재현하려면 해당 빌드에서 사용하는 DeterministicTimestamp 값을 찾아서 수행하려는 새 빌드에 전달할 수 있습니다.
잘 알려진 SOURCE_DATE_EPOCH 환경 변수는 설정 DeterministicTimestamp과 동일한 동작을 활성화하도록 설정할 수 있습니다.
결정적 패키지 빌드
결정적 모드에서 빌드하는 것은 .NET 11부터 시작하는 기본값입니다.
명령줄 사용:
dotnet pack
최신 Git 커밋의 커밋 시간을 기준으로 시간을 설정하려는 경우 다음과 같이 사용할 수 있습니다.
export DeterministicTimestamp=$(git log -1 --pretty=%ct)
echo $DeterministicTimestamp
dotnet pack
그러면 DeterministicTimestamp라는 환경 변수가 git 커밋 타임스탬프로 설정되며 msbuild는 자동으로 사용합니다. 그런 다음 패키지를 재현하는 것은 동일한 명령 집합을 다시 실행해야 합니다.
패키지 재현
비트 단위로 동일한 패키지를 재현하려면 첫 번째 빌드에서 사용된 DeterministicTimestamp 값이 무엇인지 확인한 다음, 이를 다시 사용하세요:
dotnet pack -p:DeterministicTimestamp=<value from previous build>
고정 타임스탬프 비활성화
NuGet 패키지에서 원본 파일의 수정 타임스탬프를 유지하려면 DeterministicTimestamp를 false로 설정할 수 있습니다.
명령줄 사용:
dotnet pack -p:DeterministicTimestamp=false.csproj파일 사용:<PropertyGroup> <DeterministicTimestamp>false</DeterministicTimestamp> </PropertyGroup>