diff --git a/.azure/pipelines/tools/SetupTestEnvironment.ps1 b/.azure/pipelines/tools/SetupTestEnvironment.ps1
index e92b76304b5c389fc9d4fc284dd9f1b433205dad..0c64ea670a93d5ea3a46687d1e454ebac1f2060a 100644
--- a/.azure/pipelines/tools/SetupTestEnvironment.ps1
+++ b/.azure/pipelines/tools/SetupTestEnvironment.ps1
@@ -83,7 +83,7 @@ function Shutdown-Dumps()
 
     New-ItemProperty $werHive -Name "DontShowUI" -Value 0 -PropertyType "DWORD" -Force;
 
-    $cdb = "c:\Program Files (x86)\Windows Kits\10\Debuggers\x64\cdb.exe"
+    $cdb = "${env:ProgramFiles(x86)}\Windows Kits\10\Debuggers\x64\cdb.exe"
     if (!(Test-Path $cdb))
     {
         $downloadedFile = [System.IO.Path]::GetTempFileName();
diff --git a/.gitignore b/.gitignore
index 789031bf5238efdd6a325edf821b1aad80974665..8a2385174b342ae7a2e23d44cbb72cf054b903d9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,38 +1,42 @@
+# Folders
+artifacts/
 bin/
 obj/
+.dotnet/
+.nuget/
+.packages/
+.tools/
 .vs/
 .vscode/
-*.suo
-*.user
-_ReSharper.*
-*.DS_Store
-*.userprefs
-*.pidb
-*.vspx
-*.psess
-*.binlog
-*.log
-artifacts/
-StyleCop.Cache
 node_modules/
-*.snk
-.nuget
-.packages/
-.r
-.w
-.deps
-msbuild.ProjectImports.zip
-.env
-scripts/tmp/
-.dotnet/
-.tools/
-src/**/global.json
-launchSettings.json
 BenchmarkDotNet.Artifacts/
-korebuild-lock.txt
 .gradle/
 src/SignalR/clients/**/dist/
 modules/
 
-# Template config files for blazor templates is generated on-build
-src/Components/**/.template.config/
+# File extensions
+*.aps
+*.binlog
+*.dll
+*.DS_Store
+*.exe
+*.idb
+*.lib
+*.log
+*.pch
+*.pdb
+*.pidb
+*.psess
+*.res
+*.snk
+*.suo
+*.tlog
+*.user
+*.userprefs
+*.vspx
+
+# Specific files, typically generated by tools
+launchSettings.json
+msbuild.ProjectImports.zip
+StyleCop.Cache
+UpgradeLog.htm
diff --git a/Directory.Build.props b/Directory.Build.props
index 3258910582f826db0fd8308c15b9ba953424c1e5..8b002c635e89da1a5584d805dbba242ed2942d82 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -145,7 +145,7 @@
     <CreateDirectory Include="$(VisualStudioSetupOutputPath)" />
   </ItemGroup>
 
-  <PropertyGroup Condition=" '$(OutputInRepoRoot)' == 'true' ">
+  <PropertyGroup>
     <OutDirName Condition=" '$(OutDirName)' == '' ">$(MSBuildProjectName)</OutDirName>
 
     <BaseOutputPath Condition=" '$(BaseOutputPath)' == '' ">$([System.IO.Path]::GetFullPath('$(ArtifactsBinDir)$(OutDirName)\'))</BaseOutputPath>
diff --git a/build/repo.props b/build/repo.props
index 87ae71b745551611fc525ca63dd3e6c4c9639c15..eee87343c3079d074620bb375cb6155f02dbc7b2 100644
--- a/build/repo.props
+++ b/build/repo.props
@@ -42,7 +42,7 @@
     <ProjectToExclude Include="
                       $(RepoRoot)src\Components\Blazor\BlazorExtension\src\Microsoft.VisualStudio.BlazorExtension.csproj;
                       $(RepoRoot)src\Servers\HttpSys\samples\TestClient\TestClient.csproj;
-                      $(RepoRoot)src\Middleware\WebSockets\samples\TestServer\TestServer.csproj;
+                      $(RepoRoot)src\Middleware\WebSockets\samples\TestServer\WebSockets.TestServer.csproj;
                       "
                       Condition=" '$(MSBuildRuntimeType)' == 'Core' " />
 
diff --git a/build/tasks/RepoTasks.csproj b/build/tasks/RepoTasks.csproj
index d80a1c6a8373c32df3b10e32c26e3933c76f506f..c9264a2afecfea69a5f35e6f05342ac8c3e70b4b 100644
--- a/build/tasks/RepoTasks.csproj
+++ b/build/tasks/RepoTasks.csproj
@@ -29,4 +29,8 @@
   </ItemGroup>
 
   <Import Project="$(RepoTasksSdkPath)\Sdk.targets" Condition="'$(RepoTasksSdkPath)' != '' "/>
+
+  <ItemGroup>
+    <PackageReference Update="Newtonsoft.Json" PrivateAssets="" />
+  </ItemGroup>
 </Project>
diff --git a/docs/BuildErrors.md b/docs/BuildErrors.md
index be5f94a560828d632fc250800f4d49294356df3d..52fb8d25de66b6e6f6bbc4aa4932131af73af479 100644
--- a/docs/BuildErrors.md
+++ b/docs/BuildErrors.md
@@ -15,3 +15,10 @@ in a previous release of this assembly. See <./ReferenceResolution.md> for how t
 > error BUILD002: Package references changed since the last release...
 
 Similar to BUILD001, but this error is not suppressable. This error only appears in servicing builds, which should not change references between assemblies or packages.
+
+### Error BUILD003
+
+> error BUILD003: Multiple project files named 'Banana.csproj' exist. Project files should have a unique name to avoid conflicts in build output.
+
+This repo uses a common output directory (artifacts/bin/$(ProjectName) and artifacts/obj/$(ProjectName)). To avoid confllicts in build output, each
+project file should have a unique name.
diff --git a/eng/Workarounds.targets b/eng/Workarounds.targets
index 923051792bd32342b9a7b5a7ec3cd607b670b6f9..3e1a269c7dda72830063ad7a9c47e080d2bb488c 100644
--- a/eng/Workarounds.targets
+++ b/eng/Workarounds.targets
@@ -25,4 +25,10 @@
           BeforeTargets="PrepareForRazorComponentGenerate"
           DependsOnTargets="GenerateSourceLinkFile" />
 
+  <!-- Workaround https://github.com/aspnet/websdk/pull/646. If merged, once we update to a websdk with this fix, we can move the setting below to Directory.Build.props. -->
+  <PropertyGroup>
+    <!-- Ignore warning about calling the Pack target on Web SDK projects. Our build scripts call /t:pack on everything in this repo. -->
+    <WarnOnPackingNonPackableProject>false</WarnOnPackingNonPackableProject>
+  </PropertyGroup>
+
 </Project>
diff --git a/eng/scripts/CodeCheck.ps1 b/eng/scripts/CodeCheck.ps1
index 05902d24b66ee4101b92d2c1a8d452dd14423583..ddb80e906500d6c9a951e90a171f4fd848f065fb 100644
--- a/eng/scripts/CodeCheck.ps1
+++ b/eng/scripts/CodeCheck.ps1
@@ -19,17 +19,25 @@ function LogError {
     param(
         [Parameter(Mandatory = $true, Position = 0)]
         [string]$message,
-        [string]$FilePath
+        [string]$FilePath,
+        [string]$Code
     )
     if ($env:TF_BUILD) {
         $prefix = "##vso[task.logissue type=error"
         if ($FilePath) {
             $prefix = "${prefix};sourcepath=$FilePath"
         }
+        if ($Code) {
+            $prefix = "${prefix};code=$Code"
+        }
         Write-Host "${prefix}]${message}"
     }
-    Write-Host -f Red "error: $message"
-    $script:errors += $message
+    $fullMessage = "error ${Code}: $message"
+    if ($FilePath) {
+        $fullMessage += " [$FilePath]"
+    }
+    Write-Host -f Red $fullMessage
+    $script:errors += $fullMessage
 }
 
 try {
@@ -38,6 +46,25 @@ try {
         & $repoRoot/build.ps1 -ci -norestore /t:InstallDotNet
     }
 
+    #
+    # Duplicate .csproj files can cause issues with a shared build output folder
+    #
+
+    $projectFileNames = New-Object 'System.Collections.Generic.HashSet[string]'
+
+    # Ignore duplicates in submodules. These should be isolated from the rest of the build.
+    # Ignore duplicates in the .ref folder. This is expected.
+    Get-ChildItem -Recurse "$repoRoot/src/*.*proj" `
+        | ? { $_.FullName -notmatch 'submodules' } `
+        | ? { (Split-Path -Leaf (Split-Path -Parent $_)) -ne 'ref' } `
+        | % {
+            $fileName = [io.path]::GetFileNameWithoutExtension($_)
+            if (-not ($projectFileNames.Add($fileName))) {
+                LogError -code 'BUILD003' -filepath $_ `
+                    "Multiple project files named '$fileName' exist. Project files should have a unique name to avoid conflicts in build output."
+            }
+        }
+
     #
     # Versions.props and Version.Details.xml
     #
@@ -171,7 +198,7 @@ finally {
     Write-Host ""
 
     foreach ($err in $errors) {
-        Write-Host -f Red "error : $err"
+        Write-Host -f Red $err
     }
 
     if ($errors) {
diff --git a/eng/targets/CSharp.Common.props b/eng/targets/CSharp.Common.props
index 3edac7591350988cd0c53b52944d35254c92f2b9..d6c2383b35467cb896358ce894c129216db5d66e 100644
--- a/eng/targets/CSharp.Common.props
+++ b/eng/targets/CSharp.Common.props
@@ -52,6 +52,13 @@
     <Reference Include="xunit.runner.console" Condition=" '$(TargetFrameworkIdentifier)' == '.NETFramework' AND '$(IsHelixJob)' == 'true' " />
   </ItemGroup>
 
+  <ItemDefinitionGroup Condition=" '$(IsTestProject)' == 'true' ">
+    <Content>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+      <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
+    </Content>
+  </ItemDefinitionGroup>
+
   <Import Project="CSharp.ReferenceAssembly.props" Condition="'$(IsReferenceAssemblyProject)' == 'true'" />
   <Import Project="Helix.props" Condition="'$(IsTestProject)' == 'true'" />
 
diff --git a/eng/targets/Cpp.Common.props b/eng/targets/Cpp.Common.props
index ace69ddd2c8fdf074a0723a68379bcc949df0b0f..faa8049b616c3a8520bc8d42de3fccbe2385a2f9 100644
--- a/eng/targets/Cpp.Common.props
+++ b/eng/targets/Cpp.Common.props
@@ -4,7 +4,10 @@
   <PropertyGroup>
     <SignOutput Condition=" '$(SignType)' != '' ">true</SignOutput>
     <IsPackable>false</IsPackable>
-    <IntDir>$(PlatformName)\$(Configuration)\</IntDir>
+
+    <!-- These are defined in Directory.Build.props. This maps the common MSBuild property name to equivalent C++ project properties.  -->
+    <OutDir>$(OutputPath)</OutDir>
+    <IntDir>$(IntermediateOutputPath)</IntDir>
   </PropertyGroup>
 
   <Import Project="MicroBuild.Plugin.props" Condition="'$(MicroBuildSentinelFile)' == ''" />
diff --git a/eng/tools/XplatPackageSigner/XplatPackageSigner.proj b/eng/tools/XplatPackageSigner/XplatPackageSigner.proj
index 2d392b5576a23fac7535970f2df8a994e1e6f934..493b463c481df2a713706c779f9797d9c1c82f00 100644
--- a/eng/tools/XplatPackageSigner/XplatPackageSigner.proj
+++ b/eng/tools/XplatPackageSigner/XplatPackageSigner.proj
@@ -8,7 +8,6 @@
 <Project DefaultTargets="Build" InitialTargets="CheckForRequiredProperties">
   <PropertyGroup>
     <SignType>$([MSBuild]::ValueOrDefault($(SignType),'real'))</SignType>
-    <OutputInRepoRoot>true</OutputInRepoRoot>
   </PropertyGroup>
 
   <Import Project="..\..\..\Directory.Build.props" />
diff --git a/src/Analyzers/Analyzers/test/AnalyzerTestBase.cs b/src/Analyzers/Analyzers/test/AnalyzerTestBase.cs
index 85b0e4b31b57585991453d58c4edfa09b273df03..989d79d0129a3e8e6577077303cc7d10180a310a 100644
--- a/src/Analyzers/Analyzers/test/AnalyzerTestBase.cs
+++ b/src/Analyzers/Analyzers/test/AnalyzerTestBase.cs
@@ -45,7 +45,7 @@ namespace Microsoft.AspNetCore.Analyzers
 
         private static string GetProjectDirectory()
         {
-            // On helix we use the published test files 
+            // On helix we use the published test files
             if (SkipOnHelixAttribute.OnHelix())
             {
                 return AppContext.BaseDirectory;
diff --git a/src/Analyzers/Analyzers/test/Microsoft.AspNetCore.Analyzers.Test.csproj b/src/Analyzers/Analyzers/test/Microsoft.AspNetCore.Analyzers.Test.csproj
index 59b34f4d466efa9e378d42080e14538e211a39b4..f80356e535f78e38ec5bb1b069203ac0e2e92f06 100644
--- a/src/Analyzers/Analyzers/test/Microsoft.AspNetCore.Analyzers.Test.csproj
+++ b/src/Analyzers/Analyzers/test/Microsoft.AspNetCore.Analyzers.Test.csproj
@@ -4,8 +4,13 @@
     <TargetFramework>netcoreapp3.0</TargetFramework>
     <PreserveCompilationContext>true</PreserveCompilationContext>
     <RootNamespace>Microsoft.AspNetCore.Analyzers</RootNamespace>
+
+    <!-- Tests do not work on Helix or when bin/ directory is not in project directory due to undeclared dependency on test content. -->
     <!-- https://github.com/aspnet/AspNetCore/issues/6549 -->
     <BuildHelixPayload>false</BuildHelixPayload>
+    <BaseOutputPath />
+    <OutputPath />
+
    </PropertyGroup>
 
   <ItemGroup>
diff --git a/src/Azure/AzureAD/test/FunctionalTests/Microsoft.AspNetCore.Authentication.AzureAD.FunctionalTests.csproj b/src/Azure/AzureAD/test/FunctionalTests/Microsoft.AspNetCore.Authentication.AzureAD.FunctionalTests.csproj
index 29d5492b14ff5ad2ea7e4802933ed0c1011e6c0b..a1dc024b4a30b7a62d46a0685270cd6a2fea53d8 100644
--- a/src/Azure/AzureAD/test/FunctionalTests/Microsoft.AspNetCore.Authentication.AzureAD.FunctionalTests.csproj
+++ b/src/Azure/AzureAD/test/FunctionalTests/Microsoft.AspNetCore.Authentication.AzureAD.FunctionalTests.csproj
@@ -19,7 +19,7 @@
 
   <Target Name="PublishAssets" AfterTargets="Publish">
     <ItemGroup>
-      <_PublishFiles Include="$(MSBuildThisFileDirectory)..\testassets\AzureAD.WebSite\bin\$(Configuration)\netcoreapp3.0\AzureAD.WebSite.deps.json" />
+      <_PublishFiles Include="$(ArtifactsBinDir)AzureAD.WebSite\$(Configuration)\netcoreapp3.0\AzureAD.WebSite.deps.json" />
     </ItemGroup>
     <Copy
       SourceFiles="@(_PublishFiles)"
@@ -36,6 +36,6 @@
         Overwrite="true"
         Encoding="Unicode"/>
   </Target>
-  
+
   <Import Project="$(MvcTestingTargets)" Condition="'$(MvcTestingTargets)' != ''" />
 </Project>
diff --git a/src/Components/Blazor/Templates/.gitignore b/src/Components/Blazor/Templates/.gitignore
index b19c3a09d84e3389a0392ad45a30109fcbe605d8..6216d1eae654ec351d31643e1906c7ecbe678784 100644
--- a/src/Components/Blazor/Templates/.gitignore
+++ b/src/Components/Blazor/Templates/.gitignore
@@ -1,3 +1,3 @@
 # We only track the .template.config.src items in source control
 # The .template.config files are generated on build
-content/**/.template.config/
\ No newline at end of file
+src/content/**/.template.config/
diff --git a/src/Components/Components.sln b/src/Components/Components.sln
index ecacc6f7ee9479cab8992eabbc3c98246567413f..f6ea985b7f71a5504971b992aba7fc813177f6f9 100644
--- a/src/Components/Components.sln
+++ b/src/Components/Components.sln
@@ -71,7 +71,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ComponentsApp.Server", "tes
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestContentPackage", "test\testassets\TestContentPackage\TestContentPackage.csproj", "{423CCF23-C0B4-4D21-896C-16DC98689DB5}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestServer", "test\testassets\TestServer\TestServer.csproj", "{D6AEB328-EBC0-40B1-8936-301597883DFA}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Components.TestServer", "test\testassets\TestServer\Components.TestServer.csproj", "{D6AEB328-EBC0-40B1-8936-301597883DFA}"
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Antiforgery", "..\Antiforgery\src\Microsoft.AspNetCore.Antiforgery.csproj", "{6BA2DCAA-CB68-4AE2-BBBE-746A728D30E0}"
 EndProject
diff --git a/src/Components/Directory.Build.props b/src/Components/Directory.Build.props
index a090fee61f5f8012c8c998b39490c2c5b2f430ff..ee0ff057fa4001003367a1714501b3bb63f04265 100644
--- a/src/Components/Directory.Build.props
+++ b/src/Components/Directory.Build.props
@@ -1,11 +1,14 @@
 <Project>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory)..\, Directory.Build.props))\Directory.Build.props" />
+
   <PropertyGroup>
     <!-- Workaround for https://github.com/aspnet/AspNetCore/issues/5486 which requires the bin and obj directory be in the project directory -->
-    <OutputInRepoRoot>false</OutputInRepoRoot>
+    <BaseIntermediateOutputPath />
+    <IntermediateOutputPath />
+    <BaseOutputPath />
+    <OutputPath />
   </PropertyGroup>
 
-  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory)..\, Directory.Build.props))\Directory.Build.props" />
-
   <PropertyGroup>
     <PackageTags>aspnetcore;components</PackageTags>
 
