Remove net451 as a cross-compile target

This commit is contained in:
Pranav K 2017-03-13 08:46:14 -07:00
parent 0586fd136f
commit 53946e9856
26 changed files with 33 additions and 383 deletions

View File

@ -1,6 +1,6 @@
Microsoft Visual Studio Solution File, Format Version 12.00 Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15 # Visual Studio 15
VisualStudioVersion = 15.0.26202.1 VisualStudioVersion = 15.0.26228.9
MinimumVisualStudioVersion = 10.0.40219.1 MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{99D5E5F3-88F5-4CCF-8D8C-717C8925DF09}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{99D5E5F3-88F5-4CCF-8D8C-717C8925DF09}"
EndProject EndProject
@ -34,6 +34,7 @@ EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{85914BA9-4168-48C5-9C3F-E2E8B1479A6E}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{85914BA9-4168-48C5-9C3F-E2E8B1479A6E}"
ProjectSection(SolutionItems) = preProject ProjectSection(SolutionItems) = preProject
build\common.props = build\common.props build\common.props = build\common.props
build\dependencies.props = build\dependencies.props
build\Key.snk = build\Key.snk build\Key.snk = build\Key.snk
EndProjectSection EndProjectSection
EndProject EndProject

View File

@ -4,6 +4,7 @@
<CoreFxVersion>4.3.0</CoreFxVersion> <CoreFxVersion>4.3.0</CoreFxVersion>
<NetStandardImplicitPackageVersion>1.6.1</NetStandardImplicitPackageVersion> <NetStandardImplicitPackageVersion>1.6.1</NetStandardImplicitPackageVersion>
<RuntimeFrameworkVersion>2.0.0-*</RuntimeFrameworkVersion> <RuntimeFrameworkVersion>2.0.0-*</RuntimeFrameworkVersion>
<SystemNetHttpVersion>4.3.1</SystemNetHttpVersion>
<TestSdkVersion>15.0.0</TestSdkVersion> <TestSdkVersion>15.0.0</TestSdkVersion>
<XunitVersion>2.2.0</XunitVersion> <XunitVersion>2.2.0</XunitVersion>
</PropertyGroup> </PropertyGroup>

View File

@ -3,16 +3,13 @@
<Import Project="..\..\build\dependencies.props" /> <Import Project="..\..\build\dependencies.props" />
<PropertyGroup> <PropertyGroup>
<TargetFrameworks>net451;netcoreapp2.0</TargetFrameworks> <TargetFrameworks>net46;netcoreapp2.0</TargetFrameworks>
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>
<ServerGarbageCollection>true</ServerGarbageCollection> <ServerGarbageCollection>true</ServerGarbageCollection>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\..\src\Microsoft.AspNetCore.Server.HttpSys\Microsoft.AspNetCore.Server.HttpSys.csproj" /> <ProjectReference Include="..\..\src\Microsoft.AspNetCore.Server.HttpSys\Microsoft.AspNetCore.Server.HttpSys.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="$(AspNetCoreVersion)" /> <PackageReference Include="Microsoft.Extensions.Logging.Console" Version="$(AspNetCoreVersion)" />
</ItemGroup> </ItemGroup>

View File

@ -3,16 +3,13 @@
<Import Project="..\..\build\dependencies.props" /> <Import Project="..\..\build\dependencies.props" />
<PropertyGroup> <PropertyGroup>
<TargetFrameworks>net451;netcoreapp2.0</TargetFrameworks> <TargetFrameworks>net46;netcoreapp2.0</TargetFrameworks>
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>
<ServerGarbageCollection>true</ServerGarbageCollection> <ServerGarbageCollection>true</ServerGarbageCollection>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\..\src\Microsoft.AspNetCore.Server.HttpSys\Microsoft.AspNetCore.Server.HttpSys.csproj" /> <ProjectReference Include="..\..\src\Microsoft.AspNetCore.Server.HttpSys\Microsoft.AspNetCore.Server.HttpSys.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="$(AspNetCoreVersion)" /> <PackageReference Include="Microsoft.Extensions.Logging.Console" Version="$(AspNetCoreVersion)" />
</ItemGroup> </ItemGroup>

View File

