diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 4c659736d..f060053b3 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -33,7 +33,7 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/src/Microsoft.OpenApi.YamlReader/Microsoft.OpenApi.YamlReader.csproj b/src/Microsoft.OpenApi.YamlReader/Microsoft.OpenApi.YamlReader.csproj index c4961cb10..335b8ca90 100644 --- a/src/Microsoft.OpenApi.YamlReader/Microsoft.OpenApi.YamlReader.csproj +++ b/src/Microsoft.OpenApi.YamlReader/Microsoft.OpenApi.YamlReader.csproj @@ -33,7 +33,7 @@ all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/src/Microsoft.OpenApi/Microsoft.OpenApi.csproj b/src/Microsoft.OpenApi/Microsoft.OpenApi.csproj index a6ea923a6..507f69e76 100644 --- a/src/Microsoft.OpenApi/Microsoft.OpenApi.csproj +++ b/src/Microsoft.OpenApi/Microsoft.OpenApi.csproj @@ -54,7 +54,7 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/src/Microsoft.OpenApi/Models/OpenApiDocument.cs b/src/Microsoft.OpenApi/Models/OpenApiDocument.cs index 96973a701..dc1c58bae 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiDocument.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiDocument.cs @@ -566,25 +566,20 @@ public void SetReferenceHostDocument() /// The hash value. public async Task GetHashCodeAsync(CancellationToken cancellationToken = default) { -#if NET7_OR_GREATER using var memoryStream = new MemoryStream(); using var streamWriter = new StreamWriter(memoryStream); await WriteDocumentAsync(streamWriter, cancellationToken).ConfigureAwait(false); +#if NET7_OR_GREATER memoryStream.Seek(0, SeekOrigin.Begin); var hash = await SHA512.HashDataAsync(memoryStream, cancellationToken).ConfigureAwait(false); #else using HashAlgorithm sha = SHA512.Create(); - using var cryptoStream = new CryptoStream(Stream.Null, sha, CryptoStreamMode.Write); - using var streamWriter = new StreamWriter(cryptoStream); - - await WriteDocumentAsync(streamWriter, cancellationToken).ConfigureAwait(false); - - cryptoStream.FlushFinalBlock(); - - var hash = sha.Hash; + var hash = memoryStream.TryGetBuffer(out ArraySegment buffer) && buffer.Array is byte[] array + ? sha.ComputeHash(array, buffer.Offset, buffer.Count) + : sha.ComputeHash(memoryStream.ToArray()); #endif return ConvertByteArrayToString(hash ?? []);