diff --git a/src/Components/test/E2ETest/Microsoft.AspNetCore.Components.E2ETests.csproj b/src/Components/test/E2ETest/Microsoft.AspNetCore.Components.E2ETests.csproj
index 24ebd8ebf26850b2bfcaec756c861a7493528a51..477e5d259dd67ef9e8c9da4ce503e7947956952d 100644
--- a/src/Components/test/E2ETest/Microsoft.AspNetCore.Components.E2ETests.csproj
+++ b/src/Components/test/E2ETest/Microsoft.AspNetCore.Components.E2ETests.csproj
@@ -13,6 +13,11 @@
     <SkipTests Condition="'$(SeleniumE2ETestsSupported)' != 'true'">true</SkipTests>
     <!-- https://github.com/aspnet/AspNetCore/issues/6857 -->
     <BuildHelixPayload>false</BuildHelixPayload>
+
+    <!-- Tests do not work on Helix or when bin/ directory is not in project directory due to undeclared dependency on test content. -->
+    <BaseOutputPath />
+    <OutputPath />
+
   </PropertyGroup>
 
   <ItemGroup>
@@ -36,7 +41,7 @@
     <ProjectReference Include="..\testassets\ComponentsApp.App\ComponentsApp.App.csproj" />
     <ProjectReference Include="..\testassets\ComponentsApp.Server\ComponentsApp.Server.csproj" />
     <ProjectReference Include="..\testassets\BasicTestApp\BasicTestApp.csproj" />
-    <ProjectReference Include="..\testassets\TestServer\TestServer.csproj" />
+    <ProjectReference Include="..\testassets\TestServer\Components.TestServer.csproj" />
   </ItemGroup>
 
   <!-- Shared testing infrastructure for running E2E tests using selenium -->
diff --git a/src/Components/test/E2ETest/Tests/FormsTest.cs b/src/Components/test/E2ETest/Tests/FormsTest.cs
index f4c68a767cabdcfae774d0df8d9b1dd6de8820b1..88f2a0d9fbf91fc3ace836a784ea4b434e08883d 100644
--- a/src/Components/test/E2ETest/Tests/FormsTest.cs
+++ b/src/Components/test/E2ETest/Tests/FormsTest.cs
@@ -6,6 +6,8 @@ using BasicTestApp.FormsTest;
 using Microsoft.AspNetCore.Components.E2ETest.Infrastructure;
 using Microsoft.AspNetCore.Components.E2ETest.Infrastructure.ServerFixtures;
 using Microsoft.AspNetCore.E2ETesting;
+using Microsoft.AspNetCore.Testing;
+using Microsoft.AspNetCore.Testing.xunit;
 using OpenQA.Selenium;
 using OpenQA.Selenium.Support.UI;
 using System;
@@ -198,6 +200,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests
         }
 
         [Fact]
+        [Flaky("https://github.com/aspnet/AspNetCore-Internal/issues/2511", FlakyOn.All)]
         public void InputDateInteractsWithEditContext_NullableDateTimeOffset()
         {
             var appElement = MountTestComponent<TypicalValidationComponent>();
diff --git a/src/Components/test/testassets/TestServer/TestServer.csproj b/src/Components/test/testassets/TestServer/Components.TestServer.csproj
similarity index 100%
rename from src/Components/test/testassets/TestServer/TestServer.csproj
rename to src/Components/test/testassets/TestServer/Components.TestServer.csproj
diff --git a/src/DefaultBuilder/DefaultBuilder.sln b/src/DefaultBuilder/DefaultBuilder.sln
index 92b547bbedce554596605cb4224ed1a893047987..4dca79f2fd418ad8d24d3b7766bc033ddd6c7055 100644
--- a/src/DefaultBuilder/DefaultBuilder.sln
+++ b/src/DefaultBuilder/DefaultBuilder.sln
@@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00
 # Visual Studio Version 16
 VisualStudioVersion = 16.0.0.0
 MinimumVisualStudioVersion = 16.0.0.0
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SampleApp", "samples\SampleApp\SampleApp.csproj", "{C19108F8-667B-4CF9-B227-CDD2290224BC}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DefaultBuilder.SampleApp", "samples\SampleApp\DefaultBuilder.SampleApp.csproj", "{C19108F8-667B-4CF9-B227-CDD2290224BC}"
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Tests", "test\Microsoft.AspNetCore.Tests\Microsoft.AspNetCore.Tests.csproj", "{1CD49F15-D381-4C7E-8E12-A85E7753B110}"
 EndProject
diff --git a/src/DefaultBuilder/samples/SampleApp/SampleApp.csproj b/src/DefaultBuilder/samples/SampleApp/DefaultBuilder.SampleApp.csproj
similarity index 100%
rename from src/DefaultBuilder/samples/SampleApp/SampleApp.csproj
rename to src/DefaultBuilder/samples/SampleApp/DefaultBuilder.SampleApp.csproj
diff --git a/src/DefaultBuilder/test/Microsoft.AspNetCore.FunctionalTests/Microsoft.AspNetCore.FunctionalTests.csproj b/src/DefaultBuilder/test/Microsoft.AspNetCore.FunctionalTests/Microsoft.AspNetCore.FunctionalTests.csproj
index d2cc2628f6b663c4f8809c9dcbef04c63c254cdf..416f78e75c835d82fbc5d0863a0947bd9cffdbcc 100644
--- a/src/DefaultBuilder/test/Microsoft.AspNetCore.FunctionalTests/Microsoft.AspNetCore.FunctionalTests.csproj
+++ b/src/DefaultBuilder/test/Microsoft.AspNetCore.FunctionalTests/Microsoft.AspNetCore.FunctionalTests.csproj
@@ -2,8 +2,13 @@
 
   <PropertyGroup>
     <TargetFramework>netcoreapp3.0</TargetFramework>
+
+    <!-- Tests do not work on Helix or when bin/ directory is not in project directory due to undeclared dependency on test content. -->
     <!-- https://github.com/aspnet/AspNetCore/issues/6549 -->
     <BuildHelixPayload>false</BuildHelixPayload>
+    <BaseOutputPath />
+    <OutputPath />
+
   </PropertyGroup>
 
   <ItemGroup>
diff --git a/src/SiteExtensions/Directory.Build.props b/src/DefaultBuilder/testassets/Directory.Build.props
similarity index 52%
rename from src/SiteExtensions/Directory.Build.props
rename to src/DefaultBuilder/testassets/Directory.Build.props
index 574418ea3666f558f8b2cf6124938ef5df5b813c..b49282fb6f9498cec534f7ea1aed1bf713ca60c7 100644
--- a/src/SiteExtensions/Directory.Build.props
+++ b/src/DefaultBuilder/testassets/Directory.Build.props
@@ -1,7 +1,9 @@
 <Project>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory)..\, Directory.Build.props))\Directory.Build.props" />
+
   <PropertyGroup>
-    <OutputInRepoRoot>true</OutputInRepoRoot>
+    <!-- Tests do not work on Helix or when bin/ directory is not in project directory due to undeclared dependency on test content. -->
+    <BaseOutputPath />
+    <OutputPath />
   </PropertyGroup>
-
-  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory)..\, Directory.Build.props))\Directory.Build.props" />
 </Project>
diff --git a/src/Framework/Directory.Build.props b/src/Framework/Directory.Build.props
index 5a05adc758a604d712a061d3b9344fbce30194ce..77742798288022fda70fa134d5586c077fdb37e0 100644
--- a/src/Framework/Directory.Build.props
+++ b/src/Framework/Directory.Build.props
@@ -1,8 +1,4 @@
 <Project>
-  <PropertyGroup>
-    <OutputInRepoRoot>true</OutputInRepoRoot>
-  </PropertyGroup>
-
   <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory)..\, Directory.Build.props))\Directory.Build.props" />
 
   <PropertyGroup>
diff --git a/src/Framework/ref/Microsoft.AspNetCore.App.Ref.csproj b/src/Framework/ref/Microsoft.AspNetCore.App.Ref.csproj
index fce60aafbfa9542be6a985566d4fba0eaaab4811..7a0d9cfe80d96322b43c9d53b8742c1789b2f7a3 100644
--- a/src/Framework/ref/Microsoft.AspNetCore.App.Ref.csproj
+++ b/src/Framework/ref/Microsoft.AspNetCore.App.Ref.csproj
@@ -1,11 +1,4 @@
 <Project>
-
-  <PropertyGroup>
-    <OutputInRepoRoot>true</OutputInRepoRoot>
-    <!-- Temporary flag to disable restoring this project against the artifacts/ folder. -->
-    <_DisableRestoreFromLocalPackages>true</_DisableRestoreFromLocalPackages>
-  </PropertyGroup>
-
   <Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />
 
   <PropertyGroup>
diff --git a/src/Framework/src/Microsoft.AspNetCore.App.Runtime.csproj b/src/Framework/src/Microsoft.AspNetCore.App.Runtime.csproj
index cc6273e88e127d2a83f720251c9d744ff2fde49c..bb4784bb9408ddb235b6d56e2bbfdcc93436248e 100644
--- a/src/Framework/src/Microsoft.AspNetCore.App.Runtime.csproj
+++ b/src/Framework/src/Microsoft.AspNetCore.App.Runtime.csproj
@@ -1,10 +1,4 @@
 <Project>
-  <PropertyGroup>
-    <OutputInRepoRoot>true</OutputInRepoRoot>
-    <!-- Temporary flag to disable restoring this project against the artifacts/ folder. -->
-    <_DisableRestoreFromLocalPackages>true</_DisableRestoreFromLocalPackages>
-  </PropertyGroup>
-
   <Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />
 
   <PropertyGroup>
diff --git a/src/Hosting/test/FunctionalTests/Microsoft.AspNetCore.Hosting.FunctionalTests.csproj b/src/Hosting/test/FunctionalTests/Microsoft.AspNetCore.Hosting.FunctionalTests.csproj
index cb48955bb05dd90dc8344e0c25b42374b89e1181..1c92dddbaa4f46e9c7471207ab37e503b29c9883 100644
--- a/src/Hosting/test/FunctionalTests/Microsoft.AspNetCore.Hosting.FunctionalTests.csproj
+++ b/src/Hosting/test/FunctionalTests/Microsoft.AspNetCore.Hosting.FunctionalTests.csproj
@@ -2,8 +2,13 @@
 
   <PropertyGroup>
     <TargetFramework>netcoreapp3.0</TargetFramework>
+
+    <!-- Tests do not work on Helix or when bin/ directory is not in project directory due to undeclared dependency on test content. -->
     <!-- https://github.com/aspnet/AspNetCore/issues/6549 -->
     <BuildHelixPayload>false</BuildHelixPayload>
+    <BaseOutputPath />
+    <OutputPath />
+
   </PropertyGroup>
 
   <ItemGroup>
diff --git a/src/Hosting/test/testassets/Directory.Build.props b/src/Hosting/test/testassets/Directory.Build.props
new file mode 100644
index 0000000000000000000000000000000000000000..b49282fb6f9498cec534f7ea1aed1bf713ca60c7
--- /dev/null
+++ b/src/Hosting/test/testassets/Directory.Build.props
@@ -0,0 +1,9 @@
+<Project>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory)..\, Directory.Build.props))\Directory.Build.props" />
+
+  <PropertyGroup>
+    <!-- Tests do not work on Helix or when bin/ directory is not in project directory due to undeclared dependency on test content. -->
+    <BaseOutputPath />
+    <OutputPath />
+  </PropertyGroup>
+</Project>
diff --git a/src/Http/HttpAbstractions.sln b/src/Http/HttpAbstractions.sln
index f585ee6c2d26163e0b0c05629d7ef1191460b921..0bf3b98843dd733b88c75c9047f93070a423b675 100644
--- a/src/Http/HttpAbstractions.sln
+++ b/src/Http/HttpAbstractions.sln
@@ -51,7 +51,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Owin.T
 EndProject
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{391FBA36-BEEB-411A-A588-3F83901C0C1A}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SampleApp", "samples\SampleApp\SampleApp.csproj", "{2378049E-ABE9-4843-AAC7-A6C9E704463D}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HttpAbstractions.SampleApp", "samples\SampleApp\HttpAbstractions.SampleApp.csproj", "{2378049E-ABE9-4843-AAC7-A6C9E704463D}"
 EndProject
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WebUtilities", "WebUtilities", "{80A090C8-ED02-4DE3-875A-30DCCDBD84BA}"
 EndProject
diff --git a/src/Http/samples/SampleApp/SampleApp.csproj b/src/Http/samples/SampleApp/HttpAbstractions.SampleApp.csproj
similarity index 100%
rename from src/Http/samples/SampleApp/SampleApp.csproj
rename to src/Http/samples/SampleApp/HttpAbstractions.SampleApp.csproj
diff --git a/src/Identity/test/Identity.FunctionalTests/Microsoft.AspNetCore.Identity.FunctionalTests.csproj b/src/Identity/test/Identity.FunctionalTests/Microsoft.AspNetCore.Identity.FunctionalTests.csproj
index 0b83c7d39c3ca7202e51ffc1bfa5e72036c99604..3230a236b94bd2259e0c0fb0ea149fda55dcee4c 100644
--- a/src/Identity/test/Identity.FunctionalTests/Microsoft.AspNetCore.Identity.FunctionalTests.csproj
+++ b/src/Identity/test/Identity.FunctionalTests/Microsoft.AspNetCore.Identity.FunctionalTests.csproj
@@ -26,9 +26,9 @@
 
   <Target Name="PublishAssets" AfterTargets="Publish">
     <ItemGroup>
-      <_PublishFiles Include="$(MSBuildThisFileDirectory)..\..\UI\src\bin\$(Configuration)\netcoreapp3.0\Microsoft.AspNetCore.Identity.UI.Views.*.dll" />
-      <_PublishFiles Include="$(MSBuildThisFileDirectory)..\..\testassets\Identity.DefaultUI.WebSite\bin\$(Configuration)\netcoreapp3.0\Identity.DefaultUI.WebSite.deps.json" />
-      <_PublishFiles Include="$(MSBuildThisFileDirectory)..\..\testassets\Identity.DefaultUI.WebSite\bin\$(Configuration)\netcoreapp3.0\Identity.DefaultUI.WebSite.deps.json" />
+      <_PublishFiles Include="$(ArtifactsBinDir)Microsoft.AspNetCore.Identity.UI\$(Configuration)\netcoreapp3.0\Microsoft.AspNetCore.Identity.UI.Views.*.dll" />
+      <_PublishFiles Include="$(ArtifactsBinDir)Identity.DefaultUI.WebSite\$(Configuration)\netcoreapp3.0\Identity.DefaultUI.WebSite.deps.json" />
+      <_PublishFiles Include="$(ArtifactsBinDir)Identity.DefaultUI.WebSite\$(Configuration)\netcoreapp3.0\Identity.DefaultUI.WebSite.deps.json" />
       <_wwwrootFiles Include="$(MSBuildThisFileDirectory)..\..\testassets\Identity.DefaultUI.WebSite\wwwroot\**\*.*" />
       <_PagesFiles Include="$(MSBuildThisFileDirectory)..\..\testassets\Identity.DefaultUI.WebSite\Pages\**\*.*" />
     </ItemGroup>
@@ -46,7 +46,7 @@
         File="$(PublishDir)\contentroot.sln"
         Lines="Ignored"
         Overwrite="true"
-        Encoding="Unicode"/>    
+        Encoding="Unicode"/>
   </Target>
-   
+
 </Project>
