diff --git a/build/buildorder.props b/build/buildorder.props
index 512cca0827fe78c73df76f85e7e39e8bed3aa191..227658df56e1958595bdfcef2e51882fb3e8e116 100644
--- a/build/buildorder.props
+++ b/build/buildorder.props
@@ -9,7 +9,6 @@
   <ItemGroup>
     <RepositoryBuildOrder Include="Razor" Order="6" />
     <RepositoryBuildOrder Include="IISIntegration" Order="10" />
-    <RepositoryBuildOrder Include="Session" Order="11" />
     <RepositoryBuildOrder Include="ServerTests" Order="11" />
     <RepositoryBuildOrder Include="Security" Order="13" />
     <RepositoryBuildOrder Include="MetaPackages" Order="13" />
diff --git a/build/repo.props b/build/repo.props
index 6d0bae2aaf686ee29086494822f41d1a23ed778c..ec1af59d4873db463e709d7c1949b612f8d83579 100644
--- a/build/repo.props
+++ b/build/repo.props
@@ -62,6 +62,13 @@
 
     <ProjectToExclude Include="@(SamplesProject)" Condition="'$(BuildSamples)' == 'false' "/>
 
+    <!-- These projects use 'legacy' csproj, which is not supported by dotnet-msbuild. -->
+    <ProjectToExclude Include="
+                      $(RepositoryRoot)src\Servers\HttpSys\samples\TestClient\TestClient.csproj;
+                      $(RepositoryRoot)src\Middleware\WebSockets\samples\TestServer\TestServer.csproj;
+                      "
+                      Condition=" '$(MSBuildRuntimeType)' == 'Core' " />
+
     <!-- Exclude the websockets samples for now because they use classic .csproj, which is not yet supported in our build. -->
     <ProjectToExclude Include="
                        $(RepositoryRoot)src\Middleware\WebSockets\samples\**\*.csproj;
diff --git a/build/submodules.props b/build/submodules.props
index b0e32574315dcd520bd382c523d5848ddefc8530..0c239bbfecaca65fcde127c6530e862aafffe5be 100644
--- a/build/submodules.props
+++ b/build/submodules.props
@@ -46,7 +46,6 @@
     <Repository Include="Mvc" />
     <Repository Include="Razor" />
     <Repository Include="Security" />
-    <Repository Include="Session" />
     <Repository Include="SignalR" />
     <Repository Include="Templating" PatchPolicy="AlwaysUpdateAndCascadeVersions" />
 
diff --git a/docs/BuildFromSource.md b/docs/BuildFromSource.md
index f7bea9946675379e176644e6405487bc0ed504eb..7bfdf52d4adc707fd77e323d739dca527b172be7 100644
--- a/docs/BuildFromSource.md
+++ b/docs/BuildFromSource.md
@@ -57,11 +57,11 @@ Before opening our .sln files in Visual Studio or VS Code, you need to perform t
 
 1. Executing the following on command-line:
    ```
-   .\build.cmd /p:SkipTests=true /p:_ProjectsOnly=true
+   .\build.cmd /p:SkipTests=true /p:_ProjectsOnly=true /p:BuildNumberSuffix=t999
    ```
    This will download required tools and build the entire repository once. At that point, you should be able to open .sln files to work on the projects you care about.
