Cake hangs when restoring certain signed NuGet packages. The longest I waited before killing was between 5 and 10 minutes. A repro is a .cake script with #tool WiX.Toolset.UnofficialFork. The latest version of that package, 3.11.1, is the first signed version.
I verified that the bug is present in https://dist.nuget.org/win-x86-commandline/v4.6.0/nuget.exe but not in https://dist.nuget.org/win-x86-commandline/v4.6.1/nuget.exe, running nuget.exe verify -signatures wix.toolset.unofficialfork.3.11.1.nupkg against each.
Cake currently bundles NuGet 4.6.0 assemblies, so it seems that updating its NuGet dependencies to 4.6.2 might resolve this problem.
/cc @gep13
@mholo65 this might interest you.
@jnm2 have you added anything to that other issue that I pointed you at?
@gep13 Our network is online and this does look like an already-fixed bug in an earlier version of NuGet. Do you think I should?
@jnm2 @gep13 You're talking about https://github.com/NuGet/Home/issues/7008? The offline part was online a guess of mine. Since I had this issue in our offline network but not in our online network. But Microsoft also failed to reproduce it, so it might be the same issue (and I can update the title to a more appropriate one)
@pascalberger yes, it is that issue. Initially I thought the two problems were related, but @jnm2 is using 4.6.2 (which after checking) is what you were running, and now his issue is fixed.
@pascalberger Your issue is with NuGet 4.6.2, where this particular bug is not present.
But mine issue was with NuGet 4.62
Lol, three-way race condition 馃槅
I think it's more likely that the bug that I'm seeing (fixed in 4.6.1) was https://github.com/NuGet/Home/issues/6643. See https://github.com/NuGet/NuGet.Client/compare/release-4.6.0-rtm...release-4.6.1-rtm.
:smile: We should look at updating NuGet to 4.7.x or 4.8.x with next Cake release. Need to sync with @aelij in order to get NuGet.PackageManagement.Netstandard updated to appropriate version also, since NuGet team haven鈥檛 yet pushed a netstandard version of that package.
@jnm2 so, just to confirm...
Your fix for this issue was what? What did you replace?
@gep13 My workaround was to replace #tool WiX.Toolset.UnofficialFork with #tool WiX.Toolset.UnofficialFork&version=3.11.0 since that version is not signed.
Ok, perfect. Just wanted to check.
Just checking, which version of NuGet is 0.29.0 using?
@jnm2 It looks like it's using version 4.6.0.
Thanks! We're okay waiting, but is there a contribution I could make to move to newer NuGet?
@jnm2 rebase https://github.com/aelij/NuGet.Client/tree/netstandard on top of 9245481f357ae542f92e6bc5e504fc898cfe5fc0 and submit a PR to @aelij. Once that鈥檚 pushed, update Cake to use 4.7.0
@mholo65 How would I handle these merge conflicts?
deleted by us: .teamcity.properties
both modified: scripts/cibuild/ConfigureVstsBuild.ps1
scripts/cibuild/ConfigureVstsBuild.ps1 (9 conflicts)
<#
.SYNOPSIS
Sets build variables during a VSTS build dynamically.
.DESCRIPTION
This script is used to dynamically set some build variables during VSTS build.
Specifically, this script reads the buildcounter.txt file in the $(DropRoot) to
determine the build number of the artifacts, also it sets the $(NupkgOutputDir)
based on whether $(BuildRTM) is true or false.
.PARAMETER BuildCounterFile
Path to the file in the drop root which stores the current build counter.
.PARAMETER BuildInfoJsonFile
Path to the buildInfo.json file that is generated for every build in the output folder.
.PARAMETER BuildRTM
True/false depending on whether nupkgs are being with or without the release labels.
#>
param
(
[Parameter(Mandatory=$True)]
[string]$BuildCounterFile,
[Parameter(Mandatory=$True)]
[string]$BuildInfoJsonFile,
[Parameter(Mandatory=$True)]
[string]$BuildRTM,
[switch]$SkipUpdateBuildNumber
)
Function Get-Version {
param(
[string]$ProductVersion,
[string]$build
)
Write-Host "Evaluating the new VSIX Version : ProductVersion $ProductVersion, build $build"
# Generate the new minor version: 4.0.0 => 40000, 4.11.5 => 41105.
# This assumes we only get to NuGet major/minor 99 at worst, otherwise the logic breaks.
#The final version for NuGet 4.0.0, build number 3128 would be 15.0.40000.3128
$finalVersion = "15.0.$((-join ($ProductVersion -split '\.' | %{ '{0:D2}' -f ($_ -as [int]) } )).TrimStart("0")).$build"
Write-Host "The new VSIX Version is: $finalVersion"
return $finalVersion
}
Function Update-VsixVersion {
param(
[string]$ReleaseProductVersion,
[string]$manifestName,
[int]$buildNumber
)
$vsixManifest = Join-Path $env:BUILD_REPOSITORY_LOCALPATH\src\NuGet.Clients\NuGet.VisualStudio.Client $manifestName
Write-Host "Updating the VSIX version in manifest $vsixManifest"
[xml]$xml = get-content $vsixManifest
$root = $xml.PackageManifest
# Reading the current version from the manifest
$oldVersion = $root.Metadata.Identity.Version
# Evaluate the new version
$newVersion = Get-Version $ReleaseProductVersion $buildNumber
Write-Host "Updating the VSIX version [$oldVersion] => [$newVersion]"
Write-Host "##vso[task.setvariable variable=VsixBuildNumber;]$newVersion"
# setting the revision to the new version
$root.Metadata.Identity.Version = "$newVersion"
$xml.Save($vsixManifest)
Write-Host "Updated the VSIX version [$oldVersion] => [$($root.Metadata.Identity.Version)]"
}
<<<<<<< HEAD
=======
Function Print-GitLog {
$mdFolder = [System.IO.Path]::Combine($env:SYSTEM_DEFAULTWORKINGDIRECTORY, 'MicroBuild', 'Output')
New-Item -ItemType Directory -Force -Path $mdFolder | Out-Null
$mdFile = Join-Path $mdFolder 'GitLog.md'
& git log -1 --pretty=format:' Author: %an%n Commit: [%H](https://github.com/NuGet/NuGet.Client/commit/%H)%n Message: %s' 2>&1 | Set-Content $mdFile
Write-Host "##vso[task.addattachment type=Distributedtask.Core.Summary;name=Associated changes;]$mdFile"
}
>>>>>>> :tada: Created 4.3.0 preview4 branch
$msbuildExe = 'C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\bin\msbuild.exe'
# Turn off strong name verification for common DevDiv public keys so that people can execute things against
# test-signed assemblies. One example would be running unit tests on a test-signed assembly during the build.
$regKey = "HKLM:SOFTWARE\Microsoft\StrongName\Verification\*,b03f5f7f11d50a3a"
$regKey32 = "HKLM:SOFTWARE\Wow6432Node\Microsoft\StrongName\Verification\*,b03f5f7f11d50a3a"
$regKeyNuGet = "HKLM:SOFTWARE\Microsoft\StrongName\Verification\*,31bf3856ad364e35"
$regKeyNuGet32 = "HKLM:SOFTWARE\Wow6432Node\Microsoft\StrongName\Verification\*,31bf3856ad364e35"
$has32bitNode = Test-Path "HKLM:SOFTWARE\Wow6432Node"
# update submodule NuGet.Build.Localization
$NuGetClientRoot = $env:BUILD_REPOSITORY_LOCALPATH
$Submodules = Join-Path $NuGetClientRoot submodules -Resolve
$NuGetLocalization = Join-Path $Submodules NuGet.Build.Localization -Resolve
$NuGetLocalizationRepoBranch = 'release-4.3.0-preview4'
$updateOpts = 'pull', 'origin', $NuGetLocalizationRepoBranch
Write-Host "git update NuGet.Build.Localization at $NuGetLocalization"
& git -C $NuGetLocalization $updateOpts 2>&1 | Write-Host
# Get the commit of the localization repository that will be used for this build.
$LocalizationRepoCommitHash = & git -C $NuGetLocalization log --pretty=format:'%H' -n 1
if (-not (Test-Path $regKey) -or ($has32bitNode -and -not (Test-Path $regKey32)))
{
Write-Host "Disabling StrongName Verification so that test-signed binaries can be used on the build machine"
New-Item -Path (Split-Path $regKey) -Name (Split-Path -Leaf $regKey) -Force | Out-Null
if ($has32bitNode)
{
New-Item -Path (Split-Path $regKey32) -Name (Split-Path -Leaf $regKey32) -Force | Out-Null
}
}
if (-not (Test-Path $regKeyNuGet) -or ($has32bitNode -and -not (Test-Path $regKeyNuGet32)))
{
Write-Host "Disabling StrongName Verification for NuGet public key so that test-signed binaries can be used on the build machine"
New-Item -Path (Split-Path $regKeyNuGet) -Name (Split-Path -Leaf $regKeyNuGet) -Force | Out-Null
if ($has32bitNode)
{
New-Item -Path (Split-Path $regKeyNuGet32) -Name (Split-Path -Leaf $regKeyNuGet32) -Force | Out-Null
}
}
if ($BuildRTM -eq 'true')
{
# Set the $(NupkgOutputDir) build variable in VSTS build
Write-Host "##vso[task.setvariable variable=NupkgOutputDir;]ReleaseNupkgs"
<<<<<<< HEAD
Write-Host "##vso[task.setvariable variable=VsixPublishDir;]VS15-RTM"
# Only for backward compatibility with orchestrated builds
if(-not $SkipUpdateBuildNumber)
=======
$numberOfTries = 0
do{
Write-Host "Waiting for buildinfo.json to be generated..."
$numberOfTries++
Start-Sleep -s 15
}
until ((Test-Path $BuildInfoJsonFile) -or ($numberOfTries -gt 50))
$json = (Get-Content $BuildInfoJsonFile -Raw) | ConvertFrom-Json
$currentBuild = [System.Decimal]::Parse($json.BuildNumber)
# Set the $(Revision) build variable in VSTS build
Write-Host "##vso[task.setvariable variable=Revision;]$currentBuild"
Write-Host "##vso[build.updatebuildnumber]$currentBuild"
$oldBuildOutputDirectory = Split-Path -Path $BuildInfoJsonFile
$branchDirectory = Split-Path -Path $oldBuildOutputDirectory
$newBuildOutputFolder = Join-Path $branchDirectory $currentBuild
if(Test-Path $newBuildOutputFolder)
>>>>>>> :tada: Created 4.3.0 preview4 branch
{
$numberOfTries = 0
do{
Write-Host "Waiting for buildinfo.json to be generated..."
$numberOfTries++
Start-Sleep -s 15
}
until ((Test-Path $BuildInfoJsonFile) -or ($numberOfTries -gt 50))
$json = (Get-Content $BuildInfoJsonFile -Raw) | ConvertFrom-Json
$currentBuild = [System.Decimal]::Parse($json.BuildNumber)
# Set the $(Revision) build variable in VSTS build
Write-Host "##vso[task.setvariable variable=Revision;]$currentBuild"
Write-Host "##vso[build.updatebuildnumber]$currentBuild"
$oldBuildOutputDirectory = Split-Path -Path $BuildInfoJsonFile
$branchDirectory = Split-Path -Path $oldBuildOutputDirectory
$newBuildOutputFolder = Join-Path $branchDirectory $currentBuild
if(Test-Path $newBuildOutputFolder)
{
Move-Item -Path $BuildInfoJsonFile -Destination $newBuildOutputFolder
Remove-Item -Path $oldBuildOutputDirectory -Force
}
else
{
Rename-Item $oldBuildOutputDirectory $currentBuild
}
}
}
else
{
# Only for backward compatibility with orchestrated builds
if(-not $SkipUpdateBuildNumber)
{
$revision = Get-Content $BuildCounterFile
$newBuildCounter = [System.Decimal]::Parse($revision)
$newBuildCounter++
Set-Content $BuildCounterFile $newBuildCounter
# Set the $(Revision) build variable in VSTS build
Write-Host "##vso[task.setvariable variable=Revision;]$newBuildCounter"
Write-Host "##vso[build.updatebuildnumber]$newBuildCounter"
Write-Host "##vso[task.setvariable variable=BuildNumber;isOutput=true]$newBuildCounter"
}
else
{
$newBuildCounter = $env:BUILD_BUILDNUMBER
}
<<<<<<< HEAD
$VsTargetBranch = & $msbuildExe $env:BUILD_REPOSITORY_LOCALPATH\build\config.props /v:m /nologo /t:GetVsTargetBranch
$CliTargetBranch = & $msbuildExe $env:BUILD_REPOSITORY_LOCALPATH\build\config.props /v:m /nologo /t:GetCliTargetBranch
$SdkTargetBranch = & $msbuildExe $env:BUILD_REPOSITORY_LOCALPATH\build\config.props /v:m /nologo /t:GetSdkTargetBranch
Write-Host $VsTargetBranch
=======
}
else
{
$revision = Get-Content $BuildCounterFile
$newBuildCounter = [System.Decimal]::Parse($revision)
$newBuildCounter++
Set-Content $BuildCounterFile $newBuildCounter
# Set the $(Revision) build variable in VSTS build
Write-Host "##vso[task.setvariable variable=Revision;]$newBuildCounter"
Write-Host "##vso[build.updatebuildnumber]$newBuildCounter"
>>>>>>> :tada: Created 4.3.0 preview4 branch
$jsonRepresentation = @{
BuildNumber = $newBuildCounter
CommitHash = $env:BUILD_SOURCEVERSION
BuildBranch = $env:BUILD_SOURCEBRANCHNAME
LocalizationRepositoryBranch = $NuGetLocalizationRepoBranch
LocalizationRepositoryCommitHash = $LocalizationRepoCommitHash
<<<<<<< HEAD
VsTargetBranch = $VsTargetBranch.Trim()
CliTargetBranch = $CliTargetBranch.Trim()
SdkTargetBranch = $SdkTargetBranch.Trim()
}
=======
}
>>>>>>> :tada: Created 4.3.0 preview4 branch
New-Item $BuildInfoJsonFile -Force
$jsonRepresentation | ConvertTo-Json | Set-Content $BuildInfoJsonFile
$productVersion = & $msbuildExe $env:BUILD_REPOSITORY_LOCALPATH\build\config.props /v:m /nologo /t:GetSemanticVersion
if (-not $?)
{
Write-Error "Failed to get product version."
exit 1
}
Update-VsixVersion -manifestName source.extension.vs15.vsixmanifest -ReleaseProductVersion $productVersion -buildNumber $newBuildCounter
}
@jnm2 oh, did I say rebase :smile:, try a merge instead :smile:
@mholo65 Someone with domain knowledge is going to have to do this, I think. 馃槅
deleted by them: .teamcity.properties
both modified: build/config.props
both modified: build/vsts_build.yaml
both modified: scripts/cibuild/ConfigureVstsBuild.ps1
both modified: scripts/utils/InsertNuGetIntoSdkAndCli.ps1
both modified: scripts/utils/PostGitCommitStatus.ps1
both modified: scripts/utils/TagNuGetClientGitRepostoryOnRelease.ps1
both modified: src/NuGet.Clients/NuGet.MSSigning.Extensions/MSSignCommand.cs
both modified: src/NuGet.Clients/NuGet.PackageManagement.PowerShellCmdlets/Cmdlets/UpdatePackageCommand.cs
both modified: src/NuGet.Clients/NuGet.PackageManagement.VisualStudio/IDE/VSSolutionManager.cs
both modified: src/NuGet.Clients/NuGet.PackageManagement.VisualStudio/Services/NuGetLockService.cs
both modified: src/NuGet.Clients/NuGet.PackageManagement.VisualStudio/Telemetry/ProjectTelemetryEvent.cs
added by us: src/NuGet.Clients/NuGet.PackageManagement.VisualStudio/Telemetry/VSTelemetryServiceUtility.cs
both modified: src/NuGet.Clients/NuGet.SolutionRestoreManager/SolutionRestoreJob.cs
both modified: src/NuGet.Core/NuGet.Build.Tasks.Pack/NuGet.Build.Tasks.Pack.targets
both modified: src/NuGet.Core/NuGet.Commands/RestoreCommand/RequestFactory/DependencyGraphSpecRequestProvider.cs
both modified: src/NuGet.Core/NuGet.Commands/RestoreCommand/RestoreCommand.cs
both modified: src/NuGet.Core/NuGet.Commands/RestoreCommand/RestoreRequest.cs
both modified: src/NuGet.Core/NuGet.Commands/SignCommand/CertificateProvider.cs
both modified: src/NuGet.Core/NuGet.Commands/SignCommand/SignCommandRunner.cs
both modified: src/NuGet.Core/NuGet.Commands/Strings.resx
both modified: src/NuGet.Core/NuGet.Commands/VerifyCommand/VerifyCommandRunner.cs
both modified: src/NuGet.Core/NuGet.Common/Errors/NuGetLogCode.cs
both modified: src/NuGet.Core/NuGet.PackageManagement/NuGet.PackageManagement.csproj
both modified: src/NuGet.Core/NuGet.PackageManagement/PackagePreFetcherResult.cs
both added: src/NuGet.Core/NuGet.PackageManagement/Telemetry/ActionEventBase.cs
both modified: src/NuGet.Core/NuGet.Packaging/PackageArchiveReader.cs
both modified: src/NuGet.Core/NuGet.Packaging/PackageExtractor.cs
both modified: src/NuGet.Core/NuGet.Packaging/PackageFolderReader.cs
both modified: src/NuGet.Core/NuGet.Packaging/PackageReaderBase.cs
both modified: src/NuGet.Core/NuGet.Packaging/Signing/Archive/SignedPackageArchiveIOUtility.cs
both modified: src/NuGet.Core/NuGet.Packaging/Signing/Archive/SignedPackageArchiveUtility.cs
both modified: src/NuGet.Core/NuGet.Packaging/Signing/Authoring/ITimestampProvider.cs
both modified: src/NuGet.Core/NuGet.Packaging/Signing/Authoring/SignPackageRequest.cs
deleted by them: src/NuGet.Core/NuGet.Packaging/Signing/Authoring/Signer.cs
both modified: src/NuGet.Core/NuGet.Packaging/Signing/Authoring/X509SignatureProvider.cs
both added: src/NuGet.Core/NuGet.Packaging/Signing/DerEncoding/DerGeneralizedTime.cs
both modified: src/NuGet.Core/NuGet.Packaging/Signing/Native/NativeCms.cs
both modified: src/NuGet.Core/NuGet.Packaging/Signing/Oids.cs
both modified: src/NuGet.Core/NuGet.Packaging/Signing/Package/ISignedPackageReader.cs
both modified: src/NuGet.Core/NuGet.Packaging/Signing/Package/SignedPackageArchive.cs
both modified: src/NuGet.Core/NuGet.Packaging/Signing/SignatureVerificationProviderFactory.cs
both modified: src/NuGet.Core/NuGet.Packaging/Signing/Signatures/Signature.cs
both modified: src/NuGet.Core/NuGet.Packaging/Signing/Timestamp/Rfc3161TimestampProvider.cs
both modified: src/NuGet.Core/NuGet.Packaging/Signing/Timestamp/Timestamp.cs
both modified: src/NuGet.Core/NuGet.Packaging/Signing/Timestamp/TimestampRequest.cs
both added: src/NuGet.Core/NuGet.Packaging/Signing/Utility/AttributeUtility.cs
both added: src/NuGet.Core/NuGet.Packaging/Signing/Utility/CertificateChainUtility.cs
both added: src/NuGet.Core/NuGet.Packaging/Signing/Utility/CertificateUtility.cs
both added: src/NuGet.Core/NuGet.Packaging/Signing/Utility/SignatureUtility.cs
both added: src/NuGet.Core/NuGet.Packaging/Signing/Utility/SigningUtility.cs
both added: src/NuGet.Core/NuGet.Packaging/Signing/Utility/VerificationUtility.cs
both added: src/NuGet.Core/NuGet.Packaging/Signing/Verification/AllowListVerificationProvider.cs
both added: src/NuGet.Core/NuGet.Packaging/Signing/Verification/CertificateHashAllowListEntry.cs
both modified: src/NuGet.Core/NuGet.Packaging/Signing/Verification/IPackageSignatureVerifier.cs
both modified: src/NuGet.Core/NuGet.Packaging/Signing/Verification/IntegrityVerificationProvider.cs
both modified: src/NuGet.Core/NuGet.Packaging/Signing/Verification/PackageSignatureVerifier.cs
both modified: src/NuGet.Core/NuGet.Packaging/Signing/Verification/SignatureTrustAndValidityVerificationProvider.cs
both modified: src/NuGet.Core/NuGet.Packaging/Signing/Verification/SignedPackageVerifierSettings.cs
both added: src/NuGet.Core/NuGet.Packaging/Signing/Verification/VerificationAllowListEntry.cs
both added: src/NuGet.Core/NuGet.Packaging/Signing/Verification/VerificationTarget.cs
both modified: src/NuGet.Core/NuGet.Packaging/Strings.Designer.cs
both modified: src/NuGet.Core/NuGet.Packaging/Strings.resx
both added: src/NuGet.Core/NuGet.Packaging/Telemetry/PackageExtractionTelemetryEvent.cs
both modified: src/NuGet.Core/NuGet.ProjectModel/ProjectRestoreMetadata.cs
both modified: src/NuGet.Core/NuGet.ProjectModel/TargetFrameworkInformation.cs
both modified: src/NuGet.Core/NuGet.Protocol/LegacyFeed/V2FeedParser.cs
both modified: src/NuGet.Core/NuGet.Protocol/Plugins/PluginPackageReader.cs
both modified: src/NuGet.Core/NuGet.Protocol/Utility/OfflineFeedUtility.cs
both modified: test/NuGet.Clients.FuncTests/NuGet.CommandLine.FuncTest/Caching/CachingTestContext.cs
both modified: test/NuGet.Clients.FuncTests/NuGet.CommandLine.FuncTest/Commands/SignCommandTests.cs
both modified: test/NuGet.Clients.FuncTests/NuGet.CommandLine.FuncTest/Commands/VerifyCommandTests.cs
both modified: test/NuGet.Clients.Tests/NuGet.CommandLine.Test/RestoreNETCoreTest.cs
both modified: test/NuGet.Clients.Tests/NuGet.PackageManagement.VisualStudio.Test/Services/NuGetLockServiceTests.cs
both modified: test/NuGet.Clients.Tests/NuGet.PackageManagement.VisualStudio.Test/Telemetry/NuGetTelemetryServiceTests.cs
deleted by them: test/NuGet.Core.FuncTests/Dotnet.Integration.Test/MsbuilldIntegrationTestFixture.cs
both modified: test/NuGet.Core.FuncTests/NuGet.Packaging.FuncTest/NuGet.Packaging.FuncTest.csproj
both added: test/NuGet.Core.FuncTests/NuGet.Packaging.FuncTest/SigningTests/AllowListVerificationProviderTests.cs
both modified: test/NuGet.Core.FuncTests/NuGet.Packaging.FuncTest/SigningTests/IntegrityVerificationProviderTests.cs
both modified: test/NuGet.Core.FuncTests/NuGet.Packaging.FuncTest/SigningTests/SignatureTests.cs
both modified: test/NuGet.Core.FuncTests/NuGet.Packaging.FuncTest/SigningTests/SignatureTrustAndValidityVerificationProviderTests.cs
both modified: test/NuGet.Core.FuncTests/NuGet.Packaging.FuncTest/SigningTests/SignedPackageIntegrityVerificationTests.cs
deleted by them: test/NuGet.Core.FuncTests/NuGet.Packaging.FuncTest/SigningTests/SignerTests.cs
both modified: test/NuGet.Core.FuncTests/NuGet.Packaging.FuncTest/SigningTests/SigningTestFixture.cs
both added: test/NuGet.Core.FuncTests/NuGet.Packaging.FuncTest/SigningTests/SigningUtilityTests.cs
both modified: test/NuGet.Core.FuncTests/NuGet.Packaging.FuncTest/SigningTests/TimestampProviderTests.cs
both modified: test/NuGet.Core.Tests/NuGet.Commands.Test/RestoreCommandTests.cs
both added: test/NuGet.Core.Tests/NuGet.Commands.Test/SignCommandRunnerTests.cs
both added: test/NuGet.Core.Tests/NuGet.Common.Test/TelemetryTest.cs
both modified: test/NuGet.Core.Tests/NuGet.Packaging.Test/NuGet.Packaging.Test.csproj
both modified: test/NuGet.Core.Tests/NuGet.Packaging.Test/PackageExtractorTests.cs
both added: test/NuGet.Core.Tests/NuGet.Packaging.Test/SigningTests/AttributeUtilityTests.cs
both added: test/NuGet.Core.Tests/NuGet.Packaging.Test/SigningTests/CertificateChainUtilityTests.cs
both added: test/NuGet.Core.Tests/NuGet.Packaging.Test/SigningTests/CertificateUtilityTests.cs
both added: test/NuGet.Core.Tests/NuGet.Packaging.Test/SigningTests/DerGeneralizedTimeTests.cs
both modified: test/NuGet.Core.Tests/NuGet.Packaging.Test/SigningTests/SignTestUtility.cs
both added: test/NuGet.Core.Tests/NuGet.Packaging.Test/SigningTests/SignatureUtilityTests.cs
both modified: test/NuGet.Core.Tests/NuGet.Packaging.Test/SigningTests/SignedPackageArchiveIOUtilityTests.cs
both modified: test/NuGet.Core.Tests/NuGet.Packaging.Test/SigningTests/SignedPackageArchiveUtilityTests.cs
deleted by them: test/NuGet.Core.Tests/NuGet.Packaging.Test/SigningTests/SignerTests.cs
both modified: test/NuGet.Core.Tests/NuGet.Packaging.Test/SigningTests/SigningUtilityTests.cs
both modified: test/NuGet.Core.Tests/NuGet.Protocol.Tests/DownloadResourceResultTests.cs
both modified: test/TestUtilities/Test.Utility/GlobalFolderUtility.cs
both added: test/TestUtilities/Test.Utility/Signing/CertificateAuthority.cs
both added: test/TestUtilities/Test.Utility/Signing/CertificateUtilities.cs
both added: test/TestUtilities/Test.Utility/Signing/IssueCertificateOptions.cs
both added: test/TestUtilities/Test.Utility/Signing/OcspResponder.cs
both modified: test/TestUtilities/Test.Utility/Signing/SignedArchiveTestUtility.cs
both modified: test/TestUtilities/Test.Utility/Signing/SigningTestUtility.cs
both added: test/TestUtilities/Test.Utility/Signing/TimestampService.cs
both modified: test/TestUtilities/Test.Utility/Signing/TrustedTestCert.cs
both modified: test/TestUtilities/Test.Utility/SimpleTestSetup/SimpleTestPackageContext.cs
both modified: test/TestUtilities/Test.Utility/SimpleTestSetup/SimpleTestPackageUtility.cs
both modified: test/TestUtilities/Test.Utility/Test.Utility.csproj
@jnm2, np. I can take a look tonight!
@mholo65 I've added you as a collaborator on the repo and as an owner on NuGet, feel free to push any change :)
@aelij thank you very much!
Most helpful comment
Lol, three-way race condition 馃槅