@@ -524,20 +524,37 @@ public void SetReferenceHostDocument()
524524 /// <returns>The hash value.</returns>
525525 public async Task < string > GetHashCodeAsync ( CancellationToken cancellationToken = default )
526526 {
527+ byte [ ] ? hash ;
528+
529+ #if NET
530+ using var memoryStream = new MemoryStream ( ) ;
531+ using var streamWriter = new StreamWriter ( memoryStream ) ;
532+
533+ await WriteDocumentAsync ( streamWriter , cancellationToken ) . ConfigureAwait ( false ) ;
534+
535+ memoryStream . Seek ( 0 , SeekOrigin . Begin ) ;
536+
537+ hash = await SHA512 . HashDataAsync ( memoryStream , cancellationToken ) . ConfigureAwait ( false ) ;
538+ #else
527539 using HashAlgorithm sha = SHA512 . Create ( ) ;
528540 using var cryptoStream = new CryptoStream ( Stream . Null , sha , CryptoStreamMode . Write ) ;
529541 using var streamWriter = new StreamWriter ( cryptoStream ) ;
530542
531- var openApiJsonWriter = new OpenApiJsonWriter ( streamWriter , new ( ) { Terse = true } ) ;
532- SerializeAsV3 ( openApiJsonWriter ) ;
533- await openApiJsonWriter . FlushAsync ( cancellationToken ) . ConfigureAwait ( false ) ;
543+ await WriteDocumentAsync ( streamWriter , cancellationToken ) . ConfigureAwait ( false ) ;
534544
535- #if NET5_0_OR_GREATER
536- await cryptoStream . FlushFinalBlockAsync ( cancellationToken ) . ConfigureAwait ( false ) ;
537- #else
538545 cryptoStream . FlushFinalBlock ( ) ;
546+
547+ hash = sha . Hash ;
539548#endif
540- return ConvertByteArrayToString ( sha . Hash ?? [ ] ) ;
549+
550+ return ConvertByteArrayToString ( hash ?? [ ] ) ;
551+
552+ async Task WriteDocumentAsync ( TextWriter writer , CancellationToken token )
553+ {
554+ var openApiJsonWriter = new OpenApiJsonWriter ( writer , new ( ) { Terse = true } ) ;
555+ SerializeAsV3 ( openApiJsonWriter ) ;
556+ await openApiJsonWriter . FlushAsync ( cancellationToken ) . ConfigureAwait ( false ) ;
557+ }
541558 }
542559
543560 private static string ConvertByteArrayToString ( byte [ ] hash )
0 commit comments