diff --git a/src/Identity/test/Identity.Test/IdentityUIScriptsTest.cs b/src/Identity/test/Identity.Test/IdentityUIScriptsTest.cs
index abbb1b71762919d5056d648fbe425cca7417776a..8ff722cbe32d6932da2dfd5532c3ce9df001bc27 100644
--- a/src/Identity/test/Identity.Test/IdentityUIScriptsTest.cs
+++ b/src/Identity/test/Identity.Test/IdentityUIScriptsTest.cs
@@ -83,8 +83,7 @@ namespace Microsoft.AspNetCore.Identity.Test
         [Flaky("https://github.com/aspnet/AspNetCore-Internal/issues/2267", FlakyOn.AzP.macOS)]
         public async Task IdentityUI_ScriptTags_FallbackSourceContent_Matches_CDNContent(ScriptTag scriptTag)
         {
-            var slnDir = GetSolutionDir();
-            var wwwrootDir = Path.Combine(slnDir, "UI", "src", "wwwroot", scriptTag.Version);
+            var wwwrootDir = Path.Combine(AppContext.BaseDirectory, "UI", "src", "wwwroot", scriptTag.Version);
 
             var cdnContent = await _httpClient.GetStringAsync(scriptTag.Src);
             var fallbackSrcContent = File.ReadAllText(
@@ -109,9 +108,8 @@ namespace Microsoft.AspNetCore.Identity.Test
 
         private static List<ScriptTag> GetScriptTags()
         {
-            var slnDir = GetSolutionDir();
-            var uiDirV3 = Path.Combine(slnDir, "UI", "src", "Areas", "Identity", "Pages", "V3");
-            var uiDirV4 = Path.Combine(slnDir, "UI", "src", "Areas", "Identity", "Pages", "V4");
+            var uiDirV3 = Path.Combine(AppContext.BaseDirectory, "UI", "src", "Areas", "Identity", "Pages", "V3");
+            var uiDirV4 = Path.Combine(AppContext.BaseDirectory, "UI", "src", "Areas", "Identity", "Pages", "V4");
             var cshtmlFiles = GetRazorFiles(uiDirV3).Concat(GetRazorFiles(uiDirV4));
 
             var scriptTags = new List<ScriptTag>();
@@ -155,24 +153,6 @@ namespace Microsoft.AspNetCore.Identity.Test
             return scriptTags;
         }
 
-        private static string GetSolutionDir()
-        {
-            var dir = new DirectoryInfo(AppContext.BaseDirectory);
-            // On helix we use the published copy
-            if (!SkipOnHelixAttribute.OnHelix())
-            {
-                while (dir != null)
-                {
-                    if (File.Exists(Path.Combine(dir.FullName, "Identity.sln")))
-                    {
-                        break;
-                    }
-                    dir = dir.Parent;
-                }
-            }
-            return dir.FullName;
-        }
-
         private static string RemoveLineEndings(string originalString)
         {
             return originalString.Replace("\r\n", "").Replace("\n", "");
diff --git a/src/Identity/test/Identity.Test/Microsoft.AspNetCore.Identity.Test.csproj b/src/Identity/test/Identity.Test/Microsoft.AspNetCore.Identity.Test.csproj
index b955cc49e505d2358c670a56b1c55acba9023edf..3e34340ad8d771081c1c6e57bffd72e556501bc3 100644
--- a/src/Identity/test/Identity.Test/Microsoft.AspNetCore.Identity.Test.csproj
+++ b/src/Identity/test/Identity.Test/Microsoft.AspNetCore.Identity.Test.csproj
@@ -7,8 +7,8 @@
   <ItemGroup>
     <Compile Include="$(IdentityTestSharedSourceRoot)**\*.cs" />
     <Compile Include="$(SharedSourceRoot)test\SkipOnHelixAttribute.cs" />
-    <HelixContent Include="..\..\UI\src\Areas\Identity\Pages\**\*.*" LinkBase="UI\src\Areas\Identity\Pages" />
-    <HelixContent Include="..\..\UI\src\wwwroot\**\*.*" LinkBase="UI\src\wwwroot" />
+    <Content Include="..\..\UI\src\Areas\Identity\Pages\**\*.*" LinkBase="UI\src\Areas\Identity\Pages" />
+    <Content Include="..\..\UI\src\wwwroot\**\*.*" LinkBase="UI\src\wwwroot" />
   </ItemGroup>
 
   <ItemGroup>
diff --git a/src/Installers/Debian/Directory.Build.props b/src/Installers/Debian/Directory.Build.props
index f235d1ee8a65c4f87eb18e8d39f224ae6e791351..d967c46c6802e6576896a75c127f62f4c03c3bb3 100644
--- a/src/Installers/Debian/Directory.Build.props
+++ b/src/Installers/Debian/Directory.Build.props
@@ -1,14 +1,10 @@
 <Project>
-  <PropertyGroup>
-    <OutputInRepoRoot>true</OutputInRepoRoot>
-    <DisablePubternalApiCheck>true</DisablePubternalApiCheck>
-  </PropertyGroup>
-
   <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory)..\, Directory.Build.props))\Directory.Build.props" />
 
   <UsingTask Condition=" '$(BuildToolsTaskAssembly)' != '' AND Exists('$(BuildToolsTaskAssembly)') " TaskName="Microsoft.AspNetCore.BuildTools.GenerateFileFromTemplate" AssemblyFile="$(BuildToolsTaskAssembly)" />
 
   <PropertyGroup>
+    <DisablePubternalApiCheck>true</DisablePubternalApiCheck>
     <OutputPath>$(InstallersOutputPath)</OutputPath>
     <IntermediateOutputPath>$(IntermediateOutputPath)$(TargetRuntimeIdentifier)\</IntermediateOutputPath>
 
diff --git a/src/Installers/Rpm/Directory.Build.props b/src/Installers/Rpm/Directory.Build.props
index 072aa6b6b3322b591fa1015b3963ba47e403a4a8..d27e528217fb214186daf94fd44a4e8eb3aea1b3 100644
--- a/src/Installers/Rpm/Directory.Build.props
+++ b/src/Installers/Rpm/Directory.Build.props
@@ -2,11 +2,6 @@
   Common properties for building RPM installers.
 -->
 <Project>
-
-  <PropertyGroup>
-    <OutputInRepoRoot>true</OutputInRepoRoot>
-  </PropertyGroup>
-
   <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory)..\, Directory.Build.props))\Directory.Build.props" />
 
   <!-- Output paths -->
diff --git a/src/Installers/Windows/.gitignore b/src/Installers/Windows/.gitignore
deleted file mode 100644
index fe67cac916206aea093a85593276a0880139d5b4..0000000000000000000000000000000000000000
--- a/src/Installers/Windows/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-ancm/
diff --git a/src/Installers/Windows/AspNetCoreModule-Setup/ANCMIISExpressV2/AncmIISExpressV2.wixproj b/src/Installers/Windows/AspNetCoreModule-Setup/ANCMIISExpressV2/AncmIISExpressV2.wixproj
index 5df24f3a2b18e38283749dd79e6fb4b10a0acaeb..404f2a3c139ed4e96412cfa521caf4f53f8473f5 100644
--- a/src/Installers/Windows/AspNetCoreModule-Setup/ANCMIISExpressV2/AncmIISExpressV2.wixproj
+++ b/src/Installers/Windows/AspNetCoreModule-Setup/ANCMIISExpressV2/AncmIISExpressV2.wixproj
@@ -57,8 +57,8 @@
           Condition=" '$(IsProductInstaller)' == 'true' "
           AfterTargets="Build">
     <ItemGroup>
-      <BuildContentForAncm Include="$(RepoRoot)src\Servers\IIS\AspNetCoreModuleV2\AspNetCore\bin\$(Configuration)\$(TempPlatform)\*.*" />
-      <BuildContentForAncmHandler Include="$(RepoRoot)src\Servers\IIS\AspNetCoreModuleV2\OutOfProcessRequestHandler\bin\$(Configuration)\$(TempPlatform)\*.*" />
+      <BuildContentForAncm Include="$(ArtifactsBinDir)AspNetCore\$(TempPlatform)\$(Configuration)\*" />
+      <BuildContentForAncmHandler Include="$(ArtifactsBinDir)OutOfProcessRequestHandler\$(TempPlatform)\$(Configuration)\*" />
     </ItemGroup>
     <Copy SourceFiles="@(BuildContentForAncm)" DestinationFolder="$(InstallersOutputPath)\IISExpressSymbols\$(TempPlatform)" />
     <Copy SourceFiles="@(BuildContentForAncmHandler)" DestinationFolder="$(InstallersOutputPath)\IISExpressSymbols\$(TempPlatform)" />
diff --git a/src/Installers/Windows/AspNetCoreModule-Setup/CustomAction/aspnetcoreCA.vcxproj b/src/Installers/Windows/AspNetCoreModule-Setup/CustomAction/aspnetcoreCA.vcxproj
index da7c3b16b46b853ef89ea7b3e2378db51f68c623..a900f6d5e0ced793967126876219c958ec014cf0 100644
--- a/src/Installers/Windows/AspNetCoreModule-Setup/CustomAction/aspnetcoreCA.vcxproj
+++ b/src/Installers/Windows/AspNetCoreModule-Setup/CustomAction/aspnetcoreCA.vcxproj
@@ -84,7 +84,7 @@
     <ProjectReference Include="$(IIS-Setup)iisca\lib\iisca.vcxproj">
       <Project>{7324770c-0871-4d73-be3d-5e2f3e9e1b1e}</Project>
     </ProjectReference>
-    <ProjectReference Include="$(IIS-Common)lib\CommonLib.vcxproj">
+    <ProjectReference Include="$(IIS-Common)lib\IISSetup.CommonLib.vcxproj">
       <Project>{b54a8f61-60de-4ad9-87ca-d102f230678e}</Project>
     </ProjectReference>
   </ItemGroup>
@@ -95,7 +95,5 @@
     </PropertyGroup>
     <Error Condition="!Exists('$(MSBuildProjectDirectory)\..\build\versions.props')" Text="$([System.String]::Format('$(ErrorText)', '$(MSBuildProjectDirectory)\..\build\versions.props'))" />
     <Error Condition="!Exists('$(MSBuildProjectDirectory)\..\build\settings.props')" Text="$([System.String]::Format('$(ErrorText)', '$(MSBuildProjectDirectory)\..\build\settings.props'))" />
-    <Error Condition="!Exists('$(MSBuildProjectDirectory)\..\build\copy-outputs.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(MSBuildProjectDirectory)\..\build\copy-outputs.targets'))" />
   </Target>
-  <Import Project="$(MSBuildProjectDirectory)\..\build\copy-outputs.targets" Condition="Exists('$(MSBuildProjectDirectory)\..\build\copy-outputs.targets')" />
 </Project>
diff --git a/src/Installers/Windows/AspNetCoreModule-Setup/IIS-Setup/IIS-Common/Common.sln b/src/Installers/Windows/AspNetCoreModule-Setup/IIS-Setup/IIS-Common/Common.sln
index 6cda623e6344a5c5047427152d78859f59e15a7c..c675584f205948c08e9e93b6c81265a4f40578cd 100644
--- a/src/Installers/Windows/AspNetCoreModule-Setup/IIS-Setup/IIS-Common/Common.sln
+++ b/src/Installers/Windows/AspNetCoreModule-Setup/IIS-Setup/IIS-Common/Common.sln
@@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00
 # Visual Studio Version 16
 VisualStudioVersion = 16.0.0.0
 MinimumVisualStudioVersion = 16.0.0.0
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CommonLib", "lib\CommonLib.vcxproj", "{B54A8F61-60DE-4AD9-87CA-D102F230678E}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "IISSetup.CommonLib", "lib\IISSetup.CommonLib.vcxproj", "{B54A8F61-60DE-4AD9-87CA-D102F230678E}"
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "reftrace", "reftrace\reftrace.vcxproj", "{A2599642-CBE5-4230-8511-3DC2D81874BE}"
 EndProject
diff --git a/src/Installers/Windows/AspNetCoreModule-Setup/IIS-Setup/IIS-Common/lib/CommonLib.vcxproj b/src/Installers/Windows/AspNetCoreModule-Setup/IIS-Setup/IIS-Common/lib/IISSetup.CommonLib.vcxproj
similarity index 100%
rename from src/Installers/Windows/AspNetCoreModule-Setup/IIS-Setup/IIS-Common/lib/CommonLib.vcxproj
rename to src/Installers/Windows/AspNetCoreModule-Setup/IIS-Setup/IIS-Common/lib/IISSetup.CommonLib.vcxproj
diff --git a/src/Installers/Windows/AspNetCoreModule-Setup/IIS-Setup/IIS-Setup.sln b/src/Installers/Windows/AspNetCoreModule-Setup/IIS-Setup/IIS-Setup.sln
index 0b349bffd0182a62acdaf283ae4b53d5a7dac5fd..4c1ba6ae0a3cba7a74c202ddb06358acda84410d 100644
--- a/src/Installers/Windows/AspNetCoreModule-Setup/IIS-Setup/IIS-Setup.sln
+++ b/src/Installers/Windows/AspNetCoreModule-Setup/IIS-Setup/IIS-Setup.sln
@@ -5,7 +5,7 @@ VisualStudioVersion = 16.0.0.0
 MinimumVisualStudioVersion = 16.0.0.0
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "iisca", "iisca\lib\iisca.vcxproj", "{7324770C-0871-4D73-BE3D-5E2F3E9E1B1E}"
 EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CommonLib", "IIS-Common\lib\CommonLib.vcxproj", "{B54A8F61-60DE-4AD9-87CA-D102F230678E}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "IISSetup.CommonLib", "IIS-Common\lib\IISSetup.CommonLib.vcxproj", "{B54A8F61-60DE-4AD9-87CA-D102F230678E}"
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
diff --git a/src/Installers/Windows/AspNetCoreModule-Setup/IIS-Setup/iisca/lib/iisca.vcxproj b/src/Installers/Windows/AspNetCoreModule-Setup/IIS-Setup/iisca/lib/iisca.vcxproj
index a75af0850a691ecdfc619b00859a80b94281fe3d..f823e017c8698589b9cad15ecd7aaa0625e6c9d8 100644
--- a/src/Installers/Windows/AspNetCoreModule-Setup/IIS-Setup/iisca/lib/iisca.vcxproj
+++ b/src/Installers/Windows/AspNetCoreModule-Setup/IIS-Setup/iisca/lib/iisca.vcxproj
@@ -61,7 +61,7 @@
     <ClInclude Include="wuerror.h" />
   </ItemGroup>
   <ItemGroup>
-    <ProjectReference Include="$(IIS-Common)lib\CommonLib.vcxproj">
+    <ProjectReference Include="$(IIS-Common)lib\IISSetup.CommonLib.vcxproj">
       <Project>{b54a8f61-60de-4ad9-87ca-d102f230678e}</Project>
     </ProjectReference>
   </ItemGroup>
diff --git a/src/Installers/Windows/AspNetCoreModule-Setup/build/copy-outputs.targets b/src/Installers/Windows/AspNetCoreModule-Setup/build/copy-outputs.targets
deleted file mode 100644
index bdc59f4f6d2a7d26c7a18d890522a1a2b3eb81df..0000000000000000000000000000000000000000
--- a/src/Installers/Windows/AspNetCoreModule-Setup/build/copy-outputs.targets
+++ /dev/null
@@ -1,18 +0,0 @@
-<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-
-  <ItemGroup Condition="'@(BuildOutputFiles)' == ''">
-    <BuildOutputFiles Include="$(OutDir)\$(TargetName)$(TargetExt)"/>
-  </ItemGroup>
-
-  <PropertyGroup>
-    <BuildOutputCopyPath Condition="$(BuildOutputCopyPath) == ''">$(Configuration)\$(PlatformShortname)\</BuildOutputCopyPath>
-  </PropertyGroup>
-
-  <Target Name="CopyOutputsToRoot" AfterTargets="Build">
-    <Copy  
-      SourceFiles="@(BuildOutputFiles)"  
-      DestinationFolder="$(SolutionDir)bin\$(BuildOutputCopyPath)"
-    />
-  </Target>  
-  
-</Project>
\ No newline at end of file
diff --git a/src/Installers/Windows/Directory.Build.props b/src/Installers/Windows/Directory.Build.props
index 854a4bf55123a01658e2d9734c328961c73bcae3..69532ea00c1c5e773b94efb260243f619c8184bf 100644
--- a/src/Installers/Windows/Directory.Build.props
+++ b/src/Installers/Windows/Directory.Build.props
@@ -1,9 +1,4 @@
 <Project>
-
-  <PropertyGroup>
-    <OutputInRepoRoot>true</OutputInRepoRoot>
-  </PropertyGroup>
-
   <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory)..\, Directory.Build.props))\Directory.Build.props" />
 
   <Import Project="Wix.props"  Condition="'$(MSBuildProjectExtension)' == '.wixproj'" />
diff --git a/src/Installers/Windows/Installers.sln b/src/Installers/Windows/Installers.sln
index 5d55dc1c136bb29b77ea57e227a961714783f5ba..be17d02053c7c4f4a05a4994c100a4c137de57d4 100644
--- a/src/Installers/Windows/Installers.sln
+++ b/src/Installers/Windows/Installers.sln
@@ -7,7 +7,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "aspnetcoreCA", "AspNetCoreM
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "iisca", "AspNetCoreModule-Setup\IIS-Setup\iisca\lib\iisca.vcxproj", "{7324770C-0871-4D73-BE3D-5E2F3E9E1B1E}"
 EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CommonLib", "AspNetCoreModule-Setup\IIS-Setup\IIS-Common\lib\CommonLib.vcxproj", "{B54A8F61-60DE-4AD9-87CA-D102F230678E}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "IISSetup.CommonLib", "AspNetCoreModule-Setup\IIS-Setup\IIS-Common\lib\IISSetup.CommonLib.vcxproj", "{B54A8F61-60DE-4AD9-87CA-D102F230678E}"
 EndProject
 Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "AncmIISExpressV2", "AspNetCoreModule-Setup\ANCMIISExpressV2\AncmIISExpressV2.wixproj", "{17C76489-4C09-4E14-B81C-7A86CD937144}"
 EndProject
diff --git a/src/Installers/Windows/UpgradeLog.htm b/src/Installers/Windows/UpgradeLog.htm
deleted file mode 100644
index f327ebd6ec8c9266607c164392462b8d434be9e7..0000000000000000000000000000000000000000
Binary files a/src/Installers/Windows/UpgradeLog.htm and /dev/null differ
diff --git a/src/Middleware/CORS/samples/Directory.Build.props b/src/Middleware/CORS/samples/Directory.Build.props
new file mode 100644
index 0000000000000000000000000000000000000000..b49282fb6f9498cec534f7ea1aed1bf713ca60c7
--- /dev/null
+++ b/src/Middleware/CORS/samples/Directory.Build.props
@@ -0,0 +1,9 @@
+<Project>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory)..\, Directory.Build.props))\Directory.Build.props" />
+
+  <PropertyGroup>
+    <!-- Tests do not work on Helix or when bin/ directory is not in project directory due to undeclared dependency on test content. -->
+    <BaseOutputPath />
+    <OutputPath />
+  </PropertyGroup>
+</Project>
diff --git a/src/Middleware/CORS/test/FunctionalTests/FunctionalTests.csproj b/src/Middleware/CORS/test/FunctionalTests/CORS.FunctionalTests.csproj
similarity index 84%
rename from src/Middleware/CORS/test/FunctionalTests/FunctionalTests.csproj
rename to src/Middleware/CORS/test/FunctionalTests/CORS.FunctionalTests.csproj
index 39801488610913af51ccc361120fab86705ce416..8bb04bbf54cfef59f39ef31a772847b91b782bab 100644
--- a/src/Middleware/CORS/test/FunctionalTests/FunctionalTests.csproj
+++ b/src/Middleware/CORS/test/FunctionalTests/CORS.FunctionalTests.csproj
@@ -4,8 +4,13 @@
     <TargetFramework>netcoreapp3.0</TargetFramework>
     <TestGroupName>Cors.FunctionalTests</TestGroupName>
     <DefaultItemExcludes>$(DefaultItemExcludes);node_modules\**\*</DefaultItemExcludes>
