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