Remove net451 as a cross-compile target

This commit is contained in:
Pranav K 2017-03-12 20:10:02 -07:00
parent 3e6303b6c1
commit d6d13a0986
18 changed files with 59 additions and 121 deletions

1
.gitignore vendored
View File

@ -34,3 +34,4 @@ launchSettings.json
BenchmarkDotNet.Artifacts/ BenchmarkDotNet.Artifacts/
BDN.Generated/ BDN.Generated/
binaries/ binaries/
global.json

View File

@ -3,7 +3,7 @@
<Import Project="..\..\build\common.props" /> <Import Project="..\..\build\common.props" />
<PropertyGroup> <PropertyGroup>
<TargetFrameworks>net451;netcoreapp1.1</TargetFrameworks> <TargetFrameworks>net46;netcoreapp1.1</TargetFrameworks>
<IsPackable>false</IsPackable> <IsPackable>false</IsPackable>
</PropertyGroup> </PropertyGroup>

View File

@ -3,7 +3,7 @@
<Import Project="..\..\build\common.props" /> <Import Project="..\..\build\common.props" />
<PropertyGroup> <PropertyGroup>
<TargetFrameworks>netcoreapp1.1;net451</TargetFrameworks> <TargetFrameworks>netcoreapp1.1;net46</TargetFrameworks>
<IsPackable>false</IsPackable> <IsPackable>false</IsPackable>
</PropertyGroup> </PropertyGroup>

View File

@ -4,7 +4,7 @@
<PropertyGroup> <PropertyGroup>
<Description>HTTPS support for the ASP.NET Core Kestrel cross-platform web server.</Description> <Description>HTTPS support for the ASP.NET Core Kestrel cross-platform web server.</Description>
<TargetFrameworks>net451;netstandard1.3</TargetFrameworks> <TargetFrameworks>netstandard1.3;net46</TargetFrameworks>
<GenerateDocumentationFile>true</GenerateDocumentationFile> <GenerateDocumentationFile>true</GenerateDocumentationFile>
<PackageTags>aspnetcore;kestrel</PackageTags> <PackageTags>aspnetcore;kestrel</PackageTags>
<NoWarn>CS1591;$(NoWarn)</NoWarn> <NoWarn>CS1591;$(NoWarn)</NoWarn>

View File

@ -132,7 +132,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Adapter.Internal
_logger.LogDebug(builder.ToString()); _logger.LogDebug(builder.ToString());
} }
#if NET451 #if NET46
// The below APM methods call the underlying Read/WriteAsync methods which will still be logged. // 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) 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); }, tcs, cancellationToken);
return tcs.Task; return tcs.Task;
} }
#elif NETSTANDARD1_3
#else
#error target frameworks need to be updated.
#endif #endif
} }
} }

View File

@ -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) public override IAsyncResult BeginRead(byte[] buffer, int offset, int count, AsyncCallback callback, object state)
{ {
var task = ReadAsync(buffer, offset, count, default(CancellationToken), state); var task = ReadAsync(buffer, offset, count, default(CancellationToken), state);
@ -211,6 +211,9 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Adapter.Internal
}, tcs, cancellationToken); }, tcs, cancellationToken);
return tcs.Task; return tcs.Task;
} }
#elif NETSTANDARD1_3
#else
#error target frameworks need to be updated.
#endif #endif
} }
} }

View File

@ -1382,14 +1382,10 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http
{ {
// .NET 451 doesn't have pointer overloads for Encoding.GetString so we // .NET 451 doesn't have pointer overloads for Encoding.GetString so we
// copy to an array // copy to an array
#if NET451
return Encoding.UTF8.GetString(path.ToArray());
#else
fixed (byte* pointer = &path.DangerousGetPinnableReference()) fixed (byte* pointer = &path.DangerousGetPinnableReference())
{ {
return Encoding.UTF8.GetString(pointer, path.Length); return Encoding.UTF8.GetString(pointer, path.Length);
} }
#endif
} }
public void OnHeader(Span<byte> name, Span<byte> value) public void OnHeader(Span<byte> name, Span<byte> value)

View File

