From d6d13a0986bdd78bb412a7eda8b93035aa1877cd Mon Sep 17 00:00:00 2001 From: Pranav K Date: Sun, 12 Mar 2017 20:10:02 -0700 Subject: [PATCH] Remove net451 as a cross-compile target --- .gitignore | 1 + .../LargeResponseApp/LargeResponseApp.csproj | 2 +- samples/SampleApp/SampleApp.csproj | 2 +- ...oft.AspNetCore.Server.Kestrel.Https.csproj | 2 +- .../Adapter/Internal/LoggingStream.cs | 5 +- .../Adapter/Internal/RawStream.cs | 5 +- .../Internal/Http/Frame.cs | 4 -- .../Internal/Http/FrameDuplexStream.cs | 43 ++++++++-------- .../Internal/Http/FrameRequestStream.cs | 11 ++-- .../Internal/Http/FrameResponseStream.cs | 9 ++-- .../Internal/Http/SocketOutput.cs | 2 +- .../Internal/Infrastructure/TaskUtilities.cs | 50 ------------------- ...Microsoft.AspNetCore.Server.Kestrel.csproj | 2 +- ...Core.Server.Kestrel.FunctionalTests.csproj | 2 + .../FrameRequestStreamTests.cs | 3 ++ .../FrameResponseStreamTests.cs | 3 ++ .../NetworkingTests.cs | 30 ----------- test/shared/TestResources.cs | 4 +- 18 files changed, 59 insertions(+), 121 deletions(-) delete mode 100644 src/Microsoft.AspNetCore.Server.Kestrel/Internal/Infrastructure/TaskUtilities.cs diff --git a/.gitignore b/.gitignore index d685f8ca52..e38451336c 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,4 @@ launchSettings.json BenchmarkDotNet.Artifacts/ BDN.Generated/ binaries/ +global.json diff --git a/samples/LargeResponseApp/LargeResponseApp.csproj b/samples/LargeResponseApp/LargeResponseApp.csproj index 9feeea1d07..06e37972b7 100644 --- a/samples/LargeResponseApp/LargeResponseApp.csproj +++ b/samples/LargeResponseApp/LargeResponseApp.csproj @@ -3,7 +3,7 @@ - net451;netcoreapp1.1 + net46;netcoreapp1.1 false diff --git a/samples/SampleApp/SampleApp.csproj b/samples/SampleApp/SampleApp.csproj index fa311e28dc..1c71f51d36 100644 --- a/samples/SampleApp/SampleApp.csproj +++ b/samples/SampleApp/SampleApp.csproj @@ -3,7 +3,7 @@ - netcoreapp1.1;net451 + netcoreapp1.1;net46 false diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Https/Microsoft.AspNetCore.Server.Kestrel.Https.csproj b/src/Microsoft.AspNetCore.Server.Kestrel.Https/Microsoft.AspNetCore.Server.Kestrel.Https.csproj index 5187bdb18d..2e425cd7e4 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Https/Microsoft.AspNetCore.Server.Kestrel.Https.csproj +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Https/Microsoft.AspNetCore.Server.Kestrel.Https.csproj @@ -4,7 +4,7 @@ HTTPS support for the ASP.NET Core Kestrel cross-platform web server. - net451;netstandard1.3 + netstandard1.3;net46 true aspnetcore;kestrel CS1591;$(NoWarn) diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Adapter/Internal/LoggingStream.cs b/src/Microsoft.AspNetCore.Server.Kestrel/Adapter/Internal/LoggingStream.cs index 5421093a63..24fa1edb08 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel/Adapter/Internal/LoggingStream.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel/Adapter/Internal/LoggingStream.cs @@ -132,7 +132,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Adapter.Internal _logger.LogDebug(builder.ToString()); } -#if NET451 +#if NET46 // The below APM methods call the underlying Read/WriteAsync methods which will still be logged. public override IAsyncResult BeginRead(byte[] buffer, int offset, int count, AsyncCallback callback, object state) { @@ -209,6 +209,9 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Adapter.Internal }, tcs, cancellationToken); return tcs.Task; } +#elif NETSTANDARD1_3 +#else +#error target frameworks need to be updated. #endif } } diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Adapter/Internal/RawStream.cs b/src/Microsoft.AspNetCore.Server.Kestrel/Adapter/Internal/RawStream.cs index 5cc97ee3e8..7433d5eb78 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel/Adapter/Internal/RawStream.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel/Adapter/Internal/RawStream.cs @@ -135,7 +135,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Adapter.Internal } } -#if NET451 +#if NET46 public override IAsyncResult BeginRead(byte[] buffer, int offset, int count, AsyncCallback callback, object state) { var task = ReadAsync(buffer, offset, count, default(CancellationToken), state); @@ -211,6 +211,9 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Adapter.Internal }, tcs, cancellationToken); return tcs.Task; } +#elif NETSTANDARD1_3 +#else +#error target frameworks need to be updated. #endif } } diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/Frame.cs b/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/Frame.cs index d900924e41..bdaae0f445 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/Frame.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/Frame.cs @@ -1382,14 +1382,10 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http { // .NET 451 doesn't have pointer overloads for Encoding.GetString so we // copy to an array -#if NET451 - return Encoding.UTF8.GetString(path.ToArray()); -#else fixed (byte* pointer = &path.DangerousGetPinnableReference()) { return Encoding.UTF8.GetString(pointer, path.Length); } -#endif } public void OnHeader(Span name, Span value) diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/FrameDuplexStream.cs b/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/FrameDuplexStream.cs index 7ec8b9a9bf..10469dc05d 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/FrameDuplexStream.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/FrameDuplexStream.cs @@ -1,7 +1,7 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -#if NET451 +#if NET46 using System; #endif using System.IO; @@ -97,14 +97,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http } } -#if NET451 - public override void Close() - { - _requestStream.Close(); - _responseStream.Close(); - } -#endif - protected override void Dispose(bool disposing) { if (disposing) @@ -124,7 +116,13 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http return _responseStream.FlushAsync(cancellationToken); } -#if NET451 +#if NET46 + public override void Close() + { + _requestStream.Close(); + _responseStream.Close(); + } + public override IAsyncResult BeginRead(byte[] buffer, int offset, int count, AsyncCallback callback, object state) { return _requestStream.BeginRead(buffer, offset, count, callback, state); @@ -134,6 +132,19 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http { return _requestStream.EndRead(asyncResult); } + + public override IAsyncResult BeginWrite(byte[] buffer, int offset, int count, AsyncCallback callback, object state) + { + return _responseStream.BeginWrite(buffer, offset, count, callback, state); + } + + public override void EndWrite(IAsyncResult asyncResult) + { + _responseStream.EndWrite(asyncResult); + } +#elif NETSTANDARD1_3 +#else +#error target frameworks need to be updated. #endif public override Task ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken) @@ -146,18 +157,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http return _requestStream.CopyToAsync(destination, bufferSize, cancellationToken); } -#if NET451 - public override IAsyncResult BeginWrite(byte[] buffer, int offset, int count, AsyncCallback callback, object state) - { - return _responseStream.BeginWrite(buffer, offset, count, callback, state); - } - - public override void EndWrite(IAsyncResult asyncResult) - { - _responseStream.EndWrite(asyncResult); - } -#endif - public override Task WriteAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken) { return _responseStream.WriteAsync(buffer, offset, count, cancellationToken); diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/FrameRequestStream.cs b/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/FrameRequestStream.cs index b75effe5e8..a7b168a73d 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/FrameRequestStream.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/FrameRequestStream.cs @@ -74,7 +74,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http return ReadAsync(buffer, offset, count).Result; } -#if NET451 +#if NET46 public override IAsyncResult BeginRead(byte[] buffer, int offset, int count, AsyncCallback callback, object state) { var task = ReadAsync(buffer, offset, count, default(CancellationToken), state); @@ -112,6 +112,9 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http }, tcs, cancellationToken); return tcs.Task; } +#elif NETSTANDARD1_3 +#else +#error target frameworks need to be updated #endif public override Task ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken) @@ -198,15 +201,15 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http case FrameStreamState.Open: if (cancellationToken.IsCancellationRequested) { - return TaskUtilities.GetCancelledZeroTask(cancellationToken); + return Task.FromCanceled(cancellationToken); } break; case FrameStreamState.Closed: throw new ObjectDisposedException(nameof(FrameRequestStream)); case FrameStreamState.Aborted: return _error != null ? - TaskUtilities.GetFaultedTask(_error) : - TaskUtilities.GetCancelledZeroTask(); + Task.FromException(_error) : + Task.FromCanceled(new CancellationToken(true)); } return null; } diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/FrameResponseStream.cs b/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/FrameResponseStream.cs index 5a3c9159d5..e654a3d7e4 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/FrameResponseStream.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/FrameResponseStream.cs @@ -85,7 +85,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http _frameControl.Write(new ArraySegment(buffer, offset, count)); } -#if NET451 +#if NET46 public override IAsyncResult BeginWrite(byte[] buffer, int offset, int count, AsyncCallback callback, object state) { var task = WriteAsync(buffer, offset, count, default(CancellationToken), state); @@ -123,6 +123,9 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http }, tcs, cancellationToken); return tcs.Task; } +#elif NETSTANDARD1_3 +#else +#error target frameworks need to be updated. #endif public override Task WriteAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken) @@ -180,7 +183,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http case FrameStreamState.Open: if (cancellationToken.IsCancellationRequested) { - return TaskUtilities.GetCancelledTask(cancellationToken); + return Task.FromCanceled(cancellationToken); } break; case FrameStreamState.Closed: @@ -189,7 +192,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http if (cancellationToken.IsCancellationRequested) { // Aborted state only throws on write if cancellationToken requests it - return TaskUtilities.GetCancelledTask(cancellationToken); + return Task.FromCanceled(cancellationToken); } break; } diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/SocketOutput.cs b/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/SocketOutput.cs index fde232f36e..6f8148932c 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/SocketOutput.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/SocketOutput.cs @@ -166,7 +166,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http { _connection.AbortAsync(); _cancelled = true; - return TaskUtilities.GetCancelledTask(cancellationToken); + return Task.FromCanceled(cancellationToken); } else if (_cancelled) { diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Infrastructure/TaskUtilities.cs b/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Infrastructure/TaskUtilities.cs deleted file mode 100644 index 6ee8e895df..0000000000 --- a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Infrastructure/TaskUtilities.cs +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -using System; -using System.Threading; -using System.Threading.Tasks; - -namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure -{ - public static class TaskUtilities - { - public static Task GetCancelledTask(CancellationToken cancellationToken) - { -#if NETSTANDARD1_3 - return Task.FromCanceled(cancellationToken); -#else - var tcs = new TaskCompletionSource(); - tcs.TrySetCanceled(); - return tcs.Task; -#endif - } - - public static Task GetCancelledZeroTask(CancellationToken cancellationToken = default(CancellationToken)) - { -#if NETSTANDARD1_3 - // Make sure cancellationToken is canceled before passing to Task.FromCanceled - if (!cancellationToken.IsCancellationRequested) - { - cancellationToken = new CancellationToken(true); - } - return Task.FromCanceled(cancellationToken); -#else - var tcs = new TaskCompletionSource(); - tcs.TrySetCanceled(); - return tcs.Task; -#endif - } - - public static Task GetFaultedTask(Exception error) - { -#if NETSTANDARD1_3 - return Task.FromException(error); -#else - var tcs = new TaskCompletionSource(); - tcs.SetException(error); - return tcs.Task; -#endif - } - } -} \ No newline at end of file diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Microsoft.AspNetCore.Server.Kestrel.csproj b/src/Microsoft.AspNetCore.Server.Kestrel/Microsoft.AspNetCore.Server.Kestrel.csproj index 73ba4a6cd3..796b8296c6 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel/Microsoft.AspNetCore.Server.Kestrel.csproj +++ b/src/Microsoft.AspNetCore.Server.Kestrel/Microsoft.AspNetCore.Server.Kestrel.csproj @@ -4,7 +4,7 @@ ASP.NET Core Kestrel cross-platform web server. - net451;netstandard1.3 + netstandard1.3;net46 true aspnetcore;kestrel true diff --git a/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests.csproj b/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests.csproj index 9615b4a06d..81666785c9 100644 --- a/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests.csproj +++ b/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests.csproj @@ -6,6 +6,8 @@ netcoreapp1.1;net46 netcoreapp1.1 x64 + true + true diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/FrameRequestStreamTests.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/FrameRequestStreamTests.cs index 32f3e37d73..47ce60b35a 100644 --- a/test/Microsoft.AspNetCore.Server.KestrelTests/FrameRequestStreamTests.cs +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/FrameRequestStreamTests.cs @@ -90,6 +90,9 @@ namespace Microsoft.AspNetCore.Server.KestrelTests var stream = new FrameRequestStream(); Assert.Throws(() => stream.BeginWrite(new byte[1], 0, 1, null, null)); } +#elif NETCOREAPP1_1 +#else +#error target frameworks need to be updated #endif [Fact] diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/FrameResponseStreamTests.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/FrameResponseStreamTests.cs index b1f155ad52..363eb26d30 100644 --- a/test/Microsoft.AspNetCore.Server.KestrelTests/FrameResponseStreamTests.cs +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/FrameResponseStreamTests.cs @@ -61,6 +61,9 @@ namespace Microsoft.AspNetCore.Server.KestrelTests var stream = new FrameResponseStream(new MockFrameControl()); Assert.Throws(() => stream.BeginRead(new byte[1], 0, 1, null, null)); } +#elif NETCOREAPP1_1 +#else +#error target frameworks need to be updated #endif [Fact] diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/NetworkingTests.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/NetworkingTests.cs index c417007e2c..2cf84068c4 100644 --- a/test/Microsoft.AspNetCore.Server.KestrelTests/NetworkingTests.cs +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/NetworkingTests.cs @@ -131,18 +131,8 @@ namespace Microsoft.AspNetCore.Server.KestrelTests var t = Task.Run(async () => { var socket = TestConnection.CreateConnectedLoopbackSocket(port); -#if NET46 - await Task.Factory.FromAsync( - socket.BeginSend, - socket.EndSend, - new[] { new ArraySegment(new byte[] { 1, 2, 3, 4, 5 }) }, - SocketFlags.None, - null, - TaskCreationOptions.None); -#else await socket.SendAsync(new[] { new ArraySegment(new byte[] { 1, 2, 3, 4, 5 }) }, SocketFlags.None); -#endif socket.Dispose(); }); loop.Run(); @@ -194,33 +184,13 @@ namespace Microsoft.AspNetCore.Server.KestrelTests var t = Task.Run(async () => { var socket = TestConnection.CreateConnectedLoopbackSocket(port); -#if NET46 - await Task.Factory.FromAsync( - socket.BeginSend, - socket.EndSend, - new[] { new ArraySegment(new byte[] { 1, 2, 3, 4, 5 }) }, - SocketFlags.None, - null, - TaskCreationOptions.None); -#else await socket.SendAsync(new[] { new ArraySegment(new byte[] { 1, 2, 3, 4, 5 }) }, SocketFlags.None); -#endif socket.Shutdown(SocketShutdown.Send); var buffer = new ArraySegment(new byte[2048]); while (true) { -#if NET46 - var count = await Task.Factory.FromAsync( - socket.BeginReceive, - socket.EndReceive, - new[] { buffer }, - SocketFlags.None, - null, - TaskCreationOptions.None); -#else var count = await socket.ReceiveAsync(new[] { buffer }, SocketFlags.None); -#endif if (count <= 0) break; } socket.Dispose(); diff --git a/test/shared/TestResources.cs b/test/shared/TestResources.cs index ff0b12b050..37b2443622 100644 --- a/test/shared/TestResources.cs +++ b/test/shared/TestResources.cs @@ -11,8 +11,10 @@ namespace Microsoft.AspNetCore.Testing private static readonly string _testCertificatePath = #if NET46 Path.Combine(Directory.GetCurrentDirectory(), "testCert.pfx"); -#else +#elif NETCOREAPP1_1 Path.Combine(AppContext.BaseDirectory, "testCert.pfx"); +#else +#error Target frameworks need to be updated. #endif public static string TestCertificatePath => _testCertificatePath;