+
+    <!-- Tests do not work on Helix or when bin/ directory is not in project directory due to undeclared dependency on test content. -->
     <!-- https://github.com/aspnet/AspNetCore/issues/6549 -->
     <BuildHelixPayload>false</BuildHelixPayload>
+    <BaseOutputPath />
+    <OutputPath />
+
   </PropertyGroup>
 
   <ItemGroup>
diff --git a/src/Middleware/CORS/test/FunctionalTests/CORS.FunctionalTests.npmproj b/src/Middleware/CORS/test/FunctionalTests/CORS.Npm.FunctionalTests.npmproj
similarity index 100%
rename from src/Middleware/CORS/test/FunctionalTests/CORS.FunctionalTests.npmproj
rename to src/Middleware/CORS/test/FunctionalTests/CORS.Npm.FunctionalTests.npmproj
diff --git a/src/Middleware/CORS/test/testassets/Directory.Build.props b/src/Middleware/CORS/test/testassets/Directory.Build.props
new file mode 100644
index 0000000000000000000000000000000000000000..b49282fb6f9498cec534f7ea1aed1bf713ca60c7
--- /dev/null
+++ b/src/Middleware/CORS/test/testassets/Directory.Build.props
@@ -0,0 +1,9 @@
+<Project>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory)..\, Directory.Build.props))\Directory.Build.props" />
+
+  <PropertyGroup>
+    <!-- Tests do not work on Helix or when bin/ directory is not in project directory due to undeclared dependency on test content. -->
+    <BaseOutputPath />
+    <OutputPath />
+  </PropertyGroup>
+</Project>
diff --git a/src/Middleware/Middleware.sln b/src/Middleware/Middleware.sln
index bccbab07c9e2b651193e29f8e457cff341123869..5f162599007f448fa8df50a0fdd966c907dad3a3 100644
--- a/src/Middleware/Middleware.sln
+++ b/src/Middleware/Middleware.sln
@@ -9,7 +9,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{A86E
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EchoApp", "WebSockets\samples\EchoApp\EchoApp.csproj", "{0792C20B-1D18-4D7C-9C0F-A6F45A0F378E}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestServer", "WebSockets\samples\TestServer\TestServer.csproj", "{4E5F5FCC-172C-44D9-BEA0-39098A79CD0B}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebSockets.TestServer", "WebSockets\samples\TestServer\WebSockets.TestServer.csproj", "{4E5F5FCC-172C-44D9-BEA0-39098A79CD0B}"
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.WebSockets", "WebSockets\src\Microsoft.AspNetCore.WebSockets.csproj", "{BECAA6A1-1AA4-415E-ADF3-07C103333826}"
 EndProject
@@ -245,7 +245,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Crypto
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.DataProtection.Abstractions", "..\DataProtection\Abstractions\src\Microsoft.AspNetCore.DataProtection.Abstractions.csproj", "{7343B4E4-C5A2-49E2-B431-4D1E6A26E424}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FunctionalTests", "CORS\test\FunctionalTests\FunctionalTests.csproj", "{E025D98E-BD85-474A-98A9-E7F44F392F8E}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CORS.FunctionalTests", "CORS\test\FunctionalTests\CORS.FunctionalTests.csproj", "{E025D98E-BD85-474A-98A9-E7F44F392F8E}"
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SampleDestination", "CORS\samples\SampleDestination\SampleDestination.csproj", "{52CDD110-77DD-4C4D-8C72-4570F6EF20DD}"
 EndProject
diff --git a/src/Middleware/NodeServices/samples/NodeServicesExamples/.gitignore b/src/Middleware/NodeServices/samples/NodeServicesExamples/.gitignore
deleted file mode 100644
index 6330d42a2b1fa89dd0b66a401f166a36df57117c..0000000000000000000000000000000000000000
--- a/src/Middleware/NodeServices/samples/NodeServicesExamples/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-/node_modules/
-/Properties/launchSettings.json
diff --git a/src/Middleware/NodeServices/test/Microsoft.AspNetCore.NodeServices.Tests.csproj b/src/Middleware/NodeServices/test/Microsoft.AspNetCore.NodeServices.Tests.csproj
index cdca6fc2538f378db73aba5207cb0e5d9b04fd92..0b8c614e312701dfdb9595cc2ec96281b69dbe91 100644
--- a/src/Middleware/NodeServices/test/Microsoft.AspNetCore.NodeServices.Tests.csproj
+++ b/src/Middleware/NodeServices/test/Microsoft.AspNetCore.NodeServices.Tests.csproj
@@ -2,8 +2,13 @@
 
   <PropertyGroup>
     <TargetFramework>netcoreapp3.0</TargetFramework>
+
+    <!-- Tests do not work on Helix or when bin/ directory is not in project directory due to undeclared dependency on test content. -->
     <!-- https://github.com/aspnet/AspNetCore/issues/8044 -->
     <BuildHelixPayload>false</BuildHelixPayload>
+    <BaseOutputPath />
+    <OutputPath />
+
   </PropertyGroup>
 
   <ItemGroup>
diff --git a/src/Middleware/SpaServices/src/.gitignore b/src/Middleware/SpaServices/src/.gitignore
deleted file mode 100644
index c6958891dd23536cba8046679acf5b351e4fddb1..0000000000000000000000000000000000000000
--- a/src/Middleware/SpaServices/src/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-/bin/
-/node_modules/
diff --git a/src/Middleware/WebSockets/samples/TestServer/TestServer.csproj b/src/Middleware/WebSockets/samples/TestServer/WebSockets.TestServer.csproj
similarity index 100%
rename from src/Middleware/WebSockets/samples/TestServer/TestServer.csproj
rename to src/Middleware/WebSockets/samples/TestServer/WebSockets.TestServer.csproj
diff --git a/src/Mvc/Extensions.ApiDescription.Client/src/Microsoft.Extensions.ApiDescription.Client.csproj b/src/Mvc/Extensions.ApiDescription.Client/src/Microsoft.Extensions.ApiDescription.Client.csproj
index aa61b7ef3507995498b96f66bcd62a005dcbbfc8..2edaf7b68cfcaf8d7411e5ea7a33cecdd81919ff 100644
--- a/src/Mvc/Extensions.ApiDescription.Client/src/Microsoft.Extensions.ApiDescription.Client.csproj
+++ b/src/Mvc/Extensions.ApiDescription.Client/src/Microsoft.Extensions.ApiDescription.Client.csproj
@@ -33,6 +33,7 @@
       <NuspecProperties>
         id=$(PackageId);
         authors=$(Authors);
+        baseOutputPath=$(BaseOutputPath);
         configuration=$(Configuration);
         copyright=$(Copyright);
         description=$(PackageDescription);
diff --git a/src/Mvc/Extensions.ApiDescription.Client/src/Microsoft.Extensions.ApiDescription.Client.nuspec b/src/Mvc/Extensions.ApiDescription.Client/src/Microsoft.Extensions.ApiDescription.Client.nuspec
index 7521110b6f854fa2e67859fab61dc1daa33c5b84..f04380cfe4c5039ffdba44f4bc2f32a0316dd1de 100644
--- a/src/Mvc/Extensions.ApiDescription.Client/src/Microsoft.Extensions.ApiDescription.Client.nuspec
+++ b/src/Mvc/Extensions.ApiDescription.Client/src/Microsoft.Extensions.ApiDescription.Client.nuspec
@@ -19,7 +19,7 @@
   <files>
     <file src="build\*" target="build" />
     <file src="buildMultiTargeting\*" target="buildMultiTargeting" />
-    <file src="bin\$configuration$\net461\Microsoft.Extensions.ApiDescription.Tasks.*" target="tasks\net461" />
-    <file src="bin\$configuration$\netstandard2.0\Microsoft.Extensions.ApiDescription.Tasks.*" target="tasks\netstandard2.0" />
+    <file src="$baseOutputPath$\$configuration$\net461\Microsoft.Extensions.ApiDescription.Tasks.*" target="tasks\net461" />
+    <file src="$baseOutputPath$\$configuration$\netstandard2.0\Microsoft.Extensions.ApiDescription.Tasks.*" target="tasks\netstandard2.0" />
   </files>
 </package>
diff --git a/src/Mvc/Mvc.Analyzers/test/Mvc.Analyzers.Test.csproj b/src/Mvc/Mvc.Analyzers/test/Mvc.Analyzers.Test.csproj
index 7e76a2edd6da828b814b94ebbe1542569050eaca..df8a4a4cb0b5009f02d8fc2f4a354ec5395274bd 100644
--- a/src/Mvc/Mvc.Analyzers/test/Mvc.Analyzers.Test.csproj
+++ b/src/Mvc/Mvc.Analyzers/test/Mvc.Analyzers.Test.csproj
@@ -4,8 +4,13 @@
     <TargetFramework>netcoreapp3.0</TargetFramework>
     <PreserveCompilationContext>true</PreserveCompilationContext>
     <RootNamespace>Microsoft.AspNetCore.Mvc.Analyzers</RootNamespace>
-    <!-- https://github.com/aspnet/AspNetCore/issues/6549 -->	
+
+    <!-- Tests do not work on Helix or when bin/ directory is not in project directory due to undeclared dependency on test content. -->
+    <!-- https://github.com/aspnet/AspNetCore/issues/6549 -->
     <BuildHelixPayload>false</BuildHelixPayload>
+    <BaseOutputPath />
+    <OutputPath />
+
    </PropertyGroup>
 
   <ItemGroup>
diff --git a/src/Mvc/Mvc.Api.Analyzers/test/Mvc.Api.Analyzers.Test.csproj b/src/Mvc/Mvc.Api.Analyzers/test/Mvc.Api.Analyzers.Test.csproj
index b562b365e3a0ec7ff8b7df02c51a85804947513f..370646fc2b9358d6380d80a5b42e441607aadc71 100644
--- a/src/Mvc/Mvc.Api.Analyzers/test/Mvc.Api.Analyzers.Test.csproj
+++ b/src/Mvc/Mvc.Api.Analyzers/test/Mvc.Api.Analyzers.Test.csproj
@@ -3,8 +3,13 @@
   <PropertyGroup>
     <TargetFramework>netcoreapp3.0</TargetFramework>
     <RootNamespace>Microsoft.AspNetCore.Mvc.Api.Analyzers</RootNamespace>
-    <!-- https://github.com/aspnet/AspNetCore/issues/6549 -->	
+
+    <!-- Tests do not work on Helix or when bin/ directory is not in project directory due to undeclared dependency on test content. -->
+    <!-- https://github.com/aspnet/AspNetCore/issues/6549 -->
     <BuildHelixPayload>false</BuildHelixPayload>
+    <BaseOutputPath />
+    <OutputPath />
+
    </PropertyGroup>
 
   <ItemGroup>
diff --git a/src/Mvc/Mvc.sln b/src/Mvc/Mvc.sln
index 213803a110be8cd9fcb85ab43055af23566899ce..14972548a3426d4d7d6e2bd621764e438a988049 100644
--- a/src/Mvc/Mvc.sln
+++ b/src/Mvc/Mvc.sln
@@ -14,7 +14,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WebSites", "WebSites", "{16
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BasicWebSite", "test\WebSites\BasicWebSite\BasicWebSite.csproj", "{34DF1487-12C6-476C-BE0A-F31DF1939AE5}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RoutingWebSite", "test\WebSites\RoutingWebSite\RoutingWebSite.csproj", "{42CDBF4A-E238-4C0F-A416-44588363EB4C}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mvc.RoutingWebSite", "test\WebSites\RoutingWebSite\Mvc.RoutingWebSite.csproj", "{42CDBF4A-E238-4C0F-A416-44588363EB4C}"
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RazorWebSite", "test\WebSites\RazorWebSite\RazorWebSite.csproj", "{B07CAF59-11ED-40E3-A5DB-E1178F84FA78}"
 EndProject
diff --git a/src/Mvc/test/Mvc.FunctionalTests/Microsoft.AspNetCore.Mvc.FunctionalTests.csproj b/src/Mvc/test/Mvc.FunctionalTests/Microsoft.AspNetCore.Mvc.FunctionalTests.csproj
index 9abe308b518519ac0df4ddfc5939ec0ed2642dbb..2a8c7e0504c3681d2d50ea2d46b6f5a14c4c18e5 100644
--- a/src/Mvc/test/Mvc.FunctionalTests/Microsoft.AspNetCore.Mvc.FunctionalTests.csproj
+++ b/src/Mvc/test/Mvc.FunctionalTests/Microsoft.AspNetCore.Mvc.FunctionalTests.csproj
@@ -46,7 +46,7 @@
     <ProjectReference Include="..\WebSites\RazorBuildWebSite\RazorBuildWebSite.csproj" />
     <ProjectReference Include="..\WebSites\RazorPagesWebSite\RazorPagesWebSite.csproj" />
     <ProjectReference Include="..\WebSites\RazorWebSite\RazorWebSite.csproj" />
-    <ProjectReference Include="..\WebSites\RoutingWebSite\RoutingWebSite.csproj" />
+    <ProjectReference Include="..\WebSites\RoutingWebSite\Mvc.RoutingWebSite.csproj" />
     <ProjectReference Include="..\WebSites\SecurityWebSite\SecurityWebSite.csproj" />
     <ProjectReference Include="..\WebSites\SimpleWebSite\SimpleWebSite.csproj" />
     <ProjectReference Include="..\WebSites\TagHelpersWebSite\TagHelpersWebSite.csproj" />
diff --git a/src/Mvc/test/WebSites/RoutingWebSite/RoutingWebSite.csproj b/src/Mvc/test/WebSites/RoutingWebSite/Mvc.RoutingWebSite.csproj
similarity index 100%
rename from src/Mvc/test/WebSites/RoutingWebSite/RoutingWebSite.csproj
rename to src/Mvc/test/WebSites/RoutingWebSite/Mvc.RoutingWebSite.csproj
diff --git a/src/ProjectTemplates/test/ProjectTemplates.Tests.csproj b/src/ProjectTemplates/test/ProjectTemplates.Tests.csproj
index 20836588ac9b804e418a2afada80579007c0e77c..d1b1ffe43f0eac025ab7a9988e34067d366310d6 100644
--- a/src/ProjectTemplates/test/ProjectTemplates.Tests.csproj
+++ b/src/ProjectTemplates/test/ProjectTemplates.Tests.csproj
@@ -10,12 +10,16 @@
 
     <RunTemplateTests Condition="'$(RunTemplateTests)' == ''" >true</RunTemplateTests>
     <SkipTests Condition="'$(RunTemplateTests)' != 'true'">true</SkipTests>
+
+    <!-- Tests do not work on Helix or when bin/ directory is not in project directory due to undeclared dependency on test content. -->
     <!-- https://github.com/aspnet/AspNetCore/issues/6857 -->
     <BuildHelixPayload>false</BuildHelixPayload>
+    <BaseOutputPath />
+    <OutputPath />
 
     <!-- Properties that affect test runs -->
     <!-- TestTemplateCreationFolder is the folder where the templates will be created. Will point out to $(OutputDir)$(TestTemplateCreationFolder) -->
-    <TestTemplateCreationFolder>TestTemplates</TestTemplateCreationFolder>
+    <TestTemplateCreationFolder>TestTemplates\</TestTemplateCreationFolder>
     <TestPackageRestorePath>$([MSBuild]::EnsureTrailingSlash('$(RepoRoot)'))obj\template-restore\</TestPackageRestorePath>
     <TestTemplateTestsProps>TemplateTests.props</TestTemplateTestsProps>
   </PropertyGroup>
@@ -57,7 +61,7 @@
 
   <Target Name="PrepareForTest" BeforeTargets="CoreCompile" Condition="$(DesignTimeBuild) != true">
     <PropertyGroup>
-      <TestTemplateCreationFolder>$([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)$([MSBuild]::EnsureTrailingSlash('$(OutputPath)$(TestTemplateCreationFolder)'))'))</TestTemplateCreationFolder>
+      <TestTemplateCreationFolder>$([MSBuild]::NormalizePath('$(OutputPath)$(TestTemplateCreationFolder)'))</TestTemplateCreationFolder>
       <TestTemplateTestsProps>$(TestTemplateCreationFolder)$(TestTemplateTestsProps)</TestTemplateTestsProps>
       <CustomTemplateHivePath>$(TestTemplateCreationFolder)\Hives\$([System.Guid]::NewGuid())\.templateengine</CustomTemplateHivePath>
     </PropertyGroup>
diff --git a/src/Security/test/AuthSamples.FunctionalTests/AuthSamples.FunctionalTests.csproj b/src/Security/test/AuthSamples.FunctionalTests/AuthSamples.FunctionalTests.csproj
index 3b41432edcb0f93e0fcdb17225ff93cccb773ed3..20035ab6915798e75a9d439c0c93fde290cae912 100644
--- a/src/Security/test/AuthSamples.FunctionalTests/AuthSamples.FunctionalTests.csproj
+++ b/src/Security/test/AuthSamples.FunctionalTests/AuthSamples.FunctionalTests.csproj
@@ -29,13 +29,13 @@
 
   <Target Name="PublishAssets" AfterTargets="Publish">
     <ItemGroup>
-      <_PublishFiles Include="$(MSBuildThisFileDirectory)..\..\samples\ClaimsTransformation\bin\$(Configuration)\netcoreapp3.0\ClaimsTransformation.deps.json" />
-      <_PublishFiles Include="$(MSBuildThisFileDirectory)..\..\samples\Cookies\bin\$(Configuration)\netcoreapp3.0\Cookies.deps.json" />
-      <_PublishFiles Include="$(MSBuildThisFileDirectory)..\..\samples\CustomPolicyProvider\bin\$(Configuration)\netcoreapp3.0\CustomPolicyProvider.deps.json" />
-      <_PublishFiles Include="$(MSBuildThisFileDirectory)..\..\samples\DynamicSchemes\bin\$(Configuration)\netcoreapp3.0\DynamicSchemes.deps.json" />
-      <_PublishFiles Include="$(MSBuildThisFileDirectory)..\..\samples\Identity.ExternalClaims\bin\$(Configuration)\netcoreapp3.0\Identity.ExternalClaims.deps.json" />
-      <_PublishFiles Include="$(MSBuildThisFileDirectory)..\..\samples\PathSchemeSelection\bin\$(Configuration)\netcoreapp3.0\PathSchemeSelection.deps.json" />
-      <_PublishFiles Include="$(MSBuildThisFileDirectory)..\..\samples\StaticFilesAuth\bin\$(Configuration)\netcoreapp3.0\StaticFilesAuth.deps.json" />
+      <_PublishFiles Include="$(ArtifactsBinDir)ClaimsTransformation\$(Configuration)\netcoreapp3.0\ClaimsTransformation.deps.json" />
+      <_PublishFiles Include="$(ArtifactsBinDir)Cookies\$(Configuration)\netcoreapp3.0\Cookies.deps.json" />
+      <_PublishFiles Include="$(ArtifactsBinDir)CustomPolicyProvider\$(Configuration)\netcoreapp3.0\CustomPolicyProvider.deps.json" />
+      <_PublishFiles Include="$(ArtifactsBinDir)DynamicSchemes\$(Configuration)\netcoreapp3.0\DynamicSchemes.deps.json" />
+      <_PublishFiles Include="$(ArtifactsBinDir)Identity.ExternalClaims\$(Configuration)\netcoreapp3.0\Identity.ExternalClaims.deps.json" />
+      <_PublishFiles Include="$(ArtifactsBinDir)PathSchemeSelection\$(Configuration)\netcoreapp3.0\PathSchemeSelection.deps.json" />
+      <_PublishFiles Include="$(ArtifactsBinDir)StaticFilesAuth\$(Configuration)\netcoreapp3.0\StaticFilesAuth.deps.json" />
       <_claimsWwwrootFiles Include="$(MSBuildThisFileDirectory)..\..\samples\ClaimsTransformation\wwwroot\**\*.*" />
       <_cookiesWwwrootFiles Include="$(MSBuildThisFileDirectory)..\..\samples\Cookies\wwwroot\**\*.*" />
       <_customProviderFiles Include="$(MSBuildThisFileDirectory)..\..\samples\CustomPolicyProvider\**\*.*" />
@@ -44,9 +44,6 @@
       <_pathWwwrootFiles Include="$(MSBuildThisFileDirectory)..\..\samples\PathSchemeSelection\wwwroot\**\*.*" />
       <_staticFiles Include="$(MSBuildThisFileDirectory)..\..\samples\StaticFilesAuth\**\*.*" />
     </ItemGroup>
-    <Copy
-      SourceFiles="@(_PublishFiles)"
-      DestinationFolder="$(PublishDir)" />
     <Copy
       SourceFiles="@(_PublishFiles)"
       DestinationFolder="$(PublishDir)" />
diff --git a/src/Servers/IIS/.gitignore b/src/Servers/IIS/.gitignore
index 694e8789e79e613d8dc5504d55805f07faa96783..1336f289f7594a884db30ac41d827a0bf1b599d2 100644
--- a/src/Servers/IIS/.gitignore
+++ b/src/Servers/IIS/.gitignore
@@ -1,61 +1,3 @@
-[Oo]bj/
-[Bb]in/
-TestResults/
-.nuget/
-*.sln.ide/
-_ReSharper.*/
-packages/
-artifacts/
-PublishProfiles/
-BenchmarkDotNet.Artifacts/
-*.user
-*.suo
-*.cache
-*.docstates
-_ReSharper.*
-nuget.exe
-project.lock.json
-*net45.csproj
-*net451.csproj
-*k10.csproj
-*.psess
-*.vsp
-*.pidb
-*.userprefs
-*DS_Store
-*.ncrunchsolution
-*.*sdf
-*.ipch
-.vscode/
-*.nuget.props
-*.nuget.targets
-*.bin
-*.vs/
-.testPublish/
-*.obj
-*.tlog
-*.CppClean.log
-*msbuild.log
-gtest.log
-Debug/
-x64/Debug/
-Release/
-x64/Release/
-x64/
-*vcxproj.filters
-*.aps
-*.pdb
-*.lib
-*.idb
-*.res
-*.pch
 aspnetcoremodule.h
 aspnetcore_msg.h
 aspnetcore_msg.rc
-version.h
-test/*/Debug
-test/*/Release
-.build
-*.VC.*db
-global.json
-msbuild.binlog
\ No newline at end of file
diff --git a/src/Servers/IIS/AspNetCoreModuleV2/AspNetCore/AspNetCore.vcxproj b/src/Servers/IIS/AspNetCoreModuleV2/AspNetCore/AspNetCore.vcxproj
index d90ff5f7bf7e3adf8a6bfa9f91fa9ef1d1b63045..d53a438f036df73ced441ea04ae153238c79b09e 100644
--- a/src/Servers/IIS/AspNetCoreModuleV2/AspNetCore/AspNetCore.vcxproj
+++ b/src/Servers/IIS/AspNetCoreModuleV2/AspNetCore/AspNetCore.vcxproj
@@ -26,6 +26,7 @@
     <TargetName>aspnetcorev2</TargetName>
     <LinkIncremental>false</LinkIncremental>
     <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
+    <OutDirName>AspNetCoreModuleShim</OutDirName>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Label="Configuration">
@@ -74,9 +75,6 @@
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <OutDir>$(MSBuildProjectDirectory)\bin\$(Configuration)\$(Platform)\</OutDir>
-  </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
       <WarningLevel>Level4</WarningLevel>
@@ -316,4 +314,4 @@
     </ItemGroup>
     <WriteLinesToFile File="$(InstallersOutputPath)aspnetcoremodule.version" Lines="@(VersionFileContents)" OverWrite="true" WriteOnlyWhenDifferent="True" />
   </Target>
-</Project>
\ No newline at end of file
+</Project>
diff --git a/src/Servers/IIS/AspNetCoreModuleV2/CommonLib/CommonLib.vcxproj b/src/Servers/IIS/AspNetCoreModuleV2/CommonLib/CommonLib.vcxproj
index 9fd8d246712dc24403e6d32644bae5f17ef84c67..fc02995961af19ed1360f74e9c3b63b91993e9c9 100644
--- a/src/Servers/IIS/AspNetCoreModuleV2/CommonLib/CommonLib.vcxproj
+++ b/src/Servers/IIS/AspNetCoreModuleV2/CommonLib/CommonLib.vcxproj
@@ -75,20 +75,15 @@
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <LinkIncremental>true</LinkIncremental>
-    <OutDir>$(MSBuildProjectDirectory)\bin\$(Configuration)\$(Platform)\</OutDir>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
     <LinkIncremental>true</LinkIncremental>
-    <OutDir>$(MSBuildProjectDirectory)\bin\$(Configuration)\$(Platform)\</OutDir>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <LinkIncremental>false</LinkIncremental>
-    <OutDir>$(MSBuildProjectDirectory)\bin\$(Configuration)\$(Platform)\</OutDir>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
     <LinkIncremental>false</LinkIncremental>
-    <IncludePath>C:\AspNetCoreModule\src\IISLib;$(IncludePath)</IncludePath>
-    <OutDir>$(MSBuildProjectDirectory)\bin\$(Configuration)\$(Platform)\</OutDir>
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
@@ -282,4 +277,4 @@
   <Import Project="..\..\build\native.targets" />
   <ImportGroup Label="ExtensionTargets">
   </ImportGroup>
-</Project>
\ No newline at end of file
+</Project>
diff --git a/src/Servers/IIS/AspNetCoreModuleV2/CommonLibTests/CommonLibTests.vcxproj b/src/Servers/IIS/AspNetCoreModuleV2/CommonLibTests/CommonLibTests.vcxproj
index 3c76ed6b0597ceb0e463070889c866502661ca13..46dd0a68c42c3f6df2952d3667051b0150c371df 100644
--- a/src/Servers/IIS/AspNetCoreModuleV2/CommonLibTests/CommonLibTests.vcxproj
+++ b/src/Servers/IIS/AspNetCoreModuleV2/CommonLibTests/CommonLibTests.vcxproj
@@ -34,18 +34,6 @@
   <ImportGroup Label="Shared" />
   <ImportGroup Label="PropertySheets" />
   <PropertyGroup Label="UserMacros" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <OutDir>$(MSBuildProjectDirectory)\bin\$(Configuration)\$(Platform)\</OutDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <OutDir>$(MSBuildProjectDirectory)\bin\$(Configuration)\$(Platform)\</OutDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <OutDir>$(MSBuildProjectDirectory)\bin\$(Configuration)\$(Platform)\</OutDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <OutDir>$(MSBuildProjectDirectory)\bin\$(Configuration)\$(Platform)\</OutDir>
-  </PropertyGroup>
   <ItemGroup>
     <ClInclude Include="Helpers.h" />
     <ClInclude Include="fakeclasses.h" />
@@ -102,7 +90,7 @@
     <Link>
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <SubSystem>Console</SubSystem>
-      <AdditionalLibraryDirectories>..\InProcessRequestHandler\Win32\$(Configuration)\;</AdditionalLibraryDirectories>
+      <AdditionalLibraryDirectories>$(ArtifactsObjDir)InProcessRequestHandler\Win32\$(Configuration)\;</AdditionalLibraryDirectories>
       <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;inprocessapplication.obj;inprocesshandler.obj;ahadmin.lib;Rpcrt4.lib;inprocessapplicationbase.obj;stdafx.obj;version.lib;inprocessoptions.obj;%(AdditionalDependencies)</AdditionalDependencies>
       <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
     </Link>
@@ -129,7 +117,7 @@
     <Link>
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <SubSystem>Console</SubSystem>
-      <AdditionalLibraryDirectories>..\InProcessRequestHandler\x64\$(Configuration)\;</AdditionalLibraryDirectories>
+      <AdditionalLibraryDirectories>$(ArtifactsObjDir)InProcessRequestHandler\x64\$(Configuration)\;</AdditionalLibraryDirectories>
       <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;inprocessapplication.obj;inprocesshandler.obj;ahadmin.lib;Rpcrt4.lib;inprocessapplicationbase.obj;stdafx.obj;version.lib;inprocessoptions.obj;%(AdditionalDependencies)</AdditionalDependencies>
       <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
     </Link>
@@ -158,7 +146,7 @@
       <AdditionalOptions>/NODEFAULTLIB:libucrt.lib /DEFAULTLIB:ucrt.lib %(AdditionalOptions)</AdditionalOptions>
       <OptimizeReferences>true</OptimizeReferences>
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <AdditionalLibraryDirectories>..\InProcessRequestHandler\Win32\$(Configuration)\;</AdditionalLibraryDirectories>
+      <AdditionalLibraryDirectories>$(ArtifactsObjDir)InProcessRequestHandler\Win32\$(Configuration)\;</AdditionalLibraryDirectories>
       <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;inprocessapplication.obj;inprocesshandler.obj;ahadmin.lib;Rpcrt4.lib;inprocessapplicationbase.obj;stdafx.obj;version.lib;inprocessoptions.obj;%(AdditionalDependencies)</AdditionalDependencies>
       <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
     </Link>
@@ -187,7 +175,7 @@
       <AdditionalOptions>/NODEFAULTLIB:libucrt.lib /DEFAULTLIB:ucrt.lib %(AdditionalOptions)</AdditionalOptions>
       <OptimizeReferences>true</OptimizeReferences>
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <AdditionalLibraryDirectories>..\InProcessRequestHandler\x64\$(Configuration)\;</AdditionalLibraryDirectories>
+      <AdditionalLibraryDirectories>$(ArtifactsObjDir)InProcessRequestHandler\x64\$(Configuration)\;</AdditionalLibraryDirectories>
       <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;inprocessapplication.obj;inprocesshandler.obj;ahadmin.lib;Rpcrt4.lib;inprocessapplicationbase.obj;stdafx.obj;version.lib;inprocessoptions.obj;%(AdditionalDependencies)</AdditionalDependencies>
       <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
     </Link>
@@ -199,4 +187,4 @@
   <PropertyGroup>
     <IsTestProject>true</IsTestProject>
   </PropertyGroup>
-</Project>
\ No newline at end of file
+</Project>
diff --git a/src/Servers/IIS/AspNetCoreModuleV2/IISLib/IISLib.vcxproj b/src/Servers/IIS/AspNetCoreModuleV2/IISLib/IISLib.vcxproj
index 2afc56dacbc0c7ad3d1c6a5e32aa3b97295cdd55..75ed7c365077407816b085431530a4726bebf7e0 100644
--- a/src/Servers/IIS/AspNetCoreModuleV2/IISLib/IISLib.vcxproj
+++ b/src/Servers/IIS/AspNetCoreModuleV2/IISLib/IISLib.vcxproj
@@ -71,18 +71,6 @@
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <OutDir>$(MSBuildProjectDirectory)\bin\$(Configuration)\$(Platform)\</OutDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <OutDir>$(MSBuildProjectDirectory)\bin\$(Configuration)\$(Platform)\</OutDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <OutDir>$(MSBuildProjectDirectory)\bin\$(Configuration)\$(Platform)\</OutDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <OutDir>$(MSBuildProjectDirectory)\bin\$(Configuration)\$(Platform)\</OutDir>
-  </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
       <PrecompiledHeader>
@@ -206,4 +194,4 @@
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
   <ImportGroup Label="ExtensionTargets">
   </ImportGroup>
-</Project>
\ No newline at end of file
+</Project>
diff --git a/src/Servers/IIS/AspNetCoreModuleV2/RequestHandlerLib/RequestHandlerLib.vcxproj b/src/Servers/IIS/AspNetCoreModuleV2/RequestHandlerLib/RequestHandlerLib.vcxproj
index 56088b84ad8de51e90825cd95a05b3512afebfd2..e18327851c748c47d8bc559c3e7af6502ebf74a6 100644
--- a/src/Servers/IIS/AspNetCoreModuleV2/RequestHandlerLib/RequestHandlerLib.vcxproj
+++ b/src/Servers/IIS/AspNetCoreModuleV2/RequestHandlerLib/RequestHandlerLib.vcxproj
@@ -75,20 +75,15 @@
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <LinkIncremental>true</LinkIncremental>
-    <OutDir>$(MSBuildProjectDirectory)\bin\$(Configuration)\$(Platform)\</OutDir>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
     <LinkIncremental>true</LinkIncremental>
-    <OutDir>$(MSBuildProjectDirectory)\bin\$(Configuration)\$(Platform)\</OutDir>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <LinkIncremental>false</LinkIncremental>
-    <OutDir>$(MSBuildProjectDirectory)\bin\$(Configuration)\$(Platform)\</OutDir>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
     <LinkIncremental>false</LinkIncremental>
-    <IncludePath>C:\AspNetCoreModule\src\IISLib;$(IncludePath)</IncludePath>
-    <OutDir>$(MSBuildProjectDirectory)\bin\$(Configuration)\$(Platform)\</OutDir>
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
@@ -224,4 +219,4 @@
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
   <ImportGroup Label="ExtensionTargets">
   </ImportGroup>
-</Project>
\ No newline at end of file
+</Project>
diff --git a/src/Servers/IIS/AspNetCoreModuleV2/gtest/gtest.vcxproj b/src/Servers/IIS/AspNetCoreModuleV2/gtest/gtest.vcxproj
index 20bc6451a14051c5311f692a53f723effa48c522..95237b7ec2f37a3cc7d489a9a0d4e4483ca605da 100644
--- a/src/Servers/IIS/AspNetCoreModuleV2/gtest/gtest.vcxproj
+++ b/src/Servers/IIS/AspNetCoreModuleV2/gtest/gtest.vcxproj
@@ -84,25 +84,21 @@
     <LinkIncremental>true</LinkIncremental>
     <IncludePath>$(VC_IncludePath);$(WindowsSDK_IncludePath);</IncludePath>
     <SourcePath>$(VC_SourcePath);</SourcePath>
-    <OutDir>$(MSBuildProjectDirectory)\bin\$(Configuration)\$(Platform)\</OutDir>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
     <LinkIncremental>true</LinkIncremental>
     <IncludePath>$(VC_IncludePath);$(WindowsSDK_IncludePath);</IncludePath>
     <SourcePath>$(VC_SourcePath);</SourcePath>
-    <OutDir>$(MSBuildProjectDirectory)\bin\$(Configuration)\$(Platform)\</OutDir>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <LinkIncremental>false</LinkIncremental>
     <IncludePath>$(VC_IncludePath);$(WindowsSDK_IncludePath);</IncludePath>
     <SourcePath>$(VC_SourcePath);</SourcePath>
-    <OutDir>$(MSBuildProjectDirectory)\bin\$(Configuration)\$(Platform)\</OutDir>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
     <LinkIncremental>false</LinkIncremental>
     <IncludePath>$(VC_IncludePath);$(WindowsSDK_IncludePath);</IncludePath>
     <SourcePath>$(VC_SourcePath);</SourcePath>
-    <OutDir>$(MSBuildProjectDirectory)\bin\$(Configuration)\$(Platform)\</OutDir>
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
@@ -183,4 +179,4 @@
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
   <ImportGroup Label="ExtensionTargets">
   </ImportGroup>
-</Project>
\ No newline at end of file
+</Project>
diff --git a/src/Servers/IIS/IIS/benchmarks/IIS.Performance/IIS.Performance.csproj b/src/Servers/IIS/IIS/benchmarks/IIS.Performance/IIS.Performance.csproj
index de01039750daebb57fd7236bccb5ea31b08591ec..bf679ddbd212bffdeeda086bdc82c45aac81e359 100644
--- a/src/Servers/IIS/IIS/benchmarks/IIS.Performance/IIS.Performance.csproj
+++ b/src/Servers/IIS/IIS/benchmarks/IIS.Performance/IIS.Performance.csproj
@@ -16,10 +16,10 @@
   </ItemGroup>
 
   <ItemGroup Condition="'$(BuildIisNativeProjects)' == 'true'">
-    <None Include="$(MSBuildThisFileDirectory)..\..\..\AspNetCoreModuleV2\InProcessRequestHandler\bin\$(Configuration)\x64\aspnetcorev2_inprocess.dll" CopyToOutputDirectory="PreserveNewest" Visible="true" Link="%(FileName)%(Extension)" />
-    <None Include="$(MSBuildThisFileDirectory)..\..\..\AspNetCoreModuleV2\InProcessRequestHandler\bin\$(Configuration)\x64\aspnetcorev2_inprocess.pdb" CopyToOutputDirectory="PreserveNewest" Visible="true" Link="%(FileName)%(Extension)" />
-    <None Include="$(MSBuildThisFileDirectory)..\..\..\AspNetCoreModuleV2\AspNetCore\bin\$(Configuration)\x64\aspnetcorev2.dll" CopyToOutputDirectory="PreserveNewest" Visible="true" Link="%(FileName)%(Extension)" />
-    <None Include="$(MSBuildThisFileDirectory)..\..\..\AspNetCoreModuleV2\AspNetCore\bin\$(Configuration)\x64\aspnetcorev2.pdb" CopyToOutputDirectory="PreserveNewest" Visible="true" Link="%(FileName)%(Extension)" />
+    <None Include="$(ArtifactsBinDir)InProcessRequestHandler\x64\$(Configuration)\aspnetcorev2_inprocess.dll" CopyToOutputDirectory="PreserveNewest" Visible="true" Link="%(FileName)%(Extension)" />
+    <None Include="$(ArtifactsBinDir)InProcessRequestHandler\x64\$(Configuration)\aspnetcorev2_inprocess.pdb" CopyToOutputDirectory="PreserveNewest" Visible="true" Link="%(FileName)%(Extension)" />
+    <None Include="$(ArtifactsBinDir)AspNetCoreModuleShim\x64\$(Configuration)\aspnetcorev2.dll" CopyToOutputDirectory="PreserveNewest" Visible="true" Link="%(FileName)%(Extension)" />
+    <None Include="$(ArtifactsBinDir)AspNetCoreModuleShim\x64\$(Configuration)\aspnetcorev2.pdb" CopyToOutputDirectory="PreserveNewest" Visible="true" Link="%(FileName)%(Extension)" />
   </ItemGroup>
 
   <ItemGroup>
diff --git a/src/Servers/IIS/IIS/test/Directory.Build.props b/src/Servers/IIS/IIS/test/Directory.Build.props
index b4e83ba737a8a67cd572d05cab36e6c7f4cb99ea..6f6f92116853ed941b9aee74c7b26d530e984f5b 100644
--- a/src/Servers/IIS/IIS/test/Directory.Build.props
+++ b/src/Servers/IIS/IIS/test/Directory.Build.props
@@ -2,6 +2,10 @@
   <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory)..\, Directory.Build.props))\Directory.Build.props" />
 
   <PropertyGroup>
