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 ?? []);