diff --git a/src/Resolvers/Microsoft.DotNet.MSBuildSdkResolver/Microsoft.DotNet.MSBuildSdkResolver.csproj b/src/Resolvers/Microsoft.DotNet.MSBuildSdkResolver/Microsoft.DotNet.MSBuildSdkResolver.csproj
index e5e8ff7f3bc6..43737989df88 100644
--- a/src/Resolvers/Microsoft.DotNet.MSBuildSdkResolver/Microsoft.DotNet.MSBuildSdkResolver.csproj
+++ b/src/Resolvers/Microsoft.DotNet.MSBuildSdkResolver/Microsoft.DotNet.MSBuildSdkResolver.csproj
@@ -13,9 +13,12 @@
Enable
- True
+ True
$(DefineConstants);USE_SYSTEM_TEXT_JSON
+
+ 8.0.0
+
true
@@ -100,7 +103,8 @@
-
+
+
@@ -139,13 +143,16 @@
-
+
+
+
+
diff --git a/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/WorkloadManifestReader.SystemTextJson.cs b/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/WorkloadManifestReader.SystemTextJson.cs
index e845b7d11964..a122d085e6e8 100644
--- a/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/WorkloadManifestReader.SystemTextJson.cs
+++ b/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/WorkloadManifestReader.SystemTextJson.cs
@@ -3,10 +3,7 @@
#if USE_SYSTEM_TEXT_JSON
-using System;
using System.Buffers;
-using System.Collections.Generic;
-using System.IO;
using System.Text.Json;
namespace Microsoft.NET.Sdk.WorkloadManifestReader
@@ -47,7 +44,7 @@ internal ref struct Utf8JsonStreamReader
Utf8JsonReader reader;
readonly Stream stream;
- IMemoryOwner buffer;
+ byte[]? buffer;
Span span;
@@ -55,9 +52,9 @@ public Utf8JsonStreamReader(Stream stream, JsonReaderOptions readerOptions)
{
this.stream = stream;
- buffer = MemoryPool.Shared.Rent(segmentSize);
- var readCount = stream.Read(buffer.Memory.Span);
- span = buffer.Memory.Slice(0, readCount).Span;
+ buffer = ArrayPool.Shared.Rent(segmentSize);
+ var readCount = stream.Read(buffer, 0, buffer.Length);
+ span = buffer.AsSpan().Slice(0, readCount);
if (span.StartsWith(utf8Bom))
{
@@ -73,6 +70,11 @@ public bool Read()
{
if (reader.IsFinalBlock)
{
+ if (buffer != null)
+ {
+ ArrayPool.Shared.Return(buffer);
+ buffer = null;
+ }
return false;
}
@@ -86,18 +88,21 @@ public bool Read()
int remaining = (int)(span.Length - reader.BytesConsumed);
- var newBuffer = MemoryPool.Shared.Rent(newSegmentSize);
+ var newBuffer = ArrayPool.Shared.Rent(newSegmentSize);
if (remaining > 0)
{
- span.Slice((int)reader.BytesConsumed).CopyTo(newBuffer.Memory.Span);
+ span.Slice((int)reader.BytesConsumed).CopyTo(newBuffer);
}
- var readCount = stream.Read(newBuffer.Memory.Span.Slice(remaining));
+ var readCount = stream.Read(newBuffer, remaining, newBuffer.Length - remaining);
- buffer.Dispose();
+ if (buffer != null)
+ {
+ ArrayPool.Shared.Return(buffer);
+ }
buffer = newBuffer;
- span = newBuffer.Memory.Slice(0, remaining + readCount).Span;
+ span = newBuffer.AsSpan().Slice(0, remaining + readCount);
reader = new Utf8JsonReader(span, stream.Position >= stream.Length, reader.CurrentState);
}