+    <!-- Tests do not work on Helix or when bin/ directory is not in project directory due to undeclared dependency on test content. -->
+    <BaseOutputPath />
+    <OutputPath />
+
     <!-- IIS tests are Windows-only -->
     <IsWindowsOnlyTest>true</IsWindowsOnlyTest>
   </PropertyGroup>
diff --git a/src/Servers/IIS/IIS/test/IIS.ForwardsCompatibility.FunctionalTests/IIS.ForwardsCompatibility.FunctionalTests.csproj b/src/Servers/IIS/IIS/test/IIS.ForwardsCompatibility.FunctionalTests/IIS.ForwardsCompatibility.FunctionalTests.csproj
index 483c48b8fe9867ab9f8a80947c303574615400bb..edd20b3aa9fb7fd298634edb9588879d72a1b99a 100644
--- a/src/Servers/IIS/IIS/test/IIS.ForwardsCompatibility.FunctionalTests/IIS.ForwardsCompatibility.FunctionalTests.csproj
+++ b/src/Servers/IIS/IIS/test/IIS.ForwardsCompatibility.FunctionalTests/IIS.ForwardsCompatibility.FunctionalTests.csproj
@@ -13,7 +13,7 @@
     <ProjectReference Include="..\Common.Tests\Common.Tests.csproj" />
     <ProjectReference Include="$(RepoRoot)src\Hosting\Server.IntegrationTesting\src\Microsoft.AspNetCore.Server.IntegrationTesting.csproj" />
 