-   
-2. Update your `PATH` environment variable. (See [below for details](#path).)
+
+2. Use the `startvs.cmd` script to open Visual Studio .sln files. This script first sets required environment variables.
 
 > :bulb: Pro tip: you will also want to run this command after pulling large sets of changes. Visual Studio will only build projects in a solution file, and makes a best effort to use other files on disk. If you pull many changes, the files on disk may be stale and will need to re-build.
 
@@ -84,20 +84,35 @@ Opening solution files may produce an error code NU1105 with a message such
 
 This is a known issue in NuGet (<https://github.com/NuGet/Home/issues/5820>) and we are working with them for a solution. See also <https://github.com/aspnet/AspNetCore/issues/4183> to track progress on this.
 
-**The workaround** for now is to disable NuGet restore in Visual Studio.
+**The workaround** for now is to add all projects to the solution.
+
+    dotnet sln add C:\src\AspNetCore\src\Hosting\Abstractions\src\Microsoft.AspNetCore.Hosting.Abstractions.csproj
 
-![screenshot](https://i.imgur.com/cTKP381.png)
 
 #### PATH
 
-For VS Code and Visual Studio to work correctly, you must place the following location in your PATH.
+For VS Code and Visual Studio and `dotnet` commands to work correctly, you must place the following location in your PATH.
+Use the following commands to update the PATH variable in a command line window.
+
+Windows (Command Prompt)
+
+```batch
+set PATH=%USERPROFILE%\.dotnet\x64;%PATH%
 ```
-Windows: %USERPROFILE%\.dotnet\x64
-Linux/macOS: $HOME/.dotnet
+
+Windows (Powershell)
+
+```ps1
+$env:PATH="$env:USERPROFILE\.dotnet\x64;$env:PATH"
+```
+
+Linux/macOS:
+
+```sh
+export PATH="$HOME/.dotnet:$PATH"
 ```
-This must come **before** any other installation of `dotnet`. In Windows, we recommend removing `C:\Program Files\dotnet` from PATH in system variables and adding `%USERPROFILE%\.dotnet\x64` to PATH in user variables.
 
-<img src="http://i.imgur.com/Tm2PAfy.png" width="400" />
+On Windows, we recommend using the `startvs.cmd` command to launch Visual Studio.
 
 ## Building on command-line
 
diff --git a/eng/Baseline.Designer.props b/eng/Baseline.Designer.props
index 4c1e38844de1861f4d56e9e763c19d4a55b08de3..8f5460b22480cb496772884076cfeab09a5c8db6 100644
--- a/eng/Baseline.Designer.props
+++ b/eng/Baseline.Designer.props
@@ -509,6 +509,17 @@
     <BaselinePackageReference Include="Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets" Version="[2.2.0, )" />
     <BaselinePackageReference Include="Microsoft.AspNetCore.Hosting" Version="[2.2.0, )" />
   </ItemGroup>
+  <!-- Package: Microsoft.AspNetCore.Session-->
+  <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Session' ">
+    <BaselinePackageVersion>2.2.0</BaselinePackageVersion>
+  </PropertyGroup>
+  <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Session' AND '$(TargetFramework)' == 'netstandard2.0' ">
+    <BaselinePackageReference Include="Microsoft.AspNetCore.DataProtection" Version="[2.2.0, )" />
+    <BaselinePackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="[2.2.0, )" />
+    <BaselinePackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="[2.2.0, )" />
+    <BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[2.2.0, )" />
+    <BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[2.2.0, )" />
+  </ItemGroup>
   <!-- Package: Microsoft.AspNetCore.StaticFiles-->
   <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.StaticFiles' ">
     <BaselinePackageVersion>2.2.0</BaselinePackageVersion>
diff --git a/eng/Baseline.xml b/eng/Baseline.xml
index d88dbac12156df60f8d56b9021e959f5350d3069..97364fe67cd8a9d75203fdb91bb8edb103ef296a 100644
--- a/eng/Baseline.xml
+++ b/eng/Baseline.xml
@@ -52,6 +52,7 @@
   <Package Id="Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv" Version="2.2.0" />
   <Package Id="Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets" Version="2.2.0" />
   <Package Id="Microsoft.AspNetCore.Server.Kestrel" Version="2.2.0" />
+  <Package Id="Microsoft.AspNetCore.Session" Version="2.2.0" />
   <Package Id="Microsoft.AspNetCore.StaticFiles" Version="2.2.0" />
   <Package Id="Microsoft.AspNetCore.TestHost" Version="2.2.0" />
   <Package Id="Microsoft.AspNetCore.WebSockets" Version="2.2.0" />
diff --git a/eng/Dependencies.props b/eng/Dependencies.props
index 29f0b9978d41064ffa32f0962411fb22619d15a9..5b4af73951521b7ad826d914a8f7450c224eb58d 100644
--- a/eng/Dependencies.props
+++ b/eng/Dependencies.props
@@ -18,7 +18,10 @@
     <LatestPackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="$(MicrosoftEntityFrameworkCoreSqlServerPackageVersion)" />
     <LatestPackageReference Include="Microsoft.EntityFrameworkCore" Version="$(MicrosoftEntityFrameworkCorePackageVersion)" />
     <LatestPackageReference Include="Microsoft.Extensions.ActivatorUtilities.Sources" Version="$(MicrosoftExtensionsActivatorUtilitiesSourcesPackageVersion)" />
+    <LatestPackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="$(MicrosoftExtensionsCachingAbstractionsPackageVersion)" />
     <LatestPackageReference Include="Microsoft.Extensions.Caching.Memory" Version="$(MicrosoftExtensionsCachingMemoryPackageVersion)" />
+    <LatestPackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="$(MicrosoftExtensionsCachingStackExchangeRedisPackageVersion)" />
+    <LatestPackageReference Include="Microsoft.Extensions.Caching.SqlServer" Version="$(MicrosoftExtensionsCachingSqlServerPackageVersion)" />
     <LatestPackageReference Include="Microsoft.Extensions.ClosedGenericMatcher.Sources" Version="$(MicrosoftExtensionsClosedGenericMatcherSourcesPackageVersion)" />
     <LatestPackageReference Include="Microsoft.Extensions.CommandLineUtils.Sources" Version="$(MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion)" />
     <LatestPackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="$(MicrosoftExtensionsConfigurationAbstractionsPackageVersion)" />
diff --git a/eng/ProjectReferences.props b/eng/ProjectReferences.props
index a62827520f3685bf8763545cf5e7b0f038a292a7..080f4c9659acd6a38e8a81ae7473a55e4c662fda 100644
--- a/eng/ProjectReferences.props
+++ b/eng/ProjectReferences.props
@@ -40,6 +40,7 @@
     <ProjectReferenceProvider Include="Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions" ProjectPath="$(RepositoryRoot)src\Servers\Kestrel\Transport.Abstractions\src\Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions.csproj" />
     <ProjectReferenceProvider Include="Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv" ProjectPath="$(RepositoryRoot)src\Servers\Kestrel\Transport.Libuv\src\Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.csproj" />
     <ProjectReferenceProvider Include="Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets" ProjectPath="$(RepositoryRoot)src\Servers\Kestrel\Transport.Sockets\src\Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.csproj" />
+    <ProjectReferenceProvider Include="Microsoft.AspNetCore.Session" ProjectPath="$(RepositoryRoot)src\Middleware\Session\src\Microsoft.AspNetCore.Session.csproj" />
     <ProjectReferenceProvider Include="dotnet-dev-certs" ProjectPath="$(RepositoryRoot)src\Tools\dotnet-dev-certs\src\dotnet-dev-certs.csproj" />
     <ProjectReferenceProvider Include="dotnet-sql-cache" ProjectPath="$(RepositoryRoot)src\Tools\dotnet-sql-cache\src\dotnet-sql-cache.csproj" />
     <ProjectReferenceProvider Include="dotnet-user-secrets" ProjectPath="$(RepositoryRoot)src\Tools\dotnet-user-secrets\src\dotnet-user-secrets.csproj" />
diff --git a/eng/targets/CSharp.Common.targets b/eng/targets/CSharp.Common.targets
index a7f7b610b6e630be3854d6deccdd0e308e388166..8df4213c6295d101a2a71067f80da68195ba2814 100644
--- a/eng/targets/CSharp.Common.targets
+++ b/eng/targets/CSharp.Common.targets
@@ -1,5 +1,11 @@
 <Project>
 
+  <!-- For 'legacy' .csproj files, set map TargetFrameworkVersion back to TargetFramework -->
+  <PropertyGroup Condition=" '$(TargetFramework)' == '' AND '$(TargetFrameworks)' == '' ">
+    <TargetFramework>net$(TargetFrameworkVersion.Substring(1).Replace('.',''))</TargetFramework>
+    <TargetFrameworkIdentifier>.NETFramework</TargetFrameworkIdentifier>
+  </PropertyGroup>
+
   <Import Project="Packaging.targets" />
   <Import Project="ResolveReferences.targets" />
 </Project>
diff --git a/eng/targets/ResolveReferences.targets b/eng/targets/ResolveReferences.targets
index 897a9068693efbcdd8dc075c398baa13b769b97f..675b0efa1811d1d72ca7ec428657f19d61aa87af 100644
--- a/eng/targets/ResolveReferences.targets
+++ b/eng/targets/ResolveReferences.targets
@@ -46,12 +46,18 @@
     <ProjectReference Include="@(_ProjectReferenceByAssemblyName->'%(ProjectPath)')" />
 
     <Reference Remove="@(_ProjectReferenceByAssemblyName)" />
+
+    <!-- Use _ReferenceTemp to workaround issues in Visual Studio which causes a conflict between Reference, packages, and projects. -->
+    <_ReferenceTemp Include="@(Reference)" />
+    <Reference Remove="@(Reference)" />
   </ItemGroup>
 
   <Target Name="ResolveCustomReferences" BeforeTargets="CollectPackageReferences;ResolveAssemblyReferencesDesignTime;ResolveAssemblyReferences" Condition=" '$(TargetFramework)' != '' ">
     <ItemGroup>
-      <UnusedBaselinePackageReference Include="@(BaselinePackageReference)" Exclude="@(Reference);@(_ProjectReferenceByAssemblyName)" />
+      <Reference Include="@(_ReferenceTemp)" />
+      <_ReferenceTemp Remove="@(_ReferenceTemp)" />
 
+      <UnusedBaselinePackageReference Include="@(BaselinePackageReference)" Exclude="@(Reference);@(_ProjectReferenceByAssemblyName)" />
       <!--
         MSBuild does not provide a way to join on matching identities in a Condition,
         but you can do a cartesian product of two item groups and filter out mismatched id's in a second pass.
diff --git a/src/DataProtection/startvs.cmd b/src/DataProtection/startvs.cmd
new file mode 100644
index 0000000000000000000000000000000000000000..c2fc65d8732592d511d21cb0e1c9bfcde4030311
--- /dev/null
+++ b/src/DataProtection/startvs.cmd
@@ -0,0 +1,3 @@
+@ECHO OFF
+
+%~dp0..\..\startvs.cmd %~dp0DataProtection.sln
diff --git a/src/Http/HttpAbstractions.sln b/src/Http/HttpAbstractions.sln
index 55cafe847a3d136346ef58ef56fcabc0522ab135..e67a603452aa6f767a59ee88a6b5df8148e5add0 100644
--- a/src/Http/HttpAbstractions.sln
+++ b/src/Http/HttpAbstractions.sln
@@ -61,6 +61,38 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.WebUti
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Http.Performance", "Http\perf\Microsoft.AspNetCore.Http.Performance.csproj", "{8C635944-51F0-4BB0-A89E-CA49A7D9BE7F}"
 EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Routing", "Routing", "{14A7B3DE-46C8-4245-B0BD-9AFF3795C163}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Routing.Performance", "Routing\perf\Microsoft.AspNetCore.Routing.Performance.csproj", "{1A74D674-5D19-4575-B443-8B7ED433EF2B}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Routing", "Routing\src\Microsoft.AspNetCore.Routing.csproj", "{B8812D83-0F76-48F4-B716-C7356DB51E72}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Routing.FunctionalTests", "Routing\test\FunctionalTests\Microsoft.AspNetCore.Routing.FunctionalTests.csproj", "{215E7408-A123-4B5F-B625-59ED22031109}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Routing.Tests", "Routing\test\UnitTests\Microsoft.AspNetCore.Routing.Tests.csproj", "{8B64326C-A87F-4157-8337-22B5C4D7A4B7}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Routing.Abstractions", "Routing.Abstractions", "{24D19E8E-25FD-4C0B-8865-697878B67BE0}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Routing.Abstractions", "Routing.Abstractions\src\Microsoft.AspNetCore.Routing.Abstractions.csproj", "{3E8E6EAC-4C92-46C5-AED0-5F3C0745D34F}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Routing.Abstractions.Tests", "Routing.Abstractions\test\Microsoft.AspNetCore.Mvc.Routing.Abstractions.Tests.csproj", "{E4AC79A3-625B-421B-9F91-EFCBD9BEB37F}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.TestHost", "..\Hosting\TestHost\src\Microsoft.AspNetCore.TestHost.csproj", "{BF8DC0FF-96F9-4705-8CFA-F42BE989AB6A}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "dependencies", "dependencies", "{793FFE24-138A-4C3D-81AB-18D625E36230}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "testassets", "testassets", "{A4913006-307E-46FE-93BF-C39AC4AD70D7}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RoutingWebSite", "Routing\test\testassets\RoutingWebSite\RoutingWebSite.csproj", "{1454A129-9104-4766-9FFE-4B4F93A2C2C1}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RoutingSandbox", "Routing\test\testassets\RoutingSandbox\RoutingSandbox.csproj", "{B9B620E0-85E8-4ECB-8A81-5A96AFCB0B36}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Benchmarks", "Routing\test\testassets\Benchmarks\Benchmarks.csproj", "{30BDD853-AF73-4D15-B4FB-621E7969B9C9}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.Kestrel", "..\Servers\Kestrel\Kestrel\src\Microsoft.AspNetCore.Server.Kestrel.csproj", "{716CC743-D9FA-4EF6-8767-152A8E70C52A}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.StaticFiles", "..\Middleware\StaticFiles\src\Microsoft.AspNetCore.StaticFiles.csproj", "{A0C7AE95-BBE7-4F75-9508-F5881C8A456D}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -299,6 +331,153 @@ Global
 		{8C635944-51F0-4BB0-A89E-CA49A7D9BE7F}.Release|x64.Build.0 = Release|Any CPU
 		{8C635944-51F0-4BB0-A89E-CA49A7D9BE7F}.Release|x86.ActiveCfg = Release|Any CPU
 		{8C635944-51F0-4BB0-A89E-CA49A7D9BE7F}.Release|x86.Build.0 = Release|Any CPU
+		{1A74D674-5D19-4575-B443-8B7ED433EF2B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{1A74D674-5D19-4575-B443-8B7ED433EF2B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{1A74D674-5D19-4575-B443-8B7ED433EF2B}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{1A74D674-5D19-4575-B443-8B7ED433EF2B}.Debug|x64.Build.0 = Debug|Any CPU
+		{1A74D674-5D19-4575-B443-8B7ED433EF2B}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{1A74D674-5D19-4575-B443-8B7ED433EF2B}.Debug|x86.Build.0 = Debug|Any CPU
+		{1A74D674-5D19-4575-B443-8B7ED433EF2B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{1A74D674-5D19-4575-B443-8B7ED433EF2B}.Release|Any CPU.Build.0 = Release|Any CPU
+		{1A74D674-5D19-4575-B443-8B7ED433EF2B}.Release|x64.ActiveCfg = Release|Any CPU
+		{1A74D674-5D19-4575-B443-8B7ED433EF2B}.Release|x64.Build.0 = Release|Any CPU
+		{1A74D674-5D19-4575-B443-8B7ED433EF2B}.Release|x86.ActiveCfg = Release|Any CPU
+		{1A74D674-5D19-4575-B443-8B7ED433EF2B}.Release|x86.Build.0 = Release|Any CPU
+		{B8812D83-0F76-48F4-B716-C7356DB51E72}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{B8812D83-0F76-48F4-B716-C7356DB51E72}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{B8812D83-0F76-48F4-B716-C7356DB51E72}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{B8812D83-0F76-48F4-B716-C7356DB51E72}.Debug|x64.Build.0 = Debug|Any CPU
+		{B8812D83-0F76-48F4-B716-C7356DB51E72}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{B8812D83-0F76-48F4-B716-C7356DB51E72}.Debug|x86.Build.0 = Debug|Any CPU
+		{B8812D83-0F76-48F4-B716-C7356DB51E72}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{B8812D83-0F76-48F4-B716-C7356DB51E72}.Release|Any CPU.Build.0 = Release|Any CPU
+		{B8812D83-0F76-48F4-B716-C7356DB51E72}.Release|x64.ActiveCfg = Release|Any CPU
+		{B8812D83-0F76-48F4-B716-C7356DB51E72}.Release|x64.Build.0 = Release|Any CPU
+		{B8812D83-0F76-48F4-B716-C7356DB51E72}.Release|x86.ActiveCfg = Release|Any CPU
+		{B8812D83-0F76-48F4-B716-C7356DB51E72}.Release|x86.Build.0 = Release|Any CPU
+		{215E7408-A123-4B5F-B625-59ED22031109}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{215E7408-A123-4B5F-B625-59ED22031109}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{215E7408-A123-4B5F-B625-59ED22031109}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{215E7408-A123-4B5F-B625-59ED22031109}.Debug|x64.Build.0 = Debug|Any CPU
+		{215E7408-A123-4B5F-B625-59ED22031109}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{215E7408-A123-4B5F-B625-59ED22031109}.Debug|x86.Build.0 = Debug|Any CPU
+		{215E7408-A123-4B5F-B625-59ED22031109}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{215E7408-A123-4B5F-B625-59ED22031109}.Release|Any CPU.Build.0 = Release|Any CPU
+		{215E7408-A123-4B5F-B625-59ED22031109}.Release|x64.ActiveCfg = Release|Any CPU
+		{215E7408-A123-4B5F-B625-59ED22031109}.Release|x64.Build.0 = Release|Any CPU
+		{215E7408-A123-4B5F-B625-59ED22031109}.Release|x86.ActiveCfg = Release|Any CPU
+		{215E7408-A123-4B5F-B625-59ED22031109}.Release|x86.Build.0 = Release|Any CPU
+		{8B64326C-A87F-4157-8337-22B5C4D7A4B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{8B64326C-A87F-4157-8337-22B5C4D7A4B7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{8B64326C-A87F-4157-8337-22B5C4D7A4B7}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{8B64326C-A87F-4157-8337-22B5C4D7A4B7}.Debug|x64.Build.0 = Debug|Any CPU
+		{8B64326C-A87F-4157-8337-22B5C4D7A4B7}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{8B64326C-A87F-4157-8337-22B5C4D7A4B7}.Debug|x86.Build.0 = Debug|Any CPU
+		{8B64326C-A87F-4157-8337-22B5C4D7A4B7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{8B64326C-A87F-4157-8337-22B5C4D7A4B7}.Release|Any CPU.Build.0 = Release|Any CPU
+		{8B64326C-A87F-4157-8337-22B5C4D7A4B7}.Release|x64.ActiveCfg = Release|Any CPU
+		{8B64326C-A87F-4157-8337-22B5C4D7A4B7}.Release|x64.Build.0 = Release|Any CPU
+		{8B64326C-A87F-4157-8337-22B5C4D7A4B7}.Release|x86.ActiveCfg = Release|Any CPU
+		{8B64326C-A87F-4157-8337-22B5C4D7A4B7}.Release|x86.Build.0 = Release|Any CPU
+		{3E8E6EAC-4C92-46C5-AED0-5F3C0745D34F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{3E8E6EAC-4C92-46C5-AED0-5F3C0745D34F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{3E8E6EAC-4C92-46C5-AED0-5F3C0745D34F}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{3E8E6EAC-4C92-46C5-AED0-5F3C0745D34F}.Debug|x64.Build.0 = Debug|Any CPU
+		{3E8E6EAC-4C92-46C5-AED0-5F3C0745D34F}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{3E8E6EAC-4C92-46C5-AED0-5F3C0745D34F}.Debug|x86.Build.0 = Debug|Any CPU
+		{3E8E6EAC-4C92-46C5-AED0-5F3C0745D34F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{3E8E6EAC-4C92-46C5-AED0-5F3C0745D34F}.Release|Any CPU.Build.0 = Release|Any CPU
+		{3E8E6EAC-4C92-46C5-AED0-5F3C0745D34F}.Release|x64.ActiveCfg = Release|Any CPU
+		{3E8E6EAC-4C92-46C5-AED0-5F3C0745D34F}.Release|x64.Build.0 = Release|Any CPU
+		{3E8E6EAC-4C92-46C5-AED0-5F3C0745D34F}.Release|x86.ActiveCfg = Release|Any CPU
+		{3E8E6EAC-4C92-46C5-AED0-5F3C0745D34F}.Release|x86.Build.0 = Release|Any CPU
+		{E4AC79A3-625B-421B-9F91-EFCBD9BEB37F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{E4AC79A3-625B-421B-9F91-EFCBD9BEB37F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{E4AC79A3-625B-421B-9F91-EFCBD9BEB37F}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{E4AC79A3-625B-421B-9F91-EFCBD9BEB37F}.Debug|x64.Build.0 = Debug|Any CPU
+		{E4AC79A3-625B-421B-9F91-EFCBD9BEB37F}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{E4AC79A3-625B-421B-9F91-EFCBD9BEB37F}.Debug|x86.Build.0 = Debug|Any CPU
+		{E4AC79A3-625B-421B-9F91-EFCBD9BEB37F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{E4AC79A3-625B-421B-9F91-EFCBD9BEB37F}.Release|Any CPU.Build.0 = Release|Any CPU
+		{E4AC79A3-625B-421B-9F91-EFCBD9BEB37F}.Release|x64.ActiveCfg = Release|Any CPU
+		{E4AC79A3-625B-421B-9F91-EFCBD9BEB37F}.Release|x64.Build.0 = Release|Any CPU
+		{E4AC79A3-625B-421B-9F91-EFCBD9BEB37F}.Release|x86.ActiveCfg = Release|Any CPU
+		{E4AC79A3-625B-421B-9F91-EFCBD9BEB37F}.Release|x86.Build.0 = Release|Any CPU
+		{BF8DC0FF-96F9-4705-8CFA-F42BE989AB6A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{BF8DC0FF-96F9-4705-8CFA-F42BE989AB6A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{BF8DC0FF-96F9-4705-8CFA-F42BE989AB6A}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{BF8DC0FF-96F9-4705-8CFA-F42BE989AB6A}.Debug|x64.Build.0 = Debug|Any CPU
+		{BF8DC0FF-96F9-4705-8CFA-F42BE989AB6A}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{BF8DC0FF-96F9-4705-8CFA-F42BE989AB6A}.Debug|x86.Build.0 = Debug|Any CPU
+		{BF8DC0FF-96F9-4705-8CFA-F42BE989AB6A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{BF8DC0FF-96F9-4705-8CFA-F42BE989AB6A}.Release|Any CPU.Build.0 = Release|Any CPU
+		{BF8DC0FF-96F9-4705-8CFA-F42BE989AB6A}.Release|x64.ActiveCfg = Release|Any CPU
+		{BF8DC0FF-96F9-4705-8CFA-F42BE989AB6A}.Release|x64.Build.0 = Release|Any CPU
+		{BF8DC0FF-96F9-4705-8CFA-F42BE989AB6A}.Release|x86.ActiveCfg = Release|Any CPU
+		{BF8DC0FF-96F9-4705-8CFA-F42BE989AB6A}.Release|x86.Build.0 = Release|Any CPU
+		{1454A129-9104-4766-9FFE-4B4F93A2C2C1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{1454A129-9104-4766-9FFE-4B4F93A2C2C1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{1454A129-9104-4766-9FFE-4B4F93A2C2C1}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{1454A129-9104-4766-9FFE-4B4F93A2C2C1}.Debug|x64.Build.0 = Debug|Any CPU
+		{1454A129-9104-4766-9FFE-4B4F93A2C2C1}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{1454A129-9104-4766-9FFE-4B4F93A2C2C1}.Debug|x86.Build.0 = Debug|Any CPU
+		{1454A129-9104-4766-9FFE-4B4F93A2C2C1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{1454A129-9104-4766-9FFE-4B4F93A2C2C1}.Release|Any CPU.Build.0 = Release|Any CPU
+		{1454A129-9104-4766-9FFE-4B4F93A2C2C1}.Release|x64.ActiveCfg = Release|Any CPU
+		{1454A129-9104-4766-9FFE-4B4F93A2C2C1}.Release|x64.Build.0 = Release|Any CPU
+		{1454A129-9104-4766-9FFE-4B4F93A2C2C1}.Release|x86.ActiveCfg = Release|Any CPU
+		{1454A129-9104-4766-9FFE-4B4F93A2C2C1}.Release|x86.Build.0 = Release|Any CPU
+		{B9B620E0-85E8-4ECB-8A81-5A96AFCB0B36}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{B9B620E0-85E8-4ECB-8A81-5A96AFCB0B36}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{B9B620E0-85E8-4ECB-8A81-5A96AFCB0B36}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{B9B620E0-85E8-4ECB-8A81-5A96AFCB0B36}.Debug|x64.Build.0 = Debug|Any CPU
+		{B9B620E0-85E8-4ECB-8A81-5A96AFCB0B36}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{B9B620E0-85E8-4ECB-8A81-5A96AFCB0B36}.Debug|x86.Build.0 = Debug|Any CPU
+		{B9B620E0-85E8-4ECB-8A81-5A96AFCB0B36}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{B9B620E0-85E8-4ECB-8A81-5A96AFCB0B36}.Release|Any CPU.Build.0 = Release|Any CPU
+		{B9B620E0-85E8-4ECB-8A81-5A96AFCB0B36}.Release|x64.ActiveCfg = Release|Any CPU
+		{B9B620E0-85E8-4ECB-8A81-5A96AFCB0B36}.Release|x64.Build.0 = Release|Any CPU
+		{B9B620E0-85E8-4ECB-8A81-5A96AFCB0B36}.Release|x86.ActiveCfg = Release|Any CPU
+		{B9B620E0-85E8-4ECB-8A81-5A96AFCB0B36}.Release|x86.Build.0 = Release|Any CPU
+		{30BDD853-AF73-4D15-B4FB-621E7969B9C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{30BDD853-AF73-4D15-B4FB-621E7969B9C9}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{30BDD853-AF73-4D15-B4FB-621E7969B9C9}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{30BDD853-AF73-4D15-B4FB-621E7969B9C9}.Debug|x64.Build.0 = Debug|Any CPU
+		{30BDD853-AF73-4D15-B4FB-621E7969B9C9}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{30BDD853-AF73-4D15-B4FB-621E7969B9C9}.Debug|x86.Build.0 = Debug|Any CPU
+		{30BDD853-AF73-4D15-B4FB-621E7969B9C9}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{30BDD853-AF73-4D15-B4FB-621E7969B9C9}.Release|Any CPU.Build.0 = Release|Any CPU
+		{30BDD853-AF73-4D15-B4FB-621E7969B9C9}.Release|x64.ActiveCfg = Release|Any CPU
+		{30BDD853-AF73-4D15-B4FB-621E7969B9C9}.Release|x64.Build.0 = Release|Any CPU
+		{30BDD853-AF73-4D15-B4FB-621E7969B9C9}.Release|x86.ActiveCfg = Release|Any CPU
+		{30BDD853-AF73-4D15-B4FB-621E7969B9C9}.Release|x86.Build.0 = Release|Any CPU
+		{716CC743-D9FA-4EF6-8767-152A8E70C52A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{716CC743-D9FA-4EF6-8767-152A8E70C52A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{716CC743-D9FA-4EF6-8767-152A8E70C52A}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{716CC743-D9FA-4EF6-8767-152A8E70C52A}.Debug|x64.Build.0 = Debug|Any CPU
+		{716CC743-D9FA-4EF6-8767-152A8E70C52A}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{716CC743-D9FA-4EF6-8767-152A8E70C52A}.Debug|x86.Build.0 = Debug|Any CPU
+		{716CC743-D9FA-4EF6-8767-152A8E70C52A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{716CC743-D9FA-4EF6-8767-152A8E70C52A}.Release|Any CPU.Build.0 = Release|Any CPU
+		{716CC743-D9FA-4EF6-8767-152A8E70C52A}.Release|x64.ActiveCfg = Release|Any CPU
+		{716CC743-D9FA-4EF6-8767-152A8E70C52A}.Release|x64.Build.0 = Release|Any CPU
+		{716CC743-D9FA-4EF6-8767-152A8E70C52A}.Release|x86.ActiveCfg = Release|Any CPU
+		{716CC743-D9FA-4EF6-8767-152A8E70C52A}.Release|x86.Build.0 = Release|Any CPU
+		{A0C7AE95-BBE7-4F75-9508-F5881C8A456D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{A0C7AE95-BBE7-4F75-9508-F5881C8A456D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{A0C7AE95-BBE7-4F75-9508-F5881C8A456D}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{A0C7AE95-BBE7-4F75-9508-F5881C8A456D}.Debug|x64.Build.0 = Debug|Any CPU
+		{A0C7AE95-BBE7-4F75-9508-F5881C8A456D}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{A0C7AE95-BBE7-4F75-9508-F5881C8A456D}.Debug|x86.Build.0 = Debug|Any CPU
+		{A0C7AE95-BBE7-4F75-9508-F5881C8A456D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{A0C7AE95-BBE7-4F75-9508-F5881C8A456D}.Release|Any CPU.Build.0 = Release|Any CPU
+		{A0C7AE95-BBE7-4F75-9508-F5881C8A456D}.Release|x64.ActiveCfg = Release|Any CPU
+		{A0C7AE95-BBE7-4F75-9508-F5881C8A456D}.Release|x64.Build.0 = Release|Any CPU
+		{A0C7AE95-BBE7-4F75-9508-F5881C8A456D}.Release|x86.ActiveCfg = Release|Any CPU
+		{A0C7AE95-BBE7-4F75-9508-F5881C8A456D}.Release|x86.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
@@ -319,6 +498,7 @@ Global
 		{5A64C915-7045-4100-B2CB-3A50BD854D2D} = {0B1B3E58-DA37-46D6-B791-47739EF27790}
 		{21624719-422E-4621-A17A-C6F10436F1FE} = {4D5C4F16-5DC5-4244-A10F-08545126F61B}
 		{38EA14B3-17BB-44F4-A9EA-A8675E9BF1E4} = {4D5C4F16-5DC5-4244-A10F-08545126F61B}
+		{391FBA36-BEEB-411A-A588-3F83901C0C1A} = {FB2DCA0F-EB9E-425B-ABBC-D543DBEC090F}
 		{2378049E-ABE9-4843-AAC7-A6C9E704463D} = {391FBA36-BEEB-411A-A588-3F83901C0C1A}
 		{1A866315-5FD5-4F96-BFAC-1447E3CB4514} = {80A090C8-ED02-4DE3-875A-30DCCDBD84BA}
 		{068A1DA0-C7DF-4E3C-9933-4E79A141EFF8} = {80A090C8-ED02-4DE3-875A-30DCCDBD84BA}
@@ -326,5 +506,21 @@ Global
 	EndGlobalSection
 	GlobalSection(ExtensibilityGlobals) = postSolution
 		SolutionGuid = {39F96525-F455-424F-ABDB-33DB59861EA6}
+		{1A74D674-5D19-4575-B443-8B7ED433EF2B} = {14A7B3DE-46C8-4245-B0BD-9AFF3795C163}
+		{B8812D83-0F76-48F4-B716-C7356DB51E72} = {14A7B3DE-46C8-4245-B0BD-9AFF3795C163}
+		{215E7408-A123-4B5F-B625-59ED22031109} = {14A7B3DE-46C8-4245-B0BD-9AFF3795C163}
+		{8B64326C-A87F-4157-8337-22B5C4D7A4B7} = {14A7B3DE-46C8-4245-B0BD-9AFF3795C163}
+		{3E8E6EAC-4C92-46C5-AED0-5F3C0745D34F} = {24D19E8E-25FD-4C0B-8865-697878B67BE0}
+		{E4AC79A3-625B-421B-9F91-EFCBD9BEB37F} = {24D19E8E-25FD-4C0B-8865-697878B67BE0}
+		{BF8DC0FF-96F9-4705-8CFA-F42BE989AB6A} = {793FFE24-138A-4C3D-81AB-18D625E36230}
+		{A4913006-307E-46FE-93BF-C39AC4AD70D7} = {14A7B3DE-46C8-4245-B0BD-9AFF3795C163}
+		{1454A129-9104-4766-9FFE-4B4F93A2C2C1} = {A4913006-307E-46FE-93BF-C39AC4AD70D7}
+		{B9B620E0-85E8-4ECB-8A81-5A96AFCB0B36} = {A4913006-307E-46FE-93BF-C39AC4AD70D7}
+		{30BDD853-AF73-4D15-B4FB-621E7969B9C9} = {A4913006-307E-46FE-93BF-C39AC4AD70D7}
+		{716CC743-D9FA-4EF6-8767-152A8E70C52A} = {793FFE24-138A-4C3D-81AB-18D625E36230}
+		{A0C7AE95-BBE7-4F75-9508-F5881C8A456D} = {793FFE24-138A-4C3D-81AB-18D625E36230}
+	EndGlobalSection
+	GlobalSection(ExtensibilityGlobals) = postSolution
+		SolutionGuid = {85B5E151-2E9D-419C-83DD-0DDCF446C83A}
 	EndGlobalSection
 EndGlobal
diff --git a/src/Http/Routing.sln b/src/Http/Routing.sln
deleted file mode 100644
index 6de5d61b439fe46f2079d776882faa7afb620899..0000000000000000000000000000000000000000
--- a/src/Http/Routing.sln
+++ /dev/null
@@ -1,185 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 15
-VisualStudioVersion = 15.0.26124.0
-MinimumVisualStudioVersion = 15.0.26124.0
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Routing", "Routing", "{240298B6-6729-4844-9B30-B8BC0CD12772}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Routing.Performance", "Routing\perf\Microsoft.AspNetCore.Routing.Performance.csproj", "{D9A5185A-1697-4B6B-B845-C13AE6DA6D3F}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Routing", "Routing\src\Microsoft.AspNetCore.Routing.csproj", "{A69248B5-2ACE-4B52-B0B0-63AD54D52543}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{8B2D195B-4997-4CCE-9846-4A848A6F258D}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Routing.FunctionalTests", "Routing\test\FunctionalTests\Microsoft.AspNetCore.Routing.FunctionalTests.csproj", "{5BD1EBCE-E05E-41FC-A1A8-BF36FA096F22}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Routing.Tests", "Routing\test\UnitTests\Microsoft.AspNetCore.Routing.Tests.csproj", "{3F9CEBB1-A50D-4869-B555-81E572E62D18}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Routing.Abstractions", "Routing.Abstractions", "{485B8E11-FC7C-464F-8CB2-A164DAB30D58}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Routing.Abstractions", "Routing.Abstractions\src\Microsoft.AspNetCore.Routing.Abstractions.csproj", "{C9C9FAB5-0A0D-4334-9A7D-C83C38EB29B0}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Mvc.Routing.Abstractions.Tests", "Routing.Abstractions\test\Microsoft.AspNetCore.Mvc.Routing.Abstractions.Tests.csproj", "{32C5C558-E104-4DC4-9311-890697DE8D65}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "testassets", "testassets", "{EDF2E5EF-EAEC-4B51-8473-857531557DAE}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Benchmarks", "Routing\test\testassets\Benchmarks\Benchmarks.csproj", "{490C00C6-4B63-4E1B-95AB-EDEB7532D4B2}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RoutingWebSite", "Routing\test\testassets\RoutingWebSite\RoutingWebSite.csproj", "{3A05A5F5-78AD-440F-9795-A8432718CB63}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tools", "tools", "{6E739429-4F29-4694-93D8-8F7F42C9C6DC}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Swaggatherer", "Routing\tools\Swaggatherer\Swaggatherer.csproj", "{A1B3C84D-206C-439D-8821-416D935CFCB5}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RoutingSandbox", "Routing\test\testassets\RoutingSandbox\RoutingSandbox.csproj", "{4F51F949-DCC3-433E-981E-0F84E7CA9D61}"
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|Any CPU = Debug|Any CPU
-		Debug|x64 = Debug|x64
-		Debug|x86 = Debug|x86
-		Release|Any CPU = Release|Any CPU
-		Release|x64 = Release|x64
-		Release|x86 = Release|x86
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{D9A5185A-1697-4B6B-B845-C13AE6DA6D3F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{D9A5185A-1697-4B6B-B845-C13AE6DA6D3F}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{D9A5185A-1697-4B6B-B845-C13AE6DA6D3F}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{D9A5185A-1697-4B6B-B845-C13AE6DA6D3F}.Debug|x64.Build.0 = Debug|Any CPU
-		{D9A5185A-1697-4B6B-B845-C13AE6DA6D3F}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{D9A5185A-1697-4B6B-B845-C13AE6DA6D3F}.Debug|x86.Build.0 = Debug|Any CPU
-		{D9A5185A-1697-4B6B-B845-C13AE6DA6D3F}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{D9A5185A-1697-4B6B-B845-C13AE6DA6D3F}.Release|Any CPU.Build.0 = Release|Any CPU
-		{D9A5185A-1697-4B6B-B845-C13AE6DA6D3F}.Release|x64.ActiveCfg = Release|Any CPU
-		{D9A5185A-1697-4B6B-B845-C13AE6DA6D3F}.Release|x64.Build.0 = Release|Any CPU
-		{D9A5185A-1697-4B6B-B845-C13AE6DA6D3F}.Release|x86.ActiveCfg = Release|Any CPU
-		{D9A5185A-1697-4B6B-B845-C13AE6DA6D3F}.Release|x86.Build.0 = Release|Any CPU
-		{A69248B5-2ACE-4B52-B0B0-63AD54D52543}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{A69248B5-2ACE-4B52-B0B0-63AD54D52543}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{A69248B5-2ACE-4B52-B0B0-63AD54D52543}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{A69248B5-2ACE-4B52-B0B0-63AD54D52543}.Debug|x64.Build.0 = Debug|Any CPU
-		{A69248B5-2ACE-4B52-B0B0-63AD54D52543}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{A69248B5-2ACE-4B52-B0B0-63AD54D52543}.Debug|x86.Build.0 = Debug|Any CPU
-		{A69248B5-2ACE-4B52-B0B0-63AD54D52543}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{A69248B5-2ACE-4B52-B0B0-63AD54D52543}.Release|Any CPU.Build.0 = Release|Any CPU
-		{A69248B5-2ACE-4B52-B0B0-63AD54D52543}.Release|x64.ActiveCfg = Release|Any CPU
-		{A69248B5-2ACE-4B52-B0B0-63AD54D52543}.Release|x64.Build.0 = Release|Any CPU
-		{A69248B5-2ACE-4B52-B0B0-63AD54D52543}.Release|x86.ActiveCfg = Release|Any CPU
-		{A69248B5-2ACE-4B52-B0B0-63AD54D52543}.Release|x86.Build.0 = Release|Any CPU
-		{5BD1EBCE-E05E-41FC-A1A8-BF36FA096F22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{5BD1EBCE-E05E-41FC-A1A8-BF36FA096F22}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{5BD1EBCE-E05E-41FC-A1A8-BF36FA096F22}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{5BD1EBCE-E05E-41FC-A1A8-BF36FA096F22}.Debug|x64.Build.0 = Debug|Any CPU
-		{5BD1EBCE-E05E-41FC-A1A8-BF36FA096F22}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{5BD1EBCE-E05E-41FC-A1A8-BF36FA096F22}.Debug|x86.Build.0 = Debug|Any CPU
-		{5BD1EBCE-E05E-41FC-A1A8-BF36FA096F22}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{5BD1EBCE-E05E-41FC-A1A8-BF36FA096F22}.Release|Any CPU.Build.0 = Release|Any CPU
-		{5BD1EBCE-E05E-41FC-A1A8-BF36FA096F22}.Release|x64.ActiveCfg = Release|Any CPU
-		{5BD1EBCE-E05E-41FC-A1A8-BF36FA096F22}.Release|x64.Build.0 = Release|Any CPU
-		{5BD1EBCE-E05E-41FC-A1A8-BF36FA096F22}.Release|x86.ActiveCfg = Release|Any CPU
-		{5BD1EBCE-E05E-41FC-A1A8-BF36FA096F22}.Release|x86.Build.0 = Release|Any CPU
-		{3F9CEBB1-A50D-4869-B555-81E572E62D18}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{3F9CEBB1-A50D-4869-B555-81E572E62D18}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{3F9CEBB1-A50D-4869-B555-81E572E62D18}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{3F9CEBB1-A50D-4869-B555-81E572E62D18}.Debug|x64.Build.0 = Debug|Any CPU
-		{3F9CEBB1-A50D-4869-B555-81E572E62D18}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{3F9CEBB1-A50D-4869-B555-81E572E62D18}.Debug|x86.Build.0 = Debug|Any CPU
-		{3F9CEBB1-A50D-4869-B555-81E572E62D18}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{3F9CEBB1-A50D-4869-B555-81E572E62D18}.Release|Any CPU.Build.0 = Release|Any CPU
-		{3F9CEBB1-A50D-4869-B555-81E572E62D18}.Release|x64.ActiveCfg = Release|Any CPU
-		{3F9CEBB1-A50D-4869-B555-81E572E62D18}.Release|x64.Build.0 = Release|Any CPU
-		{3F9CEBB1-A50D-4869-B555-81E572E62D18}.Release|x86.ActiveCfg = Release|Any CPU
-		{3F9CEBB1-A50D-4869-B555-81E572E62D18}.Release|x86.Build.0 = Release|Any CPU
-		{C9C9FAB5-0A0D-4334-9A7D-C83C38EB29B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{C9C9FAB5-0A0D-4334-9A7D-C83C38EB29B0}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{C9C9FAB5-0A0D-4334-9A7D-C83C38EB29B0}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{C9C9FAB5-0A0D-4334-9A7D-C83C38EB29B0}.Debug|x64.Build.0 = Debug|Any CPU
-		{C9C9FAB5-0A0D-4334-9A7D-C83C38EB29B0}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{C9C9FAB5-0A0D-4334-9A7D-C83C38EB29B0}.Debug|x86.Build.0 = Debug|Any CPU
-		{C9C9FAB5-0A0D-4334-9A7D-C83C38EB29B0}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{C9C9FAB5-0A0D-4334-9A7D-C83C38EB29B0}.Release|Any CPU.Build.0 = Release|Any CPU
-		{C9C9FAB5-0A0D-4334-9A7D-C83C38EB29B0}.Release|x64.ActiveCfg = Release|Any CPU
-		{C9C9FAB5-0A0D-4334-9A7D-C83C38EB29B0}.Release|x64.Build.0 = Release|Any CPU
-		{C9C9FAB5-0A0D-4334-9A7D-C83C38EB29B0}.Release|x86.ActiveCfg = Release|Any CPU
-		{C9C9FAB5-0A0D-4334-9A7D-C83C38EB29B0}.Release|x86.Build.0 = Release|Any CPU
-		{32C5C558-E104-4DC4-9311-890697DE8D65}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{32C5C558-E104-4DC4-9311-890697DE8D65}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{32C5C558-E104-4DC4-9311-890697DE8D65}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{32C5C558-E104-4DC4-9311-890697DE8D65}.Debug|x64.Build.0 = Debug|Any CPU
-		{32C5C558-E104-4DC4-9311-890697DE8D65}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{32C5C558-E104-4DC4-9311-890697DE8D65}.Debug|x86.Build.0 = Debug|Any CPU
-		{32C5C558-E104-4DC4-9311-890697DE8D65}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{32C5C558-E104-4DC4-9311-890697DE8D65}.Release|Any CPU.Build.0 = Release|Any CPU
-		{32C5C558-E104-4DC4-9311-890697DE8D65}.Release|x64.ActiveCfg = Release|Any CPU
-		{32C5C558-E104-4DC4-9311-890697DE8D65}.Release|x64.Build.0 = Release|Any CPU
-		{32C5C558-E104-4DC4-9311-890697DE8D65}.Release|x86.ActiveCfg = Release|Any CPU
-		{32C5C558-E104-4DC4-9311-890697DE8D65}.Release|x86.Build.0 = Release|Any CPU
-		{490C00C6-4B63-4E1B-95AB-EDEB7532D4B2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{490C00C6-4B63-4E1B-95AB-EDEB7532D4B2}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{490C00C6-4B63-4E1B-95AB-EDEB7532D4B2}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{490C00C6-4B63-4E1B-95AB-EDEB7532D4B2}.Debug|x64.Build.0 = Debug|Any CPU
-		{490C00C6-4B63-4E1B-95AB-EDEB7532D4B2}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{490C00C6-4B63-4E1B-95AB-EDEB7532D4B2}.Debug|x86.Build.0 = Debug|Any CPU
-		{490C00C6-4B63-4E1B-95AB-EDEB7532D4B2}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{490C00C6-4B63-4E1B-95AB-EDEB7532D4B2}.Release|Any CPU.Build.0 = Release|Any CPU
-		{490C00C6-4B63-4E1B-95AB-EDEB7532D4B2}.Release|x64.ActiveCfg = Release|Any CPU
-		{490C00C6-4B63-4E1B-95AB-EDEB7532D4B2}.Release|x64.Build.0 = Release|Any CPU
-		{490C00C6-4B63-4E1B-95AB-EDEB7532D4B2}.Release|x86.ActiveCfg = Release|Any CPU
-		{490C00C6-4B63-4E1B-95AB-EDEB7532D4B2}.Release|x86.Build.0 = Release|Any CPU
-		{3A05A5F5-78AD-440F-9795-A8432718CB63}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{3A05A5F5-78AD-440F-9795-A8432718CB63}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{3A05A5F5-78AD-440F-9795-A8432718CB63}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{3A05A5F5-78AD-440F-9795-A8432718CB63}.Debug|x64.Build.0 = Debug|Any CPU
-		{3A05A5F5-78AD-440F-9795-A8432718CB63}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{3A05A5F5-78AD-440F-9795-A8432718CB63}.Debug|x86.Build.0 = Debug|Any CPU
-		{3A05A5F5-78AD-440F-9795-A8432718CB63}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{3A05A5F5-78AD-440F-9795-A8432718CB63}.Release|Any CPU.Build.0 = Release|Any CPU
-		{3A05A5F5-78AD-440F-9795-A8432718CB63}.Release|x64.ActiveCfg = Release|Any CPU
-		{3A05A5F5-78AD-440F-9795-A8432718CB63}.Release|x64.Build.0 = Release|Any CPU
-		{3A05A5F5-78AD-440F-9795-A8432718CB63}.Release|x86.ActiveCfg = Release|Any CPU
-		{3A05A5F5-78AD-440F-9795-A8432718CB63}.Release|x86.Build.0 = Release|Any CPU
-		{A1B3C84D-206C-439D-8821-416D935CFCB5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{A1B3C84D-206C-439D-8821-416D935CFCB5}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{A1B3C84D-206C-439D-8821-416D935CFCB5}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{A1B3C84D-206C-439D-8821-416D935CFCB5}.Debug|x64.Build.0 = Debug|Any CPU
-		{A1B3C84D-206C-439D-8821-416D935CFCB5}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{A1B3C84D-206C-439D-8821-416D935CFCB5}.Debug|x86.Build.0 = Debug|Any CPU
-		{A1B3C84D-206C-439D-8821-416D935CFCB5}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{A1B3C84D-206C-439D-8821-416D935CFCB5}.Release|Any CPU.Build.0 = Release|Any CPU
-		{A1B3C84D-206C-439D-8821-416D935CFCB5}.Release|x64.ActiveCfg = Release|Any CPU
-		{A1B3C84D-206C-439D-8821-416D935CFCB5}.Release|x64.Build.0 = Release|Any CPU
-		{A1B3C84D-206C-439D-8821-416D935CFCB5}.Release|x86.ActiveCfg = Release|Any CPU
-		{A1B3C84D-206C-439D-8821-416D935CFCB5}.Release|x86.Build.0 = Release|Any CPU
-		{4F51F949-DCC3-433E-981E-0F84E7CA9D61}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{4F51F949-DCC3-433E-981E-0F84E7CA9D61}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{4F51F949-DCC3-433E-981E-0F84E7CA9D61}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{4F51F949-DCC3-433E-981E-0F84E7CA9D61}.Debug|x64.Build.0 = Debug|Any CPU
-		{4F51F949-DCC3-433E-981E-0F84E7CA9D61}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{4F51F949-DCC3-433E-981E-0F84E7CA9D61}.Debug|x86.Build.0 = Debug|Any CPU
-		{4F51F949-DCC3-433E-981E-0F84E7CA9D61}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{4F51F949-DCC3-433E-981E-0F84E7CA9D61}.Release|Any CPU.Build.0 = Release|Any CPU
-		{4F51F949-DCC3-433E-981E-0F84E7CA9D61}.Release|x64.ActiveCfg = Release|Any CPU
-		{4F51F949-DCC3-433E-981E-0F84E7CA9D61}.Release|x64.Build.0 = Release|Any CPU
-		{4F51F949-DCC3-433E-981E-0F84E7CA9D61}.Release|x86.ActiveCfg = Release|Any CPU
-		{4F51F949-DCC3-433E-981E-0F84E7CA9D61}.Release|x86.Build.0 = Release|Any CPU
-	EndGlobalSection
-	GlobalSection(NestedProjects) = preSolution
-		{D9A5185A-1697-4B6B-B845-C13AE6DA6D3F} = {240298B6-6729-4844-9B30-B8BC0CD12772}
-		{A69248B5-2ACE-4B52-B0B0-63AD54D52543} = {240298B6-6729-4844-9B30-B8BC0CD12772}
-		{8B2D195B-4997-4CCE-9846-4A848A6F258D} = {240298B6-6729-4844-9B30-B8BC0CD12772}
-		{5BD1EBCE-E05E-41FC-A1A8-BF36FA096F22} = {8B2D195B-4997-4CCE-9846-4A848A6F258D}
-		{3F9CEBB1-A50D-4869-B555-81E572E62D18} = {8B2D195B-4997-4CCE-9846-4A848A6F258D}
-		{C9C9FAB5-0A0D-4334-9A7D-C83C38EB29B0} = {485B8E11-FC7C-464F-8CB2-A164DAB30D58}
-		{32C5C558-E104-4DC4-9311-890697DE8D65} = {485B8E11-FC7C-464F-8CB2-A164DAB30D58}
-		{EDF2E5EF-EAEC-4B51-8473-857531557DAE} = {8B2D195B-4997-4CCE-9846-4A848A6F258D}
-		{490C00C6-4B63-4E1B-95AB-EDEB7532D4B2} = {EDF2E5EF-EAEC-4B51-8473-857531557DAE}
-		{3A05A5F5-78AD-440F-9795-A8432718CB63} = {EDF2E5EF-EAEC-4B51-8473-857531557DAE}
-		{6E739429-4F29-4694-93D8-8F7F42C9C6DC} = {240298B6-6729-4844-9B30-B8BC0CD12772}
-		{A1B3C84D-206C-439D-8821-416D935CFCB5} = {6E739429-4F29-4694-93D8-8F7F42C9C6DC}
-		{4F51F949-DCC3-433E-981E-0F84E7CA9D61} = {EDF2E5EF-EAEC-4B51-8473-857531557DAE}
-	EndGlobalSection
-EndGlobal
diff --git a/src/Http/Routing/src/Microsoft.AspNetCore.Routing.csproj b/src/Http/Routing/src/Microsoft.AspNetCore.Routing.csproj
index 79ae66b7fa9b55bf12176f9dee93fc1dec21ed64..dd5f39790643c9f6a835caa9a7f2278de581c921 100644
--- a/src/Http/Routing/src/Microsoft.AspNetCore.Routing.csproj
+++ b/src/Http/Routing/src/Microsoft.AspNetCore.Routing.csproj
@@ -1,4 +1,5 @@
 <Project Sdk="Microsoft.NET.Sdk">
+
   <PropertyGroup>
     <Description>ASP.NET Core middleware for routing requests to application logic and for generating links.
 Commonly used types:
diff --git a/src/Http/startvs.cmd b/src/Http/startvs.cmd
new file mode 100644
index 0000000000000000000000000000000000000000..fcb2bda27117b4ae2ef321f9b5a4689a1a8db604
--- /dev/null
+++ b/src/Http/startvs.cmd
@@ -0,0 +1,3 @@
+@ECHO OFF
+
+%~dp0..\..\startvs.cmd %~dp0HttpAbstractions.sln
diff --git a/src/Middleware/CORS/test/Test/CorsMiddlewareTests.cs b/src/Middleware/CORS/test/UnitTests/CorsMiddlewareTests.cs
similarity index 100%
rename from src/Middleware/CORS/test/Test/CorsMiddlewareTests.cs
rename to src/Middleware/CORS/test/UnitTests/CorsMiddlewareTests.cs
diff --git a/src/Middleware/CORS/test/Test/CorsOptionsTest.cs b/src/Middleware/CORS/test/UnitTests/CorsOptionsTest.cs
similarity index 100%
rename from src/Middleware/CORS/test/Test/CorsOptionsTest.cs
rename to src/Middleware/CORS/test/UnitTests/CorsOptionsTest.cs
diff --git a/src/Middleware/CORS/test/Test/CorsPolicyBuilderTests.cs b/src/Middleware/CORS/test/UnitTests/CorsPolicyBuilderTests.cs
similarity index 100%
rename from src/Middleware/CORS/test/Test/CorsPolicyBuilderTests.cs
rename to src/Middleware/CORS/test/UnitTests/CorsPolicyBuilderTests.cs
diff --git a/src/Middleware/CORS/test/Test/CorsPolicyExtensionsTests.cs b/src/Middleware/CORS/test/UnitTests/CorsPolicyExtensionsTests.cs
similarity index 100%
rename from src/Middleware/CORS/test/Test/CorsPolicyExtensionsTests.cs
rename to src/Middleware/CORS/test/UnitTests/CorsPolicyExtensionsTests.cs
diff --git a/src/Middleware/CORS/test/Test/CorsPolicyTests.cs b/src/Middleware/CORS/test/UnitTests/CorsPolicyTests.cs
similarity index 100%
rename from src/Middleware/CORS/test/Test/CorsPolicyTests.cs
rename to src/Middleware/CORS/test/UnitTests/CorsPolicyTests.cs
diff --git a/src/Middleware/CORS/test/Test/CorsResultTests.cs b/src/Middleware/CORS/test/UnitTests/CorsResultTests.cs
similarity index 100%
rename from src/Middleware/CORS/test/Test/CorsResultTests.cs
rename to src/Middleware/CORS/test/UnitTests/CorsResultTests.cs
diff --git a/src/Middleware/CORS/test/Test/CorsServiceTests.cs b/src/Middleware/CORS/test/UnitTests/CorsServiceTests.cs
similarity index 100%
rename from src/Middleware/CORS/test/Test/CorsServiceTests.cs
rename to src/Middleware/CORS/test/UnitTests/CorsServiceTests.cs
diff --git a/src/Middleware/CORS/test/Test/DefaultCorsPolicyProviderTests.cs b/src/Middleware/CORS/test/UnitTests/DefaultCorsPolicyProviderTests.cs
similarity index 100%
rename from src/Middleware/CORS/test/Test/DefaultCorsPolicyProviderTests.cs
rename to src/Middleware/CORS/test/UnitTests/DefaultCorsPolicyProviderTests.cs
diff --git a/src/Middleware/CORS/test/Test/Microsoft.AspNetCore.Cors.Test.csproj b/src/Middleware/CORS/test/UnitTests/Microsoft.AspNetCore.Cors.Test.csproj
similarity index 100%
rename from src/Middleware/CORS/test/Test/Microsoft.AspNetCore.Cors.Test.csproj
rename to src/Middleware/CORS/test/UnitTests/Microsoft.AspNetCore.Cors.Test.csproj
diff --git a/src/Middleware/CORS/test/Test/UriHelpersTests.cs b/src/Middleware/CORS/test/UnitTests/UriHelpersTests.cs
similarity index 100%
rename from src/Middleware/CORS/test/Test/UriHelpersTests.cs
rename to src/Middleware/CORS/test/UnitTests/UriHelpersTests.cs
diff --git a/src/Middleware/Middleware.sln b/src/Middleware/Middleware.sln
index 447e9ebea026a6f753186daf492f63ab6695c720..696e17f7f2f28795ef150684b63cb41ecdf21c0f 100644
--- a/src/Middleware/Middleware.sln
+++ b/src/Middleware/Middleware.sln
@@ -164,7 +164,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Cors",
 EndProject
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Cors", "Cors", "{7CF63806-4C4F-4C48-8922-A75113975308}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Cors.Test", "CORS\test\Test\Microsoft.AspNetCore.Cors.Test.csproj", "{12AC0566-2B11-433D-81D7-7116C939FAFE}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Cors.Test", "CORS\test\UnitTests\Microsoft.AspNetCore.Cors.Test.csproj", "{12AC0566-2B11-433D-81D7-7116C939FAFE}"
 EndProject
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{4967DE1B-FEC2-4C2B-8F7F-6262D67C9434}"
 EndProject
@@ -180,9 +180,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "StaticFileSample", "StaticF
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.StaticFiles.FunctionalTests", "StaticFiles\test\FunctionalTests\Microsoft.AspNetCore.StaticFiles.FunctionalTests.csproj", "{7EE15C68-E49B-4362-A53D-A71193B0A3D1}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.StaticFiles.Tests", "StaticFiles\test\Tests\Microsoft.AspNetCore.StaticFiles.Tests.csproj", "{112CDD7E-8DEE-407B-A52F-E436CD748F0F}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.RangeHelper.Sources.Test", "StaticFiles\test\RangeHelper.Sources.Test\Microsoft.AspNetCore.RangeHelper.Sources.Test.csproj", "{E949DA91-9023-4B2A-B16E-F8CFE85F3074}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.StaticFiles.Tests", "StaticFiles\test\UnitTests\Microsoft.AspNetCore.StaticFiles.Tests.csproj", "{112CDD7E-8DEE-407B-A52F-E436CD748F0F}"
 EndProject
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ResponseCaching", "ResponseCaching", "{EDF56413-B406-4200-B4D4-0EE3F9CB8F7C}"
 EndProject
@@ -196,6 +194,32 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Respon
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.ResponseCaching.Abstractions", "ResponseCaching.Abstractions\src\Microsoft.AspNetCore.ResponseCaching.Abstractions.csproj", "{D0204B45-8528-4504-9FC1-D229F3A33896}"
 EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Session", "Session", "{D1394339-B3BE-4F42-8EC0-6E02CC0165EE}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SessionSample", "Session\samples\SessionSample.csproj", "{3AD7A532-59FC-46BC-8257-D0E6F9533B73}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Session", "Session\src\Microsoft.AspNetCore.Session.csproj", "{0FBCB5C7-B212-4BEE-B9AE-0BF653BBAD24}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Session.Tests", "Session\test\Microsoft.AspNetCore.Session.Tests.csproj", "{20C89A12-96B6-4F2B-9CA8-62891DCA2549}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.Kestrel", "..\Servers\Kestrel\Kestrel\src\Microsoft.AspNetCore.Server.Kestrel.csproj", "{FD1C2473-5485-4105-87CB-617158F90FCA}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.TestHost", "..\Hosting\TestHost\src\Microsoft.AspNetCore.TestHost.csproj", "{6F6A7E3D-D883-494D-8C61-E75D7EBFE3F4}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Http", "..\http\http\src\Microsoft.AspNetCore.Http.csproj", "{9D3062AB-5B11-4FFE-BEAF-304CF7F19AA5}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Net.Http.Headers", "..\http\Headers\src\Microsoft.Net.Http.Headers.csproj", "{CB8AD0DF-00CE-443B-AAC4-3A5CCEDC6AD0}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Routing", "..\http\Routing\src\Microsoft.AspNetCore.Routing.csproj", "{03EA49FF-EF19-476C-8FCF-C426860751A8}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.Kestrel.Https", "..\Servers\Kestrel\Https\src\Microsoft.AspNetCore.Server.Kestrel.Https.csproj", "{0186A5D0-6D05-4C19-BB81-E49A51745FFF}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.IntegrationTesting", "..\Hosting\Server.IntegrationTesting\src\Microsoft.AspNetCore.Server.IntegrationTesting.csproj", "{17B7BFF6-4E72-410C-B690-02741505500A}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.HttpSys", "..\Servers\HttpSys\src\Microsoft.AspNetCore.Server.HttpSys.csproj", "{260E77CB-800F-4A13-BE92-9CAA097705C2}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "_dependencies", "_dependencies", "{ACA6DDB9-7592-47CE-A740-D15BF307E9E0}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -914,18 +938,6 @@ Global
 		{112CDD7E-8DEE-407B-A52F-E436CD748F0F}.Release|x64.Build.0 = Release|Any CPU
 		{112CDD7E-8DEE-407B-A52F-E436CD748F0F}.Release|x86.ActiveCfg = Release|Any CPU
 		{112CDD7E-8DEE-407B-A52F-E436CD748F0F}.Release|x86.Build.0 = Release|Any CPU
-		{E949DA91-9023-4B2A-B16E-F8CFE85F3074}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{E949DA91-9023-4B2A-B16E-F8CFE85F3074}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{E949DA91-9023-4B2A-B16E-F8CFE85F3074}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{E949DA91-9023-4B2A-B16E-F8CFE85F3074}.Debug|x64.Build.0 = Debug|Any CPU
-		{E949DA91-9023-4B2A-B16E-F8CFE85F3074}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{E949DA91-9023-4B2A-B16E-F8CFE85F3074}.Debug|x86.Build.0 = Debug|Any CPU
-		{E949DA91-9023-4B2A-B16E-F8CFE85F3074}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{E949DA91-9023-4B2A-B16E-F8CFE85F3074}.Release|Any CPU.Build.0 = Release|Any CPU
-		{E949DA91-9023-4B2A-B16E-F8CFE85F3074}.Release|x64.ActiveCfg = Release|Any CPU
-		{E949DA91-9023-4B2A-B16E-F8CFE85F3074}.Release|x64.Build.0 = Release|Any CPU
-		{E949DA91-9023-4B2A-B16E-F8CFE85F3074}.Release|x86.ActiveCfg = Release|Any CPU
-		{E949DA91-9023-4B2A-B16E-F8CFE85F3074}.Release|x86.Build.0 = Release|Any CPU
 		{7583CA2C-249C-44A2-8499-8D4C1AB35ADE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{7583CA2C-249C-44A2-8499-8D4C1AB35ADE}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{7583CA2C-249C-44A2-8499-8D4C1AB35ADE}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -974,6 +986,138 @@ Global
 		{D0204B45-8528-4504-9FC1-D229F3A33896}.Release|x64.Build.0 = Release|Any CPU
 		{D0204B45-8528-4504-9FC1-D229F3A33896}.Release|x86.ActiveCfg = Release|Any CPU
 		{D0204B45-8528-4504-9FC1-D229F3A33896}.Release|x86.Build.0 = Release|Any CPU
+		{3AD7A532-59FC-46BC-8257-D0E6F9533B73}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{3AD7A532-59FC-46BC-8257-D0E6F9533B73}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{3AD7A532-59FC-46BC-8257-D0E6F9533B73}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{3AD7A532-59FC-46BC-8257-D0E6F9533B73}.Debug|x64.Build.0 = Debug|Any CPU
+		{3AD7A532-59FC-46BC-8257-D0E6F9533B73}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{3AD7A532-59FC-46BC-8257-D0E6F9533B73}.Debug|x86.Build.0 = Debug|Any CPU
+		{3AD7A532-59FC-46BC-8257-D0E6F9533B73}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{3AD7A532-59FC-46BC-8257-D0E6F9533B73}.Release|Any CPU.Build.0 = Release|Any CPU
+		{3AD7A532-59FC-46BC-8257-D0E6F9533B73}.Release|x64.ActiveCfg = Release|Any CPU
+		{3AD7A532-59FC-46BC-8257-D0E6F9533B73}.Release|x64.Build.0 = Release|Any CPU
+		{3AD7A532-59FC-46BC-8257-D0E6F9533B73}.Release|x86.ActiveCfg = Release|Any CPU
+		{3AD7A532-59FC-46BC-8257-D0E6F9533B73}.Release|x86.Build.0 = Release|Any CPU
+		{0FBCB5C7-B212-4BEE-B9AE-0BF653BBAD24}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{0FBCB5C7-B212-4BEE-B9AE-0BF653BBAD24}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{0FBCB5C7-B212-4BEE-B9AE-0BF653BBAD24}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{0FBCB5C7-B212-4BEE-B9AE-0BF653BBAD24}.Debug|x64.Build.0 = Debug|Any CPU
+		{0FBCB5C7-B212-4BEE-B9AE-0BF653BBAD24}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{0FBCB5C7-B212-4BEE-B9AE-0BF653BBAD24}.Debug|x86.Build.0 = Debug|Any CPU
+		{0FBCB5C7-B212-4BEE-B9AE-0BF653BBAD24}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{0FBCB5C7-B212-4BEE-B9AE-0BF653BBAD24}.Release|Any CPU.Build.0 = Release|Any CPU
+		{0FBCB5C7-B212-4BEE-B9AE-0BF653BBAD24}.Release|x64.ActiveCfg = Release|Any CPU
+		{0FBCB5C7-B212-4BEE-B9AE-0BF653BBAD24}.Release|x64.Build.0 = Release|Any CPU
+		{0FBCB5C7-B212-4BEE-B9AE-0BF653BBAD24}.Release|x86.ActiveCfg = Release|Any CPU
+		{0FBCB5C7-B212-4BEE-B9AE-0BF653BBAD24}.Release|x86.Build.0 = Release|Any CPU
+		{20C89A12-96B6-4F2B-9CA8-62891DCA2549}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{20C89A12-96B6-4F2B-9CA8-62891DCA2549}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{20C89A12-96B6-4F2B-9CA8-62891DCA2549}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{20C89A12-96B6-4F2B-9CA8-62891DCA2549}.Debug|x64.Build.0 = Debug|Any CPU
+		{20C89A12-96B6-4F2B-9CA8-62891DCA2549}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{20C89A12-96B6-4F2B-9CA8-62891DCA2549}.Debug|x86.Build.0 = Debug|Any CPU
+		{20C89A12-96B6-4F2B-9CA8-62891DCA2549}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{20C89A12-96B6-4F2B-9CA8-62891DCA2549}.Release|Any CPU.Build.0 = Release|Any CPU
+		{20C89A12-96B6-4F2B-9CA8-62891DCA2549}.Release|x64.ActiveCfg = Release|Any CPU
+		{20C89A12-96B6-4F2B-9CA8-62891DCA2549}.Release|x64.Build.0 = Release|Any CPU
+		{20C89A12-96B6-4F2B-9CA8-62891DCA2549}.Release|x86.ActiveCfg = Release|Any CPU
+		{20C89A12-96B6-4F2B-9CA8-62891DCA2549}.Release|x86.Build.0 = Release|Any CPU
+		{FD1C2473-5485-4105-87CB-617158F90FCA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{FD1C2473-5485-4105-87CB-617158F90FCA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{FD1C2473-5485-4105-87CB-617158F90FCA}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{FD1C2473-5485-4105-87CB-617158F90FCA}.Debug|x64.Build.0 = Debug|Any CPU
+		{FD1C2473-5485-4105-87CB-617158F90FCA}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{FD1C2473-5485-4105-87CB-617158F90FCA}.Debug|x86.Build.0 = Debug|Any CPU
+		{FD1C2473-5485-4105-87CB-617158F90FCA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{FD1C2473-5485-4105-87CB-617158F90FCA}.Release|Any CPU.Build.0 = Release|Any CPU
+		{FD1C2473-5485-4105-87CB-617158F90FCA}.Release|x64.ActiveCfg = Release|Any CPU
+		{FD1C2473-5485-4105-87CB-617158F90FCA}.Release|x64.Build.0 = Release|Any CPU
+		{FD1C2473-5485-4105-87CB-617158F90FCA}.Release|x86.ActiveCfg = Release|Any CPU
+		{FD1C2473-5485-4105-87CB-617158F90FCA}.Release|x86.Build.0 = Release|Any CPU
+		{6F6A7E3D-D883-494D-8C61-E75D7EBFE3F4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{6F6A7E3D-D883-494D-8C61-E75D7EBFE3F4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{6F6A7E3D-D883-494D-8C61-E75D7EBFE3F4}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{6F6A7E3D-D883-494D-8C61-E75D7EBFE3F4}.Debug|x64.Build.0 = Debug|Any CPU
+		{6F6A7E3D-D883-494D-8C61-E75D7EBFE3F4}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{6F6A7E3D-D883-494D-8C61-E75D7EBFE3F4}.Debug|x86.Build.0 = Debug|Any CPU
+		{6F6A7E3D-D883-494D-8C61-E75D7EBFE3F4}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{6F6A7E3D-D883-494D-8C61-E75D7EBFE3F4}.Release|Any CPU.Build.0 = Release|Any CPU
+		{6F6A7E3D-D883-494D-8C61-E75D7EBFE3F4}.Release|x64.ActiveCfg = Release|Any CPU
+		{6F6A7E3D-D883-494D-8C61-E75D7EBFE3F4}.Release|x64.Build.0 = Release|Any CPU
+		{6F6A7E3D-D883-494D-8C61-E75D7EBFE3F4}.Release|x86.ActiveCfg = Release|Any CPU
+		{6F6A7E3D-D883-494D-8C61-E75D7EBFE3F4}.Release|x86.Build.0 = Release|Any CPU
+		{9D3062AB-5B11-4FFE-BEAF-304CF7F19AA5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{9D3062AB-5B11-4FFE-BEAF-304CF7F19AA5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{9D3062AB-5B11-4FFE-BEAF-304CF7F19AA5}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{9D3062AB-5B11-4FFE-BEAF-304CF7F19AA5}.Debug|x64.Build.0 = Debug|Any CPU
+		{9D3062AB-5B11-4FFE-BEAF-304CF7F19AA5}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{9D3062AB-5B11-4FFE-BEAF-304CF7F19AA5}.Debug|x86.Build.0 = Debug|Any CPU
+		{9D3062AB-5B11-4FFE-BEAF-304CF7F19AA5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{9D3062AB-5B11-4FFE-BEAF-304CF7F19AA5}.Release|Any CPU.Build.0 = Release|Any CPU
+		{9D3062AB-5B11-4FFE-BEAF-304CF7F19AA5}.Release|x64.ActiveCfg = Release|Any CPU
+		{9D3062AB-5B11-4FFE-BEAF-304CF7F19AA5}.Release|x64.Build.0 = Release|Any CPU
+		{9D3062AB-5B11-4FFE-BEAF-304CF7F19AA5}.Release|x86.ActiveCfg = Release|Any CPU
+		{9D3062AB-5B11-4FFE-BEAF-304CF7F19AA5}.Release|x86.Build.0 = Release|Any CPU
+		{CB8AD0DF-00CE-443B-AAC4-3A5CCEDC6AD0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{CB8AD0DF-00CE-443B-AAC4-3A5CCEDC6AD0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{CB8AD0DF-00CE-443B-AAC4-3A5CCEDC6AD0}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{CB8AD0DF-00CE-443B-AAC4-3A5CCEDC6AD0}.Debug|x64.Build.0 = Debug|Any CPU
+		{CB8AD0DF-00CE-443B-AAC4-3A5CCEDC6AD0}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{CB8AD0DF-00CE-443B-AAC4-3A5CCEDC6AD0}.Debug|x86.Build.0 = Debug|Any CPU
+		{CB8AD0DF-00CE-443B-AAC4-3A5CCEDC6AD0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{CB8AD0DF-00CE-443B-AAC4-3A5CCEDC6AD0}.Release|Any CPU.Build.0 = Release|Any CPU
+		{CB8AD0DF-00CE-443B-AAC4-3A5CCEDC6AD0}.Release|x64.ActiveCfg = Release|Any CPU
+		{CB8AD0DF-00CE-443B-AAC4-3A5CCEDC6AD0}.Release|x64.Build.0 = Release|Any CPU
+		{CB8AD0DF-00CE-443B-AAC4-3A5CCEDC6AD0}.Release|x86.ActiveCfg = Release|Any CPU
+		{CB8AD0DF-00CE-443B-AAC4-3A5CCEDC6AD0}.Release|x86.Build.0 = Release|Any CPU
+		{03EA49FF-EF19-476C-8FCF-C426860751A8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{03EA49FF-EF19-476C-8FCF-C426860751A8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{03EA49FF-EF19-476C-8FCF-C426860751A8}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{03EA49FF-EF19-476C-8FCF-C426860751A8}.Debug|x64.Build.0 = Debug|Any CPU
+		{03EA49FF-EF19-476C-8FCF-C426860751A8}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{03EA49FF-EF19-476C-8FCF-C426860751A8}.Debug|x86.Build.0 = Debug|Any CPU
+		{03EA49FF-EF19-476C-8FCF-C426860751A8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{03EA49FF-EF19-476C-8FCF-C426860751A8}.Release|Any CPU.Build.0 = Release|Any CPU
+		{03EA49FF-EF19-476C-8FCF-C426860751A8}.Release|x64.ActiveCfg = Release|Any CPU
+		{03EA49FF-EF19-476C-8FCF-C426860751A8}.Release|x64.Build.0 = Release|Any CPU
+		{03EA49FF-EF19-476C-8FCF-C426860751A8}.Release|x86.ActiveCfg = Release|Any CPU
+		{03EA49FF-EF19-476C-8FCF-C426860751A8}.Release|x86.Build.0 = Release|Any CPU
+		{0186A5D0-6D05-4C19-BB81-E49A51745FFF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{0186A5D0-6D05-4C19-BB81-E49A51745FFF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{0186A5D0-6D05-4C19-BB81-E49A51745FFF}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{0186A5D0-6D05-4C19-BB81-E49A51745FFF}.Debug|x64.Build.0 = Debug|Any CPU
+		{0186A5D0-6D05-4C19-BB81-E49A51745FFF}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{0186A5D0-6D05-4C19-BB81-E49A51745FFF}.Debug|x86.Build.0 = Debug|Any CPU
+		{0186A5D0-6D05-4C19-BB81-E49A51745FFF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{0186A5D0-6D05-4C19-BB81-E49A51745FFF}.Release|Any CPU.Build.0 = Release|Any CPU
+		{0186A5D0-6D05-4C19-BB81-E49A51745FFF}.Release|x64.ActiveCfg = Release|Any CPU
+		{0186A5D0-6D05-4C19-BB81-E49A51745FFF}.Release|x64.Build.0 = Release|Any CPU
+		{0186A5D0-6D05-4C19-BB81-E49A51745FFF}.Release|x86.ActiveCfg = Release|Any CPU
+		{0186A5D0-6D05-4C19-BB81-E49A51745FFF}.Release|x86.Build.0 = Release|Any CPU
+		{17B7BFF6-4E72-410C-B690-02741505500A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{17B7BFF6-4E72-410C-B690-02741505500A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{17B7BFF6-4E72-410C-B690-02741505500A}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{17B7BFF6-4E72-410C-B690-02741505500A}.Debug|x64.Build.0 = Debug|Any CPU
+		{17B7BFF6-4E72-410C-B690-02741505500A}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{17B7BFF6-4E72-410C-B690-02741505500A}.Debug|x86.Build.0 = Debug|Any CPU
+		{17B7BFF6-4E72-410C-B690-02741505500A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{17B7BFF6-4E72-410C-B690-02741505500A}.Release|Any CPU.Build.0 = Release|Any CPU
+		{17B7BFF6-4E72-410C-B690-02741505500A}.Release|x64.ActiveCfg = Release|Any CPU
+		{17B7BFF6-4E72-410C-B690-02741505500A}.Release|x64.Build.0 = Release|Any CPU
+		{17B7BFF6-4E72-410C-B690-02741505500A}.Release|x86.ActiveCfg = Release|Any CPU
+		{17B7BFF6-4E72-410C-B690-02741505500A}.Release|x86.Build.0 = Release|Any CPU
+		{260E77CB-800F-4A13-BE92-9CAA097705C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{260E77CB-800F-4A13-BE92-9CAA097705C2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{260E77CB-800F-4A13-BE92-9CAA097705C2}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{260E77CB-800F-4A13-BE92-9CAA097705C2}.Debug|x64.Build.0 = Debug|Any CPU
+		{260E77CB-800F-4A13-BE92-9CAA097705C2}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{260E77CB-800F-4A13-BE92-9CAA097705C2}.Debug|x86.Build.0 = Debug|Any CPU
+		{260E77CB-800F-4A13-BE92-9CAA097705C2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{260E77CB-800F-4A13-BE92-9CAA097705C2}.Release|Any CPU.Build.0 = Release|Any CPU
+		{260E77CB-800F-4A13-BE92-9CAA097705C2}.Release|x64.ActiveCfg = Release|Any CPU
+		{260E77CB-800F-4A13-BE92-9CAA097705C2}.Release|x64.Build.0 = Release|Any CPU
+		{260E77CB-800F-4A13-BE92-9CAA097705C2}.Release|x86.ActiveCfg = Release|Any CPU
+		{260E77CB-800F-4A13-BE92-9CAA097705C2}.Release|x86.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
@@ -1049,11 +1193,21 @@ Global
 		{85E30300-8205-4E1F-A141-0642CE146B65} = {E72E405C-C1DA-41FE-8AF0-49C5E5CB496B}
 		{7EE15C68-E49B-4362-A53D-A71193B0A3D1} = {E72E405C-C1DA-41FE-8AF0-49C5E5CB496B}
 		{112CDD7E-8DEE-407B-A52F-E436CD748F0F} = {E72E405C-C1DA-41FE-8AF0-49C5E5CB496B}
-		{E949DA91-9023-4B2A-B16E-F8CFE85F3074} = {E72E405C-C1DA-41FE-8AF0-49C5E5CB496B}
 		{7583CA2C-249C-44A2-8499-8D4C1AB35ADE} = {EDF56413-B406-4200-B4D4-0EE3F9CB8F7C}
 		{D8239A8C-F692-460A-B204-5CF05502BEE2} = {EDF56413-B406-4200-B4D4-0EE3F9CB8F7C}
 		{9F973483-5D32-4093-88F0-761C9BEAEE04} = {EDF56413-B406-4200-B4D4-0EE3F9CB8F7C}
 		{D0204B45-8528-4504-9FC1-D229F3A33896} = {7A493DEA-32F2-4AB1-9113-828D44F5DDA2}
+		{3AD7A532-59FC-46BC-8257-D0E6F9533B73} = {D1394339-B3BE-4F42-8EC0-6E02CC0165EE}
+		{0FBCB5C7-B212-4BEE-B9AE-0BF653BBAD24} = {D1394339-B3BE-4F42-8EC0-6E02CC0165EE}
+		{20C89A12-96B6-4F2B-9CA8-62891DCA2549} = {D1394339-B3BE-4F42-8EC0-6E02CC0165EE}
+		{FD1C2473-5485-4105-87CB-617158F90FCA} = {ACA6DDB9-7592-47CE-A740-D15BF307E9E0}
+		{6F6A7E3D-D883-494D-8C61-E75D7EBFE3F4} = {ACA6DDB9-7592-47CE-A740-D15BF307E9E0}
+		{9D3062AB-5B11-4FFE-BEAF-304CF7F19AA5} = {ACA6DDB9-7592-47CE-A740-D15BF307E9E0}
+		{CB8AD0DF-00CE-443B-AAC4-3A5CCEDC6AD0} = {ACA6DDB9-7592-47CE-A740-D15BF307E9E0}
+		{03EA49FF-EF19-476C-8FCF-C426860751A8} = {ACA6DDB9-7592-47CE-A740-D15BF307E9E0}
+		{0186A5D0-6D05-4C19-BB81-E49A51745FFF} = {ACA6DDB9-7592-47CE-A740-D15BF307E9E0}
+		{17B7BFF6-4E72-410C-B690-02741505500A} = {ACA6DDB9-7592-47CE-A740-D15BF307E9E0}
+		{260E77CB-800F-4A13-BE92-9CAA097705C2} = {ACA6DDB9-7592-47CE-A740-D15BF307E9E0}
 	EndGlobalSection
 	GlobalSection(ExtensibilityGlobals) = postSolution
 		SolutionGuid = {83786312-A93B-4BB4-AB06-7C6913A59AFA}
diff --git a/src/Middleware/Session/samples/SessionSample.csproj b/src/Middleware/Session/samples/SessionSample.csproj
new file mode 100644
index 0000000000000000000000000000000000000000..1bdda0779f60bb58415f9e3f9753426792f78d14
--- /dev/null
+++ b/src/Middleware/Session/samples/SessionSample.csproj
@@ -0,0 +1,18 @@
+<Project Sdk="Microsoft.NET.Sdk.Web">
+
+  <PropertyGroup>
+    <TargetFramework>netcoreapp3.0</TargetFramework>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <Reference Include="Microsoft.AspNetCore.Session" />
+    <Reference Include="Microsoft.AspNetCore.Server.IISIntegration" />
+    <Reference Include="Microsoft.AspNetCore.Server.Kestrel" />
+    <Reference Include="Microsoft.Extensions.Caching.Memory" />
+    <Reference Include="Microsoft.Extensions.Caching.StackExchangeRedis" />
+    <Reference Include="Microsoft.Extensions.Caching.SqlServer" />
+    <Reference Include="Microsoft.Extensions.Configuration.UserSecrets" />
+    <Reference Include="Microsoft.Extensions.Logging.Console" />
+  </ItemGroup>
+
+</Project>
diff --git a/src/Session/samples/SessionSample/Startup.cs b/src/Middleware/Session/samples/Startup.cs
similarity index 100%
rename from src/Session/samples/SessionSample/Startup.cs
rename to src/Middleware/Session/samples/Startup.cs
diff --git a/src/Session/samples/SessionSample/appsettings.json b/src/Middleware/Session/samples/appsettings.json
similarity index 100%
rename from src/Session/samples/SessionSample/appsettings.json
rename to src/Middleware/Session/samples/appsettings.json
diff --git a/src/Session/src/Microsoft.AspNetCore.Session/CookieProtection.cs b/src/Middleware/Session/src/CookieProtection.cs
similarity index 100%
rename from src/Session/src/Microsoft.AspNetCore.Session/CookieProtection.cs
rename to src/Middleware/Session/src/CookieProtection.cs
diff --git a/src/Session/src/Microsoft.AspNetCore.Session/DistributedSession.cs b/src/Middleware/Session/src/DistributedSession.cs
similarity index 100%
rename from src/Session/src/Microsoft.AspNetCore.Session/DistributedSession.cs
rename to src/Middleware/Session/src/DistributedSession.cs
diff --git a/src/Session/src/Microsoft.AspNetCore.Session/DistributedSessionStore.cs b/src/Middleware/Session/src/DistributedSessionStore.cs
similarity index 100%
rename from src/Session/src/Microsoft.AspNetCore.Session/DistributedSessionStore.cs
rename to src/Middleware/Session/src/DistributedSessionStore.cs
diff --git a/src/Session/src/Microsoft.AspNetCore.Session/EncodedKey.cs b/src/Middleware/Session/src/EncodedKey.cs
similarity index 100%
rename from src/Session/src/Microsoft.AspNetCore.Session/EncodedKey.cs
rename to src/Middleware/Session/src/EncodedKey.cs
diff --git a/src/Session/src/Microsoft.AspNetCore.Session/ISessionStore.cs b/src/Middleware/Session/src/ISessionStore.cs
similarity index 100%
rename from src/Session/src/Microsoft.AspNetCore.Session/ISessionStore.cs
rename to src/Middleware/Session/src/ISessionStore.cs
diff --git a/src/Session/src/Microsoft.AspNetCore.Session/LoggingExtensions.cs b/src/Middleware/Session/src/LoggingExtensions.cs
similarity index 100%
rename from src/Session/src/Microsoft.AspNetCore.Session/LoggingExtensions.cs
rename to src/Middleware/Session/src/LoggingExtensions.cs
diff --git a/src/Middleware/Session/src/Microsoft.AspNetCore.Session.csproj b/src/Middleware/Session/src/Microsoft.AspNetCore.Session.csproj
new file mode 100644
index 0000000000000000000000000000000000000000..65e72cae6ecac96d0ede57f7ef87aaf68b5629cd
--- /dev/null
+++ b/src/Middleware/Session/src/Microsoft.AspNetCore.Session.csproj
@@ -0,0 +1,20 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <Description>ASP.NET Core session state middleware.</Description>
+    <TargetFramework>netcoreapp3.0</TargetFramework>
+    <NoWarn>$(NoWarn);CS1591</NoWarn>
+    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+    <GenerateDocumentationFile>true</GenerateDocumentationFile>
+    <PackageTags>aspnetcore;session;sessionstate</PackageTags>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <Reference Include="Microsoft.AspNetCore.DataProtection" />
+    <Reference Include="Microsoft.AspNetCore.Http.Abstractions" />
+    <Reference Include="Microsoft.Extensions.Caching.Abstractions" />
+    <Reference Include="Microsoft.Extensions.Logging.Abstractions" />
+    <Reference Include="Microsoft.Extensions.Options" />
+  </ItemGroup>
+
+</Project>
diff --git a/src/Session/src/Microsoft.AspNetCore.Session/NoOpSessionStore.cs b/src/Middleware/Session/src/NoOpSessionStore.cs
similarity index 100%
rename from src/Session/src/Microsoft.AspNetCore.Session/NoOpSessionStore.cs
rename to src/Middleware/Session/src/NoOpSessionStore.cs
diff --git a/src/Session/src/Microsoft.AspNetCore.Session/Properties/Resources.Designer.cs b/src/Middleware/Session/src/Properties/Resources.Designer.cs
similarity index 100%
rename from src/Session/src/Microsoft.AspNetCore.Session/Properties/Resources.Designer.cs
rename to src/Middleware/Session/src/Properties/Resources.Designer.cs
diff --git a/src/Session/src/Microsoft.AspNetCore.Session/Resources.resx b/src/Middleware/Session/src/Resources.resx
similarity index 100%
rename from src/Session/src/Microsoft.AspNetCore.Session/Resources.resx
rename to src/Middleware/Session/src/Resources.resx
diff --git a/src/Session/src/Microsoft.AspNetCore.Session/SessionDefaults.cs b/src/Middleware/Session/src/SessionDefaults.cs
similarity index 100%
rename from src/Session/src/Microsoft.AspNetCore.Session/SessionDefaults.cs
rename to src/Middleware/Session/src/SessionDefaults.cs
diff --git a/src/Session/src/Microsoft.AspNetCore.Session/SessionFeature.cs b/src/Middleware/Session/src/SessionFeature.cs
similarity index 100%
rename from src/Session/src/Microsoft.AspNetCore.Session/SessionFeature.cs
rename to src/Middleware/Session/src/SessionFeature.cs
diff --git a/src/Session/src/Microsoft.AspNetCore.Session/SessionMiddleware.cs b/src/Middleware/Session/src/SessionMiddleware.cs
similarity index 100%
rename from src/Session/src/Microsoft.AspNetCore.Session/SessionMiddleware.cs
rename to src/Middleware/Session/src/SessionMiddleware.cs
diff --git a/src/Session/src/Microsoft.AspNetCore.Session/SessionMiddlewareExtensions.cs b/src/Middleware/Session/src/SessionMiddlewareExtensions.cs
similarity index 100%
rename from src/Session/src/Microsoft.AspNetCore.Session/SessionMiddlewareExtensions.cs
rename to src/Middleware/Session/src/SessionMiddlewareExtensions.cs
diff --git a/src/Session/src/Microsoft.AspNetCore.Session/SessionOptions.cs b/src/Middleware/Session/src/SessionOptions.cs
similarity index 100%
rename from src/Session/src/Microsoft.AspNetCore.Session/SessionOptions.cs
rename to src/Middleware/Session/src/SessionOptions.cs
diff --git a/src/Session/src/Microsoft.AspNetCore.Session/SessionServiceCollectionExtensions.cs b/src/Middleware/Session/src/SessionServiceCollectionExtensions.cs
similarity index 100%
rename from src/Session/src/Microsoft.AspNetCore.Session/SessionServiceCollectionExtensions.cs
rename to src/Middleware/Session/src/SessionServiceCollectionExtensions.cs
diff --git a/src/Session/src/Microsoft.AspNetCore.Session/SipHash.cs b/src/Middleware/Session/src/SipHash.cs
similarity index 100%
rename from src/Session/src/Microsoft.AspNetCore.Session/SipHash.cs
rename to src/Middleware/Session/src/SipHash.cs
diff --git a/src/Session/src/Microsoft.AspNetCore.Session/baseline.netcore.json b/src/Middleware/Session/src/baseline.netcore.json
similarity index 100%
rename from src/Session/src/Microsoft.AspNetCore.Session/baseline.netcore.json
rename to src/Middleware/Session/src/baseline.netcore.json
diff --git a/src/Middleware/Session/test/Microsoft.AspNetCore.Session.Tests.csproj b/src/Middleware/Session/test/Microsoft.AspNetCore.Session.Tests.csproj
new file mode 100644
index 0000000000000000000000000000000000000000..622426b623dbbe6239f65b695d9441a7e0f198f5
--- /dev/null
+++ b/src/Middleware/Session/test/Microsoft.AspNetCore.Session.Tests.csproj
@@ -0,0 +1,14 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>netcoreapp3.0</TargetFramework>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <Reference Include="Microsoft.AspNetCore.Session" />
+    <Reference Include="Microsoft.AspNetCore.TestHost" />
+    <Reference Include="Microsoft.Extensions.Caching.Memory" />
+    <Reference Include="Microsoft.Extensions.Logging.Testing" />
+  </ItemGroup>
+
+</Project>
diff --git a/src/Session/test/Microsoft.AspNetCore.Session.Tests/SessionTests.cs b/src/Middleware/Session/test/SessionTests.cs
similarity index 100%
rename from src/Session/test/Microsoft.AspNetCore.Session.Tests/SessionTests.cs
rename to src/Middleware/Session/test/SessionTests.cs
diff --git a/src/Middleware/StaticFiles/src/Microsoft.AspNetCore.StaticFiles.csproj b/src/Middleware/StaticFiles/src/Microsoft.AspNetCore.StaticFiles.csproj
index 2c3d4c9b458f2f1679d68975bfe32aadb3ea514d..9e74b57dead46fe25e77805b3a336699a7d96b49 100644
--- a/src/Middleware/StaticFiles/src/Microsoft.AspNetCore.StaticFiles.csproj
+++ b/src/Middleware/StaticFiles/src/Microsoft.AspNetCore.StaticFiles.csproj
@@ -9,7 +9,7 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <Compile Include="$(RepositoryRoot)\src\Shared\RangeHelper\**\*.cs" />
+    <Compile Include="$(SharedSourceRoot)RangeHelper\**\*.cs" />
   </ItemGroup>
 
   <ItemGroup>
diff --git a/src/Middleware/StaticFiles/test/RangeHelper.Sources.Test/Microsoft.AspNetCore.RangeHelper.Sources.Test.csproj b/src/Middleware/StaticFiles/test/RangeHelper.Sources.Test/Microsoft.AspNetCore.RangeHelper.Sources.Test.csproj
deleted file mode 100644
index 3be3e75e339410292c0820e2b1e8c183e471c2e9..0000000000000000000000000000000000000000
--- a/src/Middleware/StaticFiles/test/RangeHelper.Sources.Test/Microsoft.AspNetCore.RangeHelper.Sources.Test.csproj
+++ /dev/null
@@ -1,17 +0,0 @@
-<Project Sdk="Microsoft.NET.Sdk">
-
-  <PropertyGroup>
-    <TargetFramework>netcoreapp3.0</TargetFramework>
-  </PropertyGroup>
-
-  <ItemGroup>
-    <Compile Include="$(SharedSourceRoot)RangeHelper\**\*.cs" />
-  </ItemGroup>
-
-  <ItemGroup>
-    <Reference Include="Microsoft.AspNetCore.Http" />
-    <Reference Include="Microsoft.Extensions.Logging.Abstractions" />
-    <Reference Include="Microsoft.AspNetCore.Http.Extensions" />
-  </ItemGroup>
-
-</Project>
diff --git a/src/Middleware/StaticFiles/test/Tests/CacheHeaderTests.cs b/src/Middleware/StaticFiles/test/UnitTests/CacheHeaderTests.cs
similarity index 100%
rename from src/Middleware/StaticFiles/test/Tests/CacheHeaderTests.cs
rename to src/Middleware/StaticFiles/test/UnitTests/CacheHeaderTests.cs
diff --git a/src/Middleware/StaticFiles/test/Tests/DefaultContentTypeProviderTests.cs b/src/Middleware/StaticFiles/test/UnitTests/DefaultContentTypeProviderTests.cs
similarity index 100%
rename from src/Middleware/StaticFiles/test/Tests/DefaultContentTypeProviderTests.cs
rename to src/Middleware/StaticFiles/test/UnitTests/DefaultContentTypeProviderTests.cs
diff --git a/src/Middleware/StaticFiles/test/Tests/DefaultFilesMiddlewareTests.cs b/src/Middleware/StaticFiles/test/UnitTests/DefaultFilesMiddlewareTests.cs
similarity index 100%
rename from src/Middleware/StaticFiles/test/Tests/DefaultFilesMiddlewareTests.cs
rename to src/Middleware/StaticFiles/test/UnitTests/DefaultFilesMiddlewareTests.cs
diff --git a/src/Middleware/StaticFiles/test/Tests/DirectoryBrowserMiddlewareTests.cs b/src/Middleware/StaticFiles/test/UnitTests/DirectoryBrowserMiddlewareTests.cs
similarity index 100%
rename from src/Middleware/StaticFiles/test/Tests/DirectoryBrowserMiddlewareTests.cs
rename to src/Middleware/StaticFiles/test/UnitTests/DirectoryBrowserMiddlewareTests.cs
diff --git a/src/Middleware/StaticFiles/test/Tests/Microsoft.AspNetCore.StaticFiles.Tests.csproj b/src/Middleware/StaticFiles/test/UnitTests/Microsoft.AspNetCore.StaticFiles.Tests.csproj
similarity index 89%
rename from src/Middleware/StaticFiles/test/Tests/Microsoft.AspNetCore.StaticFiles.Tests.csproj
rename to src/Middleware/StaticFiles/test/UnitTests/Microsoft.AspNetCore.StaticFiles.Tests.csproj
index 416f29d5085b8d5db6b3aecea2c7da449e43ab71..140ebbf93ac586e07fae1d86dcb78bf64d8776e0 100644
--- a/src/Middleware/StaticFiles/test/Tests/Microsoft.AspNetCore.StaticFiles.Tests.csproj
+++ b/src/Middleware/StaticFiles/test/UnitTests/Microsoft.AspNetCore.StaticFiles.Tests.csproj
@@ -5,7 +5,6 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <Compile Include="$(SharedSourceRoot)RangeHelper\**\*.cs" />
     <Content Include="SubFolder\**\*;TestDocument.txt">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
       <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
diff --git a/src/Middleware/StaticFiles/test/Tests/RangeHeaderTests.cs b/src/Middleware/StaticFiles/test/UnitTests/RangeHeaderTests.cs
similarity index 100%
rename from src/Middleware/StaticFiles/test/Tests/RangeHeaderTests.cs
rename to src/Middleware/StaticFiles/test/UnitTests/RangeHeaderTests.cs
diff --git a/src/Middleware/StaticFiles/test/RangeHelper.Sources.Test/RangeHelperTests.cs b/src/Middleware/StaticFiles/test/UnitTests/RangeHelperTests.cs
similarity index 100%
rename from src/Middleware/StaticFiles/test/RangeHelper.Sources.Test/RangeHelperTests.cs
rename to src/Middleware/StaticFiles/test/UnitTests/RangeHelperTests.cs
diff --git a/src/Middleware/StaticFiles/test/Tests/StaticFileContextTest.cs b/src/Middleware/StaticFiles/test/UnitTests/StaticFileContextTest.cs
similarity index 100%
rename from src/Middleware/StaticFiles/test/Tests/StaticFileContextTest.cs
rename to src/Middleware/StaticFiles/test/UnitTests/StaticFileContextTest.cs
diff --git a/src/Middleware/StaticFiles/test/Tests/StaticFileMiddlewareTests.cs b/src/Middleware/StaticFiles/test/UnitTests/StaticFileMiddlewareTests.cs
similarity index 100%
rename from src/Middleware/StaticFiles/test/Tests/StaticFileMiddlewareTests.cs
rename to src/Middleware/StaticFiles/test/UnitTests/StaticFileMiddlewareTests.cs
diff --git a/src/Middleware/StaticFiles/test/Tests/StaticFilesTestServer.cs b/src/Middleware/StaticFiles/test/UnitTests/StaticFilesTestServer.cs
similarity index 100%
rename from src/Middleware/StaticFiles/test/Tests/StaticFilesTestServer.cs
rename to src/Middleware/StaticFiles/test/UnitTests/StaticFilesTestServer.cs
diff --git a/src/Middleware/StaticFiles/test/Tests/SubFolder/Empty.txt b/src/Middleware/StaticFiles/test/UnitTests/SubFolder/Empty.txt
similarity index 100%
rename from src/Middleware/StaticFiles/test/Tests/SubFolder/Empty.txt
rename to src/Middleware/StaticFiles/test/UnitTests/SubFolder/Empty.txt
diff --git a/src/Middleware/StaticFiles/test/Tests/SubFolder/SingleByte.txt b/src/Middleware/StaticFiles/test/UnitTests/SubFolder/SingleByte.txt
similarity index 100%
rename from src/Middleware/StaticFiles/test/Tests/SubFolder/SingleByte.txt
rename to src/Middleware/StaticFiles/test/UnitTests/SubFolder/SingleByte.txt
diff --git a/src/Middleware/StaticFiles/test/Tests/SubFolder/default.html b/src/Middleware/StaticFiles/test/UnitTests/SubFolder/default.html
similarity index 100%
rename from src/Middleware/StaticFiles/test/Tests/SubFolder/default.html
rename to src/Middleware/StaticFiles/test/UnitTests/SubFolder/default.html
diff --git a/src/Middleware/StaticFiles/test/Tests/SubFolder/extra.xml b/src/Middleware/StaticFiles/test/UnitTests/SubFolder/extra.xml
similarity index 100%
rename from src/Middleware/StaticFiles/test/Tests/SubFolder/extra.xml
rename to src/Middleware/StaticFiles/test/UnitTests/SubFolder/extra.xml
diff --git a/src/Middleware/StaticFiles/test/Tests/SubFolder/ranges.txt b/src/Middleware/StaticFiles/test/UnitTests/SubFolder/ranges.txt
similarity index 100%
rename from src/Middleware/StaticFiles/test/Tests/SubFolder/ranges.txt
rename to src/Middleware/StaticFiles/test/UnitTests/SubFolder/ranges.txt
diff --git "a/src/Middleware/StaticFiles/test/Tests/SubFolder/\344\275\240\345\245\275/default.html" "b/src/Middleware/StaticFiles/test/UnitTests/SubFolder/\344\275\240\345\245\275/default.html"
similarity index 100%
rename from "src/Middleware/StaticFiles/test/Tests/SubFolder/\344\275\240\345\245\275/default.html"
rename to "src/Middleware/StaticFiles/test/UnitTests/SubFolder/\344\275\240\345\245\275/default.html"
diff --git "a/src/Middleware/StaticFiles/test/Tests/SubFolder/\344\275\240\345\245\275/\344\270\226\347\225\214/default.html" "b/src/Middleware/StaticFiles/test/UnitTests/SubFolder/\344\275\240\345\245\275/\344\270\226\347\225\214/default.html"
similarity index 100%
rename from "src/Middleware/StaticFiles/test/Tests/SubFolder/\344\275\240\345\245\275/\344\270\226\347\225\214/default.html"
rename to "src/Middleware/StaticFiles/test/UnitTests/SubFolder/\344\275\240\345\245\275/\344\270\226\347\225\214/default.html"
diff --git a/src/Middleware/StaticFiles/test/Tests/TestDocument.txt b/src/Middleware/StaticFiles/test/UnitTests/TestDocument.txt
similarity index 100%
rename from src/Middleware/StaticFiles/test/Tests/TestDocument.txt
rename to src/Middleware/StaticFiles/test/UnitTests/TestDocument.txt
diff --git a/src/Middleware/startvs.cmd b/src/Middleware/startvs.cmd
new file mode 100644
index 0000000000000000000000000000000000000000..9f52f3b92975cbbb686ca1b04c2ff8568ff428fc
--- /dev/null
+++ b/src/Middleware/startvs.cmd
@@ -0,0 +1,3 @@
+@ECHO OFF
+
+%~dp0..\..\startvs.cmd %~dp0Middleware.sln
diff --git a/src/Servers/Kestrel.sln b/src/Servers/Kestrel.sln
index bef581ef4e6218ec686cf020b1e85b04fbf1848b..441943483ddfd0444be1f3e4a046b75b145083fa 100644
--- a/src/Servers/Kestrel.sln
+++ b/src/Servers/Kestrel.sln
@@ -55,7 +55,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Libuv.BindTests", "Kestrel\
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sockets.BindTests", "Kestrel\test\Sockets.BindTests\Sockets.BindTests.csproj", "{F254FDB7-6997-4894-9E82-C4583F605394}"
 EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{C1703959-147D-45A2-B43A-E2FDD6BE1EDC}"
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{0968A626-BA09-4B0D-B45F-855CD0F16F6C}"
 EndProject
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SystemdActivation", "SystemdActivation", "{3CAC9760-6D6E-424C-AC49-E60118D8ADD4}"
 	ProjectSection(SolutionItems) = preProject
@@ -64,7 +64,16 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SystemdActivation", "System
 		Kestrel\test\SystemdActivation\Dockerfile = Kestrel\test\SystemdActivation\Dockerfile
 	EndProjectSection
 EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{E493A405-D2D3-404E-81CA-00E8D9AD5807}"
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{2B456D08-F72B-4EB8-B663-B6D78FC04BF8}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Http.Features", "..\http\Http.Features\src\Microsoft.AspNetCore.Http.Features.csproj", "{CE32EDC9-F78C-45C6-A298-C437DA5EA438}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Hosting", "..\Hosting\hosting\src\Microsoft.AspNetCore.Hosting.csproj", "{6BAE8654-7D3D-4E29-8314-9AB28E81CC1E}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Http", "..\Http\http\src\Microsoft.AspNetCore.Http.csproj", "{52EBE728-0F8E-4159-B420-338CE38C4281}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Http.Abstractions", "..\Http\Http.Abstractions\src\Microsoft.AspNetCore.Http.Abstractions.csproj", "{5FAEC63D-FF6B-4228-8883-7F1FAC6EAF61}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "dependencies", "dependencies", "{F0A1281A-B512-49D2-8362-21EE32B3674F}"
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -352,16 +361,70 @@ Global
 		{F254FDB7-6997-4894-9E82-C4583F605394}.Release|x64.Build.0 = Release|Any CPU
 		{F254FDB7-6997-4894-9E82-C4583F605394}.Release|x86.ActiveCfg = Release|Any CPU
 		{F254FDB7-6997-4894-9E82-C4583F605394}.Release|x86.Build.0 = Release|Any CPU
+		{CE32EDC9-F78C-45C6-A298-C437DA5EA438}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{CE32EDC9-F78C-45C6-A298-C437DA5EA438}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{CE32EDC9-F78C-45C6-A298-C437DA5EA438}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{CE32EDC9-F78C-45C6-A298-C437DA5EA438}.Debug|x64.Build.0 = Debug|Any CPU
+		{CE32EDC9-F78C-45C6-A298-C437DA5EA438}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{CE32EDC9-F78C-45C6-A298-C437DA5EA438}.Debug|x86.Build.0 = Debug|Any CPU
+		{CE32EDC9-F78C-45C6-A298-C437DA5EA438}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{CE32EDC9-F78C-45C6-A298-C437DA5EA438}.Release|Any CPU.Build.0 = Release|Any CPU
+		{CE32EDC9-F78C-45C6-A298-C437DA5EA438}.Release|x64.ActiveCfg = Release|Any CPU
+		{CE32EDC9-F78C-45C6-A298-C437DA5EA438}.Release|x64.Build.0 = Release|Any CPU
+		{CE32EDC9-F78C-45C6-A298-C437DA5EA438}.Release|x86.ActiveCfg = Release|Any CPU
+		{CE32EDC9-F78C-45C6-A298-C437DA5EA438}.Release|x86.Build.0 = Release|Any CPU
+		{6BAE8654-7D3D-4E29-8314-9AB28E81CC1E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{6BAE8654-7D3D-4E29-8314-9AB28E81CC1E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{6BAE8654-7D3D-4E29-8314-9AB28E81CC1E}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{6BAE8654-7D3D-4E29-8314-9AB28E81CC1E}.Debug|x64.Build.0 = Debug|Any CPU
+		{6BAE8654-7D3D-4E29-8314-9AB28E81CC1E}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{6BAE8654-7D3D-4E29-8314-9AB28E81CC1E}.Debug|x86.Build.0 = Debug|Any CPU
+		{6BAE8654-7D3D-4E29-8314-9AB28E81CC1E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{6BAE8654-7D3D-4E29-8314-9AB28E81CC1E}.Release|Any CPU.Build.0 = Release|Any CPU
+		{6BAE8654-7D3D-4E29-8314-9AB28E81CC1E}.Release|x64.ActiveCfg = Release|Any CPU
+		{6BAE8654-7D3D-4E29-8314-9AB28E81CC1E}.Release|x64.Build.0 = Release|Any CPU
+		{6BAE8654-7D3D-4E29-8314-9AB28E81CC1E}.Release|x86.ActiveCfg = Release|Any CPU
+		{6BAE8654-7D3D-4E29-8314-9AB28E81CC1E}.Release|x86.Build.0 = Release|Any CPU
+		{52EBE728-0F8E-4159-B420-338CE38C4281}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{52EBE728-0F8E-4159-B420-338CE38C4281}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{52EBE728-0F8E-4159-B420-338CE38C4281}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{52EBE728-0F8E-4159-B420-338CE38C4281}.Debug|x64.Build.0 = Debug|Any CPU
+		{52EBE728-0F8E-4159-B420-338CE38C4281}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{52EBE728-0F8E-4159-B420-338CE38C4281}.Debug|x86.Build.0 = Debug|Any CPU
+		{52EBE728-0F8E-4159-B420-338CE38C4281}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{52EBE728-0F8E-4159-B420-338CE38C4281}.Release|Any CPU.Build.0 = Release|Any CPU
+		{52EBE728-0F8E-4159-B420-338CE38C4281}.Release|x64.ActiveCfg = Release|Any CPU
+		{52EBE728-0F8E-4159-B420-338CE38C4281}.Release|x64.Build.0 = Release|Any CPU
+		{52EBE728-0F8E-4159-B420-338CE38C4281}.Release|x86.ActiveCfg = Release|Any CPU
+		{52EBE728-0F8E-4159-B420-338CE38C4281}.Release|x86.Build.0 = Release|Any CPU
+		{5FAEC63D-FF6B-4228-8883-7F1FAC6EAF61}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{5FAEC63D-FF6B-4228-8883-7F1FAC6EAF61}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{5FAEC63D-FF6B-4228-8883-7F1FAC6EAF61}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{5FAEC63D-FF6B-4228-8883-7F1FAC6EAF61}.Debug|x64.Build.0 = Debug|Any CPU
+		{5FAEC63D-FF6B-4228-8883-7F1FAC6EAF61}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{5FAEC63D-FF6B-4228-8883-7F1FAC6EAF61}.Debug|x86.Build.0 = Debug|Any CPU
+		{5FAEC63D-FF6B-4228-8883-7F1FAC6EAF61}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{5FAEC63D-FF6B-4228-8883-7F1FAC6EAF61}.Release|Any CPU.Build.0 = Release|Any CPU
+		{5FAEC63D-FF6B-4228-8883-7F1FAC6EAF61}.Release|x64.ActiveCfg = Release|Any CPU
+		{5FAEC63D-FF6B-4228-8883-7F1FAC6EAF61}.Release|x64.Build.0 = Release|Any CPU
+		{5FAEC63D-FF6B-4228-8883-7F1FAC6EAF61}.Release|x86.ActiveCfg = Release|Any CPU
+		{5FAEC63D-FF6B-4228-8883-7F1FAC6EAF61}.Release|x86.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
 	EndGlobalSection
 	GlobalSection(NestedProjects) = preSolution
-		{710E0641-FFF4-4994-A7FA-B22A550A8F20} = {E493A405-D2D3-404E-81CA-00E8D9AD5807}
-		{5F6D1661-652E-4DF3-8A81-6EBE4208CE1A} = {E493A405-D2D3-404E-81CA-00E8D9AD5807}
-		{AA10418F-3291-4011-8BF5-84F315F472B5} = {C1703959-147D-45A2-B43A-E2FDD6BE1EDC}
-		{051BE5E3-073C-4CD2-92AB-7742B2931409} = {E493A405-D2D3-404E-81CA-00E8D9AD5807}
-		{B46DA84E-8442-4988-9B43-6A83812A35B7} = {C1703959-147D-45A2-B43A-E2FDD6BE1EDC}
+		{710E0641-FFF4-4994-A7FA-B22A550A8F20} = {2B456D08-F72B-4EB8-B663-B6D78FC04BF8}
+		{5F6D1661-652E-4DF3-8A81-6EBE4208CE1A} = {2B456D08-F72B-4EB8-B663-B6D78FC04BF8}
+		{AA10418F-3291-4011-8BF5-84F315F472B5} = {0968A626-BA09-4B0D-B45F-855CD0F16F6C}
+		{051BE5E3-073C-4CD2-92AB-7742B2931409} = {2B456D08-F72B-4EB8-B663-B6D78FC04BF8}
+		{B46DA84E-8442-4988-9B43-6A83812A35B7} = {0968A626-BA09-4B0D-B45F-855CD0F16F6C}
+		{710E0641-FFF4-4994-A7FA-B22A550A8F20} = {2B456D08-F72B-4EB8-B663-B6D78FC04BF8}
+		{5F6D1661-652E-4DF3-8A81-6EBE4208CE1A} = {2B456D08-F72B-4EB8-B663-B6D78FC04BF8}
+		{AA10418F-3291-4011-8BF5-84F315F472B5} = {0968A626-BA09-4B0D-B45F-855CD0F16F6C}
+		{1C342888-3514-4ECE-9820-1C7BD59EA29F} = {2B456D08-F72B-4EB8-B663-B6D78FC04BF8}
+		{051BE5E3-073C-4CD2-92AB-7742B2931409} = {2B456D08-F72B-4EB8-B663-B6D78FC04BF8}
+		{B46DA84E-8442-4988-9B43-6A83812A35B7} = {0968A626-BA09-4B0D-B45F-855CD0F16F6C}
 		{0730A71E-CC07-4445-AC56-606B59BBF51F} = {40FEAA2F-DDF0-4FA3-942A-0D39B722DDE7}
 		{4641895A-5E44-4158-91C9-B3718398229E} = {40FEAA2F-DDF0-4FA3-942A-0D39B722DDE7}
 		{B5C4C2EA-5439-457D-9487-924A42E4D74D} = {F826BA61-60A9-45B6-AF29-FD1A6E313EF0}
@@ -369,18 +432,33 @@ Global
 		{0710F560-A741-4139-BC1F-BFF1895F1274} = {F826BA61-60A9-45B6-AF29-FD1A6E313EF0}
 		{F9D090D2-0568-403D-ADBA-9E079397B584} = {F826BA61-60A9-45B6-AF29-FD1A6E313EF0}
 		{01D031FC-61A5-45BD-BE11-57FA00BE1BCD} = {F826BA61-60A9-45B6-AF29-FD1A6E313EF0}
-		{3CCA24C1-04AC-48C0-A60A-D43FE7479529} = {C1703959-147D-45A2-B43A-E2FDD6BE1EDC}
-		{28DD5565-0546-48B0-973A-B27E1C9AD032} = {C1703959-147D-45A2-B43A-E2FDD6BE1EDC}
+		{3CCA24C1-04AC-48C0-A60A-D43FE7479529} = {0968A626-BA09-4B0D-B45F-855CD0F16F6C}
+		{28DD5565-0546-48B0-973A-B27E1C9AD032} = {0968A626-BA09-4B0D-B45F-855CD0F16F6C}
+		{3615A580-A595-4B64-A8C7-FD361E712BEA} = {0256853E-1FDA-45C6-9641-87306D378508}
+		{FB1A66FE-1CB9-4121-A9F7-1A1459D3C9CC} = {2B456D08-F72B-4EB8-B663-B6D78FC04BF8}
+		{551F655B-F33C-4CD6-851F-4DFB89FA96A0} = {2B456D08-F72B-4EB8-B663-B6D78FC04BF8}
+		{6716895A-A00E-4BAC-92DF-4F8C859BC51E} = {0968A626-BA09-4B0D-B45F-855CD0F16F6C}
+		{C0AB577F-0227-45E6-A3AC-E7ABEFC4ED60} = {2B456D08-F72B-4EB8-B663-B6D78FC04BF8}
+		{C606C348-2232-4431-98F3-998B22792A38} = {0968A626-BA09-4B0D-B45F-855CD0F16F6C}
+		{75C0BD33-80E2-4061-A778-08C1FBECEA7D} = {0968A626-BA09-4B0D-B45F-855CD0F16F6C}
+		{0358D319-1D91-4EDE-A424-6A26734B32CB} = {0968A626-BA09-4B0D-B45F-855CD0F16F6C}
+		{F254FDB7-6997-4894-9E82-C4583F605394} = {0968A626-BA09-4B0D-B45F-855CD0F16F6C}
+		{3CAC9760-6D6E-424C-AC49-E60118D8ADD4} = {0968A626-BA09-4B0D-B45F-855CD0F16F6C}
+		{3CCA24C1-04AC-48C0-A60A-D43FE7479529} = {0968A626-BA09-4B0D-B45F-855CD0F16F6C}
+		{28DD5565-0546-48B0-973A-B27E1C9AD032} = {0968A626-BA09-4B0D-B45F-855CD0F16F6C}
 		{3615A580-A595-4B64-A8C7-FD361E712BEA} = {0256853E-1FDA-45C6-9641-87306D378508}
-		{FB1A66FE-1CB9-4121-A9F7-1A1459D3C9CC} = {E493A405-D2D3-404E-81CA-00E8D9AD5807}
-		{551F655B-F33C-4CD6-851F-4DFB89FA96A0} = {E493A405-D2D3-404E-81CA-00E8D9AD5807}
-		{6716895A-A00E-4BAC-92DF-4F8C859BC51E} = {C1703959-147D-45A2-B43A-E2FDD6BE1EDC}
-		{C0AB577F-0227-45E6-A3AC-E7ABEFC4ED60} = {E493A405-D2D3-404E-81CA-00E8D9AD5807}
-		{C606C348-2232-4431-98F3-998B22792A38} = {C1703959-147D-45A2-B43A-E2FDD6BE1EDC}
-		{75C0BD33-80E2-4061-A778-08C1FBECEA7D} = {C1703959-147D-45A2-B43A-E2FDD6BE1EDC}
-		{0358D319-1D91-4EDE-A424-6A26734B32CB} = {C1703959-147D-45A2-B43A-E2FDD6BE1EDC}
-		{F254FDB7-6997-4894-9E82-C4583F605394} = {C1703959-147D-45A2-B43A-E2FDD6BE1EDC}
-		{3CAC9760-6D6E-424C-AC49-E60118D8ADD4} = {C1703959-147D-45A2-B43A-E2FDD6BE1EDC}
+		{FB1A66FE-1CB9-4121-A9F7-1A1459D3C9CC} = {2B456D08-F72B-4EB8-B663-B6D78FC04BF8}
+		{551F655B-F33C-4CD6-851F-4DFB89FA96A0} = {2B456D08-F72B-4EB8-B663-B6D78FC04BF8}
+		{6716895A-A00E-4BAC-92DF-4F8C859BC51E} = {0968A626-BA09-4B0D-B45F-855CD0F16F6C}
+		{C0AB577F-0227-45E6-A3AC-E7ABEFC4ED60} = {2B456D08-F72B-4EB8-B663-B6D78FC04BF8}
+		{C606C348-2232-4431-98F3-998B22792A38} = {0968A626-BA09-4B0D-B45F-855CD0F16F6C}
+		{75C0BD33-80E2-4061-A778-08C1FBECEA7D} = {0968A626-BA09-4B0D-B45F-855CD0F16F6C}
+		{0358D319-1D91-4EDE-A424-6A26734B32CB} = {0968A626-BA09-4B0D-B45F-855CD0F16F6C}
+		{F254FDB7-6997-4894-9E82-C4583F605394} = {0968A626-BA09-4B0D-B45F-855CD0F16F6C}
+		{CE32EDC9-F78C-45C6-A298-C437DA5EA438} = {F0A1281A-B512-49D2-8362-21EE32B3674F}
+		{6BAE8654-7D3D-4E29-8314-9AB28E81CC1E} = {F0A1281A-B512-49D2-8362-21EE32B3674F}
+		{52EBE728-0F8E-4159-B420-338CE38C4281} = {F0A1281A-B512-49D2-8362-21EE32B3674F}
+		{5FAEC63D-FF6B-4228-8883-7F1FAC6EAF61} = {F0A1281A-B512-49D2-8362-21EE32B3674F}
 	EndGlobalSection
 	GlobalSection(ExtensibilityGlobals) = postSolution
 		SolutionGuid = {48207B50-7D05-4B10-B585-890FE0F4FCE1}
diff --git a/src/Servers/startvs.cmd b/src/Servers/startvs.cmd
new file mode 100644
index 0000000000000000000000000000000000000000..d4c18e9bcdc97ad1e138b5e2c534f82bc63d251b
--- /dev/null
+++ b/src/Servers/startvs.cmd
@@ -0,0 +1,3 @@
+@ECHO OFF
+
+%~dp0..\..\startvs.cmd %~dp0Kestrel.sln
diff --git a/src/Session/.gitignore b/src/Session/.gitignore
deleted file mode 100644
index f332e76e0f7516077f97c78315591333d6fca7e0..0000000000000000000000000000000000000000
--- a/src/Session/.gitignore
+++ /dev/null
@@ -1,33 +0,0 @@
-[Oo]bj/
-[Bb]in/
-TestResults/
-.nuget/
-*.sln.ide/
-_ReSharper.*/
-packages/
-artifacts/
-PublishProfiles/
-*.user
-*.suo
-*.cache
-*.docstates
-_ReSharper.*
-nuget.exe
-*net45.csproj
-*net451.csproj
-*k10.csproj
-*.psess
-*.vsp
-*.pidb
-*.userprefs
-*DS_Store
-*.ncrunchsolution
-*.*sdf
-*.ipch
-.vs/
-.vscode/
-project.lock.json
-.build/
-.testPublish/
-launchSettings.json
-global.json
diff --git a/src/Session/Directory.Build.props b/src/Session/Directory.Build.props
deleted file mode 100644
index cd0187875bb5801195f04e8b5d972c52c49a135c..0000000000000000000000000000000000000000
--- a/src/Session/Directory.Build.props
+++ /dev/null
@@ -1,20 +0,0 @@
-<Project>
-  <Import
-    Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), AspNetCoreSettings.props))\AspNetCoreSettings.props"
-    Condition=" '$(CI)' != 'true' AND '$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), AspNetCoreSettings.props))' != '' " />
-
-  <Import Project="version.props" />
-  <Import Project="build\dependencies.props" />
-  <Import Project="build\sources.props" />
-
-  <PropertyGroup>
-    <Product>Microsoft ASP.NET Core</Product>
-    <RepositoryUrl>https://github.com/aspnet/AspNetCore</RepositoryUrl>
-    <RepositoryType>git</RepositoryType>
-    <RepositoryRoot>$(MSBuildThisFileDirectory)</RepositoryRoot>
-    <AssemblyOriginatorKeyFile>$(MSBuildThisFileDirectory)build\Key.snk</AssemblyOriginatorKeyFile>
-    <SignAssembly>true</SignAssembly>
-    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
-  </PropertyGroup>
-
-</Project>
diff --git a/src/Session/Directory.Build.targets b/src/Session/Directory.Build.targets
deleted file mode 100644
index 7e3f8df92e4bf5dec831f8f4573f9ff793519b30..0000000000000000000000000000000000000000
--- a/src/Session/Directory.Build.targets
+++ /dev/null
@@ -1,6 +0,0 @@
-<Project>
-  <PropertyGroup>
-    <RuntimeFrameworkVersion Condition=" '$(TargetFramework)' == 'netcoreapp3.0' ">$(MicrosoftNETCoreAppPackageVersion)</RuntimeFrameworkVersion>
-    <NETStandardImplicitPackageVersion Condition=" '$(TargetFramework)' == 'netstandard2.0' ">$(NETStandardLibrary20PackageVersion)</NETStandardImplicitPackageVersion>
-  </PropertyGroup>
-</Project>
diff --git a/src/Session/NuGetPackageVerifier.json b/src/Session/NuGetPackageVerifier.json
deleted file mode 100644
index b153ab15150d5a8d3d962d47c52261d0373d1ab8..0000000000000000000000000000000000000000
--- a/src/Session/NuGetPackageVerifier.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-    "Default": {
-        "rules": [
-            "DefaultCompositeRule"
-        ]
-    }
-}
\ No newline at end of file
diff --git a/src/Session/README.md b/src/Session/README.md
deleted file mode 100644
index 976f9f21cf889fc049c896a5ee0dd9d119c448a5..0000000000000000000000000000000000000000
--- a/src/Session/README.md
+++ /dev/null
@@ -1,12 +0,0 @@
-Session
-================
-
-AppVeyor: [![AppVeyor](https://ci.appveyor.com/api/projects/status/yyivj6uwu3uj2x40/branch/dev?svg=true)](https://ci.appveyor.com/project/aspnetci/Session/branch/dev)
-
-Travis:   [![Travis](https://travis-ci.org/aspnet/Session.svg?branch=dev)](https://travis-ci.org/aspnet/Session)
-
-Contains libraries for session state middleware for ASP.NET Core.
-
-For ASP.NET 4.x session state, please go to https://github.com/aspnet/AspNetSessionState.
-
-This project is part of ASP.NET Core. You can find samples, documentation and getting started instructions for ASP.NET Core at the [Home](https://github.com/aspnet/home) repo.
diff --git a/src/Session/Session.sln b/src/Session/Session.sln
deleted file mode 100644
index d8d95dc295fc72bc1ff62995999cdef12e266cf6..0000000000000000000000000000000000000000
--- a/src/Session/Session.sln
+++ /dev/null
@@ -1,74 +0,0 @@
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 15
-VisualStudioVersion = 15.0.26621.2
-MinimumVisualStudioVersion = 15.0.26730.03
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{E9D63F97-6078-42AD-BFD3-F956BF921BB5}"
-	ProjectSection(SolutionItems) = preProject
-		test\Directory.Build.props = test\Directory.Build.props
-	EndProjectSection
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{A189F10C-3A9C-4F81-83D0-32E5FE50DAD8}"
-	ProjectSection(SolutionItems) = preProject
-		src\Directory.Build.props = src\Directory.Build.props
-	EndProjectSection
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Session", "src\Microsoft.AspNetCore.Session\Microsoft.AspNetCore.Session.csproj", "{71802736-F640-4733-9671-02D267EDD76A}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Session.Tests", "test\Microsoft.AspNetCore.Session.Tests\Microsoft.AspNetCore.Session.Tests.csproj", "{8C131A0A-BC1A-4CF3-8B77-8813FBFE5639}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{94E80ED2-9F27-40AC-A9EF-C707BDFAA3BE}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SessionSample", "samples\SessionSample\SessionSample.csproj", "{FE0B9969-3BDE-4A7D-BE1B-47EAE8DBF365}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SolutionItems", "SolutionItems", "{3B45F658-5BF1-4E07-BE9C-6F5110AC2277}"
-	ProjectSection(SolutionItems) = preProject
-		.appveyor.yml = .appveyor.yml
-		.gitattributes = .gitattributes
-		.gitignore = .gitignore
-		.travis.yml = .travis.yml
-		Directory.Build.props = Directory.Build.props
-		Directory.Build.targets = Directory.Build.targets
-		NuGet.config = NuGet.config
-		NuGetPackageVerifier.json = NuGetPackageVerifier.json
-		README.md = README.md
-		version.xml = version.xml
-	EndProjectSection
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{4F21221F-2813-41B7-AAFC-E03FD52971CC}"
-	ProjectSection(SolutionItems) = preProject
-		build\common.props = build\common.props
-		build\dependencies.props = build\dependencies.props
-	EndProjectSection
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|Any CPU = Debug|Any CPU
-		Release|Any CPU = Release|Any CPU
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{71802736-F640-4733-9671-02D267EDD76A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{71802736-F640-4733-9671-02D267EDD76A}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{71802736-F640-4733-9671-02D267EDD76A}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{71802736-F640-4733-9671-02D267EDD76A}.Release|Any CPU.Build.0 = Release|Any CPU
-		{8C131A0A-BC1A-4CF3-8B77-8813FBFE5639}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{8C131A0A-BC1A-4CF3-8B77-8813FBFE5639}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{8C131A0A-BC1A-4CF3-8B77-8813FBFE5639}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{8C131A0A-BC1A-4CF3-8B77-8813FBFE5639}.Release|Any CPU.Build.0 = Release|Any CPU
-		{FE0B9969-3BDE-4A7D-BE1B-47EAE8DBF365}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{FE0B9969-3BDE-4A7D-BE1B-47EAE8DBF365}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{FE0B9969-3BDE-4A7D-BE1B-47EAE8DBF365}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{FE0B9969-3BDE-4A7D-BE1B-47EAE8DBF365}.Release|Any CPU.Build.0 = Release|Any CPU
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-	GlobalSection(NestedProjects) = preSolution
-		{71802736-F640-4733-9671-02D267EDD76A} = {A189F10C-3A9C-4F81-83D0-32E5FE50DAD8}
-		{8C131A0A-BC1A-4CF3-8B77-8813FBFE5639} = {E9D63F97-6078-42AD-BFD3-F956BF921BB5}
-		{FE0B9969-3BDE-4A7D-BE1B-47EAE8DBF365} = {94E80ED2-9F27-40AC-A9EF-C707BDFAA3BE}
-		{4F21221F-2813-41B7-AAFC-E03FD52971CC} = {3B45F658-5BF1-4E07-BE9C-6F5110AC2277}
-	EndGlobalSection
-	GlobalSection(ExtensibilityGlobals) = postSolution
-		SolutionGuid = {6AE224B9-B604-4E47-9617-9D114DAE9BE5}
-	EndGlobalSection
-EndGlobal
diff --git a/src/Session/build/Key.snk b/src/Session/build/Key.snk
deleted file mode 100644
index e10e4889c125d3120cd9e81582243d70f7cbb806..0000000000000000000000000000000000000000
Binary files a/src/Session/build/Key.snk and /dev/null differ
diff --git a/src/Session/build/dependencies.props b/src/Session/build/dependencies.props
deleted file mode 100644
index 777db42244268b53060ef7eb2c0ab1fcdfabe731..0000000000000000000000000000000000000000
--- a/src/Session/build/dependencies.props
+++ /dev/null
@@ -1,29 +0,0 @@
-<Project>
-  <PropertyGroup>
-    <MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
-  </PropertyGroup>
-  <PropertyGroup Label="Package Versions">
-    <InternalAspNetCoreSdkPackageVersion>3.0.0-build-20181116.1</InternalAspNetCoreSdkPackageVersion>
-    <MicrosoftAspNetCoreDataProtectionPackageVersion>3.0.0-alpha1-10742</MicrosoftAspNetCoreDataProtectionPackageVersion>
-    <MicrosoftAspNetCoreHttpAbstractionsPackageVersion>3.0.0-alpha1-10742</MicrosoftAspNetCoreHttpAbstractionsPackageVersion>
-    <MicrosoftAspNetCoreServerIISIntegrationPackageVersion>3.0.0-alpha1-10742</MicrosoftAspNetCoreServerIISIntegrationPackageVersion>
-    <MicrosoftAspNetCoreServerKestrelPackageVersion>3.0.0-alpha1-10742</MicrosoftAspNetCoreServerKestrelPackageVersion>
-    <MicrosoftAspNetCoreTestHostPackageVersion>3.0.0-alpha1-10742</MicrosoftAspNetCoreTestHostPackageVersion>
-    <MicrosoftExtensionsCachingAbstractionsPackageVersion>3.0.0-preview-181113-11</MicrosoftExtensionsCachingAbstractionsPackageVersion>
-    <MicrosoftExtensionsCachingMemoryPackageVersion>3.0.0-preview-181113-11</MicrosoftExtensionsCachingMemoryPackageVersion>
-    <MicrosoftExtensionsCachingSqlServerPackageVersion>3.0.0-preview-181113-11</MicrosoftExtensionsCachingSqlServerPackageVersion>
-    <MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>3.0.0-preview-181113-11</MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>
-    <MicrosoftExtensionsConfigurationUserSecretsPackageVersion>3.0.0-preview-181113-11</MicrosoftExtensionsConfigurationUserSecretsPackageVersion>
-    <MicrosoftExtensionsLoggingAbstractionsPackageVersion>3.0.0-preview-181113-11</MicrosoftExtensionsLoggingAbstractionsPackageVersion>
-    <MicrosoftExtensionsLoggingConsolePackageVersion>3.0.0-preview-181113-11</MicrosoftExtensionsLoggingConsolePackageVersion>
-    <MicrosoftExtensionsLoggingTestingPackageVersion>3.0.0-preview-181113-11</MicrosoftExtensionsLoggingTestingPackageVersion>
-    <MicrosoftExtensionsOptionsPackageVersion>3.0.0-preview-181113-11</MicrosoftExtensionsOptionsPackageVersion>
-    <MicrosoftNETCoreAppPackageVersion>3.0.0-preview1-26907-05</MicrosoftNETCoreAppPackageVersion>
-    <MicrosoftNETTestSdkPackageVersion>15.6.1</MicrosoftNETTestSdkPackageVersion>
-    <NETStandardLibrary20PackageVersion>2.0.3</NETStandardLibrary20PackageVersion>
-    <XunitPackageVersion>2.3.1</XunitPackageVersion>
-    <XunitRunnerVisualStudioPackageVersion>2.4.0</XunitRunnerVisualStudioPackageVersion>
-  </PropertyGroup>
-  <PropertyGroup Label="Package Versions: Pinned" />
-  <Import Project="$(DotNetPackageVersionPropsPath)" Condition=" '$(DotNetPackageVersionPropsPath)' != '' " />
-</Project>
diff --git a/src/Session/build/repo.props b/src/Session/build/repo.props
deleted file mode 100644
index 00a0c65cc2f1dd432d0b391c37d64c1a120e9776..0000000000000000000000000000000000000000
--- a/src/Session/build/repo.props
+++ /dev/null
@@ -1,7 +0,0 @@
-<Project>
-  <Import Project="dependencies.props" />
-
-  <ItemGroup>
-    <DotNetCoreRuntime Include="$(MicrosoftNETCoreAppPackageVersion)" />
-  </ItemGroup>
-</Project>
diff --git a/src/Session/build/sources.props b/src/Session/build/sources.props
deleted file mode 100644
index 9215df9751b4623d725e930464480ecb9a62065d..0000000000000000000000000000000000000000
--- a/src/Session/build/sources.props
+++ /dev/null
@@ -1,17 +0,0 @@
-<Project>
-  <Import Project="$(DotNetRestoreSourcePropsPath)" Condition="'$(DotNetRestoreSourcePropsPath)' != ''"/>
-
-  <PropertyGroup Label="RestoreSources">
-    <RestoreSources>$(DotNetRestoreSources)</RestoreSources>
-    <RestoreSources Condition="'$(DotNetBuildOffline)' != 'true' AND '$(AspNetUniverseBuildOffline)' != 'true' ">
-      $(RestoreSources);
-      https://dotnet.myget.org/F/dotnet-core/api/v3/index.json;
-      https://dotnet.myget.org/F/aspnetcore-dev/api/v3/index.json;
-      https://dotnet.myget.org/F/aspnetcore-tools/api/v3/index.json;
-    </RestoreSources>
-    <RestoreSources Condition="'$(DotNetBuildOffline)' != 'true'">
-      $(RestoreSources);
-      https://api.nuget.org/v3/index.json;
-    </RestoreSources>
-  </PropertyGroup>
-</Project>
diff --git a/src/Session/samples/SessionSample/Properties/launchSettings.json b/src/Session/samples/SessionSample/Properties/launchSettings.json
deleted file mode 100644
index 6bab3d3602be6266f856800eb7398504802a2518..0000000000000000000000000000000000000000
--- a/src/Session/samples/SessionSample/Properties/launchSettings.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
-  "iisSettings": {
-    "windowsAuthentication": false,
-    "anonymousAuthentication": true,
-    "iisExpress": {
-      "applicationUrl": "http://localhost:2481/",
-      "sslPort": 0
-    }
-  },
-  "profiles": {
-    "IIS Express": {
-      "commandName": "IISExpress",
-      "launchBrowser": true,
-      "environmentVariables": {
-        "ASPNETCORE_ENVIRONMENT": "Development"
-      }
-    },
-    "SessionSample": {
-      "commandName": "Project",
-      "launchBrowser": true,
-      "launchUrl": "http://localhost:5000",
-      "environmentVariables": {
-        "ASPNETCORE_ENVIRONMENT": "Development"
-      }
-    }
-  }
-}
\ No newline at end of file
diff --git a/src/Session/samples/SessionSample/SessionSample.csproj b/src/Session/samples/SessionSample/SessionSample.csproj
deleted file mode 100644
index d28b96492eba18dfe5cbbfaa4db340825f926828..0000000000000000000000000000000000000000
--- a/src/Session/samples/SessionSample/SessionSample.csproj
+++ /dev/null
@@ -1,21 +0,0 @@
-<Project Sdk="Microsoft.NET.Sdk.Web">
-
-  <PropertyGroup>
-    <TargetFramework>netcoreapp3.0</TargetFramework>
-  </PropertyGroup>
-
-  <ItemGroup>
-    <ProjectReference Include="..\..\src\Microsoft.AspNetCore.Session\Microsoft.AspNetCore.Session.csproj" />
-  </ItemGroup>
-
-  <ItemGroup>
-    <PackageReference Include="Microsoft.AspNetCore.Server.IISIntegration" Version="$(MicrosoftAspNetCoreServerIISIntegrationPackageVersion)" />
-    <PackageReference Include="Microsoft.AspNetCore.Server.Kestrel" Version="$(MicrosoftAspNetCoreServerKestrelPackageVersion)" />
-    <PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="$(MicrosoftExtensionsCachingMemoryPackageVersion)" />
-    <PackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="$(MicrosoftExtensionsCachingStackExchangeRedisPackageVersion)" />
-    <PackageReference Include="Microsoft.Extensions.Caching.SqlServer" Version="$(MicrosoftExtensionsCachingSqlServerPackageVersion)" />
-    <PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets"  Version="$(MicrosoftExtensionsConfigurationUserSecretsPackageVersion)" />
-    <PackageReference Include="Microsoft.Extensions.Logging.Console" Version="$(MicrosoftExtensionsLoggingConsolePackageVersion)" />
-  </ItemGroup>
-
-</Project>
diff --git a/src/Session/src/Directory.Build.props b/src/Session/src/Directory.Build.props
deleted file mode 100644
index 1e0980f6633128f6a6752d555891691665616d7a..0000000000000000000000000000000000000000
--- a/src/Session/src/Directory.Build.props
+++ /dev/null
@@ -1,7 +0,0 @@
-<Project>
-  <Import Project="..\Directory.Build.props" />
-
-  <ItemGroup>
-    <PackageReference Include="Internal.AspNetCore.Sdk" PrivateAssets="All" Version="$(InternalAspNetCoreSdkPackageVersion)" />
-  </ItemGroup>
-</Project>
diff --git a/src/Session/src/Microsoft.AspNetCore.Session/Microsoft.AspNetCore.Session.csproj b/src/Session/src/Microsoft.AspNetCore.Session/Microsoft.AspNetCore.Session.csproj
deleted file mode 100644
index 38f676a8d8447a34f7eb688b3369d2f9c83a9d64..0000000000000000000000000000000000000000
--- a/src/Session/src/Microsoft.AspNetCore.Session/Microsoft.AspNetCore.Session.csproj
+++ /dev/null
@@ -1,20 +0,0 @@
-<Project Sdk="Microsoft.NET.Sdk">
-
-  <PropertyGroup>
-    <Description>ASP.NET Core session state middleware.</Description>
-    <TargetFramework>netcoreapp3.0</TargetFramework>
-    <NoWarn>$(NoWarn);CS1591</NoWarn>
-    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
-    <GenerateDocumentationFile>true</GenerateDocumentationFile>
-    <PackageTags>aspnetcore;session;sessionstate</PackageTags>
-  </PropertyGroup>
-
-  <ItemGroup>
-    <PackageReference Include="Microsoft.AspNetCore.DataProtection" Version="$(MicrosoftAspNetCoreDataProtectionPackageVersion)" />
-    <PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="$(MicrosoftAspNetCoreHttpAbstractionsPackageVersion)" />
-    <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="$(MicrosoftExtensionsCachingAbstractionsPackageVersion)" />
-    <PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="$(MicrosoftExtensionsLoggingAbstractionsPackageVersion)" />
-    <PackageReference Include="Microsoft.Extensions.Options" Version="$(MicrosoftExtensionsOptionsPackageVersion)" />
-  </ItemGroup>
-
-</Project>
diff --git a/src/Session/test/Directory.Build.props b/src/Session/test/Directory.Build.props
deleted file mode 100644
index 4b89a431e7f239398aec95bc914cccb5c59e3d3e..0000000000000000000000000000000000000000
--- a/src/Session/test/Directory.Build.props
+++ /dev/null
@@ -1,7 +0,0 @@
-<Project>
-  <Import Project="..\Directory.Build.props" />
-
-  <ItemGroup>
-    <PackageReference Include="Internal.AspNetCore.Sdk" PrivateAssets="All" Version="$(InternalAspNetCoreSdkPackageVersion)" />
-  </ItemGroup>
-</Project>
diff --git a/src/Session/test/Microsoft.AspNetCore.Session.Tests/Microsoft.AspNetCore.Session.Tests.csproj b/src/Session/test/Microsoft.AspNetCore.Session.Tests/Microsoft.AspNetCore.Session.Tests.csproj
deleted file mode 100644
index 2b2ee05119659c170bb96fac1eab56ef07d9af38..0000000000000000000000000000000000000000
--- a/src/Session/test/Microsoft.AspNetCore.Session.Tests/Microsoft.AspNetCore.Session.Tests.csproj
+++ /dev/null
@@ -1,20 +0,0 @@
-<Project Sdk="Microsoft.NET.Sdk">
-
-  <PropertyGroup>
-    <TargetFramework>netcoreapp3.0</TargetFramework>
-  </PropertyGroup>
-
-  <ItemGroup>
-    <ProjectReference Include="..\..\src\Microsoft.AspNetCore.Session\Microsoft.AspNetCore.Session.csproj" />
-  </ItemGroup>
-
-  <ItemGroup>
-    <PackageReference Include="Microsoft.AspNetCore.TestHost" Version="$(MicrosoftAspNetCoreTestHostPackageVersion)" />
-    <PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="$(MicrosoftExtensionsCachingMemoryPackageVersion)" />
-    <PackageReference Include="Microsoft.Extensions.Logging.Testing" Version="$(MicrosoftExtensionsLoggingTestingPackageVersion)" />
-    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="$(MicrosoftNETTestSdkPackageVersion)" />
-    <PackageReference Include="xunit.runner.visualstudio" Version="$(XunitRunnerVisualStudioPackageVersion)" />
-    <PackageReference Include="xunit" Version="$(XunitPackageVersion)" />
-  </ItemGroup>
-
-</Project>
diff --git a/src/Session/version.props b/src/Session/version.props
deleted file mode 100644
index d977b437b650f44987674f18e566b589d43a7c57..0000000000000000000000000000000000000000
--- a/src/Session/version.props
+++ /dev/null
@@ -1,6 +0,0 @@
-<Project>
-  <PropertyGroup>
-    <VersionPrefix>3.0.0</VersionPrefix>
-    <VersionSuffix Condition=" '$(VersionSuffix)' == '' ">dev</VersionSuffix>
-  </PropertyGroup>
-</Project>
diff --git a/startvs.cmd b/startvs.cmd
new file mode 100644
index 0000000000000000000000000000000000000000..05cd3ebfda07bcb463d9a7f160269b325c70bb62
--- /dev/null
+++ b/startvs.cmd
@@ -0,0 +1,32 @@
+@ECHO OFF
+
+:: This command launches a Visual Studio solution with environment variables required to use a local version of the .NET Core SDK.
+
+IF "%DOTNET_HOME%"=="" (
+    set DOTNET_HOME=%USERPROFILE%\.dotnet\x64
+)
+
+:: This tells .NET Core to use the same dotnet.exe that build scripts use
+SET DOTNET_ROOT=%DOTNET_HOME%
+
+:: This tells .NET Core not to go looking for .NET Core in other places
+SET DOTNET_MULTILEVEL_LOOKUP=0
+
+:: Put our local dotnet.exe on PATH first so Visual Studio knows which one to use
+SET PATH=%DOTNET_ROOT%;%PATH%
+
+SET sln=%1
+
+IF NOT EXIST %DOTNET_ROOT%\dotnet.exe (
+    echo .NET Core has not yet been installed. Run `build.cmd -restore` to install tools
+    exit /b 1
+)
+
+IF "%sln%"=="" (
+    echo Error^: Expected argument ^<SLN_FILE^>
+    echo Usage^: startvs.cmd ^<SLN_FILE^>
+
+    exit /b 1
+)
+
+start %sln%