@ -4,7 +4,7 @@
<PropertyGroup> <PropertyGroup>
<Description>ASP.NET Core HTTP server that uses the Windows HTTP Server API.</Description> <Description>ASP.NET Core HTTP server that uses the Windows HTTP Server API.</Description>
<TargetFrameworks>net451;netstandard1.3</TargetFrameworks> <TargetFrameworks>net46;netstandard1.3</TargetFrameworks>
<NoWarn>$(NoWarn);CS1591</NoWarn> <NoWarn>$(NoWarn);CS1591</NoWarn>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks> <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<GenerateDocumentationFile>true</GenerateDocumentationFile> <GenerateDocumentationFile>true</GenerateDocumentationFile>
@ -16,11 +16,11 @@
<PackageReference Include="Microsoft.Extensions.RuntimeEnvironment.Sources" Version="$(AspNetCoreVersion)" PrivateAssets="All" /> <PackageReference Include="Microsoft.Extensions.RuntimeEnvironment.Sources" Version="$(AspNetCoreVersion)" PrivateAssets="All" />
<PackageReference Include="Microsoft.Extensions.TaskCache.Sources" Version="$(AspNetCoreVersion)" PrivateAssets="All" /> <PackageReference Include="Microsoft.Extensions.TaskCache.Sources" Version="$(AspNetCoreVersion)" PrivateAssets="All" />
<PackageReference Include="Microsoft.Net.Http.Headers" Version="$(AspNetCoreVersion)" /> <PackageReference Include="Microsoft.Net.Http.Headers" Version="$(AspNetCoreVersion)" />
<PackageReference Include="System.Threading.Overlapped" Version="$(CoreFxVersion)" />
</ItemGroup> </ItemGroup>
<ItemGroup Condition=" '$(TargetFramework)' == 'netstandard1.3' "> <ItemGroup Condition=" '$(TargetFramework)' == 'netstandard1.3' ">
<PackageReference Include="System.Security.Principal.Windows" Version="$(CoreFxVersion)" /> <PackageReference Include="System.Security.Principal.Windows" Version="$(CoreFxVersion)" />
<PackageReference Include="System.Threading.Overlapped" Version="$(CoreFxVersion)" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -3,7 +3,7 @@
namespace Microsoft.AspNetCore.Server.HttpSys namespace Microsoft.AspNetCore.Server.HttpSys
{ {
#if NET451 #if NET46
/// <devdoc> /// <devdoc>
/// <para> /// <para>
/// Specifies the address families that an instance of the <see cref="System.Net.Sockets.Socket"/> /// Specifies the address families that an instance of the <see cref="System.Net.Sockets.Socket"/>

View File

@ -1,88 +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.
#if !NETSTANDARD1_3 // TODO: Temp copy. Remove once we target net46.
using System;
namespace System.Threading
{
internal struct DeferredDisposableLifetime<T> where T : class, IDeferredDisposable
{
private int _count;
public bool AddRef(T obj)
{
while (true)
{
int num = Volatile.Read(ref this._count);
if (num < 0)
{
break;
}
int num2 = checked(num + 1);
if (Interlocked.CompareExchange(ref this._count, num2, num) == num)
{
return true;
}
}
throw new ObjectDisposedException(typeof(T).ToString());
}
public void Release(T obj)
{
int num2;
int num3;
while (true)
{
int num = Volatile.Read(ref this._count);
if (num > 0)
{
num2 = num - 1;
if (Interlocked.CompareExchange(ref this._count, num2, num) == num)
{
break;
}
}
else
{
num3 = num + 1;
if (Interlocked.CompareExchange(ref this._count, num3, num) == num)
{
goto Block_3;
}
}
}
if (num2 == 0)
{
obj.OnFinalRelease(false);
}
return;
Block_3:
if (num3 == -1)
{
obj.OnFinalRelease(true);
}
}
public void Dispose(T obj)
{
int num2;
while (true)
{
int num = Volatile.Read(ref this._count);
if (num < 0)
{
break;
}
num2 = -1 - num;
if (Interlocked.CompareExchange(ref this._count, num2, num) == num)
{
goto Block_1;
}
}
return;
Block_1:
if (num2 == -1)
{
obj.OnFinalRelease(true);
}
}
}
}
#endif

View File

@ -1,13 +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.
#if !NETSTANDARD1_3 // TODO: Temp copy. Remove once we target net46.
using System;
namespace System.Threading
{
internal interface IDeferredDisposable
{
void OnFinalRelease(bool disposed);
}
}
#endif

View File

@ -1,53 +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.
#if !NETSTANDARD1_3 // TODO: Temp copy. Remove once we target net46.
using System;
namespace System.Threading
{
internal sealed class PreAllocatedOverlapped : IDisposable, IDeferredDisposable
{
internal readonly ThreadPoolBoundHandleOverlapped _overlapped;
private DeferredDisposableLifetime<PreAllocatedOverlapped> _lifetime;
public PreAllocatedOverlapped(IOCompletionCallback callback, object state, object pinData)
{
if (callback == null)
{
throw new ArgumentNullException("callback");
}
this._overlapped = new ThreadPoolBoundHandleOverlapped(callback, state, pinData, this);
}
internal bool AddRef()
{
return this._lifetime.AddRef(this);
}
internal void Release()
{
this._lifetime.Release(this);
}
public void Dispose()
{
this._lifetime.Dispose(this);
GC.SuppressFinalize(this);
}
~PreAllocatedOverlapped()
{
if (!Environment.HasShutdownStarted)
{
this.Dispose();
}
}
unsafe void IDeferredDisposable.OnFinalRelease(bool disposed)
{
if (disposed)
{
Overlapped.Free(this._overlapped._nativeOverlapped);
return;
}
this._overlapped._boundHandle = null;
this._overlapped._completed = false;
*this._overlapped._nativeOverlapped = default(NativeOverlapped);
}
}
}
#endif

View File

@ -1,146 +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.
#if !NETSTANDARD1_3 // TODO: Temp copy. Remove once we target net46.
using System;
using System.Runtime.InteropServices;
namespace System.Threading
{
internal sealed class ThreadPoolBoundHandle : IDisposable
{
private readonly SafeHandle _handle;
private bool _isDisposed;
public SafeHandle Handle
{
get
{
return this._handle;
}
}
private ThreadPoolBoundHandle(SafeHandle handle)
{
this._handle = handle;
}
public static ThreadPoolBoundHandle BindHandle(SafeHandle handle)
{
if (handle == null)
{
throw new ArgumentNullException("handle");
}
if (handle.IsClosed || handle.IsInvalid)
{
throw new ArgumentException("Invalid Handle", "handle");
}
try
{
ThreadPool.BindHandle(handle);
}
catch (Exception expr_38)
{
if (expr_38.HResult == -2147024890)
{
throw new ArgumentException("Invalid Handle", "handle");
}
if (expr_38.HResult == -2147024809)
{
throw new ArgumentException("Already Bound", "handle");
}
throw;
}
return new ThreadPoolBoundHandle(handle);
}
public unsafe NativeOverlapped* AllocateNativeOverlapped(IOCompletionCallback callback, object state, object pinData)
{
if (callback == null)
{
throw new ArgumentNullException("callback");
}
this.EnsureNotDisposed();
return new ThreadPoolBoundHandleOverlapped(callback, state, pinData, null)
{
_boundHandle = this
}._nativeOverlapped;
}
public unsafe NativeOverlapped* AllocateNativeOverlapped(PreAllocatedOverlapped preAllocated)
{
if (preAllocated == null)
{
throw new ArgumentNullException("preAllocated");
}
this.EnsureNotDisposed();
preAllocated.AddRef();
NativeOverlapped* nativeOverlapped;
try
{
ThreadPoolBoundHandleOverlapped expr_21 = preAllocated._overlapped;
if (expr_21._boundHandle != null)
{
throw new ArgumentException("Already Allocated", "preAllocated");
}
expr_21._boundHandle = this;
nativeOverlapped = expr_21._nativeOverlapped;
}
catch
{
preAllocated.Release();
throw;
}
return nativeOverlapped;
}
public unsafe void FreeNativeOverlapped(NativeOverlapped* overlapped)
{
if (overlapped == null)
{
throw new ArgumentNullException("overlapped");
}
ThreadPoolBoundHandleOverlapped overlappedWrapper = ThreadPoolBoundHandle.GetOverlappedWrapper(overlapped, this);
if (overlappedWrapper._boundHandle != this)
{
throw new ArgumentException("Wrong bound handle", "overlapped");
}
if (overlappedWrapper._preAllocated != null)
{
overlappedWrapper._preAllocated.Release();
return;
}
Overlapped.Free(overlapped);
}
public unsafe static object GetNativeOverlappedState(NativeOverlapped* overlapped)
{
if (overlapped == null)
{
throw new ArgumentNullException("overlapped");
}
return ThreadPoolBoundHandle.GetOverlappedWrapper(overlapped, null)._userState;
}
private unsafe static ThreadPoolBoundHandleOverlapped GetOverlappedWrapper(NativeOverlapped* overlapped, ThreadPoolBoundHandle expectedBoundHandle)
{
ThreadPoolBoundHandleOverlapped result;
try
{
result = (ThreadPoolBoundHandleOverlapped)Overlapped.Unpack(overlapped);
}
catch (NullReferenceException ex)
{
throw new ArgumentException("Already freed", "overlapped", ex);
}
return result;
}
public void Dispose()
{
this._isDisposed = true;
}
private void EnsureNotDisposed()
{
if (this._isDisposed)
{
throw new ObjectDisposedException(base.GetType().ToString());
}
}
}
}
#endif

View File

@ -1,41 +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.
#if !NETSTANDARD1_3 // TODO: Temp copy. Remove once we target net46.
using System;
namespace System.Threading
{
internal sealed class ThreadPoolBoundHandleOverlapped : Overlapped
{
private readonly IOCompletionCallback _userCallback;
internal readonly object _userState;
internal PreAllocatedOverlapped _preAllocated;
internal unsafe NativeOverlapped* _nativeOverlapped;
internal ThreadPoolBoundHandle _boundHandle;
internal bool _completed;
public unsafe ThreadPoolBoundHandleOverlapped(IOCompletionCallback callback, object state, object pinData, PreAllocatedOverlapped preAllocated)
{
this._userCallback = callback;
this._userState = state;
this._preAllocated = preAllocated;
this._nativeOverlapped = base.Pack(new IOCompletionCallback(ThreadPoolBoundHandleOverlapped.CompletionCallback), pinData);
this._nativeOverlapped->OffsetLow = 0;
this._nativeOverlapped->OffsetHigh = 0;
}
private unsafe static void CompletionCallback(uint errorCode, uint numBytes, NativeOverlapped* nativeOverlapped)
{
ThreadPoolBoundHandleOverlapped expr_0B = (ThreadPoolBoundHandleOverlapped)Overlapped.Unpack(nativeOverlapped);
if (expr_0B._completed)
{
throw new InvalidOperationException("Native Overlapped reused");
}
expr_0B._completed = true;
if (expr_0B._boundHandle == null)
{
throw new InvalidOperationException("Already freed");
}
expr_0B._userCallback.Invoke(errorCode, numBytes, nativeOverlapped);
}
}
}
#endif

View File

@ -9,7 +9,6 @@ using System.Threading.Tasks;
using Microsoft.AspNetCore.Http.Features.Authentication; using Microsoft.AspNetCore.Http.Features.Authentication;
using Microsoft.AspNetCore.Testing.xunit; using Microsoft.AspNetCore.Testing.xunit;
using Xunit; using Xunit;
using AuthenticationSchemes = Microsoft.AspNetCore.Server.HttpSys.AuthenticationSchemes;
namespace Microsoft.AspNetCore.Server.HttpSys namespace Microsoft.AspNetCore.Server.HttpSys
{ {

View File

@ -102,7 +102,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys
private async Task<string> SendRequestAsync(string uri, private async Task<string> SendRequestAsync(string uri,
X509Certificate cert = null) X509Certificate cert = null)
{ {
#if NET452 #if NET46
var handler = new WebRequestHandler(); var handler = new WebRequestHandler();
#elif NETCOREAPP2_0 #elif NETCOREAPP2_0
var handler = new WinHttpHandler(); var handler = new WinHttpHandler();
@ -122,7 +122,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys
private async Task<string> SendRequestAsync(string uri, string upload) private async Task<string> SendRequestAsync(string uri, string upload)
{ {
#if NET452 #if NET46
var handler = new WebRequestHandler(); var handler = new WebRequestHandler();
#elif NETCOREAPP2_0 #elif NETCOREAPP2_0
var handler = new WinHttpHandler(); var handler = new WinHttpHandler();

View File

@ -109,7 +109,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener
private async Task<string> SendRequestAsync(string uri, private async Task<string> SendRequestAsync(string uri,
X509Certificate cert = null) X509Certificate cert = null)
{ {
#if NET452 #if NET46
WebRequestHandler handler = new WebRequestHandler(); WebRequestHandler handler = new WebRequestHandler();
#elif NETCOREAPP2_0 #elif NETCOREAPP2_0
WinHttpHandler handler = new WinHttpHandler(); WinHttpHandler handler = new WinHttpHandler();
@ -129,7 +129,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener
private async Task<string> SendRequestAsync(string uri, string upload) private async Task<string> SendRequestAsync(string uri, string upload)
{ {
#if NET452 #if NET46
WebRequestHandler handler = new WebRequestHandler(); WebRequestHandler handler = new WebRequestHandler();
#elif NETCOREAPP2_0 #elif NETCOREAPP2_0
WinHttpHandler handler = new WinHttpHandler(); WinHttpHandler handler = new WinHttpHandler();

View File

@ -53,7 +53,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener
Assert.Equal("Hello World", response); Assert.Equal("Hello World", response);
} }
} }
#if NET452 #if NET46
[ConditionalFact] [ConditionalFact]
public async Task RequestBody_ReadBeginEnd_Success() public async Task RequestBody_ReadBeginEnd_Success()
{ {

View File

@ -98,7 +98,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener
var context = await server.AcceptAsync(Utilities.DefaultTimeout); var context = await server.AcceptAsync(Utilities.DefaultTimeout);
context.Response.Headers["Content-lenGth"] = " 30 "; context.Response.Headers["Content-lenGth"] = " 30 ";
var stream = context.Response.Body; var stream = context.Response.Body;
#if NET452 #if NET46
stream.EndWrite(stream.BeginWrite(new byte[10], 0, 10, null, null)); stream.EndWrite(stream.BeginWrite(new byte[10], 0, 10, null, null));
#elif NETCOREAPP2_0 #elif NETCOREAPP2_0
await stream.WriteAsync(new byte[10], 0, 10); await stream.WriteAsync(new byte[10], 0, 10);
@ -131,7 +131,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener
var context = await server.AcceptAsync(Utilities.DefaultTimeout); var context = await server.AcceptAsync(Utilities.DefaultTimeout);
context.Response.Headers["Content-lenGth"] = " 20 "; context.Response.Headers["Content-lenGth"] = " 20 ";
context.Dispose(); context.Dispose();
#if NET452 #if NET46
// HttpClient retries the request because it didn't get a response. // HttpClient retries the request because it didn't get a response.
context = await server.AcceptAsync(Utilities.DefaultTimeout); context = await server.AcceptAsync(Utilities.DefaultTimeout);
context.Response.Headers["Content-lenGth"] = " 20 "; context.Response.Headers["Content-lenGth"] = " 20 ";
@ -287,7 +287,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener
var writeTask = context.Response.Body.WriteAsync(new byte[10], 0, 10, cts.Token); var writeTask = context.Response.Body.WriteAsync(new byte[10], 0, 10, cts.Token);
Assert.True(writeTask.IsCanceled); Assert.True(writeTask.IsCanceled);
context.Dispose(); context.Dispose();
#if NET452 #if NET46
// .NET 4.5 HttpClient automatically retries a request if it does not get a response. // .NET 4.5 HttpClient automatically retries a request if it does not get a response.
context = await server.AcceptAsync(Utilities.DefaultTimeout); context = await server.AcceptAsync(Utilities.DefaultTimeout);
cts = new CancellationTokenSource(); cts = new CancellationTokenSource();
@ -319,7 +319,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener
var writeTask = context.Response.Body.WriteAsync(new byte[10], 0, 10, cts.Token); var writeTask = context.Response.Body.WriteAsync(new byte[10], 0, 10, cts.Token);
Assert.True(writeTask.IsCanceled); Assert.True(writeTask.IsCanceled);
context.Dispose(); context.Dispose();
#if NET452 #if NET46
// .NET 4.5 HttpClient automatically retries a request if it does not get a response. // .NET 4.5 HttpClient automatically retries a request if it does not get a response.
context = await server.AcceptAsync(Utilities.DefaultTimeout); context = await server.AcceptAsync(Utilities.DefaultTimeout);
cts = new CancellationTokenSource(); cts = new CancellationTokenSource();

View File

@ -223,7 +223,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener
Assert.Equal("Microsoft-HTTPAPI/2.0", response.Headers["Server"]); Assert.Equal("Microsoft-HTTPAPI/2.0", response.Headers["Server"]);
#if NETCOREAPP2_0 // WebHeaderCollection.GetValues() not available in CoreCLR. #if NETCOREAPP2_0 // WebHeaderCollection.GetValues() not available in CoreCLR.
Assert.Equal("custom1, and custom2, custom3", response.Headers["WWW-Authenticate"]); Assert.Equal("custom1, and custom2, custom3", response.Headers["WWW-Authenticate"]);
#elif NET452 #elif NET46
Assert.Equal(new string[] { "custom1, and custom2", "custom3" }, response.Headers.GetValues("WWW-Authenticate")); Assert.Equal(new string[] { "custom1, and custom2", "custom3" }, response.Headers.GetValues("WWW-Authenticate"));
#else #else
#error Target framework needs to be updated #error Target framework needs to be updated
@ -254,7 +254,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener
Assert.Equal("Microsoft-HTTPAPI/2.0", response.Headers["Server"]); Assert.Equal("Microsoft-HTTPAPI/2.0", response.Headers["Server"]);
#if NETCOREAPP2_0 // WebHeaderCollection.GetValues() not available in CoreCLR. #if NETCOREAPP2_0 // WebHeaderCollection.GetValues() not available in CoreCLR.
Assert.Equal("custom1, and custom2, custom3", response.Headers["Custom-Header1"]); Assert.Equal("custom1, and custom2, custom3", response.Headers["Custom-Header1"]);
#elif NET452 #elif NET46
Assert.Equal(new string[] { "custom1, and custom2", "custom3" }, response.Headers.GetValues("Custom-Header1")); Assert.Equal(new string[] { "custom1, and custom2", "custom3" }, response.Headers.GetValues("Custom-Header1"));
#else #else
#error Target framework needs to be updated #error Target framework needs to be updated

View File

@ -362,7 +362,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener
var writeTask = context.Response.SendFileAsync(AbsoluteFilePath, 0, null, cts.Token); var writeTask = context.Response.SendFileAsync(AbsoluteFilePath, 0, null, cts.Token);
Assert.True(writeTask.IsCanceled); Assert.True(writeTask.IsCanceled);
context.Dispose(); context.Dispose();
#if NET452 #if NET46
// .NET 4.5 HttpClient automatically retries a request if it does not get a response. // .NET 4.5 HttpClient automatically retries a request if it does not get a response.
context = await server.AcceptAsync(Utilities.DefaultTimeout); context = await server.AcceptAsync(Utilities.DefaultTimeout);
cts = new CancellationTokenSource(); cts = new CancellationTokenSource();
@ -394,7 +394,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener
var writeTask = context.Response.SendFileAsync(AbsoluteFilePath, 0, null, cts.Token); var writeTask = context.Response.SendFileAsync(AbsoluteFilePath, 0, null, cts.Token);
Assert.True(writeTask.IsCanceled); Assert.True(writeTask.IsCanceled);
context.Dispose(); context.Dispose();
#if NET452 #if NET46
// .NET 4.5 HttpClient automatically retries a request if it does not get a response. // .NET 4.5 HttpClient automatically retries a request if it does not get a response.
context = await server.AcceptAsync(Utilities.DefaultTimeout); context = await server.AcceptAsync(Utilities.DefaultTimeout);
cts = new CancellationTokenSource(); cts = new CancellationTokenSource();

View File

@ -186,7 +186,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener
context.Abort(); context.Abort();
Assert.True(canceled.WaitOne(interval), "Aborted"); Assert.True(canceled.WaitOne(interval), "Aborted");
Assert.True(ct.IsCancellationRequested, "IsCancellationRequested"); Assert.True(ct.IsCancellationRequested, "IsCancellationRequested");
#if NET452 #if NET46
// HttpClient re-tries the request because it doesn't know if the request was received. // HttpClient re-tries the request because it doesn't know if the request was received.
context = await server.AcceptAsync(Utilities.DefaultTimeout); context = await server.AcceptAsync(Utilities.DefaultTimeout);
context.Abort(); context.Abort();

View File

@ -18,7 +18,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener
{ {
try try
{ {
#if NET452 #if NET46
return !string.IsNullOrEmpty(System.DirectoryServices.ActiveDirectory.Domain.GetComputerDomain().Name); return !string.IsNullOrEmpty(System.DirectoryServices.ActiveDirectory.Domain.GetComputerDomain().Name);
#elif NETCOREAPP2_0 #elif NETCOREAPP2_0
#else #else

View File

@ -2,7 +2,6 @@
// 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.
using System; using System;
using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.Extensions.Internal; using Microsoft.Extensions.Internal;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
@ -25,8 +24,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys.Listener
static Utilities() static Utilities()
{ {
var win8Version = new Version(6, 2); var win8Version = new Version(6, 2);
#if NET46
#if NET452
IsWin8orLater = (Environment.OSVersion.Version >= win8Version); IsWin8orLater = (Environment.OSVersion.Version >= win8Version);
#elif NETCOREAPP2_0 #elif NETCOREAPP2_0
IsWin8orLater = (new Version(RuntimeEnvironment.OperatingSystemVersion) >= win8Version); IsWin8orLater = (new Version(RuntimeEnvironment.OperatingSystemVersion) >= win8Version);

View File

@ -3,7 +3,7 @@
<Import Project="..\..\build\common.props" /> <Import Project="..\..\build\common.props" />
<PropertyGroup> <PropertyGroup>
<TargetFrameworks>netcoreapp2.0;net452</TargetFrameworks> <TargetFrameworks>netcoreapp2.0;net46</TargetFrameworks>
<TargetFrameworks Condition=" '$(OS)' != 'Windows_NT' ">netcoreapp2.0</TargetFrameworks> <TargetFrameworks Condition=" '$(OS)' != 'Windows_NT' ">netcoreapp2.0</TargetFrameworks>
</PropertyGroup> </PropertyGroup>
@ -16,9 +16,10 @@
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="$(TestSdkVersion)" /> <PackageReference Include="Microsoft.NET.Test.Sdk" Version="$(TestSdkVersion)" />
<PackageReference Include="xunit" Version="$(XunitVersion)" /> <PackageReference Include="xunit" Version="$(XunitVersion)" />
<PackageReference Include="xunit.runner.visualstudio" Version="$(XunitVersion)" /> <PackageReference Include="xunit.runner.visualstudio" Version="$(XunitVersion)" />
<PackageReference Include="System.Net.Http" Version="$(SystemNetHttpVersion)" />
</ItemGroup> </ItemGroup>
<ItemGroup Condition=" '$(TargetFramework)' == 'net452' "> <ItemGroup Condition=" '$(TargetFramework)' == 'net46' ">
<Reference Include="System.DirectoryServices" /> <Reference Include="System.DirectoryServices" />
<Reference Include="System.Net.Http" /> <Reference Include="System.Net.Http" />
<Reference Include="System.Net.Http.WebRequest" /> <Reference Include="System.Net.Http.WebRequest" />

View File

@ -50,7 +50,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys
Assert.Equal("Hello World", response); Assert.Equal("Hello World", response);
} }
} }
#if NET452 #if NET46
[ConditionalFact] [ConditionalFact]
public async Task RequestBody_ReadBeginEnd_Success() public async Task RequestBody_ReadBeginEnd_Success()
{ {

View File

@ -87,7 +87,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys
{ {
httpContext.Response.Headers["Content-lenGth"] = " 30 "; httpContext.Response.Headers["Content-lenGth"] = " 30 ";
Stream stream = httpContext.Response.Body; Stream stream = httpContext.Response.Body;
#if NET452 #if NET46
stream.EndWrite(stream.BeginWrite(new byte[10], 0, 10, null, null)); stream.EndWrite(stream.BeginWrite(new byte[10], 0, 10, null, null));
#elif NETCOREAPP2_0 #elif NETCOREAPP2_0
await stream.WriteAsync(new byte[10], 0, 10); await stream.WriteAsync(new byte[10], 0, 10);
@ -223,7 +223,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys
Assert.Equal(new byte[10], await response.Content.ReadAsByteArrayAsync()); Assert.Equal(new byte[10], await response.Content.ReadAsByteArrayAsync());
} }
} }
#if NET452 #if NET46
[ConditionalFact] [ConditionalFact]
public async Task ResponseBody_BeginWrite_TriggersOnStarting() public async Task ResponseBody_BeginWrite_TriggersOnStarting()
{ {

View File

@ -83,7 +83,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys
Assert.Equal("Microsoft-HTTPAPI/2.0", response.Headers["Server"]); Assert.Equal("Microsoft-HTTPAPI/2.0", response.Headers["Server"]);
#if NETCOREAPP2_0 // WebHeaderCollection.GetValues() not available in CoreCLR. #if NETCOREAPP2_0 // WebHeaderCollection.GetValues() not available in CoreCLR.
Assert.Equal("custom1, and custom2, custom3", response.Headers["WWW-Authenticate"]); Assert.Equal("custom1, and custom2, custom3", response.Headers["WWW-Authenticate"]);
#elif NET452 #elif NET46
Assert.Equal(new string[] { "custom1, and custom2", "custom3" }, response.Headers.GetValues("WWW-Authenticate")); Assert.Equal(new string[] { "custom1, and custom2", "custom3" }, response.Headers.GetValues("WWW-Authenticate"));
#else #else
#error Target framework needs to be updated #error Target framework needs to be updated
@ -113,7 +113,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys
Assert.Equal("Microsoft-HTTPAPI/2.0", response.Headers["Server"]); Assert.Equal("Microsoft-HTTPAPI/2.0", response.Headers["Server"]);
#if NETCOREAPP2_0 // WebHeaderCollection.GetValues() not available in CoreCLR. #if NETCOREAPP2_0 // WebHeaderCollection.GetValues() not available in CoreCLR.
Assert.Equal("custom1, and custom2, custom3", response.Headers["Custom-Header1"]); Assert.Equal("custom1, and custom2, custom3", response.Headers["Custom-Header1"]);
#elif NET452 #elif NET46
Assert.Equal(new string[] { "custom1, and custom2", "custom3" }, response.Headers.GetValues("Custom-Header1")); Assert.Equal(new string[] { "custom1, and custom2", "custom3" }, response.Headers.GetValues("Custom-Header1"));
#else #else
#error Target framework needs to be updated #error Target framework needs to be updated

View File

@ -3,15 +3,12 @@
<Import Project="..\..\build\common.props" /> <Import Project="..\..\build\common.props" />
<PropertyGroup> <PropertyGroup>
<TargetFrameworks>netcoreapp2.0;net452</TargetFrameworks> <TargetFrameworks>netcoreapp2.0;net46</TargetFrameworks>
<TargetFrameworks Condition=" '$(OS)' != 'Windows_NT' ">netcoreapp2.0</TargetFrameworks> <TargetFrameworks Condition=" '$(OS)' != 'Windows_NT' ">netcoreapp2.0</TargetFrameworks>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\..\src\Microsoft.AspNetCore.Server.HttpSys\Microsoft.AspNetCore.Server.HttpSys.csproj" /> <ProjectReference Include="..\..\src\Microsoft.AspNetCore.Server.HttpSys\Microsoft.AspNetCore.Server.HttpSys.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="$(TestSdkVersion)" /> <PackageReference Include="Microsoft.NET.Test.Sdk" Version="$(TestSdkVersion)" />
<PackageReference Include="xunit" Version="$(XunitVersion)" /> <PackageReference Include="xunit" Version="$(XunitVersion)" />
<PackageReference Include="xunit.runner.visualstudio" Version="$(XunitVersion)" /> <PackageReference Include="xunit.runner.visualstudio" Version="$(XunitVersion)" />