-    <ProjectReference Include="..\testassets\InProcessForwardsCompatWebSite\InProcessWebSite.csproj">
+    <ProjectReference Include="..\testassets\InProcessForwardsCompatWebSite\InProcessForwardsCompatWebSite.csproj">
       <ReferenceOutputAssembly>False</ReferenceOutputAssembly>
     </ProjectReference>
     <ProjectReference Include="..\testassets\OutOfProcessWebSite\OutOfProcessWebSite.csproj">
diff --git a/src/Servers/IIS/IIS/test/testassets/InProcessForwardsCompatWebSite/InProcessWebSite.csproj b/src/Servers/IIS/IIS/test/testassets/InProcessForwardsCompatWebSite/InProcessForwardsCompatWebSite.csproj
similarity index 97%
rename from src/Servers/IIS/IIS/test/testassets/InProcessForwardsCompatWebSite/InProcessWebSite.csproj
rename to src/Servers/IIS/IIS/test/testassets/InProcessForwardsCompatWebSite/InProcessForwardsCompatWebSite.csproj
index 3deabbaa7eb6fe870c6405d3cb41711f74ddf8c4..2ac833a487729898a96eb9682cb0092aab3183e1 100644
--- a/src/Servers/IIS/IIS/test/testassets/InProcessForwardsCompatWebSite/InProcessWebSite.csproj
+++ b/src/Servers/IIS/IIS/test/testassets/InProcessForwardsCompatWebSite/InProcessForwardsCompatWebSite.csproj
@@ -4,6 +4,7 @@
 
   <PropertyGroup>
     <TargetFramework>netcoreapp3.0</TargetFramework>
+    <AssemblyName>InProcessWebSite</AssemblyName>
     <TestAssetOutputName>InProcessForwardsCompatWebSite</TestAssetOutputName>
     <DefineConstants>FORWARDCOMPAT</DefineConstants>
   </PropertyGroup>
diff --git a/src/Servers/IIS/IISIntegration.sln b/src/Servers/IIS/IISIntegration.sln
index 3c2bbdac1d981709eecdfe183173c714b7d68bd6..b108c8842035a0ad19937e9b1c9fe9154f6e5b0c 100644
--- a/src/Servers/IIS/IISIntegration.sln
+++ b/src/Servers/IIS/IISIntegration.sln
@@ -3,14 +3,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00
 # Visual Studio Version 16
 VisualStudioVersion = 16.0.0.0
 MinimumVisualStudioVersion = 16.0.0.0
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{0EF45656-B25D-40D8-959C-726EAF185E60}"
-	ProjectSection(SolutionItems) = preProject
-		.editorconfig = .editorconfig
-		Directory.Build.props = Directory.Build.props
-		Directory.Build.targets = Directory.Build.targets
-		NuGet.Config = NuGet.Config
-	EndProjectSection
-EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.IISIntegration", "IISIntegration\src\Microsoft.AspNetCore.Server.IISIntegration.csproj", "{8B3446E8-E6A8-4591-AA63-A95837C6E97C}"
 	ProjectSection(ProjectDependencies) = postProject
 		{46A8612B-418B-4D70-B3A7-A21DD0627473} = {46A8612B-418B-4D70-B3A7-A21DD0627473}