@ -1,7 +1,7 @@
// Copyright (c) .NET Foundation. All rights reserved. // 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. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
#if NET451 #if NET46
using System; using System;
#endif #endif
using System.IO; 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) protected override void Dispose(bool disposing)
{ {
if (disposing) if (disposing)
@ -124,7 +116,13 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http
return _responseStream.FlushAsync(cancellationToken); 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) public override IAsyncResult BeginRead(byte[] buffer, int offset, int count, AsyncCallback callback, object state)
{ {
return _requestStream.BeginRead(buffer, offset, count, callback, state); return _requestStream.BeginRead(buffer, offset, count, callback, state);
@ -134,6 +132,19 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http
{ {
return _requestStream.EndRead(asyncResult); 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 #endif
public override Task<int> ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken) public override Task<int> 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); 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) public override Task WriteAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken)
{ {
return _responseStream.WriteAsync(buffer, offset, count, cancellationToken); return _responseStream.WriteAsync(buffer, offset, count, cancellationToken);

View File

@ -74,7 +74,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http
return ReadAsync(buffer, offset, count).Result; return ReadAsync(buffer, offset, count).Result;
} }
#if NET451 #if NET46
public override IAsyncResult BeginRead(byte[] buffer, int offset, int count, AsyncCallback callback, object state) public override IAsyncResult BeginRead(byte[] buffer, int offset, int count, AsyncCallback callback, object state)
{ {
var task = ReadAsync(buffer, offset, count, default(CancellationToken), state); var task = ReadAsync(buffer, offset, count, default(CancellationToken), state);
@ -112,6 +112,9 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http
}, tcs, cancellationToken); }, tcs, cancellationToken);
return tcs.Task; return tcs.Task;
} }
#elif NETSTANDARD1_3
#else
#error target frameworks need to be updated
#endif #endif
public override Task<int> ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken) public override Task<int> ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken)
@ -198,15 +201,15 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http
case FrameStreamState.Open: case FrameStreamState.Open:
if (cancellationToken.IsCancellationRequested) if (cancellationToken.IsCancellationRequested)
{ {
return TaskUtilities.GetCancelledZeroTask(cancellationToken); return Task.FromCanceled<int>(cancellationToken);
} }
break; break;
case FrameStreamState.Closed: case FrameStreamState.Closed:
throw new ObjectDisposedException(nameof(FrameRequestStream)); throw new ObjectDisposedException(nameof(FrameRequestStream));
case FrameStreamState.Aborted: case FrameStreamState.Aborted:
return _error != null ? return _error != null ?
TaskUtilities.GetFaultedTask(_error) : Task.FromException<int>(_error) :
TaskUtilities.GetCancelledZeroTask(); Task.FromCanceled<int>(new CancellationToken(true));
} }
return null; return null;
} }

View File

@ -85,7 +85,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http
_frameControl.Write(new ArraySegment<byte>(buffer, offset, count)); _frameControl.Write(new ArraySegment<byte>(buffer, offset, count));
} }
#if NET451 #if NET46
public override IAsyncResult BeginWrite(byte[] buffer, int offset, int count, AsyncCallback callback, object state) public override IAsyncResult BeginWrite(byte[] buffer, int offset, int count, AsyncCallback callback, object state)
{ {
var task = WriteAsync(buffer, offset, count, default(CancellationToken), state); var task = WriteAsync(buffer, offset, count, default(CancellationToken), state);
@ -123,6 +123,9 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http
}, tcs, cancellationToken); }, tcs, cancellationToken);
return tcs.Task; return tcs.Task;
} }
#elif NETSTANDARD1_3
#else
#error target frameworks need to be updated.
#endif #endif
public override Task WriteAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken) 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: case FrameStreamState.Open:
if (cancellationToken.IsCancellationRequested) if (cancellationToken.IsCancellationRequested)
{ {
return TaskUtilities.GetCancelledTask(cancellationToken); return Task.FromCanceled(cancellationToken);
} }
break; break;
case FrameStreamState.Closed: case FrameStreamState.Closed:
@ -189,7 +192,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http
if (cancellationToken.IsCancellationRequested) if (cancellationToken.IsCancellationRequested)
{ {
// Aborted state only throws on write if cancellationToken requests it // Aborted state only throws on write if cancellationToken requests it
return TaskUtilities.GetCancelledTask(cancellationToken); return Task.FromCanceled(cancellationToken);
} }
break; break;
} }

View File

@ -166,7 +166,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http
{ {
_connection.AbortAsync(); _connection.AbortAsync();
_cancelled = true; _cancelled = true;
return TaskUtilities.GetCancelledTask(cancellationToken); return Task.FromCanceled(cancellationToken);
} }
else if (_cancelled) else if (_cancelled)
{ {

View File

@ -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<object>();
tcs.TrySetCanceled();
return tcs.Task;
#endif
}
public static Task<int> 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<int>(cancellationToken);
#else
var tcs = new TaskCompletionSource<int>();
tcs.TrySetCanceled();
return tcs.Task;
#endif
}
public static Task<int> GetFaultedTask(Exception error)
{
#if NETSTANDARD1_3
return Task.FromException<int>(error);
#else
var tcs = new TaskCompletionSource<int>();
tcs.SetException(error);
return tcs.Task;
#endif
}
}
}

View File

@ -4,7 +4,7 @@
<PropertyGroup> <PropertyGroup>
<Description>ASP.NET Core Kestrel cross-platform web server.</Description> <Description>ASP.NET Core Kestrel cross-platform web server.</Description>
<TargetFrameworks>net451;netstandard1.3</TargetFrameworks> <TargetFrameworks>netstandard1.3;net46</TargetFrameworks>
<GenerateDocumentationFile>true</GenerateDocumentationFile> <GenerateDocumentationFile>true</GenerateDocumentationFile>
<PackageTags>aspnetcore;kestrel</PackageTags> <PackageTags>aspnetcore;kestrel</PackageTags>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks> <AllowUnsafeBlocks>true</AllowUnsafeBlocks>

