From 811e9fabf2cd9bd077e853c318d68dc9fb1d70ac Mon Sep 17 00:00:00 2001 From: rameel Date: Wed, 1 Apr 2026 23:46:26 +0500 Subject: [PATCH] Add net6.0/net8.0 multitargeting with polyfill support --- .github/workflows/tests.yml | 12 ++-- Directory.Packages.props | 2 +- .../Ramstack.FileSystem.Abstractions.csproj | 2 +- .../Utilities/StreamReaderExtensions.cs | 62 ++++++++++++++++ .../VirtualFileExtensions.cs | 72 +++---------------- .../Ramstack.FileSystem.Adapters.csproj | 11 ++- .../Ramstack.FileSystem.Amazon.csproj | 2 +- .../Ramstack.FileSystem.Composite.csproj | 2 +- .../Internal/PathHelper.cs | 6 +- .../Ramstack.FileSystem.Globbing.csproj | 2 +- .../Ramstack.FileSystem.Google.csproj | 2 +- .../Ramstack.FileSystem.Physical.csproj | 2 +- .../Ramstack.FileSystem.Prefixed.csproj | 2 +- .../Ramstack.FileSystem.Readonly.csproj | 2 +- .../Ramstack.FileSystem.Sub.csproj | 2 +- ...stack.FileSystem.Abstractions.Tests.csproj | 2 +- .../Ramstack.FileSystem.Amazon.Tests.csproj | 2 +- .../ReadonlyAmazonFileSystemTests.cs | 3 +- .../WritableAmazonFileSystemTests.cs | 5 +- ...Ramstack.FileSystem.Composite.Tests.csproj | 2 +- ...stack.FileSystem.FileProvider.Tests.csproj | 2 +- .../Ramstack.FileSystem.Globbing.Tests.csproj | 2 +- .../Ramstack.FileSystem.Google.Tests.csproj | 2 +- .../Ramstack.FileSystem.Physical.Tests.csproj | 2 +- .../Ramstack.FileSystem.Prefixed.Tests.csproj | 2 +- .../Ramstack.FileSystem.Readonly.Tests.csproj | 2 +- ...tack.FileSystem.Specification.Tests.csproj | 2 +- .../Ramstack.FileSystem.Sub.Tests.csproj | 2 +- 28 files changed, 117 insertions(+), 96 deletions(-) create mode 100644 src/Ramstack.FileSystem.Abstractions/Utilities/StreamReaderExtensions.cs diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 67d762d..37da93f 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -28,10 +28,14 @@ jobs: 10.x - name: Checkout uses: actions/checkout@v4 - - name: Build + - name: Build (Debug) run: dotnet build -c Debug - - name: Test - run: dotnet test --no-build --filter "TestCategory!~Cloud" + - name: Build (Release) + run: dotnet build -c Release + - name: Test (Debug) + run: dotnet test -c Debug --no-build --filter "TestCategory!~Cloud" + - name: Test (Release) + run: dotnet test -c Release --no-build --filter "TestCategory!~Cloud" azure: name: "Test: AzureFileSystem" @@ -88,4 +92,4 @@ jobs: - name: Build run: dotnet build -c Debug - name: Test - run: dotnet test --no-build --filter TestCategory=Cloud:Amazon + run: dotnet test --no-build --filter TestCategory=Cloud:Amazon -maxcpucount:1 diff --git a/Directory.Packages.props b/Directory.Packages.props index 12c4c02..aec1e52 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -8,7 +8,7 @@ - + diff --git a/src/Ramstack.FileSystem.Abstractions/Ramstack.FileSystem.Abstractions.csproj b/src/Ramstack.FileSystem.Abstractions/Ramstack.FileSystem.Abstractions.csproj index 36aa9cd..51eb9b4 100644 --- a/src/Ramstack.FileSystem.Abstractions/Ramstack.FileSystem.Abstractions.csproj +++ b/src/Ramstack.FileSystem.Abstractions/Ramstack.FileSystem.Abstractions.csproj @@ -1,7 +1,7 @@ - net6.0 + net6.0;net8.0 A .NET library that provides a virtual file system abstraction. enable enable diff --git a/src/Ramstack.FileSystem.Abstractions/Utilities/StreamReaderExtensions.cs b/src/Ramstack.FileSystem.Abstractions/Utilities/StreamReaderExtensions.cs new file mode 100644 index 0000000..2b2a2c5 --- /dev/null +++ b/src/Ramstack.FileSystem.Abstractions/Utilities/StreamReaderExtensions.cs @@ -0,0 +1,62 @@ +#if NET6_0 +using System.Buffers; +using System.Text; + +// ReSharper disable once CheckNamespace +namespace System.IO; +/// +/// Provides extension methods for the to offer API compatibility with newer .NET versions. +/// +public static class StreamReaderExtensions +{ + /// + /// Reads a line of characters asynchronously from the current stream and returns the data as a string. + /// + /// The to read from. + /// An optional cancellation token to cancel the operation. + /// + /// A that represents the asynchronous read operation. + /// The value of the task contains the next line from the stream, or is + /// if the end of the stream is reached. + /// + public static ValueTask ReadLineAsync(this StreamReader reader, CancellationToken cancellationToken = default) + { + if (cancellationToken.IsCancellationRequested) + return ValueTask.FromCanceled(cancellationToken); + + return new ValueTask(reader.ReadLineAsync()); + } + + /// + /// Reads all characters from the current position to the end of the stream asynchronously and returns them as one string. + /// + /// The to read from. + /// An optional cancellation token to cancel the operation. + /// + /// A that represents the asynchronous read operation. + /// The value of the task contains a string with the characters from the current position to the end of the stream. + /// + public static async Task ReadToEndAsync(this StreamReader reader, CancellationToken cancellationToken = default) + { + const int BufferSize = 4096; + + var chars = ArrayPool.Shared.Rent(BufferSize); + var sb = new StringBuilder(); + + while (true) + { + var count = await reader + .ReadAsync(new Memory(chars), cancellationToken) + .ConfigureAwait(false); + + if (count == 0) + break; + + sb.Append(chars.AsSpan(0, count)); + } + + ArrayPool.Shared.Return(chars); + return sb.ToString(); + } +} +#endif diff --git a/src/Ramstack.FileSystem.Abstractions/VirtualFileExtensions.cs b/src/Ramstack.FileSystem.Abstractions/VirtualFileExtensions.cs index f4018ed..a4ae2f4 100644 --- a/src/Ramstack.FileSystem.Abstractions/VirtualFileExtensions.cs +++ b/src/Ramstack.FileSystem.Abstractions/VirtualFileExtensions.cs @@ -74,44 +74,11 @@ public static ValueTask ReadAllTextAsync(this VirtualFile file, Cancella /// public static async ValueTask ReadAllTextAsync(this VirtualFile file, Encoding? encoding, CancellationToken cancellationToken = default) { - // - // Use a manual read loop since .NET 6 lacks a StreamReader.ReadToEndAsync overload that accepts a CancellationToken. - // This ensures the operation remains responsive to cancellation requests. - // - - const int BufferSize = 4096; - // ReSharper disable once UseAwaitUsing using var stream = await file.OpenReadAsync(cancellationToken).ConfigureAwait(false); - var reader = new StreamReader(stream, encoding ??= Encoding.UTF8); - var buffer = (char[]?)null; - - try - { - cancellationToken.ThrowIfCancellationRequested(); - - buffer = ArrayPool.Shared.Rent(encoding.GetMaxCharCount(BufferSize)); - var sb = new StringBuilder(); - - while (true) - { - var count = await reader - .ReadAsync(new Memory(buffer), cancellationToken) - .ConfigureAwait(false); - - if (count == 0) - return sb.ToString(); - - sb.Append(buffer.AsSpan(0, count)); - } - } - finally - { - reader.Dispose(); + using var reader = new StreamReader(stream, encoding!); - if (buffer is not null) - ArrayPool.Shared.Return(buffer); - } + return await reader.ReadToEndAsync(cancellationToken).ConfigureAwait(false); } /// @@ -142,11 +109,8 @@ public static async ValueTask ReadAllLinesAsync(this VirtualFile file, using var reader = new StreamReader(stream, encoding!); var list = new List(); - while (await reader.ReadLineAsync().ConfigureAwait(false) is { } line) - { - cancellationToken.ThrowIfCancellationRequested(); + while (await reader.ReadLineAsync(cancellationToken).ConfigureAwait(false) is { } line) list.Add(line); - } return list.ToArray(); } @@ -165,7 +129,7 @@ public static async ValueTask ReadAllBytesAsync(this VirtualFile file, C // ReSharper disable once UseAwaitUsing using var stream = await file.OpenReadAsync(cancellationToken).ConfigureAwait(false); - var length = GetStreamLength(stream); + var length = stream.CanSeek ? stream.Length : 0; if (length > Array.MaxLength) throw new IOException("The file is too large."); @@ -179,6 +143,7 @@ static async ValueTask ReadAllBytesImplAsync(Stream stream, Cancellation { var bytes = new byte[stream.Length]; var index = 0; + do { var count = await stream.ReadAsync(bytes.AsMemory(index), cancellationToken).ConfigureAwait(false); @@ -186,8 +151,7 @@ static async ValueTask ReadAllBytesImplAsync(Stream stream, Cancellation Error_EndOfStream(); index += count; - } - while (index < bytes.Length); + } while (index < bytes.Length); return bytes; } @@ -225,29 +189,11 @@ static byte[] ResizeBuffer(byte[] oldArray) var newArray = ArrayPool.Shared.Rent((int)length); oldArray.AsSpan().TryCopyTo(newArray); - var rented = oldArray; - oldArray = newArray; - - ArrayPool.Shared.Return(rented); - return oldArray; + ArrayPool.Shared.Return(oldArray); + return newArray; } } - static long GetStreamLength(Stream stream) - { - try - { - if (stream.CanSeek) - return stream.Length; - } - catch - { - // skip - } - - return 0; - } - static void Error_EndOfStream() => throw new EndOfStreamException(); } @@ -334,7 +280,7 @@ public static async ValueTask WriteAllLinesAsync(this VirtualFile file, IEnumera await using var writer = new StreamWriter(stream, encoding, bufferSize: -1, leaveOpen: false); foreach (var line in contents) - await writer.WriteLineAsync(line).ConfigureAwait(false); + await writer.WriteLineAsync(line.AsMemory(), cancellationToken).ConfigureAwait(false); } /// diff --git a/src/Ramstack.FileSystem.Adapters/Ramstack.FileSystem.Adapters.csproj b/src/Ramstack.FileSystem.Adapters/Ramstack.FileSystem.Adapters.csproj index c067770..89d8e6d 100644 --- a/src/Ramstack.FileSystem.Adapters/Ramstack.FileSystem.Adapters.csproj +++ b/src/Ramstack.FileSystem.Adapters/Ramstack.FileSystem.Adapters.csproj @@ -1,7 +1,7 @@ - net6.0 + net6.0;net8.0 Provides adapters for integrating Ramstack.FileSystem with Microsoft.Extensions.FileProviders. enable enable @@ -43,8 +43,15 @@ - + + + + + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/Ramstack.FileSystem.Amazon/Ramstack.FileSystem.Amazon.csproj b/src/Ramstack.FileSystem.Amazon/Ramstack.FileSystem.Amazon.csproj index abef07c..ac0f556 100644 --- a/src/Ramstack.FileSystem.Amazon/Ramstack.FileSystem.Amazon.csproj +++ b/src/Ramstack.FileSystem.Amazon/Ramstack.FileSystem.Amazon.csproj @@ -1,7 +1,7 @@ - net6.0 + net6.0;net8.0 Provides an implementation of Ramstack.FileSystem using Amazon S3 storage. enable enable diff --git a/src/Ramstack.FileSystem.Composite/Ramstack.FileSystem.Composite.csproj b/src/Ramstack.FileSystem.Composite/Ramstack.FileSystem.Composite.csproj index 83beecf..fb06cd0 100644 --- a/src/Ramstack.FileSystem.Composite/Ramstack.FileSystem.Composite.csproj +++ b/src/Ramstack.FileSystem.Composite/Ramstack.FileSystem.Composite.csproj @@ -1,7 +1,7 @@ - net6.0 + net6.0;net8.0 Provides an implementation of Ramstack.FileSystem that combines multiple file systems into a single composite file system. enable enable diff --git a/src/Ramstack.FileSystem.Globbing/Internal/PathHelper.cs b/src/Ramstack.FileSystem.Globbing/Internal/PathHelper.cs index 8b22129..6498843 100644 --- a/src/Ramstack.FileSystem.Globbing/Internal/PathHelper.cs +++ b/src/Ramstack.FileSystem.Globbing/Internal/PathHelper.cs @@ -249,7 +249,7 @@ public PathSegmentIterator() => if (Avx2.IsSupported && (int)_position + Vector256.Count <= length) { var chunk = LoadVector256(ref source, _position); - var slash = Vector256.Create('/'); + var slash = Vector256.Create((ushort)'/'); var comparison = Avx2.CompareEqual(chunk, slash); // @@ -269,7 +269,7 @@ public PathSegmentIterator() => else if (Sse2.IsSupported && !Avx2.IsSupported && (int)_position + Vector128.Count <= length) { var chunk = LoadVector128(ref source, _position); - var slash = Vector128.Create('/'); + var slash = Vector128.Create((ushort)'/'); var comparison = Sse2.CompareEqual(chunk, slash); // @@ -289,7 +289,7 @@ public PathSegmentIterator() => else if (AdvSimd.Arm64.IsSupported && (int)_position + Vector128.Count <= length) { var chunk = LoadVector128(ref source, _position); - var slash = Vector128.Create('/'); + var slash = Vector128.Create((ushort)'/'); var comparison = AdvSimd.CompareEqual(chunk, slash); // diff --git a/src/Ramstack.FileSystem.Globbing/Ramstack.FileSystem.Globbing.csproj b/src/Ramstack.FileSystem.Globbing/Ramstack.FileSystem.Globbing.csproj index dc500c1..e771eb5 100644 --- a/src/Ramstack.FileSystem.Globbing/Ramstack.FileSystem.Globbing.csproj +++ b/src/Ramstack.FileSystem.Globbing/Ramstack.FileSystem.Globbing.csproj @@ -1,7 +1,7 @@ - net6.0 + net6.0;net8.0 Provides an implementation of Ramstack.FileSystem that applies glob-based filtering rules to the underlying file system. enable enable diff --git a/src/Ramstack.FileSystem.Google/Ramstack.FileSystem.Google.csproj b/src/Ramstack.FileSystem.Google/Ramstack.FileSystem.Google.csproj index 70788cb..05f8d69 100644 --- a/src/Ramstack.FileSystem.Google/Ramstack.FileSystem.Google.csproj +++ b/src/Ramstack.FileSystem.Google/Ramstack.FileSystem.Google.csproj @@ -1,7 +1,7 @@  - net6.0 + net6.0;net8.0 Provides an implementation of Ramstack.FileSystem using Google Cloud Storage. enable enable diff --git a/src/Ramstack.FileSystem.Physical/Ramstack.FileSystem.Physical.csproj b/src/Ramstack.FileSystem.Physical/Ramstack.FileSystem.Physical.csproj index 2b5a1f5..bb3ef2d 100644 --- a/src/Ramstack.FileSystem.Physical/Ramstack.FileSystem.Physical.csproj +++ b/src/Ramstack.FileSystem.Physical/Ramstack.FileSystem.Physical.csproj @@ -1,7 +1,7 @@ - net6.0 + net6.0;net8.0 Provides an implementation of Ramstack.FileSystem based on local file system. enable enable diff --git a/src/Ramstack.FileSystem.Prefixed/Ramstack.FileSystem.Prefixed.csproj b/src/Ramstack.FileSystem.Prefixed/Ramstack.FileSystem.Prefixed.csproj index af60524..9a911d8 100644 --- a/src/Ramstack.FileSystem.Prefixed/Ramstack.FileSystem.Prefixed.csproj +++ b/src/Ramstack.FileSystem.Prefixed/Ramstack.FileSystem.Prefixed.csproj @@ -1,7 +1,7 @@ - net6.0 + net6.0;net8.0 Provides an implementation of Ramstack.FileSystem that adds a specified prefix to the file paths within the underlying file system. enable enable diff --git a/src/Ramstack.FileSystem.Readonly/Ramstack.FileSystem.Readonly.csproj b/src/Ramstack.FileSystem.Readonly/Ramstack.FileSystem.Readonly.csproj index 58e28af..a015533 100644 --- a/src/Ramstack.FileSystem.Readonly/Ramstack.FileSystem.Readonly.csproj +++ b/src/Ramstack.FileSystem.Readonly/Ramstack.FileSystem.Readonly.csproj @@ -1,7 +1,7 @@ - net6.0 + net6.0;net8.0 Provides an implementation of Ramstack.FileSystem that wraps the underlying file system, preventing any destructive operations. enable enable diff --git a/src/Ramstack.FileSystem.Sub/Ramstack.FileSystem.Sub.csproj b/src/Ramstack.FileSystem.Sub/Ramstack.FileSystem.Sub.csproj index 481f020..62806de 100644 --- a/src/Ramstack.FileSystem.Sub/Ramstack.FileSystem.Sub.csproj +++ b/src/Ramstack.FileSystem.Sub/Ramstack.FileSystem.Sub.csproj @@ -1,7 +1,7 @@ - net6.0 + net6.0;net8.0 Provides an implementation of Ramstack.FileSystem that wraps an underlying file system for managing files under a specific subpath. enable enable diff --git a/tests/Ramstack.FileSystem.Abstractions.Tests/Ramstack.FileSystem.Abstractions.Tests.csproj b/tests/Ramstack.FileSystem.Abstractions.Tests/Ramstack.FileSystem.Abstractions.Tests.csproj index 1041185..c2df622 100644 --- a/tests/Ramstack.FileSystem.Abstractions.Tests/Ramstack.FileSystem.Abstractions.Tests.csproj +++ b/tests/Ramstack.FileSystem.Abstractions.Tests/Ramstack.FileSystem.Abstractions.Tests.csproj @@ -1,7 +1,7 @@ - net6.0 + net6.0;net8.0 enable enable preview diff --git a/tests/Ramstack.FileSystem.Amazon.Tests/Ramstack.FileSystem.Amazon.Tests.csproj b/tests/Ramstack.FileSystem.Amazon.Tests/Ramstack.FileSystem.Amazon.Tests.csproj index 9f93ef7..1d3871d 100644 --- a/tests/Ramstack.FileSystem.Amazon.Tests/Ramstack.FileSystem.Amazon.Tests.csproj +++ b/tests/Ramstack.FileSystem.Amazon.Tests/Ramstack.FileSystem.Amazon.Tests.csproj @@ -1,7 +1,7 @@ - net6.0 + net6.0;net8.0 enable enable preview diff --git a/tests/Ramstack.FileSystem.Amazon.Tests/ReadonlyAmazonFileSystemTests.cs b/tests/Ramstack.FileSystem.Amazon.Tests/ReadonlyAmazonFileSystemTests.cs index e222af4..0267c0b 100644 --- a/tests/Ramstack.FileSystem.Amazon.Tests/ReadonlyAmazonFileSystemTests.cs +++ b/tests/Ramstack.FileSystem.Amazon.Tests/ReadonlyAmazonFileSystemTests.cs @@ -12,6 +12,7 @@ namespace Ramstack.FileSystem.Amazon; public class ReadonlyAmazonFileSystemTests : VirtualFileSystemSpecificationTests { private readonly TempFileStorage _storage = new TempFileStorage(); + private readonly string _storageName = Guid.NewGuid().ToString("N"); [OneTimeSetUp] public async Task Setup() @@ -51,7 +52,7 @@ private AmazonS3FileSystem CreateFileSystem(bool isReadOnly) ForcePathStyle = true, }; - return new AmazonS3FileSystem(credentials, config, bucketName: "storage") + return new AmazonS3FileSystem(credentials, config, bucketName: _storageName) { IsReadOnly = isReadOnly }; diff --git a/tests/Ramstack.FileSystem.Amazon.Tests/WritableAmazonFileSystemTests.cs b/tests/Ramstack.FileSystem.Amazon.Tests/WritableAmazonFileSystemTests.cs index 2d89780..64d7eff 100644 --- a/tests/Ramstack.FileSystem.Amazon.Tests/WritableAmazonFileSystemTests.cs +++ b/tests/Ramstack.FileSystem.Amazon.Tests/WritableAmazonFileSystemTests.cs @@ -16,6 +16,7 @@ public class WritableAmazonFileSystemTests : VirtualFileSystemSpecificationTests { private readonly HashSet _buckets = []; private readonly TempFileStorage _storage = new TempFileStorage(); + private readonly string _storageName = Guid.NewGuid().ToString("N"); [OneTimeSetUp] public async Task Setup() @@ -166,7 +167,7 @@ await reader.ReadToEndAsync(), [Test] public async Task File_CopyTo_File_DifferentStorages() { - using var fs1 = CreateFileSystem("temp-storage"); + using var fs1 = CreateFileSystem(Guid.NewGuid().ToString("N")); using var fs2 = GetFileSystem(); await fs1.CreateBucketAsync(); @@ -307,7 +308,7 @@ await fs.GetFilesAsync("/temp").AnyAsync(), } protected override AmazonS3FileSystem GetFileSystem() => - CreateFileSystem("storage"); + CreateFileSystem(_storageName); protected override DirectoryInfo GetDirectoryInfo() => new DirectoryInfo(_storage.Root); diff --git a/tests/Ramstack.FileSystem.Composite.Tests/Ramstack.FileSystem.Composite.Tests.csproj b/tests/Ramstack.FileSystem.Composite.Tests/Ramstack.FileSystem.Composite.Tests.csproj index c798d4f..609d57e 100644 --- a/tests/Ramstack.FileSystem.Composite.Tests/Ramstack.FileSystem.Composite.Tests.csproj +++ b/tests/Ramstack.FileSystem.Composite.Tests/Ramstack.FileSystem.Composite.Tests.csproj @@ -1,7 +1,7 @@ - net6.0 + net6.0;net8.0 enable enable preview diff --git a/tests/Ramstack.FileSystem.FileProvider.Tests/Ramstack.FileSystem.FileProvider.Tests.csproj b/tests/Ramstack.FileSystem.FileProvider.Tests/Ramstack.FileSystem.FileProvider.Tests.csproj index 6dfd52b..45d4bb1 100644 --- a/tests/Ramstack.FileSystem.FileProvider.Tests/Ramstack.FileSystem.FileProvider.Tests.csproj +++ b/tests/Ramstack.FileSystem.FileProvider.Tests/Ramstack.FileSystem.FileProvider.Tests.csproj @@ -1,7 +1,7 @@ - net6.0 + net6.0;net8.0 enable enable preview diff --git a/tests/Ramstack.FileSystem.Globbing.Tests/Ramstack.FileSystem.Globbing.Tests.csproj b/tests/Ramstack.FileSystem.Globbing.Tests/Ramstack.FileSystem.Globbing.Tests.csproj index 78c8a8e..9b7a8fe 100644 --- a/tests/Ramstack.FileSystem.Globbing.Tests/Ramstack.FileSystem.Globbing.Tests.csproj +++ b/tests/Ramstack.FileSystem.Globbing.Tests/Ramstack.FileSystem.Globbing.Tests.csproj @@ -1,7 +1,7 @@ - net6.0 + net6.0;net8.0 enable enable preview diff --git a/tests/Ramstack.FileSystem.Google.Tests/Ramstack.FileSystem.Google.Tests.csproj b/tests/Ramstack.FileSystem.Google.Tests/Ramstack.FileSystem.Google.Tests.csproj index 2ad9322..3541529 100644 --- a/tests/Ramstack.FileSystem.Google.Tests/Ramstack.FileSystem.Google.Tests.csproj +++ b/tests/Ramstack.FileSystem.Google.Tests/Ramstack.FileSystem.Google.Tests.csproj @@ -1,7 +1,7 @@ - net6.0 + net6.0;net8.0 enable enable preview diff --git a/tests/Ramstack.FileSystem.Physical.Tests/Ramstack.FileSystem.Physical.Tests.csproj b/tests/Ramstack.FileSystem.Physical.Tests/Ramstack.FileSystem.Physical.Tests.csproj index ee7a0eb..7fc3ba7 100644 --- a/tests/Ramstack.FileSystem.Physical.Tests/Ramstack.FileSystem.Physical.Tests.csproj +++ b/tests/Ramstack.FileSystem.Physical.Tests/Ramstack.FileSystem.Physical.Tests.csproj @@ -1,7 +1,7 @@ - net6.0 + net6.0;net8.0 enable enable preview diff --git a/tests/Ramstack.FileSystem.Prefixed.Tests/Ramstack.FileSystem.Prefixed.Tests.csproj b/tests/Ramstack.FileSystem.Prefixed.Tests/Ramstack.FileSystem.Prefixed.Tests.csproj index fdeea30..e59e6f1 100644 --- a/tests/Ramstack.FileSystem.Prefixed.Tests/Ramstack.FileSystem.Prefixed.Tests.csproj +++ b/tests/Ramstack.FileSystem.Prefixed.Tests/Ramstack.FileSystem.Prefixed.Tests.csproj @@ -1,7 +1,7 @@ - net6.0 + net6.0;net8.0 enable enable preview diff --git a/tests/Ramstack.FileSystem.Readonly.Tests/Ramstack.FileSystem.Readonly.Tests.csproj b/tests/Ramstack.FileSystem.Readonly.Tests/Ramstack.FileSystem.Readonly.Tests.csproj index b606c4d..8be8104 100644 --- a/tests/Ramstack.FileSystem.Readonly.Tests/Ramstack.FileSystem.Readonly.Tests.csproj +++ b/tests/Ramstack.FileSystem.Readonly.Tests/Ramstack.FileSystem.Readonly.Tests.csproj @@ -1,7 +1,7 @@ - net6.0 + net6.0;net8.0 enable enable preview diff --git a/tests/Ramstack.FileSystem.Specification.Tests/Ramstack.FileSystem.Specification.Tests.csproj b/tests/Ramstack.FileSystem.Specification.Tests/Ramstack.FileSystem.Specification.Tests.csproj index e6f96ab..9f69632 100644 --- a/tests/Ramstack.FileSystem.Specification.Tests/Ramstack.FileSystem.Specification.Tests.csproj +++ b/tests/Ramstack.FileSystem.Specification.Tests/Ramstack.FileSystem.Specification.Tests.csproj @@ -1,7 +1,7 @@ - net6.0 + net6.0;net8.0 Suite of NUnit tests to check specifications for Ramstack.FileSystem. enable enable diff --git a/tests/Ramstack.FileSystem.Sub.Tests/Ramstack.FileSystem.Sub.Tests.csproj b/tests/Ramstack.FileSystem.Sub.Tests/Ramstack.FileSystem.Sub.Tests.csproj index 377b86d..6802ffc 100644 --- a/tests/Ramstack.FileSystem.Sub.Tests/Ramstack.FileSystem.Sub.Tests.csproj +++ b/tests/Ramstack.FileSystem.Sub.Tests/Ramstack.FileSystem.Sub.Tests.csproj @@ -1,7 +1,7 @@ - net6.0 + net6.0;net8.0 enable enable preview