@@ -23,11 +15,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{7E80C58E
 		build\assets.props = build\assets.props
 		build\Build.Settings = build\Build.Settings
 		build\Config.Definitions.Props = build\Config.Definitions.Props
-		build\Key.snk = build\Key.snk
 		build\launchSettings.json = build\launchSettings.json
 		build\native.targets = build\native.targets
-		build\repo.props = build\repo.props
-		build\repo.targets = build\repo.targets
 		build\testsite.props = build\testsite.props
 	EndProjectSection
 EndProject
diff --git a/src/Servers/IIS/build/Build.Settings b/src/Servers/IIS/build/Build.Settings
index 0097cb4352bb30826db2fb0d9ca37f83f12a70d2..6d722c02e61f6487519c30b5aa3b08c00d990435 100644
--- a/src/Servers/IIS/build/Build.Settings
+++ b/src/Servers/IIS/build/Build.Settings
@@ -5,8 +5,6 @@
      <Configuration Condition="'$(Configuration)'==''">Debug</Configuration>
      <Platform Condition="'$(Platform)' == ''">Win32</Platform>
      <PlatformToolset>v142</PlatformToolset>
-     <OutputPath Condition="'$(OutputPath)' == ''">$(MSBuildProjectDirectory)\bin\$(Configuration)\$(Platform)\</OutputPath>
-     <OutDir>$(OutputPath)</OutDir>
      <AspNetCoreModuleTargetName>aspnetcore</AspNetCoreModuleTargetName>
    </PropertyGroup>
 
diff --git a/src/Servers/IIS/build/assets.props b/src/Servers/IIS/build/assets.props
index e6c366f29515aa61be09f0353e8fc36a6f078709..f6a7360235ad089e27ed74ea1f95bf86bac6b891 100644
--- a/src/Servers/IIS/build/assets.props
+++ b/src/Servers/IIS/build/assets.props
@@ -9,200 +9,215 @@
     </PropertyGroup>
     <ItemGroup>
        <Components
-          VCPlatform="x64" 
           Platform="x64" 
-          ProjectName="AspNetCore.vcxproj" 
+          VCPlatform="x64" 
+          BaseOutputPath="AspNetCoreModuleV2" 
           NativeAsset="aspnetcorev2" 
+          ProjectName="AspNetCore.vcxproj" 
           PropetyName="AspNetCoreModuleV2Shim" 
-          BaseOutputPath="AspNetCoreModuleV2" 
+          OutDirName="AspNetCoreModuleShim" 
           ProjectDirectory="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\AspNetCore" 
-          DllLocation="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\AspNetCore\bin\$(Configuration)\x64\aspnetcorev2.dll" 
           Include="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\AspNetCore\AspNetCore.vcxproj" 
-          PdbLocation="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\AspNetCore\bin\$(Configuration)\x64\aspnetcorev2.pdb"
+          DllLocation="$(ArtifactsBinDir)AspNetCoreModuleShim\x64\$(Configuration)\aspnetcorev2.dll" 
+          PdbLocation="$(ArtifactsBinDir)AspNetCoreModuleShim\x64\$(Configuration)\aspnetcorev2.pdb"
         />
         <Components
-          VCPlatform="Win32" 
           Platform="x86" 
-          ProjectName="AspNetCore.vcxproj" 
+          VCPlatform="Win32" 
+          BaseOutputPath="AspNetCoreModuleV2" 
           NativeAsset="aspnetcorev2" 
+          ProjectName="AspNetCore.vcxproj" 
           PropetyName="AspNetCoreModuleV2Shim" 
-          BaseOutputPath="AspNetCoreModuleV2" 
+          OutDirName="AspNetCoreModuleShim" 
           ProjectDirectory="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\AspNetCore" 
-          DllLocation="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\AspNetCore\bin\$(Configuration)\Win32\aspnetcorev2.dll" 
           Include="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\AspNetCore\AspNetCore.vcxproj" 
-          PdbLocation="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\AspNetCore\bin\$(Configuration)\Win32\aspnetcorev2.pdb"
+          DllLocation="$(ArtifactsBinDir)AspNetCoreModuleShim\Win32\$(Configuration)\aspnetcorev2.dll" 
+          PdbLocation="$(ArtifactsBinDir)AspNetCoreModuleShim\Win32\$(Configuration)\aspnetcorev2.pdb"
         />
         <Components
-          VCPlatform="x64" 
           Platform="x64" 
-          ProjectName="InProcessRequestHandler.vcxproj" 
+          VCPlatform="x64" 
+          BaseOutputPath="AspNetCoreModuleV2" 
           NativeAsset="aspnetcorev2_inprocess" 
+          ProjectName="InProcessRequestHandler.vcxproj" 
           PropetyName="AspNetCoreModuleV2InProcessHandler" 
-          BaseOutputPath="AspNetCoreModuleV2" 
+          OutDirName="InProcessRequestHandler" 
           ProjectDirectory="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\InProcessRequestHandler" 
-          DllLocation="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\InProcessRequestHandler\bin\$(Configuration)\x64\aspnetcorev2_inprocess.dll" 
           Include="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\InProcessRequestHandler\InProcessRequestHandler.vcxproj" 
-          PdbLocation="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\InProcessRequestHandler\bin\$(Configuration)\x64\aspnetcorev2_inprocess.pdb"
+          DllLocation="$(ArtifactsBinDir)InProcessRequestHandler\x64\$(Configuration)\aspnetcorev2_inprocess.dll" 
+          PdbLocation="$(ArtifactsBinDir)InProcessRequestHandler\x64\$(Configuration)\aspnetcorev2_inprocess.pdb"
         />
         <Components
-          VCPlatform="Win32" 
           Platform="x86" 
-          ProjectName="InProcessRequestHandler.vcxproj" 
+          VCPlatform="Win32" 
+          BaseOutputPath="AspNetCoreModuleV2" 
           NativeAsset="aspnetcorev2_inprocess" 
+          ProjectName="InProcessRequestHandler.vcxproj" 
           PropetyName="AspNetCoreModuleV2InProcessHandler" 
-          BaseOutputPath="AspNetCoreModuleV2" 
+          OutDirName="InProcessRequestHandler" 
           ProjectDirectory="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\InProcessRequestHandler" 
-          DllLocation="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\InProcessRequestHandler\bin\$(Configuration)\Win32\aspnetcorev2_inprocess.dll" 
           Include="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\InProcessRequestHandler\InProcessRequestHandler.vcxproj" 
-          PdbLocation="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\InProcessRequestHandler\bin\$(Configuration)\Win32\aspnetcorev2_inprocess.pdb"
+          DllLocation="$(ArtifactsBinDir)InProcessRequestHandler\Win32\$(Configuration)\aspnetcorev2_inprocess.dll" 
+          PdbLocation="$(ArtifactsBinDir)InProcessRequestHandler\Win32\$(Configuration)\aspnetcorev2_inprocess.pdb"
         />
         <Components
-          VCPlatform="x64" 
           Platform="x64" 
-          ProjectDirectory="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\OutOfProcessRequestHandler" 
+          VCPlatform="x64" 
+          BaseOutputPath="AspNetCoreModuleV2" 
+          NativeAsset="aspnetcorev2_outofprocess" 
           ProjectName="OutOfProcessRequestHandler.vcxproj" 
           PropetyName="AspNetCoreModuleV2OutOfProcessHandler" 
-          NativeAsset="aspnetcorev2_outofprocess" 
-          BaseOutputPath="AspNetCoreModuleV2" 
+          OutDirName="OutOfProcessRequestHandler" 
           PackageSubPath="$(AspNetCoreModuleOutOfProcessVersion)\" 
-          DllLocation="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\OutOfProcessRequestHandler\bin\$(Configuration)\x64\aspnetcorev2_outofprocess.dll" 
+          ProjectDirectory="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\OutOfProcessRequestHandler" 
           Include="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\OutOfProcessRequestHandler\OutOfProcessRequestHandler.vcxproj" 
-          PdbLocation="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\OutOfProcessRequestHandler\bin\$(Configuration)\x64\aspnetcorev2_outofprocess.pdb"
+          DllLocation="$(ArtifactsBinDir)OutOfProcessRequestHandler\x64\$(Configuration)\aspnetcorev2_outofprocess.dll" 
+          PdbLocation="$(ArtifactsBinDir)OutOfProcessRequestHandler\x64\$(Configuration)\aspnetcorev2_outofprocess.pdb"
         />
         <Components
-          VCPlatform="Win32" 
           Platform="x86" 
-          ProjectDirectory="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\OutOfProcessRequestHandler" 
+          VCPlatform="Win32" 
+          BaseOutputPath="AspNetCoreModuleV2" 
+          NativeAsset="aspnetcorev2_outofprocess" 
           ProjectName="OutOfProcessRequestHandler.vcxproj" 
           PropetyName="AspNetCoreModuleV2OutOfProcessHandler" 
-          NativeAsset="aspnetcorev2_outofprocess" 
-          BaseOutputPath="AspNetCoreModuleV2" 
+          OutDirName="OutOfProcessRequestHandler" 
           PackageSubPath="$(AspNetCoreModuleOutOfProcessVersion)\" 
-          DllLocation="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\OutOfProcessRequestHandler\bin\$(Configuration)\Win32\aspnetcorev2_outofprocess.dll" 
+          ProjectDirectory="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\OutOfProcessRequestHandler" 
           Include="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\OutOfProcessRequestHandler\OutOfProcessRequestHandler.vcxproj" 
-          PdbLocation="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\OutOfProcessRequestHandler\bin\$(Configuration)\Win32\aspnetcorev2_outofprocess.pdb"
+          DllLocation="$(ArtifactsBinDir)OutOfProcessRequestHandler\Win32\$(Configuration)\aspnetcorev2_outofprocess.dll" 
+          PdbLocation="$(ArtifactsBinDir)OutOfProcessRequestHandler\Win32\$(Configuration)\aspnetcorev2_outofprocess.pdb"
         />
 
        <ShimComponents
-          VCPlatform="x64" 
           Platform="x64" 
-          ProjectName="AspNetCore.vcxproj" 
+          VCPlatform="x64" 
+          BaseOutputPath="AspNetCoreModuleV2" 
           NativeAsset="aspnetcorev2" 
+          ProjectName="AspNetCore.vcxproj" 
           PropetyName="AspNetCoreModuleV2Shim" 
-          BaseOutputPath="AspNetCoreModuleV2" 
+          OutDirName="AspNetCoreModuleShim" 
           ProjectDirectory="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\AspNetCore" 
-          DllLocation="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\AspNetCore\bin\$(Configuration)\x64\aspnetcorev2.dll" 
           Include="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\AspNetCore\AspNetCore.vcxproj" 
-          PdbLocation="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\AspNetCore\bin\$(Configuration)\x64\aspnetcorev2.pdb"
+          DllLocation="$(ArtifactsBinDir)AspNetCoreModuleShim\x64\$(Configuration)\aspnetcorev2.dll" 
+          PdbLocation="$(ArtifactsBinDir)AspNetCoreModuleShim\x64\$(Configuration)\aspnetcorev2.pdb"
         />
         <ShimComponents
-          VCPlatform="Win32" 
           Platform="x86" 
-          ProjectName="AspNetCore.vcxproj" 
+          VCPlatform="Win32" 
+          BaseOutputPath="AspNetCoreModuleV2" 
           NativeAsset="aspnetcorev2" 
+          ProjectName="AspNetCore.vcxproj" 
           PropetyName="AspNetCoreModuleV2Shim" 
-          BaseOutputPath="AspNetCoreModuleV2" 
+          OutDirName="AspNetCoreModuleShim" 
           ProjectDirectory="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\AspNetCore" 
-          DllLocation="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\AspNetCore\bin\$(Configuration)\Win32\aspnetcorev2.dll" 
           Include="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\AspNetCore\AspNetCore.vcxproj" 
-          PdbLocation="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\AspNetCore\bin\$(Configuration)\Win32\aspnetcorev2.pdb"
+          DllLocation="$(ArtifactsBinDir)AspNetCoreModuleShim\Win32\$(Configuration)\aspnetcorev2.dll" 
+          PdbLocation="$(ArtifactsBinDir)AspNetCoreModuleShim\Win32\$(Configuration)\aspnetcorev2.pdb"
         />
         <ShimComponents
-          VCPlatform="x64" 
           Platform="x64" 
-          ProjectDirectory="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\OutOfProcessRequestHandler" 
+          VCPlatform="x64" 
+          BaseOutputPath="AspNetCoreModuleV2" 
+          NativeAsset="aspnetcorev2_outofprocess" 
           ProjectName="OutOfProcessRequestHandler.vcxproj" 
           PropetyName="AspNetCoreModuleV2OutOfProcessHandler" 
-          NativeAsset="aspnetcorev2_outofprocess" 
-          BaseOutputPath="AspNetCoreModuleV2" 
+          OutDirName="OutOfProcessRequestHandler" 
           PackageSubPath="$(AspNetCoreModuleOutOfProcessVersion)\" 
-          DllLocation="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\OutOfProcessRequestHandler\bin\$(Configuration)\x64\aspnetcorev2_outofprocess.dll" 
+          ProjectDirectory="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\OutOfProcessRequestHandler" 
           Include="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\OutOfProcessRequestHandler\OutOfProcessRequestHandler.vcxproj" 
-          PdbLocation="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\OutOfProcessRequestHandler\bin\$(Configuration)\x64\aspnetcorev2_outofprocess.pdb"
+          DllLocation="$(ArtifactsBinDir)OutOfProcessRequestHandler\x64\$(Configuration)\aspnetcorev2_outofprocess.dll" 
+          PdbLocation="$(ArtifactsBinDir)OutOfProcessRequestHandler\x64\$(Configuration)\aspnetcorev2_outofprocess.pdb"
         />
         <ShimComponents
-          VCPlatform="Win32" 
           Platform="x86" 
-          ProjectDirectory="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\OutOfProcessRequestHandler" 
+          VCPlatform="Win32" 
+          BaseOutputPath="AspNetCoreModuleV2" 
+          NativeAsset="aspnetcorev2_outofprocess" 
           ProjectName="OutOfProcessRequestHandler.vcxproj" 
           PropetyName="AspNetCoreModuleV2OutOfProcessHandler" 
-          NativeAsset="aspnetcorev2_outofprocess" 
-          BaseOutputPath="AspNetCoreModuleV2" 
+          OutDirName="OutOfProcessRequestHandler" 
           PackageSubPath="$(AspNetCoreModuleOutOfProcessVersion)\" 
-          DllLocation="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\OutOfProcessRequestHandler\bin\$(Configuration)\Win32\aspnetcorev2_outofprocess.dll" 
+          ProjectDirectory="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\OutOfProcessRequestHandler" 
           Include="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\OutOfProcessRequestHandler\OutOfProcessRequestHandler.vcxproj" 
-          PdbLocation="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\OutOfProcessRequestHandler\bin\$(Configuration)\Win32\aspnetcorev2_outofprocess.pdb"
+          DllLocation="$(ArtifactsBinDir)OutOfProcessRequestHandler\Win32\$(Configuration)\aspnetcorev2_outofprocess.dll" 
+          PdbLocation="$(ArtifactsBinDir)OutOfProcessRequestHandler\Win32\$(Configuration)\aspnetcorev2_outofprocess.pdb"
         />
 
        <InProcessComponents
-          VCPlatform="x64" 
           Platform="x64" 
-          ProjectName="InProcessRequestHandler.vcxproj" 
+          VCPlatform="x64" 
+          BaseOutputPath="AspNetCoreModuleV2" 
           NativeAsset="aspnetcorev2_inprocess" 
+          ProjectName="InProcessRequestHandler.vcxproj" 
           PropetyName="AspNetCoreModuleV2InProcessHandler" 
-          BaseOutputPath="AspNetCoreModuleV2" 
+          OutDirName="InProcessRequestHandler" 
           ProjectDirectory="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\InProcessRequestHandler" 
-          DllLocation="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\InProcessRequestHandler\bin\$(Configuration)\x64\aspnetcorev2_inprocess.dll" 
           Include="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\InProcessRequestHandler\InProcessRequestHandler.vcxproj" 
-          PdbLocation="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\InProcessRequestHandler\bin\$(Configuration)\x64\aspnetcorev2_inprocess.pdb"
+          DllLocation="$(ArtifactsBinDir)InProcessRequestHandler\x64\$(Configuration)\aspnetcorev2_inprocess.dll" 
+          PdbLocation="$(ArtifactsBinDir)InProcessRequestHandler\x64\$(Configuration)\aspnetcorev2_inprocess.pdb"
         />
         <InProcessComponents
-          VCPlatform="Win32" 
           Platform="x86" 
-          ProjectName="InProcessRequestHandler.vcxproj" 
+          VCPlatform="Win32" 
+          BaseOutputPath="AspNetCoreModuleV2" 
           NativeAsset="aspnetcorev2_inprocess" 
+          ProjectName="InProcessRequestHandler.vcxproj" 
           PropetyName="AspNetCoreModuleV2InProcessHandler" 
-          BaseOutputPath="AspNetCoreModuleV2" 
+          OutDirName="InProcessRequestHandler" 
           ProjectDirectory="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\InProcessRequestHandler" 
-          DllLocation="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\InProcessRequestHandler\bin\$(Configuration)\Win32\aspnetcorev2_inprocess.dll" 
           Include="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\InProcessRequestHandler\InProcessRequestHandler.vcxproj" 
-          PdbLocation="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\InProcessRequestHandler\bin\$(Configuration)\Win32\aspnetcorev2_inprocess.pdb"
+          DllLocation="$(ArtifactsBinDir)InProcessRequestHandler\Win32\$(Configuration)\aspnetcorev2_inprocess.dll" 
+          PdbLocation="$(ArtifactsBinDir)InProcessRequestHandler\Win32\$(Configuration)\aspnetcorev2_inprocess.pdb"
         />
 
        <RunShimComponents
-          VCPlatform="$(NativeVCPlatform)" 
           Platform="$(NativePlatform)" 
-          ProjectName="AspNetCore.vcxproj" 
+          VCPlatform="$(NativeVCPlatform)" 
+          BaseOutputPath="AspNetCoreModuleV2" 
           NativeAsset="aspnetcorev2" 
+          ProjectName="AspNetCore.vcxproj" 
           PropetyName="AspNetCoreModuleV2Shim" 
-          BaseOutputPath="AspNetCoreModuleV2" 
+          OutDirName="AspNetCoreModuleShim" 
           ProjectDirectory="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\AspNetCore" 
-          DllLocation="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\AspNetCore\bin\$(Configuration)\$(NativeVCPlatform)\aspnetcorev2.dll" 
           Include="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\AspNetCore\AspNetCore.vcxproj" 
-          PdbLocation="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\AspNetCore\bin\$(Configuration)\$(NativeVCPlatform)\aspnetcorev2.pdb"
+          DllLocation="$(ArtifactsBinDir)AspNetCoreModuleShim\$(NativeVCPlatform)\$(Configuration)\aspnetcorev2.dll" 
+          PdbLocation="$(ArtifactsBinDir)AspNetCoreModuleShim\$(NativeVCPlatform)\$(Configuration)\aspnetcorev2.pdb"
         />
         <RunShimComponents
-          VCPlatform="$(NativeVCPlatform)" 
           Platform="$(NativePlatform)" 
-          ProjectDirectory="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\OutOfProcessRequestHandler" 
+          VCPlatform="$(NativeVCPlatform)" 
+          BaseOutputPath="AspNetCoreModuleV2" 
+          NativeAsset="aspnetcorev2_outofprocess" 
           ProjectName="OutOfProcessRequestHandler.vcxproj" 
           PropetyName="AspNetCoreModuleV2OutOfProcessHandler" 
-          NativeAsset="aspnetcorev2_outofprocess" 
-          BaseOutputPath="AspNetCoreModuleV2" 
+          OutDirName="OutOfProcessRequestHandler" 
           PackageSubPath="$(AspNetCoreModuleOutOfProcessVersion)\" 
-          DllLocation="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\OutOfProcessRequestHandler\bin\$(Configuration)\$(NativeVCPlatform)\aspnetcorev2_outofprocess.dll" 
+          ProjectDirectory="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\OutOfProcessRequestHandler" 
           Include="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\OutOfProcessRequestHandler\OutOfProcessRequestHandler.vcxproj" 
-          PdbLocation="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\OutOfProcessRequestHandler\bin\$(Configuration)\$(NativeVCPlatform)\aspnetcorev2_outofprocess.pdb"
+          DllLocation="$(ArtifactsBinDir)OutOfProcessRequestHandler\$(NativeVCPlatform)\$(Configuration)\aspnetcorev2_outofprocess.dll" 
+          PdbLocation="$(ArtifactsBinDir)OutOfProcessRequestHandler\$(NativeVCPlatform)\$(Configuration)\aspnetcorev2_outofprocess.pdb"
         />
 
        <RunInProcessComponents
-          VCPlatform="$(NativeVCPlatform)" 
           Platform="$(NativePlatform)" 
-          ProjectName="InProcessRequestHandler.vcxproj" 
+          VCPlatform="$(NativeVCPlatform)" 
+          BaseOutputPath="AspNetCoreModuleV2" 
           NativeAsset="aspnetcorev2_inprocess" 
+          ProjectName="InProcessRequestHandler.vcxproj" 
           PropetyName="AspNetCoreModuleV2InProcessHandler" 
-          BaseOutputPath="AspNetCoreModuleV2" 
+          OutDirName="InProcessRequestHandler" 
           ProjectDirectory="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\InProcessRequestHandler" 
-          DllLocation="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\InProcessRequestHandler\bin\$(Configuration)\$(NativeVCPlatform)\aspnetcorev2_inprocess.dll" 
           Include="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\InProcessRequestHandler\InProcessRequestHandler.vcxproj" 
-          PdbLocation="$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\InProcessRequestHandler\bin\$(Configuration)\$(NativeVCPlatform)\aspnetcorev2_inprocess.pdb"
+          DllLocation="$(ArtifactsBinDir)InProcessRequestHandler\$(NativeVCPlatform)\$(Configuration)\aspnetcorev2_inprocess.dll" 
+          PdbLocation="$(ArtifactsBinDir)InProcessRequestHandler\$(NativeVCPlatform)\$(Configuration)\aspnetcorev2_inprocess.pdb"
         />
 
     </ItemGroup>
     <PropertyGroup>
 
-       <AspNetCoreModuleV2ShimDll>$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\AspNetCore\bin\$(Configuration)\$(NativeVCPlatform)\aspnetcorev2.dll</AspNetCoreModuleV2ShimDll> 
-       <AspNetCoreModuleV2InProcessHandlerDll>$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\InProcessRequestHandler\bin\$(Configuration)\$(NativeVCPlatform)\aspnetcorev2_inprocess.dll</AspNetCoreModuleV2InProcessHandlerDll> 
-       <AspNetCoreModuleV2OutOfProcessHandlerDll>$(MSBuildThisFileDirectory)..\AspNetCoreModuleV2\OutOfProcessRequestHandler\bin\$(Configuration)\$(NativeVCPlatform)\aspnetcorev2_outofprocess.dll</AspNetCoreModuleV2OutOfProcessHandlerDll>
+       <AspNetCoreModuleV2ShimDll>$(ArtifactsBinDir)AspNetCoreModuleShim\$(NativeVCPlatform)\$(Configuration)\aspnetcorev2.dll</AspNetCoreModuleV2ShimDll> 
+       <AspNetCoreModuleV2InProcessHandlerDll>$(ArtifactsBinDir)InProcessRequestHandler\$(NativeVCPlatform)\$(Configuration)\aspnetcorev2_inprocess.dll</AspNetCoreModuleV2InProcessHandlerDll> 
+       <AspNetCoreModuleV2OutOfProcessHandlerDll>$(ArtifactsBinDir)OutOfProcessRequestHandler\$(NativeVCPlatform)\$(Configuration)\aspnetcorev2_outofprocess.dll</AspNetCoreModuleV2OutOfProcessHandlerDll>
     </PropertyGroup>
 </Project>
diff --git a/src/Servers/IIS/build/native.targets b/src/Servers/IIS/build/native.targets
index e5d8ab982c7a80f3719e3b22c65d8b949928425e..2106b8150fb7211b3ea1a429ca7722a824046678 100644
--- a/src/Servers/IIS/build/native.targets
+++ b/src/Servers/IIS/build/native.targets
@@ -31,10 +31,10 @@
     </ItemGroup>
 
     <ItemGroup>
-      <FileWrites Include="version.h" />
+      <FileWrites Include="$(IntDir)version.h" />
     </ItemGroup>
 
-    <WriteLinesToFile File="version.h" Lines="@(VersionHeaderContents)" OverWrite="true" WriteOnlyWhenDifferent="True" />
+    <WriteLinesToFile File="$(IntDir)version.h" Lines="@(VersionHeaderContents)" OverWrite="true" WriteOnlyWhenDifferent="True" />
   </Target>
 
 </Project>
diff --git a/src/Servers/IIS/tools/GenerateNativeAssets.ps1 b/src/Servers/IIS/tools/GenerateNativeAssets.ps1
index c1fb0637150c7c8b80e29a65ac076f8f1d775593..20c28ae8ae2bca13a3ba12b0abfdeaf5fb446c3e 100644
--- a/src/Servers/IIS/tools/GenerateNativeAssets.ps1
+++ b/src/Servers/IIS/tools/GenerateNativeAssets.ps1
@@ -14,7 +14,8 @@ $srcDir = "`$(MSBuildThisFileDirectory)..";
 $projects = @(
      @{
         ProjectDirectory = "$srcDir\AspNetCoreModuleV2\AspNetCore";
-        ProjectName = "`AspNetCore.vcxproj";
+        ProjectName = "AspNetCore.vcxproj";
+        OutDirName = "AspNetCoreModuleShim";
         NativeAsset = "aspnetcorev2";
         BaseOutputPath = "AspNetCoreModuleV2"
         PropetyName = "AspNetCoreModuleV2Shim"
@@ -22,6 +23,7 @@ $projects = @(
      @{
         ProjectDirectory = "$srcDir\AspNetCoreModuleV2\InProcessRequestHandler";
         ProjectName = "InProcessRequestHandler.vcxproj";
+        OutDirName = "InProcessRequestHandler";
         NativeAsset = "aspnetcorev2_inprocess";
         BaseOutputPath = "AspNetCoreModuleV2";
         PropetyName = "AspNetCoreModuleV2InProcessHandler"
@@ -29,6 +31,7 @@ $projects = @(
      @{
         ProjectDirectory = "$srcDir\AspNetCoreModuleV2\OutOfProcessRequestHandler";
         ProjectName = "OutOfProcessRequestHandler.vcxproj";
+        OutDirName = "OutOfProcessRequestHandler";
         NativeAsset = "aspnetcorev2_outofprocess";
         BaseOutputPath = "AspNetCoreModuleV2";
         PackageSubPath = "`$(AspNetCoreModuleOutOfProcessVersion)\";
@@ -76,8 +79,8 @@ function New-Component($project, $platform)
     CopyProperties -from $project -to $component;
     CopyProperties -from @{
         Include = "$($project.ProjectDirectory)\$($project.ProjectName)";
-        DllLocation = "$($project.ProjectDirectory)\bin\`$(Configuration)\$($platform.VCPlatform)\$($project.NativeAsset).dll";
-        PdbLocation = "$($project.ProjectDirectory)\bin\`$(Configuration)\$($platform.VCPlatform)\$($project.NativeAsset).pdb";
+        DllLocation = "`$(ArtifactsBinDir)$($project.OutDirName)\$($platform.VCPlatform)\`$(Configuration)\$($project.NativeAsset).dll";
+        PdbLocation = "`$(ArtifactsBinDir)$($project.OutDirName)\$($platform.VCPlatform)\`$(Configuration)\$($project.NativeAsset).pdb";
     } -to $component;
 
     return $component;
@@ -102,7 +105,7 @@ foreach ($project in $projects)
 
     $properties += @{
         Name = "$($project.PropetyName)Dll";
-        Value = "$($project.ProjectDirectory)\bin\`$(Configuration)\`$(NativeVCPlatform)\$($project.NativeAsset).dll";
+        Value = "`$(ArtifactsBinDir)$($project.OutDirName)\`$(NativeVCPlatform)\`$(Configuration)\$($project.NativeAsset).dll";
     };
 
     $runComponent = New-Component $project $currentPlatform;
diff --git a/src/Servers/Kestrel.sln b/src/Servers/Kestrel.sln
index e434f397f3dfa64f33d7a3770b142c5b84db886c..9a561e27a1a525cd60ad95192320d13b5af7c563 100644
--- a/src/Servers/Kestrel.sln
+++ b/src/Servers/Kestrel.sln
@@ -25,7 +25,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LargeResponseApp", "Kestrel
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PlaintextApp", "Kestrel\samples\PlaintextApp\PlaintextApp.csproj", "{0710F560-A741-4139-BC1F-BFF1895F1274}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SampleApp", "Kestrel\samples\SampleApp\SampleApp.csproj", "{F9D090D2-0568-403D-ADBA-9E079397B584}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Kestrel.SampleApp", "Kestrel\samples\SampleApp\Kestrel.SampleApp.csproj", "{F9D090D2-0568-403D-ADBA-9E079397B584}"
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SystemdTestApp", "Kestrel\samples\SystemdTestApp\SystemdTestApp.csproj", "{01D031FC-61A5-45BD-BE11-57FA00BE1BCD}"
 EndProject
diff --git a/src/Servers/Kestrel/samples/SampleApp/SampleApp.csproj b/src/Servers/Kestrel/samples/SampleApp/Kestrel.SampleApp.csproj
similarity index 100%
rename from src/Servers/Kestrel/samples/SampleApp/SampleApp.csproj
rename to src/Servers/Kestrel/samples/SampleApp/Kestrel.SampleApp.csproj
diff --git a/src/Servers/test/FunctionalTests/Directory.Build.props b/src/Servers/test/FunctionalTests/Directory.Build.props
index bfda02311c1ff14264062773556cf0d5d2acf41e..248876a2696a5b28e3e1330f88f26e01adba0135 100644
--- a/src/Servers/test/FunctionalTests/Directory.Build.props
+++ b/src/Servers/test/FunctionalTests/Directory.Build.props
@@ -1,12 +1,6 @@
 <Project>
   <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory)..\, Directory.Build.props))\Directory.Build.props" />
 
-  <PropertyGroup>
-    <!-- Deployers -->
-    <BaseIntermediateOutputPath>$(MSBuildThisFileDirectory)obj\</BaseIntermediateOutputPath>
-    <BaseOutputPath>$(MSBuildThisFileDirectory)bin\</BaseOutputPath>
-  </PropertyGroup>
-
   <ItemGroup Condition="'$(IsImplementationProject)' == 'true'">
     <PackageReference Include="Internal.AspNetCore.Analyzers" PrivateAssets="All" Version="$(InternalAspNetCoreAnalyzersPackageVersion)" AllowExplicitReference="true" />
   </ItemGroup>
diff --git a/src/Servers/test/FunctionalTests/ServerComparison.FunctionalTests.csproj b/src/Servers/test/FunctionalTests/ServerComparison.FunctionalTests.csproj
index bd065805c621f760d82ee3aa22f7d639ac215313..de28935c520d4b3e68173eb2a0d50c3bf80e2830 100644
--- a/src/Servers/test/FunctionalTests/ServerComparison.FunctionalTests.csproj
+++ b/src/Servers/test/FunctionalTests/ServerComparison.FunctionalTests.csproj
@@ -2,11 +2,16 @@
 
   <PropertyGroup>
     <TargetFramework>netcoreapp3.0</TargetFramework>
+
+    <!-- Tests do not work on Helix or when bin/ directory is not in project directory due to undeclared dependency on test content. -->
     <BuildHelixPayload>false</BuildHelixPayload>
+    <BaseOutputPath />
+    <OutputPath />
+
   </PropertyGroup>
 
   <ItemGroup>
-    <Content Include="*.config;*.conf" CopyToPublishDirectory="PreserveNewest" CopyToOutputDirectory="PreserveNewest" />
+    <Content Include="*.config;*.conf" />
   </ItemGroup>
 
   <ItemGroup>
diff --git a/src/Servers/IIS/Directory.Build.props b/src/Servers/testassets/Directory.Build.props
similarity index 59%
rename from src/Servers/IIS/Directory.Build.props
rename to src/Servers/testassets/Directory.Build.props
index f4bd362993a5ce51cec3047393d6ebfb1ca5f8ed..4be9d4181909b799246a963fcbfbf08a59cd6fb5 100644
--- a/src/Servers/IIS/Directory.Build.props
+++ b/src/Servers/testassets/Directory.Build.props
@@ -2,9 +2,9 @@
   <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory)..\, Directory.Build.props))\Directory.Build.props" />
 
   <PropertyGroup>
-    <!-- TODO: fix targets which expect project output to be in the project directory. -->
-    <BaseIntermediateOutputPath />
+    <!-- Tests do not work on Helix or when bin/ directory is not in project directory due to undeclared dependency on test content. -->
     <BaseOutputPath />
+    <OutputPath />
   </PropertyGroup>
 
 </Project>
diff --git a/src/Servers/testassets/ServerComparison.TestSites/Directory.Build.props b/src/Servers/testassets/ServerComparison.TestSites/Directory.Build.props
deleted file mode 100644
index bfda02311c1ff14264062773556cf0d5d2acf41e..0000000000000000000000000000000000000000
--- a/src/Servers/testassets/ServerComparison.TestSites/Directory.Build.props
+++ /dev/null
@@ -1,13 +0,0 @@
-<Project>
-  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory)..\, Directory.Build.props))\Directory.Build.props" />
-
-  <PropertyGroup>
-    <!-- Deployers -->
-    <BaseIntermediateOutputPath>$(MSBuildThisFileDirectory)obj\</BaseIntermediateOutputPath>
-    <BaseOutputPath>$(MSBuildThisFileDirectory)bin\</BaseOutputPath>
-  </PropertyGroup>
-
-  <ItemGroup Condition="'$(IsImplementationProject)' == 'true'">
-    <PackageReference Include="Internal.AspNetCore.Analyzers" PrivateAssets="All" Version="$(InternalAspNetCoreAnalyzersPackageVersion)" AllowExplicitReference="true" />
-  </ItemGroup>
-</Project>
diff --git a/src/SignalR/SignalR.sln b/src/SignalR/SignalR.sln
index 87fd94b3a96730e731110abbcbd6178b4d8b57d1..bfe46375f32a6c160b9daa8357e43f966ce3f02d 100644
--- a/src/SignalR/SignalR.sln
+++ b/src/SignalR/SignalR.sln
@@ -15,7 +15,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WebSocketSample", "samples\
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JwtClientSample", "samples\JwtClientSample\JwtClientSample.csproj", "{1A953296-E869-4DE2-A693-FD5FCDE27057}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FunctionalTests", "clients\ts\FunctionalTests\FunctionalTests.csproj", "{D0C7B22E-B0B6-4D62-BF7D-79EE4AAF1981}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SignalR.Client.FunctionalTests", "clients\ts\FunctionalTests\SignalR.Client.FunctionalTests.csproj", "{D0C7B22E-B0B6-4D62-BF7D-79EE4AAF1981}"
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Hosting", "..\Hosting\Hosting\src\Microsoft.AspNetCore.Hosting.csproj", "{3AC35C9A-3344-4BBB-B789-06CEE2CD093E}"
 EndProject