View File

@ -6,6 +6,8 @@
<TargetFrameworks>netcoreapp1.1;net46</TargetFrameworks> <TargetFrameworks>netcoreapp1.1;net46</TargetFrameworks>
<TargetFrameworks Condition=" '$(OS)' != 'Windows_NT' ">netcoreapp1.1</TargetFrameworks> <TargetFrameworks Condition=" '$(OS)' != 'Windows_NT' ">netcoreapp1.1</TargetFrameworks>
<PlatformTarget Condition="'$(TargetFramework)' == 'net46'">x64</PlatformTarget> <PlatformTarget Condition="'$(TargetFramework)' == 'net46'">x64</PlatformTarget>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

View File

@ -90,6 +90,9 @@ namespace Microsoft.AspNetCore.Server.KestrelTests
var stream = new FrameRequestStream(); var stream = new FrameRequestStream();
Assert.Throws<NotSupportedException>(() => stream.BeginWrite(new byte[1], 0, 1, null, null)); Assert.Throws<NotSupportedException>(() => stream.BeginWrite(new byte[1], 0, 1, null, null));
} }
#elif NETCOREAPP1_1
#else
#error target frameworks need to be updated
#endif #endif
[Fact] [Fact]

View File

@ -61,6 +61,9 @@ namespace Microsoft.AspNetCore.Server.KestrelTests
var stream = new FrameResponseStream(new MockFrameControl()); var stream = new FrameResponseStream(new MockFrameControl());
Assert.Throws<NotSupportedException>(() => stream.BeginRead(new byte[1], 0, 1, null, null)); Assert.Throws<NotSupportedException>(() => stream.BeginRead(new byte[1], 0, 1, null, null));
} }
#elif NETCOREAPP1_1
#else
#error target frameworks need to be updated
#endif #endif
[Fact] [Fact]

View File

@ -131,18 +131,8 @@ namespace Microsoft.AspNetCore.Server.KestrelTests
var t = Task.Run(async () => var t = Task.Run(async () =>
{ {
var socket = TestConnection.CreateConnectedLoopbackSocket(port); var socket = TestConnection.CreateConnectedLoopbackSocket(port);
#if NET46
await Task.Factory.FromAsync(
socket.BeginSend,
socket.EndSend,
new[] { new ArraySegment<byte>(new byte[] { 1, 2, 3, 4, 5 }) },
SocketFlags.None,
null,
TaskCreationOptions.None);
#else
await socket.SendAsync(new[] { new ArraySegment<byte>(new byte[] { 1, 2, 3, 4, 5 }) }, await socket.SendAsync(new[] { new ArraySegment<byte>(new byte[] { 1, 2, 3, 4, 5 }) },
SocketFlags.None); SocketFlags.None);
#endif
socket.Dispose(); socket.Dispose();
}); });
loop.Run(); loop.Run();
@ -194,33 +184,13 @@ namespace Microsoft.AspNetCore.Server.KestrelTests
var t = Task.Run(async () => var t = Task.Run(async () =>
{ {
var socket = TestConnection.CreateConnectedLoopbackSocket(port); var socket = TestConnection.CreateConnectedLoopbackSocket(port);
#if NET46
await Task.Factory.FromAsync(
socket.BeginSend,
socket.EndSend,
new[] { new ArraySegment<byte>(new byte[] { 1, 2, 3, 4, 5 }) },
SocketFlags.None,
null,
TaskCreationOptions.None);
#else
await socket.SendAsync(new[] { new ArraySegment<byte>(new byte[] { 1, 2, 3, 4, 5 }) }, await socket.SendAsync(new[] { new ArraySegment<byte>(new byte[] { 1, 2, 3, 4, 5 }) },
SocketFlags.None); SocketFlags.None);
#endif
socket.Shutdown(SocketShutdown.Send); socket.Shutdown(SocketShutdown.Send);
var buffer = new ArraySegment<byte>(new byte[2048]); var buffer = new ArraySegment<byte>(new byte[2048]);
while (true) 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); var count = await socket.ReceiveAsync(new[] { buffer }, SocketFlags.None);
#endif
if (count <= 0) break; if (count <= 0) break;
} }
socket.Dispose(); socket.Dispose();

View File

@ -11,8 +11,10 @@ namespace Microsoft.AspNetCore.Testing
private static readonly string _testCertificatePath = private static readonly string _testCertificatePath =
#if NET46 #if NET46
Path.Combine(Directory.GetCurrentDirectory(), "testCert.pfx"); Path.Combine(Directory.GetCurrentDirectory(), "testCert.pfx");
#else #elif NETCOREAPP1_1
Path.Combine(AppContext.BaseDirectory, "testCert.pfx"); Path.Combine(AppContext.BaseDirectory, "testCert.pfx");
#else
#error Target frameworks need to be updated.
#endif #endif
public static string TestCertificatePath => _testCertificatePath; public static string TestCertificatePath => _testCertificatePath;