diff --git a/src/SignalR/clients/java/signalr/.gitignore b/src/SignalR/clients/java/signalr/.gitignore
index 4a81b0a66252311d3b700596a524e70a01a52104..eabba7738ec143a4a3b52571713e8693c440ceec 100644
--- a/src/SignalR/clients/java/signalr/.gitignore
+++ b/src/SignalR/clients/java/signalr/.gitignore
@@ -2,7 +2,6 @@
 .gradletasknamecache
 .gradle/
 build/
-bin/
 .settings/
 out/
 *.class
@@ -10,4 +9,4 @@ out/
 .project
 .classpath
 # We need the gradle-wrapper.jar file so that others can use the gradle wrapper
-!gradle/wrapper/gradle-wrapper.jar
\ No newline at end of file
+!gradle/wrapper/gradle-wrapper.jar
diff --git a/src/SignalR/clients/java/signalr/signalr.javaproj b/src/SignalR/clients/java/signalr/signalr.client.java.javaproj
similarity index 100%
rename from src/SignalR/clients/java/signalr/signalr.javaproj
rename to src/SignalR/clients/java/signalr/signalr.client.java.javaproj
diff --git a/src/SignalR/clients/ts/FunctionalTests/FunctionalTests.csproj b/src/SignalR/clients/ts/FunctionalTests/SignalR.Client.FunctionalTests.csproj
similarity index 100%
rename from src/SignalR/clients/ts/FunctionalTests/FunctionalTests.csproj
rename to src/SignalR/clients/ts/FunctionalTests/SignalR.Client.FunctionalTests.csproj
diff --git a/src/SignalR/clients/ts/FunctionalTests/SignalR.Npm.FunctionalTests.npmproj b/src/SignalR/clients/ts/FunctionalTests/SignalR.Npm.FunctionalTests.npmproj
index c24f00f47cb3fcff76b3e18afd399aeb0201d447..ad7dcd2675d90e3543d56180fba14462b452f9cd 100644
--- a/src/SignalR/clients/ts/FunctionalTests/SignalR.Npm.FunctionalTests.npmproj
+++ b/src/SignalR/clients/ts/FunctionalTests/SignalR.Npm.FunctionalTests.npmproj
@@ -7,11 +7,11 @@
     <BrowserTestHostName Condition="'$(CI)' == 'true'">sauce.local</BrowserTestHostName>
     <_TestSauceArgs>--verbose --no-color --configuration $(Configuration) --sauce-user "$(SauceUser)" --sauce-key "$(SauceKey)"</_TestSauceArgs>
     <_TestSauceArgs Condition="'$(BrowserTestHostName)' != ''">$(_TestSauceArgs) --use-hostname "$(BrowserTestHostName)"</_TestSauceArgs>
-    <NpmTestArgs Condition="'$(DailyTests)' != 'true'">run test:local -- --no-color --configuration $(Configuration)</NpmTestArgs>
+    <NpmTestArgs Condition="'$(DailyTests)' != 'true'">run test:local --no-color --configuration $(Configuration)</NpmTestArgs>
   </PropertyGroup>
 
   <ItemGroup>
-    <ProjectReference Include="FunctionalTests.csproj" Condition="'$(BuildManaged)' == 'true'" />
+    <ProjectReference Include="SignalR.Client.FunctionalTests.csproj" Condition="'$(BuildManaged)' == 'true'" />
     <ProjectReference Include="..\signalr\signalr.npmproj" />
     <ProjectReference Include="..\signalr-protocol-msgpack\signalr-protocol-msgpack.npmproj" />
   </ItemGroup>
@@ -27,7 +27,7 @@
   <Target Name="RunBrowserTests">
     <Message Text="Running JavaScript client Browser tests" Importance="high" />
     <!-- Skip the "inner" test run when we're running DailyTests -->
-    <Yarn Command="run test:inner -- --no-color --configuration $(Configuration)"
+    <Yarn Command="run test:inner --no-color --configuration $(Configuration)"
           Condition="'$(DailyTests)' != 'true'"
           WorkingDirectory="$(RepoRoot)src/SignalR/clients/ts/FunctionalTests" />
 
@@ -37,7 +37,7 @@
       <_TestSauceArgs Condition="'$(BrowserTestHostName)' != ''">$(_TestSauceArgs) --use-hostname "$(BrowserTestHostName)"</_TestSauceArgs>
     </PropertyGroup>
     <Message Text="test:sauce Args = $(_TestSauceArgs)" Importance="high" />
-    <Yarn Command="run test:sauce -- $(_TestSauceArgs)"
+    <Yarn Command="run test:sauce $(_TestSauceArgs)"
           Condition="'$(DailyTests)' == 'true'"
           WorkingDirectory="$(RepoRoot)src/SignalR/clients/ts/FunctionalTests" />
   </Target>
diff --git a/src/SignalR/clients/ts/FunctionalTests/package.json b/src/SignalR/clients/ts/FunctionalTests/package.json
index 4a3321d0d6878846cc3c5d15dc70956b77df8e35..ef1ed135c5c7efd0a0d333c8c587dd4c63f0dcbf 100644
--- a/src/SignalR/clients/ts/FunctionalTests/package.json
+++ b/src/SignalR/clients/ts/FunctionalTests/package.json
@@ -42,9 +42,9 @@
     "build": "yarn run build:lint && yarn run build:webpack",
     "build:lint": "node ../common/node_modules/tslint/bin/tslint -c ../tslint.json -p ./tsconfig.json",
     "build:webpack": "node ../common/node_modules/webpack-cli/bin/cli.js",
-    "pretest": "yarn run build && dotnet build FunctionalTests.csproj",
-    "test": "tsc --noEmit && yarn run test:local --",
-    "test:inner": "yarn run build && dotnet build FunctionalTests.csproj && yarn run test:local --",
+    "pretest": "yarn run build && dotnet build SignalR.Client.FunctionalTests.csproj",
+    "test": "tsc --noEmit && yarn run test:local",
+    "test:inner": "yarn run build && dotnet build SignalR.Client.FunctionalTests.csproj && yarn run test:local",
     "test:local": "yarn run pretest && ts-node --project ./scripts/tsconfig.json ./scripts/run-tests.ts",
     "test:all": "yarn run pretest && ts-node --project ./scripts/tsconfig.json ./scripts/run-tests.ts --all-browsers",
     "test:sauce": "yarn run pretest && ts-node --project ./scripts/tsconfig.json ./scripts/run-tests.ts --sauce",
diff --git a/src/SignalR/clients/ts/FunctionalTests/scripts/run-tests.ts b/src/SignalR/clients/ts/FunctionalTests/scripts/run-tests.ts
index 1fe581f4e8ca2fa94ce60b3553ec234af7c6334f..a9b9b8a18b968ea5ee1626377ebe191735d155e7 100644
--- a/src/SignalR/clients/ts/FunctionalTests/scripts/run-tests.ts
+++ b/src/SignalR/clients/ts/FunctionalTests/scripts/run-tests.ts
@@ -232,7 +232,7 @@ function runJest(httpsUrl: string, httpUrl: string) {
 
 (async () => {
     try {
-        const serverPath = path.resolve(__dirname, "..", "bin", configuration, "netcoreapp3.0", "FunctionalTests.dll");
+        const serverPath = path.resolve(ARTIFACTS_DIR, "bin", "SignalR.Client.FunctionalTests", configuration, "netcoreapp3.0", "SignalR.Client.FunctionalTests.dll");
 
         debug(`Launching Functional Test Server: ${serverPath}`);
         let desiredServerUrl = "https://127.0.0.1:0;http://127.0.0.1:0";
diff --git a/src/SignalR/publish-apps.ps1 b/src/SignalR/publish-apps.ps1
index ece137cf3893836c8911fdafcceaf5ebe52c0088..7c5ea57101e011bbaa097f3280f519e1ae40b606 100644
--- a/src/SignalR/publish-apps.ps1
+++ b/src/SignalR/publish-apps.ps1
@@ -20,7 +20,7 @@ $ClientsTsDir = Join-Path $ClientsDir "ts"
 # The list of apps to publish
 $Apps = @{
     "SignalRSamples"= (Join-Path $SamplesDir "SignalRSamples")
-    "FunctionalTests"= (Join-Path $ClientsTsDir "FunctionalTests")
+    "FunctionalTests"= (Join-Path $ClientsTsDir "FunctionalTests/SignalR.Client.FunctionalTests.csproj")
 }
 
 $BuildMetadataContent = @"
diff --git a/src/Tools/Directory.Build.props b/src/Tools/Directory.Build.props
index 2778f5a4bba00106e0f32cff361418ef5a1b0474..12132ebe911477813d34f241295af6df2ee3de32 100644
--- a/src/Tools/Directory.Build.props
+++ b/src/Tools/Directory.Build.props
@@ -1,6 +1,5 @@
 <Project>
   <PropertyGroup>
-    <OutputInRepoRoot>true</OutputInRepoRoot>
     <ToolSharedSourceRoot>$(MSBuildThisFileDirectory)Shared\</ToolSharedSourceRoot>
     <DisablePubternalApiCheck>true</DisablePubternalApiCheck>
   </PropertyGroup>
diff --git a/src/submodules/Directory.Build.props b/src/submodules/Directory.Build.props
new file mode 100644
index 0000000000000000000000000000000000000000..f3cd4c5956b4654041362ee7ed0916dc4741fa07
--- /dev/null
+++ b/src/submodules/Directory.Build.props
@@ -0,0 +1,2 @@
+<!-- Intentionally breaks the inheritance chain so submodules do not inherit build settings from this repo. -->
+<Project />
diff --git a/src/submodules/Directory.Build.targets b/src/submodules/Directory.Build.targets
new file mode 100644
index 0000000000000000000000000000000000000000..f3cd4c5956b4654041362ee7ed0916dc4741fa07
--- /dev/null
+++ b/src/submodules/Directory.Build.targets
@@ -0,0 +1,2 @@
+<!-- Intentionally breaks the inheritance chain so submodules do not inherit build settings from this repo. -->
+<Project />