diff --git a/.azure/pipelines/ci.yml b/.azure/pipelines/ci.yml index 02082f03bd87..1216abe4e677 100644 --- a/.azure/pipelines/ci.yml +++ b/.azure/pipelines/ci.yml @@ -14,33 +14,44 @@ jobs: jobDisplayName: "Build and test: Windows" agentOs: Windows beforeBuild: - - powershell: "& ./src/IISIntegration/tools/UpdateIISExpressCertificate.ps1; & ./src/IISIntegration/tools/update_schema.ps1" + - powershell: "& ./src/Servers/IIS/tools/UpdateIISExpressCertificate.ps1; & ./src/Servers/IIS/tools/update_schema.ps1" displayName: Setup IISExpress test certificates and schema -- template: jobs/iisintegration-job.yml - parameters: - TestGroupName: IIS - SkipIISTests: false - SkipIISExpressTests: true - SkipIISForwardsCompatibilityTests: true - SkipIISBackwardsCompatibilityTests: true -- template: jobs/iisintegration-job.yml - parameters: - TestGroupName: IISExpress - SkipIISTests: true - SkipIISExpressTests: false - SkipIISForwardsCompatibilityTests: true - SkipIISBackwardsCompatibilityTests: true -- template: jobs/iisintegration-job.yml +- template: jobs/default-build.yml parameters: - TestGroupName: IISForwardCompat - SkipIISTests: true - SkipIISExpressTests: true - SkipIISForwardsCompatibilityTests: false - SkipIISBackwardsCompatibilityTests: true -- template: jobs/iisintegration-job.yml + jobName: MacOs_Build + jobDisplayName: "Build and test: macOS" + agentOs: macOs +- template: jobs/default-build.yml parameters: - TestGroupName: IISBackCompat - SkipIISTests: true - SkipIISExpressTests: true - SkipIISForwardsCompatibilityTests: true - SkipIISBackwardsCompatibilityTests: false + jobName: Linux_Build + jobDisplayName: "Build and test: Linux" + agentOs: Linux +# - template: jobs/iisintegration-job.yml +# parameters: +# TestGroupName: IIS +# SkipIISTests: false +# SkipIISExpressTests: true +# SkipIISForwardsCompatibilityTests: true +# SkipIISBackwardsCompatibilityTests: true +# - template: jobs/iisintegration-job.yml +# parameters: +# TestGroupName: IISExpress +# SkipIISTests: true +# SkipIISExpressTests: false +# SkipIISForwardsCompatibilityTests: true +# SkipIISBackwardsCompatibilityTests: true +# - template: jobs/iisintegration-job.yml +# parameters: +# TestGroupName: IISForwardCompat +# SkipIISTests: true +# SkipIISExpressTests: true +# SkipIISForwardsCompatibilityTests: false +# SkipIISBackwardsCompatibilityTests: true +# - template: jobs/iisintegration-job.yml +# parameters: +# TestGroupName: IISBackCompat +# SkipIISTests: true +# SkipIISExpressTests: true +# SkipIISForwardsCompatibilityTests: true +# SkipIISBackwardsCompatibilityTests: false + diff --git a/.azure/pipelines/jobs/iisintegration-job.yml b/.azure/pipelines/jobs/iisintegration-job.yml index 01ce2d0ebe16..af3006a5b9e1 100644 --- a/.azure/pipelines/jobs/iisintegration-job.yml +++ b/.azure/pipelines/jobs/iisintegration-job.yml @@ -2,10 +2,10 @@ jobs: - template: default-build.yml parameters: beforeBuild: - - powershell: "& ./src/IISIntegration/tools/UpdateIISExpressCertificate.ps1; & ./src/IISIntegration/tools/update_schema.ps1; & ./src/IISIntegration/tools/SetupTestEnvironment.ps1 Setup" + - powershell: "& ./src/Servers/IIS/tools/UpdateIISExpressCertificate.ps1; & ./src/Servers/IIS/tools/update_schema.ps1; & ./src/Servers/IIS/tools/SetupTestEnvironment.ps1 Setup" displayName: Prepare repo afterBuild: - - powershell: "& ./src/IISIntegration/tools/SetupTestEnvironment.ps1 Shutdown" + - powershell: "& ./src/Servers/IIS/tools/SetupTestEnvironment.ps1 Shutdown" displayName: Stop AppVerifier condition: always() - task: PublishBuildArtifacts@1 @@ -15,7 +15,7 @@ jobs: artifactName: logs artifactType: Container pathtoPublish: src/IISIntegration/artifacts/logs - buildDirectory: src/IISIntegration + buildDirectory: src/Servers/IIS buildArgs: "/p:SkipIISBackwardsCompatibilityTests=${{ parameters.SkipIISBackwardsCompatibilityTests }} /p:SkipIISTests=${{ parameters.SkipIISTests }} /p:SkipIISExpressTests=${{ parameters.SkipIISExpressTests }} /p:SkipIISForwardsCompatibilityTests=${{ parameters.SkipIISBackwardsCompatibilityTests }}" jobName: IISIntegration_${{ parameters.TestGroupName }} jobDisplayName: IISIntegration_${{ parameters.TestGroupName }} diff --git a/.gitignore b/.gitignore index f65b085bce5c..ac23b446376e 100644 --- a/.gitignore +++ b/.gitignore @@ -28,3 +28,4 @@ src/**/global.json launchSettings.json BenchmarkDotNet.Artifacts/ korebuild-lock.txt +.gradle/ diff --git a/.gitmodules b/.gitmodules index ff5d81656b9a..964aad14a70f 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ -[submodule "src/IISIntegration/test/gtest/googletest"] - path = src/IISIntegration/test/gtest/googletest +[submodule "googletest"] + path = src/submodules/googletest url = https://github.com/google/googletest diff --git a/Directory.Build.props b/Directory.Build.props index eb0f47403fa4..30d821eb0dd1 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -85,6 +85,7 @@ true $(MSBuildThisFileDirectory)src\Shared\ + $(RepositoryRoot)src\submodules\googletest\ true diff --git a/build/CodeSign.props b/build/CodeSign.props index 49e56f34c34c..147f984918d1 100644 --- a/build/CodeSign.props +++ b/build/CodeSign.props @@ -49,6 +49,15 @@ + + + + + + + + + diff --git a/build/buildorder.props b/build/buildorder.props index 227658df56e1..bd39773f6aae 100644 --- a/build/buildorder.props +++ b/build/buildorder.props @@ -8,10 +8,8 @@ - - diff --git a/build/dependencies.folderbuilds.props b/build/dependencies.folderbuilds.props index 5902d23ff372..232b7ab42a97 100644 --- a/build/dependencies.folderbuilds.props +++ b/build/dependencies.folderbuilds.props @@ -1,27 +1,7 @@  - 3.0.0-build-20181120.4 - 3.0.0-preview-18606-0098 + 3.0.0-build-20181214.1 3.0.0-preview-18606-0098 - 3.0.0-preview-18606-0098 - 3.0.0-preview-18606-0098 - 3.0.0-preview-18606-0098 - 3.0.0-preview-18606-0098 - 3.0.0-preview-18606-0098 - 3.0.0-preview-18606-0098 - 3.0.0-preview-18606-0098 - 3.0.0-preview-18606-0098 - 3.0.0-preview-18606-0098 - 3.0.0-preview-18606-0098 - 3.0.0-preview-18606-0098 - 0.3.0-preview-18606-0098 - 3.0.0-preview-18606-0098 - 3.0.0-preview-18606-0098 - 3.0.0-preview-18606-0098 - 3.0.0-preview-18606-0098 - 3.0.0-preview-18606-0098 - 3.0.0-preview-18606-0098 - 3.0.0-preview-18606-0098 diff --git a/build/dependencies.props b/build/dependencies.props index cb6c0d120653..fd86c2e54af5 100644 --- a/build/dependencies.props +++ b/build/dependencies.props @@ -39,14 +39,12 @@ 3.0.0-preview.18605.1 3.0.0-preview.18605.1 3.0.0-preview.18605.1 - 3.0.0-preview.18605.1 3.0.0-preview.18605.1 3.0.0-preview.18605.1 3.0.0-preview.18605.1 3.0.0-preview.18605.1 3.0.0-preview.18605.1 3.0.0-preview.18605.1 - 3.0.0-preview.18605.1 3.0.0-preview.18605.1 3.0.0-preview.18605.1 3.0.0-preview.18605.1 @@ -60,7 +58,6 @@ 3.0.0-preview.18605.1 3.0.0-preview.18605.1 3.0.0-preview.18605.1 - 3.0.0-preview.18605.1 3.0.0-preview.18605.1 3.0.0-preview.18605.1 3.0.0-preview.18605.1 @@ -88,23 +85,15 @@ 3.0.0-preview.18605.1 3.0.0-preview.18605.1 3.0.0-preview.18605.1 - 3.0.0-preview.18605.1 3.0.0-preview.18605.1 3.0.0-preview.18605.1 3.0.0-preview.18605.1 3.0.0-preview.18605.1 3.0.0-preview.18605.1 3.0.0-preview.18605.1 - 3.0.0-preview.18605.1 - 3.0.0-preview.18605.1 - 3.0.0-preview.18605.1 - 3.0.0-preview.18605.1 - 3.0.0-preview.18605.1 - 3.0.0-preview.18605.1 3.0.0-preview.18605.1 3.0.0-preview.18605.1 3.0.0-preview.18605.1 - 3.0.0-preview.18605.1 3.0.0-preview.18604.3 @@ -125,7 +114,7 @@ $(KoreBuildVersion) $(KoreBuildVersion) - 3.0.0-build-20181120.4 + 3.0.0-build-20181214.1 @@ -157,6 +146,8 @@ 1.10.0 1.7.3.4 2.1.1 + 2.2.0 + 2.2.0 2.2.1 5.2.6 2.3.2 diff --git a/build/external-dependencies.props b/build/external-dependencies.props index 491fb7f2e580..ad5393f3e716 100644 --- a/build/external-dependencies.props +++ b/build/external-dependencies.props @@ -13,15 +13,12 @@ - - - @@ -34,7 +31,6 @@ - @@ -62,22 +58,14 @@ - - - - - - - - diff --git a/build/repo.props b/build/repo.props index ec1af59d4873..67e5e4c6222f 100644 --- a/build/repo.props +++ b/build/repo.props @@ -17,10 +17,10 @@ $(RepositoryRoot).deps\build\ $(RepositoryRoot).deps\Signed\Packages\ $(RepositoryRoot)eng\signcheck.exclusions.txt - + true - + $(RepositoryRoot)src\Shared\ @@ -77,14 +77,23 @@ + + + Platform=x64 + Platform=x86 + + $(MSBuildThisFileDirectory)..\eng\ProjectReferences.props + @(_ProjectReferenceProvider->'', '%0A ') diff --git a/build/submodules.props b/build/submodules.props index 0c239bbfecac..5e91b1c53bb6 100644 --- a/build/submodules.props +++ b/build/submodules.props @@ -40,9 +40,7 @@ - - diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 000000000000..98fe46e4032c --- /dev/null +++ b/docs/README.md @@ -0,0 +1,5 @@ +Contributor documentation +========================= + +The primary audience for documentation in this folder is contributors to ASP.NET Core. +If you are looking for documentation on to *use* ASP.NET Core, go to . diff --git a/docs/ReferenceResolution.md b/docs/ReferenceResolution.md new file mode 100644 index 000000000000..e0c3dbf6f4d2 --- /dev/null +++ b/docs/ReferenceResolution.md @@ -0,0 +1,34 @@ +`` resolution +======================== + +Most project files in this repo should use `` instead of `` or ``. +This was done to enable ASP.NET Core's unique requirements without requiring most ASP.NET Core contributors +to understand the complex rules for how versions and references should work. The build system will resolve +Reference items to the correct type and version of references based on our servicing and update rules. + +See [ResolveReferences.targets](/eng/targets/ResolveReferences.targets) for the exact implementation of custom +`` resolutions. + +The requirements that led to this system are: + +* Versions of external dependencies should be consistent. +* Servicing updates of ASP.NET Core should minimize the number of assemblies which need to re-build and re-ship. +* Newer versions of packages should not have lower dependency versions than previous releases. +* Minimize the cascading effect of servicing updates where possible by keeping a consistent baseline of dependencies. + +## Recommendations for writing a .csproj + +* Use `` +* Do not use `` +* Only use `` in test projects +* Name the .csproj file to match the assembly name. +* Run `build.cmd /t:GenerateProjectList` when adding new projects +* Use [eng/tools/BaseLineGenerator/](/eng/tools/BaselineGenerator/README.md) if you need to update baselines. + +## Important files + +* [eng/Baseline.xml](/eng/Baseline.xml) - this contains the 'baseline' of the latest servicing release for this branch. It should be modified and used to update the generated file, Baseline.Designer.props. +* [eng/Dependencies.props](/eng/Dependencies.props) - contains a list of all package references that might be used in the repo. +* [eng/PatchConfig.props](/eng/PatchConfig.props) - lists which assemblies or packages are patching in the current build. +* [eng/ProjectReferences.props](/eng/ProjectReferences.props) - lists which assemblies or packages might be available to be referenced as a local project +* [eng/Versions.props](/eng/Versions.props) - contains a list of versions which may be updated by automation. diff --git a/eng/Baseline.Designer.props b/eng/Baseline.Designer.props index 8f5460b22480..e8fc6321d983 100644 --- a/eng/Baseline.Designer.props +++ b/eng/Baseline.Designer.props @@ -4,6 +4,22 @@ $(MSBuildAllProjects);$(MSBuildThisFileFullPath) 2.2.0 + + + 2.2.0 + + + + 2.2.0 + + + + 2.2.0 + + + + 2.2.0 + 2.2.0 @@ -15,6 +31,14 @@ + + + 2.2.0 + + + + 2.2.0 + 2.2.0 @@ -421,6 +445,36 @@ + + + 2.2.0 + + + + + + + + + + + 2.2.0 + + + + + + + + + + + + + + + + 2.2.0 @@ -557,6 +611,30 @@ + + + 2.2.0 + + + + + + + + + + + + + + + + + + + + + 2.2.0 diff --git a/eng/Baseline.xml b/eng/Baseline.xml index 97364fe67cd8..78c6bb7e7e01 100644 --- a/eng/Baseline.xml +++ b/eng/Baseline.xml @@ -1,9 +1,17 @@ + + + @@ -46,6 +54,8 @@ + + @@ -57,6 +67,7 @@ + diff --git a/eng/Dependencies.props b/eng/Dependencies.props index 5b4af7395152..aaed3410e298 100644 --- a/eng/Dependencies.props +++ b/eng/Dependencies.props @@ -1,16 +1,27 @@ - + $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - + + + + + + + - - @@ -20,9 +31,8 @@ - - + @@ -32,7 +42,6 @@ - @@ -47,30 +56,31 @@ + + + - - - - - + + + @@ -85,6 +95,7 @@ + @@ -109,13 +120,4 @@ - - - - - - - - - diff --git a/eng/PatchConfig.props b/eng/PatchConfig.props index dcda7bfa6edd..b804cb9c4599 100644 --- a/eng/PatchConfig.props +++ b/eng/PatchConfig.props @@ -1,3 +1,13 @@ + $(MSBuildAllProjects);$(MSBuildThisFileFullPath) @@ -5,6 +15,8 @@ + Microsoft.AspNetCore.AspNetCoreModule; + Microsoft.AspNetCore.AspNetCoreModuleV2; Microsoft.AspNetCore.Server.IIS; Microsoft.AspNetCore.Server.IISIntegration; Microsoft.AspNetCore.Server.IntegrationTesting.IIS; diff --git a/eng/ProjectReferences.props b/eng/ProjectReferences.props index c7d5ab8130ab..a9fb0c5f63eb 100644 --- a/eng/ProjectReferences.props +++ b/eng/ProjectReferences.props @@ -1,7 +1,11 @@ - + - + @@ -12,6 +16,7 @@ + @@ -32,6 +37,9 @@ + + + @@ -39,12 +47,12 @@ - + @@ -56,12 +64,12 @@ + + - - - - + + diff --git a/eng/Versions.props b/eng/Versions.props new file mode 100644 index 000000000000..8adc6dcbbd9e --- /dev/null +++ b/eng/Versions.props @@ -0,0 +1,8 @@ + + diff --git a/eng/dependencies.temp.props b/eng/dependencies.temp.props deleted file mode 100644 index 2f48702aac69..000000000000 --- a/eng/dependencies.temp.props +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - diff --git a/eng/targets/CSharp.Common.props b/eng/targets/CSharp.Common.props index fe72087c071f..29c167c7226b 100644 --- a/eng/targets/CSharp.Common.props +++ b/eng/targets/CSharp.Common.props @@ -15,4 +15,13 @@ + + + + + + + + + diff --git a/eng/targets/Cpp.Common.props b/eng/targets/Cpp.Common.props index f295dbafad08..f827506c4f35 100644 --- a/eng/targets/Cpp.Common.props +++ b/eng/targets/Cpp.Common.props @@ -3,6 +3,7 @@ true + false diff --git a/eng/targets/Cpp.Common.targets b/eng/targets/Cpp.Common.targets index f2cad0d8c08e..3c347a4578d9 100644 --- a/eng/targets/Cpp.Common.targets +++ b/eng/targets/Cpp.Common.targets @@ -3,4 +3,7 @@ + + + diff --git a/eng/targets/ResolveReferences.targets b/eng/targets/ResolveReferences.targets index 675b0efa1811..965da850bc68 100644 --- a/eng/targets/ResolveReferences.targets +++ b/eng/targets/ResolveReferences.targets @@ -1,3 +1,21 @@ + @@ -31,17 +49,23 @@ + <_ImplicitPackageReference Include="@(PackageReference->WithMetadataValue('IsImplicitlyDefined', 'true'))" /> + <_ExplicitPackageReference Include="@(PackageReference)" Exclude="@(_ImplicitPackageReference)" /> + <_ExplicitPackageReference Remove="Internal.AspNetCore.Sdk" /> <_ExplicitPackageReference Remove="Microsoft.NETFramework.ReferenceAssemblies" /> - + <_UnusedProjectReferenceProvider Include="@(ProjectReferenceProvider)" Exclude="@(Reference)" /> - + <_ProjectReferenceByAssemblyName Condition="'$(UseProjectReferences)' == 'true'" Include="@(ProjectReferenceProvider)" - Exclude="@(UnusedProjectReferenceProvider)" /> + Exclude="@(_UnusedProjectReferenceProvider)" /> @@ -52,12 +76,18 @@ + <_ReferenceTemp Remove="@(_ReferenceTemp)" /> + + @@ -118,6 +149,7 @@ Text="Could not resolve this reference. Could not locate the package or project for "%(Reference.Identity)"" /> + <_TargetFramework Remove="@(_TargetFramework)" /> diff --git a/eng/tools/BaselineGenerator/BaselineGenerator.csproj b/eng/tools/BaselineGenerator/BaselineGenerator.csproj index 8e7d5913a6a2..2f43472aeb3c 100644 --- a/eng/tools/BaselineGenerator/BaselineGenerator.csproj +++ b/eng/tools/BaselineGenerator/BaselineGenerator.csproj @@ -3,7 +3,7 @@ Exe netcoreapp2.1 - -o "$(MSBuildThisFileDirectory)../../Baseline.Designer.props" + -o "$(MSBuildThisFileDirectory)../../Baseline.Designer.props" --v3 -s https://dotnetfeed.blob.core.windows.net/dotnet-core/flatcontainer $(MSBuildThisFileDirectory)../../ diff --git a/eng/tools/BaselineGenerator/Program.cs b/eng/tools/BaselineGenerator/Program.cs index 4a6177ebecd7..bf9ee8368780 100644 --- a/eng/tools/BaselineGenerator/Program.cs +++ b/eng/tools/BaselineGenerator/Program.cs @@ -96,20 +96,15 @@ private async Task Run() using (var reader = new PackageArchiveReader(nupkgPath)) { - var first = true; - foreach (var group in reader.NuspecReader.GetDependencyGroups()) - { - if (first) - { - first = false; - doc.Root.Add(new XComment($" Package: {id}")); + doc.Root.Add(new XComment($" Package: {id}")); - var propertyGroup = new XElement("PropertyGroup", - new XAttribute("Condition", $" '$(PackageId)' == '{id}' "), - new XElement("BaselinePackageVersion", version)); - doc.Root.Add(propertyGroup); - } + var propertyGroup = new XElement("PropertyGroup", + new XAttribute("Condition", $" '$(PackageId)' == '{id}' "), + new XElement("BaselinePackageVersion", version)); + doc.Root.Add(propertyGroup); + foreach (var group in reader.NuspecReader.GetDependencyGroups()) + { var itemGroup = new XElement("ItemGroup", new XAttribute("Condition", $" '$(PackageId)' == '{id}' AND '$(TargetFramework)' == '{group.TargetFramework.GetShortFolderName()}' ")); doc.Root.Add(itemGroup); @@ -131,7 +126,7 @@ private async Task Run() { doc.Save(writer); } - + Console.WriteLine($"Generated file in {output}"); return 0; } } diff --git a/global.json b/global.json index 5db9ff96a9e5..9dc0e1086590 100644 --- a/global.json +++ b/global.json @@ -3,6 +3,6 @@ "version": "3.0.100-preview-009750" }, "msbuild-sdks": { - "Internal.AspNetCore.Sdk": "3.0.0-build-20181206.3" + "Internal.AspNetCore.Sdk": "3.0.0-build-20181214.1" } } diff --git a/korebuild-lock.txt b/korebuild-lock.txt index 817bd1a0352b..ea35aa286bbd 100644 --- a/korebuild-lock.txt +++ b/korebuild-lock.txt @@ -1,2 +1,2 @@ -version:3.0.0-build-20181206.3 -commithash:96a199c48729398e013355167c21dd61ff0c574c +version:3.0.0-build-20181214.1 +commithash:0872134136bf3d181e3ca3fa700b7ff392c055b3 diff --git a/src/AuthSamples/build/dependencies.props b/src/AuthSamples/build/dependencies.props index 1e88d23ca498..6d4ff5523a25 100644 --- a/src/AuthSamples/build/dependencies.props +++ b/src/AuthSamples/build/dependencies.props @@ -54,8 +54,6 @@ 3.0.0-preview-181106-14 3.0.0-preview-181106-14 3.0.0-preview-181106-14 - 3.0.0-preview-181106-14 - 3.0.0-preview-181106-14 3.19.8 5.3.0 2.0.9 diff --git a/src/AzureIntegration/Directory.Build.props b/src/AzureIntegration/Directory.Build.props index cf33763ee4b8..f1021ec41a19 100644 --- a/src/AzureIntegration/Directory.Build.props +++ b/src/AzureIntegration/Directory.Build.props @@ -15,6 +15,7 @@ $(MSBuildThisFileDirectory)..\..\eng\AspNetCore.snk true true + $(MSBuildThisFileDirectory)..\Shared\ diff --git a/src/AzureIntegration/build/dependencies.props b/src/AzureIntegration/build/dependencies.props index d0da5d8def7e..6909aaf9ee04 100644 --- a/src/AzureIntegration/build/dependencies.props +++ b/src/AzureIntegration/build/dependencies.props @@ -29,7 +29,6 @@ 3.0.0-preview-181113-11 3.0.0-preview-181113-11 3.0.0-preview-181113-11 - 3.0.0-preview-181113-11 3.0.0-preview1-26907-05 3.0.0-preview-18579-0056 15.6.1 diff --git a/src/DataProtection/Abstractions/src/Microsoft.AspNetCore.DataProtection.Abstractions.csproj b/src/DataProtection/Abstractions/src/Microsoft.AspNetCore.DataProtection.Abstractions.csproj index 2beeb5f0bbd4..8cdcf5d18c79 100644 --- a/src/DataProtection/Abstractions/src/Microsoft.AspNetCore.DataProtection.Abstractions.csproj +++ b/src/DataProtection/Abstractions/src/Microsoft.AspNetCore.DataProtection.Abstractions.csproj @@ -12,10 +12,7 @@ Microsoft.AspNetCore.DataProtection.IDataProtector - - - - + diff --git a/src/DefaultBuilder/DefaultBuilder.sln b/src/DefaultBuilder/DefaultBuilder.sln new file mode 100644 index 000000000000..30d776544726 --- /dev/null +++ b/src/DefaultBuilder/DefaultBuilder.sln @@ -0,0 +1,205 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.26124.0 +MinimumVisualStudioVersion = 15.0.26124.0 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SampleApp", "samples\SampleApp\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 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.FunctionalTests", "test\Microsoft.AspNetCore.FunctionalTests\Microsoft.AspNetCore.FunctionalTests.csproj", "{766C394B-ABBB-4624-A071-C806C0A2CD3E}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "testassets", "testassets", "{3C38AE63-E4F4-4BCA-97C1-F0A96A06BA88}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CreateDefaultBuilderApp", "testassets\CreateDefaultBuilderApp\CreateDefaultBuilderApp.csproj", "{BE8D7353-692B-4B5B-ADFD-32632AE758E3}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CreateDefaultBuilderOfTApp", "testassets\CreateDefaultBuilderOfTApp\CreateDefaultBuilderOfTApp.csproj", "{AE1F0124-996E-476A-9331-FB789F3D0577}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DependencyInjectionApp", "testassets\DependencyInjectionApp\DependencyInjectionApp.csproj", "{03C1BD3F-6F6D-4D8F-9BD9-205D059723B6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "StartRequestDelegateUrlApp", "testassets\StartRequestDelegateUrlApp\StartRequestDelegateUrlApp.csproj", "{4B69520E-CB30-4B20-BCA7-9378EAC322A6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "StartRouteBuilderUrlApp", "testassets\StartRouteBuilderUrlApp\StartRouteBuilderUrlApp.csproj", "{AC847245-BFC3-4BEB-915C-FCD932359A5F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "StartWithIApplicationBuilderUrlApp", "testassets\StartWithIApplicationBuilderUrlApp\StartWithIApplicationBuilderUrlApp.csproj", "{92F27C24-44CA-4C2B-867E-1A4D776B03E0}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore", "src\Microsoft.AspNetCore.csproj", "{BEB88AF7-67EB-4754-A5CD-89C0388974C9}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "_dependencies", "_dependencies", "{31D4AC03-410F-476C-A0C8-E9E9490289B1}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.IntegrationTesting", "..\Hosting\Server.IntegrationTesting\src\Microsoft.AspNetCore.Server.IntegrationTesting.csproj", "{BF5885C7-F975-4652-9C11-093781FC16C5}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.StaticFiles", "..\Middleware\StaticFiles\src\Microsoft.AspNetCore.StaticFiles.csproj", "{D46E4E5D-0846-4574-A8BA-30D040A6254D}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {C19108F8-667B-4CF9-B227-CDD2290224BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C19108F8-667B-4CF9-B227-CDD2290224BC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C19108F8-667B-4CF9-B227-CDD2290224BC}.Debug|x64.ActiveCfg = Debug|Any CPU + {C19108F8-667B-4CF9-B227-CDD2290224BC}.Debug|x64.Build.0 = Debug|Any CPU + {C19108F8-667B-4CF9-B227-CDD2290224BC}.Debug|x86.ActiveCfg = Debug|Any CPU + {C19108F8-667B-4CF9-B227-CDD2290224BC}.Debug|x86.Build.0 = Debug|Any CPU + {C19108F8-667B-4CF9-B227-CDD2290224BC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C19108F8-667B-4CF9-B227-CDD2290224BC}.Release|Any CPU.Build.0 = Release|Any CPU + {C19108F8-667B-4CF9-B227-CDD2290224BC}.Release|x64.ActiveCfg = Release|Any CPU + {C19108F8-667B-4CF9-B227-CDD2290224BC}.Release|x64.Build.0 = Release|Any CPU + {C19108F8-667B-4CF9-B227-CDD2290224BC}.Release|x86.ActiveCfg = Release|Any CPU + {C19108F8-667B-4CF9-B227-CDD2290224BC}.Release|x86.Build.0 = Release|Any CPU + {1CD49F15-D381-4C7E-8E12-A85E7753B110}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1CD49F15-D381-4C7E-8E12-A85E7753B110}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1CD49F15-D381-4C7E-8E12-A85E7753B110}.Debug|x64.ActiveCfg = Debug|Any CPU + {1CD49F15-D381-4C7E-8E12-A85E7753B110}.Debug|x64.Build.0 = Debug|Any CPU + {1CD49F15-D381-4C7E-8E12-A85E7753B110}.Debug|x86.ActiveCfg = Debug|Any CPU + {1CD49F15-D381-4C7E-8E12-A85E7753B110}.Debug|x86.Build.0 = Debug|Any CPU + {1CD49F15-D381-4C7E-8E12-A85E7753B110}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1CD49F15-D381-4C7E-8E12-A85E7753B110}.Release|Any CPU.Build.0 = Release|Any CPU + {1CD49F15-D381-4C7E-8E12-A85E7753B110}.Release|x64.ActiveCfg = Release|Any CPU + {1CD49F15-D381-4C7E-8E12-A85E7753B110}.Release|x64.Build.0 = Release|Any CPU + {1CD49F15-D381-4C7E-8E12-A85E7753B110}.Release|x86.ActiveCfg = Release|Any CPU + {1CD49F15-D381-4C7E-8E12-A85E7753B110}.Release|x86.Build.0 = Release|Any CPU + {766C394B-ABBB-4624-A071-C806C0A2CD3E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {766C394B-ABBB-4624-A071-C806C0A2CD3E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {766C394B-ABBB-4624-A071-C806C0A2CD3E}.Debug|x64.ActiveCfg = Debug|Any CPU + {766C394B-ABBB-4624-A071-C806C0A2CD3E}.Debug|x64.Build.0 = Debug|Any CPU + {766C394B-ABBB-4624-A071-C806C0A2CD3E}.Debug|x86.ActiveCfg = Debug|Any CPU + {766C394B-ABBB-4624-A071-C806C0A2CD3E}.Debug|x86.Build.0 = Debug|Any CPU + {766C394B-ABBB-4624-A071-C806C0A2CD3E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {766C394B-ABBB-4624-A071-C806C0A2CD3E}.Release|Any CPU.Build.0 = Release|Any CPU + {766C394B-ABBB-4624-A071-C806C0A2CD3E}.Release|x64.ActiveCfg = Release|Any CPU + {766C394B-ABBB-4624-A071-C806C0A2CD3E}.Release|x64.Build.0 = Release|Any CPU + {766C394B-ABBB-4624-A071-C806C0A2CD3E}.Release|x86.ActiveCfg = Release|Any CPU + {766C394B-ABBB-4624-A071-C806C0A2CD3E}.Release|x86.Build.0 = Release|Any CPU + {BE8D7353-692B-4B5B-ADFD-32632AE758E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BE8D7353-692B-4B5B-ADFD-32632AE758E3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BE8D7353-692B-4B5B-ADFD-32632AE758E3}.Debug|x64.ActiveCfg = Debug|Any CPU + {BE8D7353-692B-4B5B-ADFD-32632AE758E3}.Debug|x64.Build.0 = Debug|Any CPU + {BE8D7353-692B-4B5B-ADFD-32632AE758E3}.Debug|x86.ActiveCfg = Debug|Any CPU + {BE8D7353-692B-4B5B-ADFD-32632AE758E3}.Debug|x86.Build.0 = Debug|Any CPU + {BE8D7353-692B-4B5B-ADFD-32632AE758E3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BE8D7353-692B-4B5B-ADFD-32632AE758E3}.Release|Any CPU.Build.0 = Release|Any CPU + {BE8D7353-692B-4B5B-ADFD-32632AE758E3}.Release|x64.ActiveCfg = Release|Any CPU + {BE8D7353-692B-4B5B-ADFD-32632AE758E3}.Release|x64.Build.0 = Release|Any CPU + {BE8D7353-692B-4B5B-ADFD-32632AE758E3}.Release|x86.ActiveCfg = Release|Any CPU + {BE8D7353-692B-4B5B-ADFD-32632AE758E3}.Release|x86.Build.0 = Release|Any CPU + {AE1F0124-996E-476A-9331-FB789F3D0577}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AE1F0124-996E-476A-9331-FB789F3D0577}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AE1F0124-996E-476A-9331-FB789F3D0577}.Debug|x64.ActiveCfg = Debug|Any CPU + {AE1F0124-996E-476A-9331-FB789F3D0577}.Debug|x64.Build.0 = Debug|Any CPU + {AE1F0124-996E-476A-9331-FB789F3D0577}.Debug|x86.ActiveCfg = Debug|Any CPU + {AE1F0124-996E-476A-9331-FB789F3D0577}.Debug|x86.Build.0 = Debug|Any CPU + {AE1F0124-996E-476A-9331-FB789F3D0577}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AE1F0124-996E-476A-9331-FB789F3D0577}.Release|Any CPU.Build.0 = Release|Any CPU + {AE1F0124-996E-476A-9331-FB789F3D0577}.Release|x64.ActiveCfg = Release|Any CPU + {AE1F0124-996E-476A-9331-FB789F3D0577}.Release|x64.Build.0 = Release|Any CPU + {AE1F0124-996E-476A-9331-FB789F3D0577}.Release|x86.ActiveCfg = Release|Any CPU + {AE1F0124-996E-476A-9331-FB789F3D0577}.Release|x86.Build.0 = Release|Any CPU + {03C1BD3F-6F6D-4D8F-9BD9-205D059723B6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {03C1BD3F-6F6D-4D8F-9BD9-205D059723B6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {03C1BD3F-6F6D-4D8F-9BD9-205D059723B6}.Debug|x64.ActiveCfg = Debug|Any CPU + {03C1BD3F-6F6D-4D8F-9BD9-205D059723B6}.Debug|x64.Build.0 = Debug|Any CPU + {03C1BD3F-6F6D-4D8F-9BD9-205D059723B6}.Debug|x86.ActiveCfg = Debug|Any CPU + {03C1BD3F-6F6D-4D8F-9BD9-205D059723B6}.Debug|x86.Build.0 = Debug|Any CPU + {03C1BD3F-6F6D-4D8F-9BD9-205D059723B6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {03C1BD3F-6F6D-4D8F-9BD9-205D059723B6}.Release|Any CPU.Build.0 = Release|Any CPU + {03C1BD3F-6F6D-4D8F-9BD9-205D059723B6}.Release|x64.ActiveCfg = Release|Any CPU + {03C1BD3F-6F6D-4D8F-9BD9-205D059723B6}.Release|x64.Build.0 = Release|Any CPU + {03C1BD3F-6F6D-4D8F-9BD9-205D059723B6}.Release|x86.ActiveCfg = Release|Any CPU + {03C1BD3F-6F6D-4D8F-9BD9-205D059723B6}.Release|x86.Build.0 = Release|Any CPU + {4B69520E-CB30-4B20-BCA7-9378EAC322A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4B69520E-CB30-4B20-BCA7-9378EAC322A6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4B69520E-CB30-4B20-BCA7-9378EAC322A6}.Debug|x64.ActiveCfg = Debug|Any CPU + {4B69520E-CB30-4B20-BCA7-9378EAC322A6}.Debug|x64.Build.0 = Debug|Any CPU + {4B69520E-CB30-4B20-BCA7-9378EAC322A6}.Debug|x86.ActiveCfg = Debug|Any CPU + {4B69520E-CB30-4B20-BCA7-9378EAC322A6}.Debug|x86.Build.0 = Debug|Any CPU + {4B69520E-CB30-4B20-BCA7-9378EAC322A6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4B69520E-CB30-4B20-BCA7-9378EAC322A6}.Release|Any CPU.Build.0 = Release|Any CPU + {4B69520E-CB30-4B20-BCA7-9378EAC322A6}.Release|x64.ActiveCfg = Release|Any CPU + {4B69520E-CB30-4B20-BCA7-9378EAC322A6}.Release|x64.Build.0 = Release|Any CPU + {4B69520E-CB30-4B20-BCA7-9378EAC322A6}.Release|x86.ActiveCfg = Release|Any CPU + {4B69520E-CB30-4B20-BCA7-9378EAC322A6}.Release|x86.Build.0 = Release|Any CPU + {AC847245-BFC3-4BEB-915C-FCD932359A5F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AC847245-BFC3-4BEB-915C-FCD932359A5F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AC847245-BFC3-4BEB-915C-FCD932359A5F}.Debug|x64.ActiveCfg = Debug|Any CPU + {AC847245-BFC3-4BEB-915C-FCD932359A5F}.Debug|x64.Build.0 = Debug|Any CPU + {AC847245-BFC3-4BEB-915C-FCD932359A5F}.Debug|x86.ActiveCfg = Debug|Any CPU + {AC847245-BFC3-4BEB-915C-FCD932359A5F}.Debug|x86.Build.0 = Debug|Any CPU + {AC847245-BFC3-4BEB-915C-FCD932359A5F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AC847245-BFC3-4BEB-915C-FCD932359A5F}.Release|Any CPU.Build.0 = Release|Any CPU + {AC847245-BFC3-4BEB-915C-FCD932359A5F}.Release|x64.ActiveCfg = Release|Any CPU + {AC847245-BFC3-4BEB-915C-FCD932359A5F}.Release|x64.Build.0 = Release|Any CPU + {AC847245-BFC3-4BEB-915C-FCD932359A5F}.Release|x86.ActiveCfg = Release|Any CPU + {AC847245-BFC3-4BEB-915C-FCD932359A5F}.Release|x86.Build.0 = Release|Any CPU + {92F27C24-44CA-4C2B-867E-1A4D776B03E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {92F27C24-44CA-4C2B-867E-1A4D776B03E0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {92F27C24-44CA-4C2B-867E-1A4D776B03E0}.Debug|x64.ActiveCfg = Debug|Any CPU + {92F27C24-44CA-4C2B-867E-1A4D776B03E0}.Debug|x64.Build.0 = Debug|Any CPU + {92F27C24-44CA-4C2B-867E-1A4D776B03E0}.Debug|x86.ActiveCfg = Debug|Any CPU + {92F27C24-44CA-4C2B-867E-1A4D776B03E0}.Debug|x86.Build.0 = Debug|Any CPU + {92F27C24-44CA-4C2B-867E-1A4D776B03E0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {92F27C24-44CA-4C2B-867E-1A4D776B03E0}.Release|Any CPU.Build.0 = Release|Any CPU + {92F27C24-44CA-4C2B-867E-1A4D776B03E0}.Release|x64.ActiveCfg = Release|Any CPU + {92F27C24-44CA-4C2B-867E-1A4D776B03E0}.Release|x64.Build.0 = Release|Any CPU + {92F27C24-44CA-4C2B-867E-1A4D776B03E0}.Release|x86.ActiveCfg = Release|Any CPU + {92F27C24-44CA-4C2B-867E-1A4D776B03E0}.Release|x86.Build.0 = Release|Any CPU + {BEB88AF7-67EB-4754-A5CD-89C0388974C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BEB88AF7-67EB-4754-A5CD-89C0388974C9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BEB88AF7-67EB-4754-A5CD-89C0388974C9}.Debug|x64.ActiveCfg = Debug|Any CPU + {BEB88AF7-67EB-4754-A5CD-89C0388974C9}.Debug|x64.Build.0 = Debug|Any CPU + {BEB88AF7-67EB-4754-A5CD-89C0388974C9}.Debug|x86.ActiveCfg = Debug|Any CPU + {BEB88AF7-67EB-4754-A5CD-89C0388974C9}.Debug|x86.Build.0 = Debug|Any CPU + {BEB88AF7-67EB-4754-A5CD-89C0388974C9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BEB88AF7-67EB-4754-A5CD-89C0388974C9}.Release|Any CPU.Build.0 = Release|Any CPU + {BEB88AF7-67EB-4754-A5CD-89C0388974C9}.Release|x64.ActiveCfg = Release|Any CPU + {BEB88AF7-67EB-4754-A5CD-89C0388974C9}.Release|x64.Build.0 = Release|Any CPU + {BEB88AF7-67EB-4754-A5CD-89C0388974C9}.Release|x86.ActiveCfg = Release|Any CPU + {BEB88AF7-67EB-4754-A5CD-89C0388974C9}.Release|x86.Build.0 = Release|Any CPU + {BF5885C7-F975-4652-9C11-093781FC16C5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BF5885C7-F975-4652-9C11-093781FC16C5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BF5885C7-F975-4652-9C11-093781FC16C5}.Debug|x64.ActiveCfg = Debug|Any CPU + {BF5885C7-F975-4652-9C11-093781FC16C5}.Debug|x64.Build.0 = Debug|Any CPU + {BF5885C7-F975-4652-9C11-093781FC16C5}.Debug|x86.ActiveCfg = Debug|Any CPU + {BF5885C7-F975-4652-9C11-093781FC16C5}.Debug|x86.Build.0 = Debug|Any CPU + {BF5885C7-F975-4652-9C11-093781FC16C5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BF5885C7-F975-4652-9C11-093781FC16C5}.Release|Any CPU.Build.0 = Release|Any CPU + {BF5885C7-F975-4652-9C11-093781FC16C5}.Release|x64.ActiveCfg = Release|Any CPU + {BF5885C7-F975-4652-9C11-093781FC16C5}.Release|x64.Build.0 = Release|Any CPU + {BF5885C7-F975-4652-9C11-093781FC16C5}.Release|x86.ActiveCfg = Release|Any CPU + {BF5885C7-F975-4652-9C11-093781FC16C5}.Release|x86.Build.0 = Release|Any CPU + {D46E4E5D-0846-4574-A8BA-30D040A6254D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D46E4E5D-0846-4574-A8BA-30D040A6254D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D46E4E5D-0846-4574-A8BA-30D040A6254D}.Debug|x64.ActiveCfg = Debug|Any CPU + {D46E4E5D-0846-4574-A8BA-30D040A6254D}.Debug|x64.Build.0 = Debug|Any CPU + {D46E4E5D-0846-4574-A8BA-30D040A6254D}.Debug|x86.ActiveCfg = Debug|Any CPU + {D46E4E5D-0846-4574-A8BA-30D040A6254D}.Debug|x86.Build.0 = Debug|Any CPU + {D46E4E5D-0846-4574-A8BA-30D040A6254D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D46E4E5D-0846-4574-A8BA-30D040A6254D}.Release|Any CPU.Build.0 = Release|Any CPU + {D46E4E5D-0846-4574-A8BA-30D040A6254D}.Release|x64.ActiveCfg = Release|Any CPU + {D46E4E5D-0846-4574-A8BA-30D040A6254D}.Release|x64.Build.0 = Release|Any CPU + {D46E4E5D-0846-4574-A8BA-30D040A6254D}.Release|x86.ActiveCfg = Release|Any CPU + {D46E4E5D-0846-4574-A8BA-30D040A6254D}.Release|x86.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {BE8D7353-692B-4B5B-ADFD-32632AE758E3} = {3C38AE63-E4F4-4BCA-97C1-F0A96A06BA88} + {AE1F0124-996E-476A-9331-FB789F3D0577} = {3C38AE63-E4F4-4BCA-97C1-F0A96A06BA88} + {03C1BD3F-6F6D-4D8F-9BD9-205D059723B6} = {3C38AE63-E4F4-4BCA-97C1-F0A96A06BA88} + {4B69520E-CB30-4B20-BCA7-9378EAC322A6} = {3C38AE63-E4F4-4BCA-97C1-F0A96A06BA88} + {AC847245-BFC3-4BEB-915C-FCD932359A5F} = {3C38AE63-E4F4-4BCA-97C1-F0A96A06BA88} + {92F27C24-44CA-4C2B-867E-1A4D776B03E0} = {3C38AE63-E4F4-4BCA-97C1-F0A96A06BA88} + {BF5885C7-F975-4652-9C11-093781FC16C5} = {31D4AC03-410F-476C-A0C8-E9E9490289B1} + {D46E4E5D-0846-4574-A8BA-30D040A6254D} = {31D4AC03-410F-476C-A0C8-E9E9490289B1} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {3A0191FF-7538-4406-BD4A-4883C0E1B72C} + EndGlobalSection +EndGlobal diff --git a/src/MetaPackages/build/Key.snk b/src/DefaultBuilder/build/Key.snk similarity index 100% rename from src/MetaPackages/build/Key.snk rename to src/DefaultBuilder/build/Key.snk diff --git a/src/MetaPackages/samples/SampleApp/Program.cs b/src/DefaultBuilder/samples/SampleApp/Program.cs similarity index 100% rename from src/MetaPackages/samples/SampleApp/Program.cs rename to src/DefaultBuilder/samples/SampleApp/Program.cs diff --git a/src/DefaultBuilder/samples/SampleApp/SampleApp.csproj b/src/DefaultBuilder/samples/SampleApp/SampleApp.csproj new file mode 100644 index 000000000000..2009bfeb8043 --- /dev/null +++ b/src/DefaultBuilder/samples/SampleApp/SampleApp.csproj @@ -0,0 +1,17 @@ + + + + netcoreapp3.0 + aspnetcore-MetaPackagesSampleApp-20170406180413 + + + + + + + + + + + + diff --git a/src/MetaPackages/samples/SampleApp/Startup.cs b/src/DefaultBuilder/samples/SampleApp/Startup.cs similarity index 100% rename from src/MetaPackages/samples/SampleApp/Startup.cs rename to src/DefaultBuilder/samples/SampleApp/Startup.cs diff --git a/src/MetaPackages/samples/SampleApp/appsettings.json b/src/DefaultBuilder/samples/SampleApp/appsettings.json similarity index 100% rename from src/MetaPackages/samples/SampleApp/appsettings.json rename to src/DefaultBuilder/samples/SampleApp/appsettings.json diff --git a/src/MetaPackages/samples/SampleApp/wwwroot/htmlpage.html b/src/DefaultBuilder/samples/SampleApp/wwwroot/htmlpage.html similarity index 100% rename from src/MetaPackages/samples/SampleApp/wwwroot/htmlpage.html rename to src/DefaultBuilder/samples/SampleApp/wwwroot/htmlpage.html diff --git a/src/MetaPackages/src/Microsoft.AspNetCore/GenericHostBuilderExtensions.cs b/src/DefaultBuilder/src/GenericHostBuilderExtensions.cs similarity index 100% rename from src/MetaPackages/src/Microsoft.AspNetCore/GenericHostBuilderExtensions.cs rename to src/DefaultBuilder/src/GenericHostBuilderExtensions.cs diff --git a/src/MetaPackages/src/Microsoft.AspNetCore/HostFilteringStartupFilter.cs b/src/DefaultBuilder/src/HostFilteringStartupFilter.cs similarity index 100% rename from src/MetaPackages/src/Microsoft.AspNetCore/HostFilteringStartupFilter.cs rename to src/DefaultBuilder/src/HostFilteringStartupFilter.cs diff --git a/src/DefaultBuilder/src/Microsoft.AspNetCore.csproj b/src/DefaultBuilder/src/Microsoft.AspNetCore.csproj new file mode 100644 index 000000000000..60c7a459d516 --- /dev/null +++ b/src/DefaultBuilder/src/Microsoft.AspNetCore.csproj @@ -0,0 +1,31 @@ + + + + netcoreapp3.0 + aspnetcore + Microsoft.AspNetCore + true + false + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/MetaPackages/src/Microsoft.AspNetCore/WebHost.cs b/src/DefaultBuilder/src/WebHost.cs similarity index 100% rename from src/MetaPackages/src/Microsoft.AspNetCore/WebHost.cs rename to src/DefaultBuilder/src/WebHost.cs diff --git a/src/MetaPackages/src/Microsoft.AspNetCore/baseline.netcore.json b/src/DefaultBuilder/src/baseline.netcore.json similarity index 100% rename from src/MetaPackages/src/Microsoft.AspNetCore/baseline.netcore.json rename to src/DefaultBuilder/src/baseline.netcore.json diff --git a/src/DefaultBuilder/test/Microsoft.AspNetCore.FunctionalTests/Microsoft.AspNetCore.FunctionalTests.csproj b/src/DefaultBuilder/test/Microsoft.AspNetCore.FunctionalTests/Microsoft.AspNetCore.FunctionalTests.csproj new file mode 100644 index 000000000000..fc772e5cf7ca --- /dev/null +++ b/src/DefaultBuilder/test/Microsoft.AspNetCore.FunctionalTests/Microsoft.AspNetCore.FunctionalTests.csproj @@ -0,0 +1,16 @@ + + + + netcoreapp3.0 + + + + + + + + + + + + diff --git a/src/MetaPackages/test/Microsoft.AspNetCore.FunctionalTests/WebHostFunctionalTests.cs b/src/DefaultBuilder/test/Microsoft.AspNetCore.FunctionalTests/WebHostFunctionalTests.cs similarity index 99% rename from src/MetaPackages/test/Microsoft.AspNetCore.FunctionalTests/WebHostFunctionalTests.cs rename to src/DefaultBuilder/test/Microsoft.AspNetCore.FunctionalTests/WebHostFunctionalTests.cs index 0e41734ea0a1..60aa1c6562da 100644 --- a/src/MetaPackages/test/Microsoft.AspNetCore.FunctionalTests/WebHostFunctionalTests.cs +++ b/src/DefaultBuilder/test/Microsoft.AspNetCore.FunctionalTests/WebHostFunctionalTests.cs @@ -243,10 +243,10 @@ private static string GetTestSitesPath() var directoryInfo = new DirectoryInfo(applicationBasePath); do { - var solutionFileInfo = new FileInfo(Path.Combine(directoryInfo.FullName, "MetaPackages.sln")); + var solutionFileInfo = new FileInfo(Path.Combine(directoryInfo.FullName, "DefaultBuilder.sln")); if (solutionFileInfo.Exists) { - return Path.GetFullPath(Path.Combine(directoryInfo.FullName, "test", "TestSites")); + return Path.GetFullPath(Path.Combine(directoryInfo.FullName, "testassets")); } directoryInfo = directoryInfo.Parent; diff --git a/src/MetaPackages/test/Microsoft.AspNetCore.FunctionalTests/testCert.pfx b/src/DefaultBuilder/test/Microsoft.AspNetCore.FunctionalTests/testCert.pfx similarity index 100% rename from src/MetaPackages/test/Microsoft.AspNetCore.FunctionalTests/testCert.pfx rename to src/DefaultBuilder/test/Microsoft.AspNetCore.FunctionalTests/testCert.pfx diff --git a/src/DefaultBuilder/test/Microsoft.AspNetCore.Tests/Microsoft.AspNetCore.Tests.csproj b/src/DefaultBuilder/test/Microsoft.AspNetCore.Tests/Microsoft.AspNetCore.Tests.csproj new file mode 100644 index 000000000000..4281742c03c4 --- /dev/null +++ b/src/DefaultBuilder/test/Microsoft.AspNetCore.Tests/Microsoft.AspNetCore.Tests.csproj @@ -0,0 +1,11 @@ + + + + netcoreapp3.0 + + + + + + + diff --git a/src/MetaPackages/test/Microsoft.AspNetCore.Tests/WebHostTests.cs b/src/DefaultBuilder/test/Microsoft.AspNetCore.Tests/WebHostTests.cs similarity index 100% rename from src/MetaPackages/test/Microsoft.AspNetCore.Tests/WebHostTests.cs rename to src/DefaultBuilder/test/Microsoft.AspNetCore.Tests/WebHostTests.cs diff --git a/src/MetaPackages/test/TestSites/CreateDefaultBuilderApp/CreateDefaultBuilderApp.csproj b/src/DefaultBuilder/testassets/CreateDefaultBuilderApp/CreateDefaultBuilderApp.csproj similarity index 74% rename from src/MetaPackages/test/TestSites/CreateDefaultBuilderApp/CreateDefaultBuilderApp.csproj rename to src/DefaultBuilder/testassets/CreateDefaultBuilderApp/CreateDefaultBuilderApp.csproj index 3927bc65379d..f92ff6051ea6 100644 --- a/src/MetaPackages/test/TestSites/CreateDefaultBuilderApp/CreateDefaultBuilderApp.csproj +++ b/src/DefaultBuilder/testassets/CreateDefaultBuilderApp/CreateDefaultBuilderApp.csproj @@ -7,7 +7,7 @@ - + diff --git a/src/MetaPackages/test/TestSites/CreateDefaultBuilderApp/Program.cs b/src/DefaultBuilder/testassets/CreateDefaultBuilderApp/Program.cs similarity index 100% rename from src/MetaPackages/test/TestSites/CreateDefaultBuilderApp/Program.cs rename to src/DefaultBuilder/testassets/CreateDefaultBuilderApp/Program.cs diff --git a/src/MetaPackages/test/TestSites/CreateDefaultBuilderApp/appsettings.Development.json b/src/DefaultBuilder/testassets/CreateDefaultBuilderApp/appsettings.Development.json similarity index 100% rename from src/MetaPackages/test/TestSites/CreateDefaultBuilderApp/appsettings.Development.json rename to src/DefaultBuilder/testassets/CreateDefaultBuilderApp/appsettings.Development.json diff --git a/src/MetaPackages/test/TestSites/CreateDefaultBuilderApp/appsettings.json b/src/DefaultBuilder/testassets/CreateDefaultBuilderApp/appsettings.json similarity index 100% rename from src/MetaPackages/test/TestSites/CreateDefaultBuilderApp/appsettings.json rename to src/DefaultBuilder/testassets/CreateDefaultBuilderApp/appsettings.json diff --git a/src/MetaPackages/test/TestSites/CreateDefaultBuilderOfTApp/CreateDefaultBuilderOfTApp.csproj b/src/DefaultBuilder/testassets/CreateDefaultBuilderOfTApp/CreateDefaultBuilderOfTApp.csproj similarity index 74% rename from src/MetaPackages/test/TestSites/CreateDefaultBuilderOfTApp/CreateDefaultBuilderOfTApp.csproj rename to src/DefaultBuilder/testassets/CreateDefaultBuilderOfTApp/CreateDefaultBuilderOfTApp.csproj index ee45c5f74470..0020cf9f481c 100644 --- a/src/MetaPackages/test/TestSites/CreateDefaultBuilderOfTApp/CreateDefaultBuilderOfTApp.csproj +++ b/src/DefaultBuilder/testassets/CreateDefaultBuilderOfTApp/CreateDefaultBuilderOfTApp.csproj @@ -7,7 +7,7 @@ - + diff --git a/src/MetaPackages/test/TestSites/CreateDefaultBuilderOfTApp/Program.cs b/src/DefaultBuilder/testassets/CreateDefaultBuilderOfTApp/Program.cs similarity index 100% rename from src/MetaPackages/test/TestSites/CreateDefaultBuilderOfTApp/Program.cs rename to src/DefaultBuilder/testassets/CreateDefaultBuilderOfTApp/Program.cs diff --git a/src/MetaPackages/test/TestSites/CreateDefaultBuilderOfTApp/appsettings.Development.json b/src/DefaultBuilder/testassets/CreateDefaultBuilderOfTApp/appsettings.Development.json similarity index 100% rename from src/MetaPackages/test/TestSites/CreateDefaultBuilderOfTApp/appsettings.Development.json rename to src/DefaultBuilder/testassets/CreateDefaultBuilderOfTApp/appsettings.Development.json diff --git a/src/MetaPackages/test/TestSites/CreateDefaultBuilderOfTApp/appsettings.json b/src/DefaultBuilder/testassets/CreateDefaultBuilderOfTApp/appsettings.json similarity index 100% rename from src/MetaPackages/test/TestSites/CreateDefaultBuilderOfTApp/appsettings.json rename to src/DefaultBuilder/testassets/CreateDefaultBuilderOfTApp/appsettings.json diff --git a/src/MetaPackages/test/TestSites/DependencyInjectionApp/DependencyInjectionApp.csproj b/src/DefaultBuilder/testassets/DependencyInjectionApp/DependencyInjectionApp.csproj similarity index 67% rename from src/MetaPackages/test/TestSites/DependencyInjectionApp/DependencyInjectionApp.csproj rename to src/DefaultBuilder/testassets/DependencyInjectionApp/DependencyInjectionApp.csproj index 464ba5ae5586..08de4c797a4d 100644 --- a/src/MetaPackages/test/TestSites/DependencyInjectionApp/DependencyInjectionApp.csproj +++ b/src/DefaultBuilder/testassets/DependencyInjectionApp/DependencyInjectionApp.csproj @@ -6,7 +6,7 @@ - + diff --git a/src/MetaPackages/test/TestSites/DependencyInjectionApp/Program.cs b/src/DefaultBuilder/testassets/DependencyInjectionApp/Program.cs similarity index 100% rename from src/MetaPackages/test/TestSites/DependencyInjectionApp/Program.cs rename to src/DefaultBuilder/testassets/DependencyInjectionApp/Program.cs diff --git a/src/MetaPackages/test/TestSites/StartRequestDelegateUrlApp/Program.cs b/src/DefaultBuilder/testassets/StartRequestDelegateUrlApp/Program.cs similarity index 100% rename from src/MetaPackages/test/TestSites/StartRequestDelegateUrlApp/Program.cs rename to src/DefaultBuilder/testassets/StartRequestDelegateUrlApp/Program.cs diff --git a/src/MetaPackages/test/TestSites/StartRequestDelegateUrlApp/StartRequestDelegateUrlApp.csproj b/src/DefaultBuilder/testassets/StartRequestDelegateUrlApp/StartRequestDelegateUrlApp.csproj similarity index 67% rename from src/MetaPackages/test/TestSites/StartRequestDelegateUrlApp/StartRequestDelegateUrlApp.csproj rename to src/DefaultBuilder/testassets/StartRequestDelegateUrlApp/StartRequestDelegateUrlApp.csproj index 464ba5ae5586..08de4c797a4d 100644 --- a/src/MetaPackages/test/TestSites/StartRequestDelegateUrlApp/StartRequestDelegateUrlApp.csproj +++ b/src/DefaultBuilder/testassets/StartRequestDelegateUrlApp/StartRequestDelegateUrlApp.csproj @@ -6,7 +6,7 @@ - + diff --git a/src/MetaPackages/test/TestSites/StartRouteBuilderUrlApp/Program.cs b/src/DefaultBuilder/testassets/StartRouteBuilderUrlApp/Program.cs similarity index 100% rename from src/MetaPackages/test/TestSites/StartRouteBuilderUrlApp/Program.cs rename to src/DefaultBuilder/testassets/StartRouteBuilderUrlApp/Program.cs diff --git a/src/MetaPackages/test/TestSites/StartRouteBuilderUrlApp/StartRouteBuilderUrlApp.csproj b/src/DefaultBuilder/testassets/StartRouteBuilderUrlApp/StartRouteBuilderUrlApp.csproj similarity index 67% rename from src/MetaPackages/test/TestSites/StartRouteBuilderUrlApp/StartRouteBuilderUrlApp.csproj rename to src/DefaultBuilder/testassets/StartRouteBuilderUrlApp/StartRouteBuilderUrlApp.csproj index 464ba5ae5586..08de4c797a4d 100644 --- a/src/MetaPackages/test/TestSites/StartRouteBuilderUrlApp/StartRouteBuilderUrlApp.csproj +++ b/src/DefaultBuilder/testassets/StartRouteBuilderUrlApp/StartRouteBuilderUrlApp.csproj @@ -6,7 +6,7 @@ - + diff --git a/src/MetaPackages/test/TestSites/StartWithIApplicationBuilderUrlApp/Program.cs b/src/DefaultBuilder/testassets/StartWithIApplicationBuilderUrlApp/Program.cs similarity index 100% rename from src/MetaPackages/test/TestSites/StartWithIApplicationBuilderUrlApp/Program.cs rename to src/DefaultBuilder/testassets/StartWithIApplicationBuilderUrlApp/Program.cs diff --git a/src/MetaPackages/test/TestSites/StartWithIApplicationBuilderUrlApp/StartWithIApplicationBuilderUrlApp.csproj b/src/DefaultBuilder/testassets/StartWithIApplicationBuilderUrlApp/StartWithIApplicationBuilderUrlApp.csproj similarity index 67% rename from src/MetaPackages/test/TestSites/StartWithIApplicationBuilderUrlApp/StartWithIApplicationBuilderUrlApp.csproj rename to src/DefaultBuilder/testassets/StartWithIApplicationBuilderUrlApp/StartWithIApplicationBuilderUrlApp.csproj index 464ba5ae5586..08de4c797a4d 100644 --- a/src/MetaPackages/test/TestSites/StartWithIApplicationBuilderUrlApp/StartWithIApplicationBuilderUrlApp.csproj +++ b/src/DefaultBuilder/testassets/StartWithIApplicationBuilderUrlApp/StartWithIApplicationBuilderUrlApp.csproj @@ -6,7 +6,7 @@ - + diff --git a/src/Features/JsonPatch/src/Microsoft.AspNetCore.JsonPatch.csproj b/src/Features/JsonPatch/src/Microsoft.AspNetCore.JsonPatch.csproj index 3708e92927ef..f6f11fd3b3fc 100644 --- a/src/Features/JsonPatch/src/Microsoft.AspNetCore.JsonPatch.csproj +++ b/src/Features/JsonPatch/src/Microsoft.AspNetCore.JsonPatch.csproj @@ -8,10 +8,13 @@ aspnetcore;json;jsonpatch + + + + - diff --git a/src/Hosting/Hosting/src/Microsoft.AspNetCore.Hosting.csproj b/src/Hosting/Hosting/src/Microsoft.AspNetCore.Hosting.csproj index 8cd2e1fa3fb1..be6280508722 100644 --- a/src/Hosting/Hosting/src/Microsoft.AspNetCore.Hosting.csproj +++ b/src/Hosting/Hosting/src/Microsoft.AspNetCore.Hosting.csproj @@ -8,6 +8,11 @@ aspnetcore;hosting + + + + + @@ -20,8 +25,6 @@ - - diff --git a/src/Hosting/Server.IntegrationTesting/src/Microsoft.AspNetCore.Server.IntegrationTesting.csproj b/src/Hosting/Server.IntegrationTesting/src/Microsoft.AspNetCore.Server.IntegrationTesting.csproj index 8b3394c3ad8e..12f22c7936d5 100644 --- a/src/Hosting/Server.IntegrationTesting/src/Microsoft.AspNetCore.Server.IntegrationTesting.csproj +++ b/src/Hosting/Server.IntegrationTesting/src/Microsoft.AspNetCore.Server.IntegrationTesting.csproj @@ -16,10 +16,8 @@ + - - - @@ -30,7 +28,6 @@ - diff --git a/src/Http/Http.Abstractions/src/Microsoft.AspNetCore.Http.Abstractions.csproj b/src/Http/Http.Abstractions/src/Microsoft.AspNetCore.Http.Abstractions.csproj index 74b69e0bbb00..2f17e520197a 100644 --- a/src/Http/Http.Abstractions/src/Microsoft.AspNetCore.Http.Abstractions.csproj +++ b/src/Http/Http.Abstractions/src/Microsoft.AspNetCore.Http.Abstractions.csproj @@ -14,10 +14,13 @@ Microsoft.AspNetCore.Http.HttpResponse $(NoWarn);CS1591 + + + + - diff --git a/src/Http/Http/src/Microsoft.AspNetCore.Http.csproj b/src/Http/Http/src/Microsoft.AspNetCore.Http.csproj index 110f17509c73..1575488b8017 100644 --- a/src/Http/Http/src/Microsoft.AspNetCore.Http.csproj +++ b/src/Http/Http/src/Microsoft.AspNetCore.Http.csproj @@ -9,10 +9,13 @@ aspnetcore + + + + - diff --git a/src/Http/Routing.Abstractions/src/Microsoft.AspNetCore.Routing.Abstractions.csproj b/src/Http/Routing.Abstractions/src/Microsoft.AspNetCore.Routing.Abstractions.csproj index d1bdb37d7873..4b2518a515c0 100644 --- a/src/Http/Routing.Abstractions/src/Microsoft.AspNetCore.Routing.Abstractions.csproj +++ b/src/Http/Routing.Abstractions/src/Microsoft.AspNetCore.Routing.Abstractions.csproj @@ -11,8 +11,11 @@ Microsoft.AspNetCore.Routing.RouteData aspnetcore;routing + + + + - diff --git a/src/Http/Routing/src/Microsoft.AspNetCore.Routing.csproj b/src/Http/Routing/src/Microsoft.AspNetCore.Routing.csproj index dd5f39790643..6bcff41bb5e0 100644 --- a/src/Http/Routing/src/Microsoft.AspNetCore.Routing.csproj +++ b/src/Http/Routing/src/Microsoft.AspNetCore.Routing.csproj @@ -20,6 +20,10 @@ Microsoft.AspNetCore.Routing.RouteCollection IL_EMIT_SAVE_ASSEMBLIES;$(DefineConstants) + + + + @@ -27,7 +31,6 @@ Microsoft.AspNetCore.Routing.RouteCollection - diff --git a/src/Http/WebUtilities/src/Microsoft.AspNetCore.WebUtilities.csproj b/src/Http/WebUtilities/src/Microsoft.AspNetCore.WebUtilities.csproj index 376d23b28d1d..befbf9abc472 100644 --- a/src/Http/WebUtilities/src/Microsoft.AspNetCore.WebUtilities.csproj +++ b/src/Http/WebUtilities/src/Microsoft.AspNetCore.WebUtilities.csproj @@ -10,7 +10,10 @@ - + + + + diff --git a/src/IISIntegration/Directory.Build.props b/src/IISIntegration/Directory.Build.props deleted file mode 100644 index 0a9fa7039c71..000000000000 --- a/src/IISIntegration/Directory.Build.props +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - false - true - - false - - - diff --git a/src/IISIntegration/IISIntegration.sln b/src/IISIntegration/IISIntegration.sln deleted file mode 100644 index 3cce79cd3676..000000000000 --- a/src/IISIntegration/IISIntegration.sln +++ /dev/null @@ -1,739 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.27130.2036 -MinimumVisualStudioVersion = 15.0.26730.03 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{04B1EDB6-E967-4D25-89B9-E6F8304038CD}" - ProjectSection(SolutionItems) = preProject - src\Directory.Build.props = src\Directory.Build.props - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{0EF45656-B25D-40D8-959C-726EAF185E60}" - ProjectSection(SolutionItems) = preProject - .appveyor.yml = .appveyor.yml - .editorconfig = .editorconfig - Directory.Build.props = Directory.Build.props - Directory.Build.targets = Directory.Build.targets - NuGet.Config = NuGet.Config - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{EF30B533-D715-421A-92B7-92FEF460AC9C}" - ProjectSection(SolutionItems) = preProject - test\Directory.Build.props = test\Directory.Build.props - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{C74B8F36-FD2F-45C9-9B8A-00E7CF0126A9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IISSample", "samples\IISSample\IISSample.csproj", "{E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.IISIntegration", "src\Microsoft.AspNetCore.Server.IISIntegration\Microsoft.AspNetCore.Server.IISIntegration.csproj", "{8B3446E8-E6A8-4591-AA63-A95837C6E97C}" - ProjectSection(ProjectDependencies) = postProject - {46A8612B-418B-4D70-B3A7-A21DD0627473} = {46A8612B-418B-4D70-B3A7-A21DD0627473} - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.IISIntegration.Tests", "test\Microsoft.AspNetCore.Server.IISIntegration.Tests\Microsoft.AspNetCore.Server.IISIntegration.Tests.csproj", "{4106DB10-E09F-480E-9CE6-B39235512EE6}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{7E80C58E-9CC8-450C-8A8D-94FC76428150}" - ProjectSection(SolutionItems) = preProject - build\applicationhost.config = build\applicationhost.config - build\applicationhost.iis.config = build\applicationhost.iis.config - build\build.msbuild = build\build.msbuild - build\Build.Settings = build\Build.Settings - build\Config.Definitions.Props = build\Config.Definitions.Props - build\dependencies.props = build\dependencies.props - 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 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IISExpress.FunctionalTests", "test\IISExpress.FunctionalTests\IISExpress.FunctionalTests.csproj", "{4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}" - ProjectSection(ProjectDependencies) = postProject - {7F87406C-A3C8-4139-A68D-E4C344294A67} = {7F87406C-A3C8-4139-A68D-E4C344294A67} - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NativeIISSample", "samples\NativeIISSample\NativeIISSample.csproj", "{9BC4AFCB-325D-4C81-8228-8CF301CE2F97}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InProcessWebSite", "test\WebSites\InProcessWebSite\InProcessWebSite.csproj", "{679FA2A2-898B-4320-884E-C2D294A97CE1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.IIS", "src\Microsoft.AspNetCore.Server.IIS\Microsoft.AspNetCore.Server.IIS.csproj", "{46A8612B-418B-4D70-B3A7-A21DD0627473}" - ProjectSection(ProjectDependencies) = postProject - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B} = {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B} - {55494E58-E061-4C4C-A0A8-837008E72F85} = {55494E58-E061-4C4C-A0A8-837008E72F85} - {7F87406C-A3C8-4139-A68D-E4C344294A67} = {7F87406C-A3C8-4139-A68D-E4C344294A67} - {D57EA297-6DC2-4BC0-8C91-334863327863} = {D57EA297-6DC2-4BC0-8C91-334863327863} - {439824F9-1455-4CC4-BD79-B44FA0A16552} = {439824F9-1455-4CC4-BD79-B44FA0A16552} - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "StressTestWebSite", "test\WebSites\StressTestWebSite\StressTestWebSite.csproj", "{13FD8F12-FFBE-4D01-B4AC-444F2994B04F}" - ProjectSection(ProjectDependencies) = postProject - {46A8612B-418B-4D70-B3A7-A21DD0627473} = {46A8612B-418B-4D70-B3A7-A21DD0627473} - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestTasks", "test\TestTasks\TestTasks.csproj", "{064D860B-4D7C-4B1D-918F-E020F1B99E2A}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WebSites", "WebSites", "{744ACDC6-F6A0-4FF9-9421-F25C5F2DC520}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CommonLibTests", "test\CommonLibTests\CommonLibTests.vcxproj", "{1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AspNetCoreModuleV1", "AspNetCoreModuleV1", "{16E521CE-77F1-4B1C-A183-520A41C4F372}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AspNetCoreModuleV2", "AspNetCoreModuleV2", "{06CA2C2B-83B0-4D83-905A-E0C74790009E}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "IISLib", "src\AspNetCoreModuleV1\IISLib\IISLib.vcxproj", "{4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AspNetCore", "src\AspNetCoreModuleV1\AspNetCore\AspNetCore.vcxproj", "{439824F9-1455-4CC4-BD79-B44FA0A16552}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AspNetCore", "src\AspNetCoreModuleV2\AspNetCore\AspNetCore.vcxproj", "{EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CommonLib", "src\AspNetCoreModuleV2\CommonLib\CommonLib.vcxproj", "{55494E58-E061-4C4C-A0A8-837008E72F85}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "IISLib", "src\AspNetCoreModuleV2\IISLib\IISLib.vcxproj", "{09D9D1D6-2951-4E14-BC35-76A23CF9391A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OutOfProcessWebSite", "test\WebSites\OutOfProcessWebSite\OutOfProcessWebSite.csproj", "{42E60F88-E23F-417A-8143-0CCEC05E1D02}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "benchmarks", "benchmarks", "{622D35C9-627B-466E-8D15-752968CC79AF}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IIS.Performance", "benchmarks\IIS.Performance\IIS.Performance.csproj", "{48F46909-E76A-4788-BCE1-E543C0E140FE}" - ProjectSection(ProjectDependencies) = postProject - {46A8612B-418B-4D70-B3A7-A21DD0627473} = {46A8612B-418B-4D70-B3A7-A21DD0627473} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "InProcessRequestHandler", "src\AspNetCoreModuleV2\InProcessRequestHandler\InProcessRequestHandler.vcxproj", "{D57EA297-6DC2-4BC0-8C91-334863327863}" - ProjectSection(ProjectDependencies) = postProject - {09D9D1D6-2951-4E14-BC35-76A23CF9391A} = {09D9D1D6-2951-4E14-BC35-76A23CF9391A} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OutOfProcessRequestHandler", "src\AspNetCoreModuleV2\OutOfProcessRequestHandler\OutOfProcessRequestHandler.vcxproj", "{7F87406C-A3C8-4139-A68D-E4C344294A67}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest", "test\gtest\gtest.vcxproj", "{CAC1267B-8778-4257-AAC6-CAF481723B01}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RequestHandlerLib", "src\AspNetCoreModuleV2\RequestHandlerLib\RequestHandlerLib.vcxproj", "{1533E271-F61B-441B-8B74-59FB61DF0552}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IIS.FunctionalTests", "test\IIS.FunctionalTests\IIS.FunctionalTests.csproj", "{1F0C8D9B-F47B-41F3-9FC9-6954B6DC7712}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.IntegrationTesting.IIS", "src\Microsoft.AspNetCore.Server.IntegrationTesting.IIS\Microsoft.AspNetCore.Server.IntegrationTesting.IIS.csproj", "{CE4FB142-91FB-4B34-BC96-A31120EF4009}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IIS.Tests", "test\IIS.Tests\IIS.Tests.csproj", "{A091777D-66B3-42E1-B95C-85322DE40706}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Common.Tests", "test\Common.Tests\Common.Tests.csproj", "{A641A208-2974-4E48-BCFF-54E3AAFA4FB9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IIS.BackwardsCompatibility.FunctionalTests", "test\IIS.BackwardsCompatibility.FunctionalTests\IIS.BackwardsCompatibility.FunctionalTests.csproj", "{28055B05-25D4-4F17-9F36-A1D09FDDA607}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IIS.ForwardsCompatibility.FunctionalTests", "test\IIS.ForwardsCompatibility.FunctionalTests\IIS.ForwardsCompatibility.FunctionalTests.csproj", "{F6FAA65F-AA29-4DDA-AA89-C16AF4A69F9F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InProcessForwardsCompatWebSite", "test\WebSites\InProcessForwardsCompatWebSite\InProcessWebSite.csproj", "{980DAB60-6471-46EC-82EE-B457D91C3789}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 - NativeDebug|Any CPU = NativeDebug|Any CPU - NativeDebug|x64 = NativeDebug|x64 - NativeDebug|x86 = NativeDebug|x86 - NativeRelease|Any CPU = NativeRelease|Any CPU - NativeRelease|x64 = NativeRelease|x64 - NativeRelease|x86 = NativeRelease|x86 - Release|Any CPU = Release|Any CPU - Release|x64 = Release|x64 - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.Debug|x64.ActiveCfg = Debug|Any CPU - {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.Debug|x64.Build.0 = Debug|Any CPU - {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.Debug|x86.ActiveCfg = Debug|Any CPU - {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.Debug|x86.Build.0 = Debug|Any CPU - {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.NativeDebug|Any CPU.ActiveCfg = Debug|Any CPU - {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.NativeDebug|Any CPU.Build.0 = Debug|Any CPU - {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.NativeDebug|x64.ActiveCfg = Debug|Any CPU - {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.NativeDebug|x86.ActiveCfg = Debug|Any CPU - {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.NativeRelease|Any CPU.ActiveCfg = Release|Any CPU - {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.NativeRelease|Any CPU.Build.0 = Release|Any CPU - {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.NativeRelease|x64.ActiveCfg = Release|Any CPU - {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.NativeRelease|x86.ActiveCfg = Release|Any CPU - {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.Release|Any CPU.Build.0 = Release|Any CPU - {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.Release|x64.ActiveCfg = Release|Any CPU - {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.Release|x64.Build.0 = Release|Any CPU - {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.Release|x86.ActiveCfg = Release|Any CPU - {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.Release|x86.Build.0 = Release|Any CPU - {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.Debug|x64.ActiveCfg = Debug|Any CPU - {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.Debug|x64.Build.0 = Debug|Any CPU - {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.Debug|x86.ActiveCfg = Debug|Any CPU - {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.Debug|x86.Build.0 = Debug|Any CPU - {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.NativeDebug|Any CPU.ActiveCfg = Debug|Any CPU - {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.NativeDebug|Any CPU.Build.0 = Debug|Any CPU - {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.NativeDebug|x64.ActiveCfg = Debug|Any CPU - {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.NativeDebug|x86.ActiveCfg = Debug|Any CPU - {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.NativeRelease|Any CPU.ActiveCfg = Release|Any CPU - {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.NativeRelease|Any CPU.Build.0 = Release|Any CPU - {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.NativeRelease|x64.ActiveCfg = Release|Any CPU - {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.NativeRelease|x86.ActiveCfg = Release|Any CPU - {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.Release|Any CPU.Build.0 = Release|Any CPU - {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.Release|x64.ActiveCfg = Release|Any CPU - {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.Release|x64.Build.0 = Release|Any CPU - {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.Release|x86.ActiveCfg = Release|Any CPU - {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.Release|x86.Build.0 = Release|Any CPU - {4106DB10-E09F-480E-9CE6-B39235512EE6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4106DB10-E09F-480E-9CE6-B39235512EE6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4106DB10-E09F-480E-9CE6-B39235512EE6}.Debug|x64.ActiveCfg = Debug|Any CPU - {4106DB10-E09F-480E-9CE6-B39235512EE6}.Debug|x64.Build.0 = Debug|Any CPU - {4106DB10-E09F-480E-9CE6-B39235512EE6}.Debug|x86.ActiveCfg = Debug|Any CPU - {4106DB10-E09F-480E-9CE6-B39235512EE6}.Debug|x86.Build.0 = Debug|Any CPU - {4106DB10-E09F-480E-9CE6-B39235512EE6}.NativeDebug|Any CPU.ActiveCfg = Debug|Any CPU - {4106DB10-E09F-480E-9CE6-B39235512EE6}.NativeDebug|Any CPU.Build.0 = Debug|Any CPU - {4106DB10-E09F-480E-9CE6-B39235512EE6}.NativeDebug|x64.ActiveCfg = Debug|Any CPU - {4106DB10-E09F-480E-9CE6-B39235512EE6}.NativeDebug|x86.ActiveCfg = Debug|Any CPU - {4106DB10-E09F-480E-9CE6-B39235512EE6}.NativeRelease|Any CPU.ActiveCfg = Release|Any CPU - {4106DB10-E09F-480E-9CE6-B39235512EE6}.NativeRelease|Any CPU.Build.0 = Release|Any CPU - {4106DB10-E09F-480E-9CE6-B39235512EE6}.NativeRelease|x64.ActiveCfg = Release|Any CPU - {4106DB10-E09F-480E-9CE6-B39235512EE6}.NativeRelease|x86.ActiveCfg = Release|Any CPU - {4106DB10-E09F-480E-9CE6-B39235512EE6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4106DB10-E09F-480E-9CE6-B39235512EE6}.Release|Any CPU.Build.0 = Release|Any CPU - {4106DB10-E09F-480E-9CE6-B39235512EE6}.Release|x64.ActiveCfg = Release|Any CPU - {4106DB10-E09F-480E-9CE6-B39235512EE6}.Release|x64.Build.0 = Release|Any CPU - {4106DB10-E09F-480E-9CE6-B39235512EE6}.Release|x86.ActiveCfg = Release|Any CPU - {4106DB10-E09F-480E-9CE6-B39235512EE6}.Release|x86.Build.0 = Release|Any CPU - {4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}.Debug|x64.ActiveCfg = Debug|Any CPU - {4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}.Debug|x64.Build.0 = Debug|Any CPU - {4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}.Debug|x86.ActiveCfg = Debug|Any CPU - {4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}.Debug|x86.Build.0 = Debug|Any CPU - {4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}.NativeDebug|Any CPU.ActiveCfg = Debug|Any CPU - {4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}.NativeDebug|Any CPU.Build.0 = Debug|Any CPU - {4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}.NativeDebug|x64.ActiveCfg = Debug|Any CPU - {4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}.NativeDebug|x86.ActiveCfg = Debug|Any CPU - {4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}.NativeRelease|Any CPU.ActiveCfg = Release|Any CPU - {4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}.NativeRelease|Any CPU.Build.0 = Release|Any CPU - {4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}.NativeRelease|x64.ActiveCfg = Release|Any CPU - {4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}.NativeRelease|x86.ActiveCfg = Release|Any CPU - {4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}.Release|Any CPU.Build.0 = Release|Any CPU - {4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}.Release|x64.ActiveCfg = Release|Any CPU - {4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}.Release|x64.Build.0 = Release|Any CPU - {4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}.Release|x86.ActiveCfg = Release|Any CPU - {4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}.Release|x86.Build.0 = Release|Any CPU - {9BC4AFCB-325D-4C81-8228-8CF301CE2F97}.Debug|Any CPU.ActiveCfg = Debug|x64 - {9BC4AFCB-325D-4C81-8228-8CF301CE2F97}.Debug|Any CPU.Build.0 = Debug|x64 - {9BC4AFCB-325D-4C81-8228-8CF301CE2F97}.Debug|x64.ActiveCfg = Debug|x64 - {9BC4AFCB-325D-4C81-8228-8CF301CE2F97}.Debug|x64.Build.0 = Debug|x64 - {9BC4AFCB-325D-4C81-8228-8CF301CE2F97}.Debug|x86.ActiveCfg = Debug|x86 - {9BC4AFCB-325D-4C81-8228-8CF301CE2F97}.Debug|x86.Build.0 = Debug|x86 - {9BC4AFCB-325D-4C81-8228-8CF301CE2F97}.NativeDebug|Any CPU.ActiveCfg = Debug|x64 - {9BC4AFCB-325D-4C81-8228-8CF301CE2F97}.NativeDebug|Any CPU.Build.0 = Debug|x64 - {9BC4AFCB-325D-4C81-8228-8CF301CE2F97}.NativeDebug|x64.ActiveCfg = Debug|x64 - {9BC4AFCB-325D-4C81-8228-8CF301CE2F97}.NativeDebug|x86.ActiveCfg = Debug|x86 - {9BC4AFCB-325D-4C81-8228-8CF301CE2F97}.NativeRelease|Any CPU.ActiveCfg = Release|x64 - {9BC4AFCB-325D-4C81-8228-8CF301CE2F97}.NativeRelease|Any CPU.Build.0 = Release|x64 - {9BC4AFCB-325D-4C81-8228-8CF301CE2F97}.NativeRelease|x64.ActiveCfg = Release|x64 - {9BC4AFCB-325D-4C81-8228-8CF301CE2F97}.NativeRelease|x86.ActiveCfg = Release|x86 - {9BC4AFCB-325D-4C81-8228-8CF301CE2F97}.Release|Any CPU.ActiveCfg = Release|x64 - {9BC4AFCB-325D-4C81-8228-8CF301CE2F97}.Release|Any CPU.Build.0 = Release|x64 - {9BC4AFCB-325D-4C81-8228-8CF301CE2F97}.Release|x64.ActiveCfg = Release|x64 - {9BC4AFCB-325D-4C81-8228-8CF301CE2F97}.Release|x64.Build.0 = Release|x64 - {9BC4AFCB-325D-4C81-8228-8CF301CE2F97}.Release|x86.ActiveCfg = Release|x86 - {9BC4AFCB-325D-4C81-8228-8CF301CE2F97}.Release|x86.Build.0 = Release|x86 - {679FA2A2-898B-4320-884E-C2D294A97CE1}.Debug|Any CPU.ActiveCfg = Debug|x64 - {679FA2A2-898B-4320-884E-C2D294A97CE1}.Debug|Any CPU.Build.0 = Debug|x64 - {679FA2A2-898B-4320-884E-C2D294A97CE1}.Debug|x64.ActiveCfg = Debug|x64 - {679FA2A2-898B-4320-884E-C2D294A97CE1}.Debug|x64.Build.0 = Debug|x64 - {679FA2A2-898B-4320-884E-C2D294A97CE1}.Debug|x86.ActiveCfg = Debug|x86 - {679FA2A2-898B-4320-884E-C2D294A97CE1}.Debug|x86.Build.0 = Debug|x86 - {679FA2A2-898B-4320-884E-C2D294A97CE1}.NativeDebug|Any CPU.ActiveCfg = Debug|x64 - {679FA2A2-898B-4320-884E-C2D294A97CE1}.NativeDebug|Any CPU.Build.0 = Debug|x64 - {679FA2A2-898B-4320-884E-C2D294A97CE1}.NativeDebug|x64.ActiveCfg = Debug|x64 - {679FA2A2-898B-4320-884E-C2D294A97CE1}.NativeDebug|x86.ActiveCfg = Debug|x86 - {679FA2A2-898B-4320-884E-C2D294A97CE1}.NativeRelease|Any CPU.ActiveCfg = Release|x64 - {679FA2A2-898B-4320-884E-C2D294A97CE1}.NativeRelease|Any CPU.Build.0 = Release|x64 - {679FA2A2-898B-4320-884E-C2D294A97CE1}.NativeRelease|x64.ActiveCfg = Release|x64 - {679FA2A2-898B-4320-884E-C2D294A97CE1}.NativeRelease|x86.ActiveCfg = Release|x86 - {679FA2A2-898B-4320-884E-C2D294A97CE1}.Release|Any CPU.ActiveCfg = Release|x64 - {679FA2A2-898B-4320-884E-C2D294A97CE1}.Release|Any CPU.Build.0 = Release|x64 - {679FA2A2-898B-4320-884E-C2D294A97CE1}.Release|x64.ActiveCfg = Release|x64 - {679FA2A2-898B-4320-884E-C2D294A97CE1}.Release|x64.Build.0 = Release|x64 - {679FA2A2-898B-4320-884E-C2D294A97CE1}.Release|x86.ActiveCfg = Release|x86 - {679FA2A2-898B-4320-884E-C2D294A97CE1}.Release|x86.Build.0 = Release|x86 - {46A8612B-418B-4D70-B3A7-A21DD0627473}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {46A8612B-418B-4D70-B3A7-A21DD0627473}.Debug|Any CPU.Build.0 = Debug|Any CPU - {46A8612B-418B-4D70-B3A7-A21DD0627473}.Debug|x64.ActiveCfg = Debug|Any CPU - {46A8612B-418B-4D70-B3A7-A21DD0627473}.Debug|x64.Build.0 = Debug|Any CPU - {46A8612B-418B-4D70-B3A7-A21DD0627473}.Debug|x86.ActiveCfg = Debug|Any CPU - {46A8612B-418B-4D70-B3A7-A21DD0627473}.Debug|x86.Build.0 = Debug|Any CPU - {46A8612B-418B-4D70-B3A7-A21DD0627473}.NativeDebug|Any CPU.ActiveCfg = Debug|Any CPU - {46A8612B-418B-4D70-B3A7-A21DD0627473}.NativeDebug|Any CPU.Build.0 = Debug|Any CPU - {46A8612B-418B-4D70-B3A7-A21DD0627473}.NativeDebug|x64.ActiveCfg = Debug|Any CPU - {46A8612B-418B-4D70-B3A7-A21DD0627473}.NativeDebug|x86.ActiveCfg = Debug|Any CPU - {46A8612B-418B-4D70-B3A7-A21DD0627473}.NativeRelease|Any CPU.ActiveCfg = Release|Any CPU - {46A8612B-418B-4D70-B3A7-A21DD0627473}.NativeRelease|Any CPU.Build.0 = Release|Any CPU - {46A8612B-418B-4D70-B3A7-A21DD0627473}.NativeRelease|x64.ActiveCfg = Release|Any CPU - {46A8612B-418B-4D70-B3A7-A21DD0627473}.NativeRelease|x86.ActiveCfg = Release|Any CPU - {46A8612B-418B-4D70-B3A7-A21DD0627473}.Release|Any CPU.ActiveCfg = Release|Any CPU - {46A8612B-418B-4D70-B3A7-A21DD0627473}.Release|Any CPU.Build.0 = Release|Any CPU - {46A8612B-418B-4D70-B3A7-A21DD0627473}.Release|x64.ActiveCfg = Release|Any CPU - {46A8612B-418B-4D70-B3A7-A21DD0627473}.Release|x64.Build.0 = Release|Any CPU - {46A8612B-418B-4D70-B3A7-A21DD0627473}.Release|x86.ActiveCfg = Release|Any CPU - {46A8612B-418B-4D70-B3A7-A21DD0627473}.Release|x86.Build.0 = Release|Any CPU - {13FD8F12-FFBE-4D01-B4AC-444F2994B04F}.Debug|Any CPU.ActiveCfg = Debug|x64 - {13FD8F12-FFBE-4D01-B4AC-444F2994B04F}.Debug|Any CPU.Build.0 = Debug|x64 - {13FD8F12-FFBE-4D01-B4AC-444F2994B04F}.Debug|x64.ActiveCfg = Debug|x64 - {13FD8F12-FFBE-4D01-B4AC-444F2994B04F}.Debug|x64.Build.0 = Debug|x64 - {13FD8F12-FFBE-4D01-B4AC-444F2994B04F}.Debug|x86.ActiveCfg = Debug|x86 - {13FD8F12-FFBE-4D01-B4AC-444F2994B04F}.Debug|x86.Build.0 = Debug|x86 - {13FD8F12-FFBE-4D01-B4AC-444F2994B04F}.NativeDebug|Any CPU.ActiveCfg = Debug|x64 - {13FD8F12-FFBE-4D01-B4AC-444F2994B04F}.NativeDebug|Any CPU.Build.0 = Debug|x64 - {13FD8F12-FFBE-4D01-B4AC-444F2994B04F}.NativeDebug|x64.ActiveCfg = Debug|x64 - {13FD8F12-FFBE-4D01-B4AC-444F2994B04F}.NativeDebug|x86.ActiveCfg = Debug|x86 - {13FD8F12-FFBE-4D01-B4AC-444F2994B04F}.NativeRelease|Any CPU.ActiveCfg = Release|x64 - {13FD8F12-FFBE-4D01-B4AC-444F2994B04F}.NativeRelease|Any CPU.Build.0 = Release|x64 - {13FD8F12-FFBE-4D01-B4AC-444F2994B04F}.NativeRelease|x64.ActiveCfg = Release|x64 - {13FD8F12-FFBE-4D01-B4AC-444F2994B04F}.NativeRelease|x86.ActiveCfg = Release|x86 - {13FD8F12-FFBE-4D01-B4AC-444F2994B04F}.Release|Any CPU.ActiveCfg = Release|x64 - {13FD8F12-FFBE-4D01-B4AC-444F2994B04F}.Release|Any CPU.Build.0 = Release|x64 - {13FD8F12-FFBE-4D01-B4AC-444F2994B04F}.Release|x64.ActiveCfg = Release|x64 - {13FD8F12-FFBE-4D01-B4AC-444F2994B04F}.Release|x64.Build.0 = Release|x64 - {13FD8F12-FFBE-4D01-B4AC-444F2994B04F}.Release|x86.ActiveCfg = Release|x86 - {13FD8F12-FFBE-4D01-B4AC-444F2994B04F}.Release|x86.Build.0 = Release|x86 - {064D860B-4D7C-4B1D-918F-E020F1B99E2A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {064D860B-4D7C-4B1D-918F-E020F1B99E2A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {064D860B-4D7C-4B1D-918F-E020F1B99E2A}.Debug|x64.ActiveCfg = Debug|Any CPU - {064D860B-4D7C-4B1D-918F-E020F1B99E2A}.Debug|x64.Build.0 = Debug|Any CPU - {064D860B-4D7C-4B1D-918F-E020F1B99E2A}.Debug|x86.ActiveCfg = Debug|Any CPU - {064D860B-4D7C-4B1D-918F-E020F1B99E2A}.Debug|x86.Build.0 = Debug|Any CPU - {064D860B-4D7C-4B1D-918F-E020F1B99E2A}.NativeDebug|Any CPU.ActiveCfg = Debug|Any CPU - {064D860B-4D7C-4B1D-918F-E020F1B99E2A}.NativeDebug|Any CPU.Build.0 = Debug|Any CPU - {064D860B-4D7C-4B1D-918F-E020F1B99E2A}.NativeDebug|x64.ActiveCfg = Debug|Any CPU - {064D860B-4D7C-4B1D-918F-E020F1B99E2A}.NativeDebug|x86.ActiveCfg = Debug|Any CPU - {064D860B-4D7C-4B1D-918F-E020F1B99E2A}.NativeRelease|Any CPU.ActiveCfg = Release|Any CPU - {064D860B-4D7C-4B1D-918F-E020F1B99E2A}.NativeRelease|Any CPU.Build.0 = Release|Any CPU - {064D860B-4D7C-4B1D-918F-E020F1B99E2A}.NativeRelease|x64.ActiveCfg = Release|Any CPU - {064D860B-4D7C-4B1D-918F-E020F1B99E2A}.NativeRelease|x86.ActiveCfg = Release|Any CPU - {064D860B-4D7C-4B1D-918F-E020F1B99E2A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {064D860B-4D7C-4B1D-918F-E020F1B99E2A}.Release|Any CPU.Build.0 = Release|Any CPU - {064D860B-4D7C-4B1D-918F-E020F1B99E2A}.Release|x64.ActiveCfg = Release|Any CPU - {064D860B-4D7C-4B1D-918F-E020F1B99E2A}.Release|x64.Build.0 = Release|Any CPU - {064D860B-4D7C-4B1D-918F-E020F1B99E2A}.Release|x86.ActiveCfg = Release|Any CPU - {064D860B-4D7C-4B1D-918F-E020F1B99E2A}.Release|x86.Build.0 = Release|Any CPU - {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}.Debug|x64.ActiveCfg = Debug|x64 - {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}.Debug|x64.Build.0 = Debug|x64 - {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}.Debug|x86.ActiveCfg = Debug|Win32 - {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}.Debug|x86.Build.0 = Debug|Win32 - {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}.NativeDebug|Any CPU.ActiveCfg = Debug|Win32 - {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}.NativeDebug|x64.ActiveCfg = Debug|x64 - {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}.NativeDebug|x64.Build.0 = Debug|x64 - {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}.NativeDebug|x86.ActiveCfg = Debug|Win32 - {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}.NativeDebug|x86.Build.0 = Debug|Win32 - {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}.NativeRelease|Any CPU.ActiveCfg = Release|Win32 - {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}.NativeRelease|x64.ActiveCfg = Release|x64 - {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}.NativeRelease|x64.Build.0 = Release|x64 - {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}.NativeRelease|x86.ActiveCfg = Release|Win32 - {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}.NativeRelease|x86.Build.0 = Release|Win32 - {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}.Release|Any CPU.ActiveCfg = Release|Win32 - {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}.Release|x64.ActiveCfg = Release|x64 - {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}.Release|x64.Build.0 = Release|x64 - {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}.Release|x86.ActiveCfg = Release|Win32 - {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}.Release|x86.Build.0 = Release|Win32 - {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}.Debug|x64.ActiveCfg = Debug|x64 - {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}.Debug|x64.Build.0 = Debug|x64 - {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}.Debug|x86.ActiveCfg = Debug|Win32 - {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}.Debug|x86.Build.0 = Debug|Win32 - {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}.NativeDebug|Any CPU.ActiveCfg = Debug|Win32 - {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}.NativeDebug|x64.ActiveCfg = Debug|x64 - {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}.NativeDebug|x64.Build.0 = Debug|x64 - {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}.NativeDebug|x86.ActiveCfg = Debug|Win32 - {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}.NativeDebug|x86.Build.0 = Debug|Win32 - {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}.NativeRelease|Any CPU.ActiveCfg = Release|Win32 - {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}.NativeRelease|x64.ActiveCfg = Release|x64 - {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}.NativeRelease|x64.Build.0 = Release|x64 - {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}.NativeRelease|x86.ActiveCfg = Release|Win32 - {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}.NativeRelease|x86.Build.0 = Release|Win32 - {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}.Release|Any CPU.ActiveCfg = Release|Win32 - {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}.Release|x64.ActiveCfg = Release|x64 - {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}.Release|x64.Build.0 = Release|x64 - {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}.Release|x86.ActiveCfg = Release|Win32 - {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}.Release|x86.Build.0 = Release|Win32 - {439824F9-1455-4CC4-BD79-B44FA0A16552}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {439824F9-1455-4CC4-BD79-B44FA0A16552}.Debug|x64.ActiveCfg = Debug|x64 - {439824F9-1455-4CC4-BD79-B44FA0A16552}.Debug|x64.Build.0 = Debug|x64 - {439824F9-1455-4CC4-BD79-B44FA0A16552}.Debug|x86.ActiveCfg = Debug|Win32 - {439824F9-1455-4CC4-BD79-B44FA0A16552}.Debug|x86.Build.0 = Debug|Win32 - {439824F9-1455-4CC4-BD79-B44FA0A16552}.NativeDebug|Any CPU.ActiveCfg = Debug|Win32 - {439824F9-1455-4CC4-BD79-B44FA0A16552}.NativeDebug|x64.ActiveCfg = Debug|x64 - {439824F9-1455-4CC4-BD79-B44FA0A16552}.NativeDebug|x64.Build.0 = Debug|x64 - {439824F9-1455-4CC4-BD79-B44FA0A16552}.NativeDebug|x86.ActiveCfg = Debug|Win32 - {439824F9-1455-4CC4-BD79-B44FA0A16552}.NativeDebug|x86.Build.0 = Debug|Win32 - {439824F9-1455-4CC4-BD79-B44FA0A16552}.NativeRelease|Any CPU.ActiveCfg = Release|Win32 - {439824F9-1455-4CC4-BD79-B44FA0A16552}.NativeRelease|x64.ActiveCfg = Release|x64 - {439824F9-1455-4CC4-BD79-B44FA0A16552}.NativeRelease|x64.Build.0 = Release|x64 - {439824F9-1455-4CC4-BD79-B44FA0A16552}.NativeRelease|x86.ActiveCfg = Release|Win32 - {439824F9-1455-4CC4-BD79-B44FA0A16552}.NativeRelease|x86.Build.0 = Release|Win32 - {439824F9-1455-4CC4-BD79-B44FA0A16552}.Release|Any CPU.ActiveCfg = Release|Win32 - {439824F9-1455-4CC4-BD79-B44FA0A16552}.Release|x64.ActiveCfg = Release|x64 - {439824F9-1455-4CC4-BD79-B44FA0A16552}.Release|x64.Build.0 = Release|x64 - {439824F9-1455-4CC4-BD79-B44FA0A16552}.Release|x86.ActiveCfg = Release|Win32 - {439824F9-1455-4CC4-BD79-B44FA0A16552}.Release|x86.Build.0 = Release|Win32 - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.Debug|x64.ActiveCfg = Debug|x64 - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.Debug|x64.Build.0 = Debug|x64 - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.Debug|x86.ActiveCfg = Debug|Win32 - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.Debug|x86.Build.0 = Debug|Win32 - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.NativeDebug|Any CPU.ActiveCfg = Debug|Win32 - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.NativeDebug|x64.ActiveCfg = Debug|x64 - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.NativeDebug|x64.Build.0 = Debug|x64 - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.NativeDebug|x86.ActiveCfg = Debug|Win32 - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.NativeDebug|x86.Build.0 = Debug|Win32 - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.NativeRelease|Any CPU.ActiveCfg = Release|Win32 - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.NativeRelease|x64.ActiveCfg = Release|x64 - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.NativeRelease|x64.Build.0 = Release|x64 - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.NativeRelease|x86.ActiveCfg = Release|Win32 - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.NativeRelease|x86.Build.0 = Release|Win32 - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.Release|Any CPU.ActiveCfg = Release|Win32 - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.Release|x64.ActiveCfg = Release|x64 - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.Release|x64.Build.0 = Release|x64 - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.Release|x86.ActiveCfg = Release|Win32 - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.Release|x86.Build.0 = Release|Win32 - {55494E58-E061-4C4C-A0A8-837008E72F85}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {55494E58-E061-4C4C-A0A8-837008E72F85}.Debug|x64.ActiveCfg = Debug|x64 - {55494E58-E061-4C4C-A0A8-837008E72F85}.Debug|x64.Build.0 = Debug|x64 - {55494E58-E061-4C4C-A0A8-837008E72F85}.Debug|x86.ActiveCfg = Debug|Win32 - {55494E58-E061-4C4C-A0A8-837008E72F85}.Debug|x86.Build.0 = Debug|Win32 - {55494E58-E061-4C4C-A0A8-837008E72F85}.NativeDebug|Any CPU.ActiveCfg = Debug|Win32 - {55494E58-E061-4C4C-A0A8-837008E72F85}.NativeDebug|x64.ActiveCfg = Debug|x64 - {55494E58-E061-4C4C-A0A8-837008E72F85}.NativeDebug|x64.Build.0 = Debug|x64 - {55494E58-E061-4C4C-A0A8-837008E72F85}.NativeDebug|x86.ActiveCfg = Debug|Win32 - {55494E58-E061-4C4C-A0A8-837008E72F85}.NativeDebug|x86.Build.0 = Debug|Win32 - {55494E58-E061-4C4C-A0A8-837008E72F85}.NativeRelease|Any CPU.ActiveCfg = Release|Win32 - {55494E58-E061-4C4C-A0A8-837008E72F85}.NativeRelease|x64.ActiveCfg = Release|x64 - {55494E58-E061-4C4C-A0A8-837008E72F85}.NativeRelease|x64.Build.0 = Release|x64 - {55494E58-E061-4C4C-A0A8-837008E72F85}.NativeRelease|x86.ActiveCfg = Release|Win32 - {55494E58-E061-4C4C-A0A8-837008E72F85}.NativeRelease|x86.Build.0 = Release|Win32 - {55494E58-E061-4C4C-A0A8-837008E72F85}.Release|Any CPU.ActiveCfg = Release|Win32 - {55494E58-E061-4C4C-A0A8-837008E72F85}.Release|x64.ActiveCfg = Release|x64 - {55494E58-E061-4C4C-A0A8-837008E72F85}.Release|x64.Build.0 = Release|x64 - {55494E58-E061-4C4C-A0A8-837008E72F85}.Release|x86.ActiveCfg = Release|Win32 - {55494E58-E061-4C4C-A0A8-837008E72F85}.Release|x86.Build.0 = Release|Win32 - {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.Debug|x64.ActiveCfg = Debug|x64 - {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.Debug|x64.Build.0 = Debug|x64 - {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.Debug|x86.ActiveCfg = Debug|Win32 - {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.Debug|x86.Build.0 = Debug|Win32 - {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.NativeDebug|Any CPU.ActiveCfg = Debug|Win32 - {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.NativeDebug|x64.ActiveCfg = Debug|x64 - {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.NativeDebug|x64.Build.0 = Debug|x64 - {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.NativeDebug|x86.ActiveCfg = Debug|Win32 - {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.NativeDebug|x86.Build.0 = Debug|Win32 - {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.NativeRelease|Any CPU.ActiveCfg = Release|Win32 - {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.NativeRelease|x64.ActiveCfg = Release|x64 - {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.NativeRelease|x64.Build.0 = Release|x64 - {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.NativeRelease|x86.ActiveCfg = Release|Win32 - {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.NativeRelease|x86.Build.0 = Release|Win32 - {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.Release|Any CPU.ActiveCfg = Release|Win32 - {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.Release|x64.ActiveCfg = Release|x64 - {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.Release|x64.Build.0 = Release|x64 - {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.Release|x86.ActiveCfg = Release|Win32 - {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.Release|x86.Build.0 = Release|Win32 - {42E60F88-E23F-417A-8143-0CCEC05E1D02}.Debug|Any CPU.ActiveCfg = Debug|x64 - {42E60F88-E23F-417A-8143-0CCEC05E1D02}.Debug|Any CPU.Build.0 = Debug|x64 - {42E60F88-E23F-417A-8143-0CCEC05E1D02}.Debug|x64.ActiveCfg = Debug|x64 - {42E60F88-E23F-417A-8143-0CCEC05E1D02}.Debug|x64.Build.0 = Debug|x64 - {42E60F88-E23F-417A-8143-0CCEC05E1D02}.Debug|x86.ActiveCfg = Debug|x86 - {42E60F88-E23F-417A-8143-0CCEC05E1D02}.Debug|x86.Build.0 = Debug|x86 - {42E60F88-E23F-417A-8143-0CCEC05E1D02}.NativeDebug|Any CPU.ActiveCfg = Debug|x64 - {42E60F88-E23F-417A-8143-0CCEC05E1D02}.NativeDebug|Any CPU.Build.0 = Debug|x64 - {42E60F88-E23F-417A-8143-0CCEC05E1D02}.NativeDebug|x64.ActiveCfg = Debug|x64 - {42E60F88-E23F-417A-8143-0CCEC05E1D02}.NativeDebug|x86.ActiveCfg = Debug|x86 - {42E60F88-E23F-417A-8143-0CCEC05E1D02}.NativeRelease|Any CPU.ActiveCfg = Release|x64 - {42E60F88-E23F-417A-8143-0CCEC05E1D02}.NativeRelease|Any CPU.Build.0 = Release|x64 - {42E60F88-E23F-417A-8143-0CCEC05E1D02}.NativeRelease|x64.ActiveCfg = Release|x64 - {42E60F88-E23F-417A-8143-0CCEC05E1D02}.NativeRelease|x86.ActiveCfg = Release|x86 - {42E60F88-E23F-417A-8143-0CCEC05E1D02}.Release|Any CPU.ActiveCfg = Release|x64 - {42E60F88-E23F-417A-8143-0CCEC05E1D02}.Release|Any CPU.Build.0 = Release|x64 - {42E60F88-E23F-417A-8143-0CCEC05E1D02}.Release|x64.ActiveCfg = Release|x64 - {42E60F88-E23F-417A-8143-0CCEC05E1D02}.Release|x64.Build.0 = Release|x64 - {42E60F88-E23F-417A-8143-0CCEC05E1D02}.Release|x86.ActiveCfg = Release|x86 - {42E60F88-E23F-417A-8143-0CCEC05E1D02}.Release|x86.Build.0 = Release|x86 - {48F46909-E76A-4788-BCE1-E543C0E140FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {48F46909-E76A-4788-BCE1-E543C0E140FE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {48F46909-E76A-4788-BCE1-E543C0E140FE}.Debug|x64.ActiveCfg = Debug|Any CPU - {48F46909-E76A-4788-BCE1-E543C0E140FE}.Debug|x64.Build.0 = Debug|Any CPU - {48F46909-E76A-4788-BCE1-E543C0E140FE}.Debug|x86.ActiveCfg = Debug|Any CPU - {48F46909-E76A-4788-BCE1-E543C0E140FE}.Debug|x86.Build.0 = Debug|Any CPU - {48F46909-E76A-4788-BCE1-E543C0E140FE}.NativeDebug|Any CPU.ActiveCfg = Debug|Any CPU - {48F46909-E76A-4788-BCE1-E543C0E140FE}.NativeDebug|Any CPU.Build.0 = Debug|Any CPU - {48F46909-E76A-4788-BCE1-E543C0E140FE}.NativeDebug|x64.ActiveCfg = Debug|Any CPU - {48F46909-E76A-4788-BCE1-E543C0E140FE}.NativeDebug|x86.ActiveCfg = Debug|Any CPU - {48F46909-E76A-4788-BCE1-E543C0E140FE}.NativeRelease|Any CPU.ActiveCfg = Release|Any CPU - {48F46909-E76A-4788-BCE1-E543C0E140FE}.NativeRelease|Any CPU.Build.0 = Release|Any CPU - {48F46909-E76A-4788-BCE1-E543C0E140FE}.NativeRelease|x64.ActiveCfg = Release|Any CPU - {48F46909-E76A-4788-BCE1-E543C0E140FE}.NativeRelease|x86.ActiveCfg = Release|Any CPU - {48F46909-E76A-4788-BCE1-E543C0E140FE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {48F46909-E76A-4788-BCE1-E543C0E140FE}.Release|Any CPU.Build.0 = Release|Any CPU - {48F46909-E76A-4788-BCE1-E543C0E140FE}.Release|x64.ActiveCfg = Release|Any CPU - {48F46909-E76A-4788-BCE1-E543C0E140FE}.Release|x64.Build.0 = Release|Any CPU - {48F46909-E76A-4788-BCE1-E543C0E140FE}.Release|x86.ActiveCfg = Release|Any CPU - {48F46909-E76A-4788-BCE1-E543C0E140FE}.Release|x86.Build.0 = Release|Any CPU - {D57EA297-6DC2-4BC0-8C91-334863327863}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {D57EA297-6DC2-4BC0-8C91-334863327863}.Debug|x64.ActiveCfg = Debug|x64 - {D57EA297-6DC2-4BC0-8C91-334863327863}.Debug|x64.Build.0 = Debug|x64 - {D57EA297-6DC2-4BC0-8C91-334863327863}.Debug|x86.ActiveCfg = Debug|Win32 - {D57EA297-6DC2-4BC0-8C91-334863327863}.Debug|x86.Build.0 = Debug|Win32 - {D57EA297-6DC2-4BC0-8C91-334863327863}.NativeDebug|Any CPU.ActiveCfg = Debug|Win32 - {D57EA297-6DC2-4BC0-8C91-334863327863}.NativeDebug|x64.ActiveCfg = Debug|x64 - {D57EA297-6DC2-4BC0-8C91-334863327863}.NativeDebug|x64.Build.0 = Debug|x64 - {D57EA297-6DC2-4BC0-8C91-334863327863}.NativeDebug|x86.ActiveCfg = Debug|Win32 - {D57EA297-6DC2-4BC0-8C91-334863327863}.NativeDebug|x86.Build.0 = Debug|Win32 - {D57EA297-6DC2-4BC0-8C91-334863327863}.NativeRelease|Any CPU.ActiveCfg = Release|Win32 - {D57EA297-6DC2-4BC0-8C91-334863327863}.NativeRelease|x64.ActiveCfg = Release|x64 - {D57EA297-6DC2-4BC0-8C91-334863327863}.NativeRelease|x64.Build.0 = Release|x64 - {D57EA297-6DC2-4BC0-8C91-334863327863}.NativeRelease|x86.ActiveCfg = Release|Win32 - {D57EA297-6DC2-4BC0-8C91-334863327863}.NativeRelease|x86.Build.0 = Release|Win32 - {D57EA297-6DC2-4BC0-8C91-334863327863}.Release|Any CPU.ActiveCfg = Release|Win32 - {D57EA297-6DC2-4BC0-8C91-334863327863}.Release|x64.ActiveCfg = Release|x64 - {D57EA297-6DC2-4BC0-8C91-334863327863}.Release|x64.Build.0 = Release|x64 - {D57EA297-6DC2-4BC0-8C91-334863327863}.Release|x86.ActiveCfg = Release|Win32 - {D57EA297-6DC2-4BC0-8C91-334863327863}.Release|x86.Build.0 = Release|Win32 - {7F87406C-A3C8-4139-A68D-E4C344294A67}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {7F87406C-A3C8-4139-A68D-E4C344294A67}.Debug|x64.ActiveCfg = Debug|x64 - {7F87406C-A3C8-4139-A68D-E4C344294A67}.Debug|x64.Build.0 = Debug|x64 - {7F87406C-A3C8-4139-A68D-E4C344294A67}.Debug|x86.ActiveCfg = Debug|Win32 - {7F87406C-A3C8-4139-A68D-E4C344294A67}.Debug|x86.Build.0 = Debug|Win32 - {7F87406C-A3C8-4139-A68D-E4C344294A67}.NativeDebug|Any CPU.ActiveCfg = Debug|Win32 - {7F87406C-A3C8-4139-A68D-E4C344294A67}.NativeDebug|x64.ActiveCfg = Debug|x64 - {7F87406C-A3C8-4139-A68D-E4C344294A67}.NativeDebug|x64.Build.0 = Debug|x64 - {7F87406C-A3C8-4139-A68D-E4C344294A67}.NativeDebug|x86.ActiveCfg = Debug|Win32 - {7F87406C-A3C8-4139-A68D-E4C344294A67}.NativeDebug|x86.Build.0 = Debug|Win32 - {7F87406C-A3C8-4139-A68D-E4C344294A67}.NativeRelease|Any CPU.ActiveCfg = Release|Win32 - {7F87406C-A3C8-4139-A68D-E4C344294A67}.NativeRelease|x64.ActiveCfg = Release|x64 - {7F87406C-A3C8-4139-A68D-E4C344294A67}.NativeRelease|x64.Build.0 = Release|x64 - {7F87406C-A3C8-4139-A68D-E4C344294A67}.NativeRelease|x86.ActiveCfg = Release|Win32 - {7F87406C-A3C8-4139-A68D-E4C344294A67}.NativeRelease|x86.Build.0 = Release|Win32 - {7F87406C-A3C8-4139-A68D-E4C344294A67}.Release|Any CPU.ActiveCfg = Release|Win32 - {7F87406C-A3C8-4139-A68D-E4C344294A67}.Release|x64.ActiveCfg = Release|x64 - {7F87406C-A3C8-4139-A68D-E4C344294A67}.Release|x64.Build.0 = Release|x64 - {7F87406C-A3C8-4139-A68D-E4C344294A67}.Release|x86.ActiveCfg = Release|Win32 - {7F87406C-A3C8-4139-A68D-E4C344294A67}.Release|x86.Build.0 = Release|Win32 - {CAC1267B-8778-4257-AAC6-CAF481723B01}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {CAC1267B-8778-4257-AAC6-CAF481723B01}.Debug|x64.ActiveCfg = Debug|x64 - {CAC1267B-8778-4257-AAC6-CAF481723B01}.Debug|x64.Build.0 = Debug|x64 - {CAC1267B-8778-4257-AAC6-CAF481723B01}.Debug|x86.ActiveCfg = Debug|Win32 - {CAC1267B-8778-4257-AAC6-CAF481723B01}.Debug|x86.Build.0 = Debug|Win32 - {CAC1267B-8778-4257-AAC6-CAF481723B01}.NativeDebug|Any CPU.ActiveCfg = Debug|Win32 - {CAC1267B-8778-4257-AAC6-CAF481723B01}.NativeDebug|x64.ActiveCfg = Debug|x64 - {CAC1267B-8778-4257-AAC6-CAF481723B01}.NativeDebug|x64.Build.0 = Debug|x64 - {CAC1267B-8778-4257-AAC6-CAF481723B01}.NativeDebug|x86.ActiveCfg = Debug|Win32 - {CAC1267B-8778-4257-AAC6-CAF481723B01}.NativeDebug|x86.Build.0 = Debug|Win32 - {CAC1267B-8778-4257-AAC6-CAF481723B01}.NativeRelease|Any CPU.ActiveCfg = Release|Win32 - {CAC1267B-8778-4257-AAC6-CAF481723B01}.NativeRelease|x64.ActiveCfg = Release|x64 - {CAC1267B-8778-4257-AAC6-CAF481723B01}.NativeRelease|x64.Build.0 = Release|x64 - {CAC1267B-8778-4257-AAC6-CAF481723B01}.NativeRelease|x86.ActiveCfg = Release|Win32 - {CAC1267B-8778-4257-AAC6-CAF481723B01}.NativeRelease|x86.Build.0 = Release|Win32 - {CAC1267B-8778-4257-AAC6-CAF481723B01}.Release|Any CPU.ActiveCfg = Release|Win32 - {CAC1267B-8778-4257-AAC6-CAF481723B01}.Release|x64.ActiveCfg = Release|x64 - {CAC1267B-8778-4257-AAC6-CAF481723B01}.Release|x64.Build.0 = Release|x64 - {CAC1267B-8778-4257-AAC6-CAF481723B01}.Release|x86.ActiveCfg = Release|Win32 - {CAC1267B-8778-4257-AAC6-CAF481723B01}.Release|x86.Build.0 = Release|Win32 - {1533E271-F61B-441B-8B74-59FB61DF0552}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {1533E271-F61B-441B-8B74-59FB61DF0552}.Debug|x64.ActiveCfg = Debug|x64 - {1533E271-F61B-441B-8B74-59FB61DF0552}.Debug|x64.Build.0 = Debug|x64 - {1533E271-F61B-441B-8B74-59FB61DF0552}.Debug|x86.ActiveCfg = Debug|Win32 - {1533E271-F61B-441B-8B74-59FB61DF0552}.Debug|x86.Build.0 = Debug|Win32 - {1533E271-F61B-441B-8B74-59FB61DF0552}.NativeDebug|Any CPU.ActiveCfg = Debug|Win32 - {1533E271-F61B-441B-8B74-59FB61DF0552}.NativeDebug|x64.ActiveCfg = Debug|x64 - {1533E271-F61B-441B-8B74-59FB61DF0552}.NativeDebug|x64.Build.0 = Debug|x64 - {1533E271-F61B-441B-8B74-59FB61DF0552}.NativeDebug|x86.ActiveCfg = Debug|Win32 - {1533E271-F61B-441B-8B74-59FB61DF0552}.NativeDebug|x86.Build.0 = Debug|Win32 - {1533E271-F61B-441B-8B74-59FB61DF0552}.NativeRelease|Any CPU.ActiveCfg = Release|Win32 - {1533E271-F61B-441B-8B74-59FB61DF0552}.NativeRelease|x64.ActiveCfg = Release|x64 - {1533E271-F61B-441B-8B74-59FB61DF0552}.NativeRelease|x64.Build.0 = Release|x64 - {1533E271-F61B-441B-8B74-59FB61DF0552}.NativeRelease|x86.ActiveCfg = Release|Win32 - {1533E271-F61B-441B-8B74-59FB61DF0552}.NativeRelease|x86.Build.0 = Release|Win32 - {1533E271-F61B-441B-8B74-59FB61DF0552}.Release|Any CPU.ActiveCfg = Release|Win32 - {1533E271-F61B-441B-8B74-59FB61DF0552}.Release|x64.ActiveCfg = Release|x64 - {1533E271-F61B-441B-8B74-59FB61DF0552}.Release|x64.Build.0 = Release|x64 - {1533E271-F61B-441B-8B74-59FB61DF0552}.Release|x86.ActiveCfg = Release|Win32 - {1533E271-F61B-441B-8B74-59FB61DF0552}.Release|x86.Build.0 = Release|Win32 - {1F0C8D9B-F47B-41F3-9FC9-6954B6DC7712}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1F0C8D9B-F47B-41F3-9FC9-6954B6DC7712}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1F0C8D9B-F47B-41F3-9FC9-6954B6DC7712}.Debug|x64.ActiveCfg = Debug|Any CPU - {1F0C8D9B-F47B-41F3-9FC9-6954B6DC7712}.Debug|x64.Build.0 = Debug|Any CPU - {1F0C8D9B-F47B-41F3-9FC9-6954B6DC7712}.Debug|x86.ActiveCfg = Debug|Any CPU - {1F0C8D9B-F47B-41F3-9FC9-6954B6DC7712}.Debug|x86.Build.0 = Debug|Any CPU - {1F0C8D9B-F47B-41F3-9FC9-6954B6DC7712}.NativeDebug|Any CPU.ActiveCfg = Debug|Any CPU - {1F0C8D9B-F47B-41F3-9FC9-6954B6DC7712}.NativeDebug|Any CPU.Build.0 = Debug|Any CPU - {1F0C8D9B-F47B-41F3-9FC9-6954B6DC7712}.NativeDebug|x64.ActiveCfg = Debug|Any CPU - {1F0C8D9B-F47B-41F3-9FC9-6954B6DC7712}.NativeDebug|x86.ActiveCfg = Debug|Any CPU - {1F0C8D9B-F47B-41F3-9FC9-6954B6DC7712}.NativeRelease|Any CPU.ActiveCfg = Release|Any CPU - {1F0C8D9B-F47B-41F3-9FC9-6954B6DC7712}.NativeRelease|Any CPU.Build.0 = Release|Any CPU - {1F0C8D9B-F47B-41F3-9FC9-6954B6DC7712}.NativeRelease|x64.ActiveCfg = Release|Any CPU - {1F0C8D9B-F47B-41F3-9FC9-6954B6DC7712}.NativeRelease|x86.ActiveCfg = Release|Any CPU - {1F0C8D9B-F47B-41F3-9FC9-6954B6DC7712}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1F0C8D9B-F47B-41F3-9FC9-6954B6DC7712}.Release|Any CPU.Build.0 = Release|Any CPU - {1F0C8D9B-F47B-41F3-9FC9-6954B6DC7712}.Release|x64.ActiveCfg = Release|Any CPU - {1F0C8D9B-F47B-41F3-9FC9-6954B6DC7712}.Release|x64.Build.0 = Release|Any CPU - {1F0C8D9B-F47B-41F3-9FC9-6954B6DC7712}.Release|x86.ActiveCfg = Release|Any CPU - {1F0C8D9B-F47B-41F3-9FC9-6954B6DC7712}.Release|x86.Build.0 = Release|Any CPU - {CE4FB142-91FB-4B34-BC96-A31120EF4009}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CE4FB142-91FB-4B34-BC96-A31120EF4009}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CE4FB142-91FB-4B34-BC96-A31120EF4009}.Debug|x64.ActiveCfg = Debug|Any CPU - {CE4FB142-91FB-4B34-BC96-A31120EF4009}.Debug|x64.Build.0 = Debug|Any CPU - {CE4FB142-91FB-4B34-BC96-A31120EF4009}.Debug|x86.ActiveCfg = Debug|Any CPU - {CE4FB142-91FB-4B34-BC96-A31120EF4009}.Debug|x86.Build.0 = Debug|Any CPU - {CE4FB142-91FB-4B34-BC96-A31120EF4009}.NativeDebug|Any CPU.ActiveCfg = Debug|Any CPU - {CE4FB142-91FB-4B34-BC96-A31120EF4009}.NativeDebug|Any CPU.Build.0 = Debug|Any CPU - {CE4FB142-91FB-4B34-BC96-A31120EF4009}.NativeDebug|x64.ActiveCfg = Debug|Any CPU - {CE4FB142-91FB-4B34-BC96-A31120EF4009}.NativeDebug|x86.ActiveCfg = Debug|Any CPU - {CE4FB142-91FB-4B34-BC96-A31120EF4009}.NativeRelease|Any CPU.ActiveCfg = Release|Any CPU - {CE4FB142-91FB-4B34-BC96-A31120EF4009}.NativeRelease|Any CPU.Build.0 = Release|Any CPU - {CE4FB142-91FB-4B34-BC96-A31120EF4009}.NativeRelease|x64.ActiveCfg = Release|Any CPU - {CE4FB142-91FB-4B34-BC96-A31120EF4009}.NativeRelease|x86.ActiveCfg = Release|Any CPU - {CE4FB142-91FB-4B34-BC96-A31120EF4009}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CE4FB142-91FB-4B34-BC96-A31120EF4009}.Release|Any CPU.Build.0 = Release|Any CPU - {CE4FB142-91FB-4B34-BC96-A31120EF4009}.Release|x64.ActiveCfg = Release|Any CPU - {CE4FB142-91FB-4B34-BC96-A31120EF4009}.Release|x64.Build.0 = Release|Any CPU - {CE4FB142-91FB-4B34-BC96-A31120EF4009}.Release|x86.ActiveCfg = Release|Any CPU - {CE4FB142-91FB-4B34-BC96-A31120EF4009}.Release|x86.Build.0 = Release|Any CPU - {A091777D-66B3-42E1-B95C-85322DE40706}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A091777D-66B3-42E1-B95C-85322DE40706}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A091777D-66B3-42E1-B95C-85322DE40706}.Debug|x64.ActiveCfg = Debug|Any CPU - {A091777D-66B3-42E1-B95C-85322DE40706}.Debug|x64.Build.0 = Debug|Any CPU - {A091777D-66B3-42E1-B95C-85322DE40706}.Debug|x86.ActiveCfg = Debug|Any CPU - {A091777D-66B3-42E1-B95C-85322DE40706}.Debug|x86.Build.0 = Debug|Any CPU - {A091777D-66B3-42E1-B95C-85322DE40706}.NativeDebug|Any CPU.ActiveCfg = Debug|Any CPU - {A091777D-66B3-42E1-B95C-85322DE40706}.NativeDebug|Any CPU.Build.0 = Debug|Any CPU - {A091777D-66B3-42E1-B95C-85322DE40706}.NativeDebug|x64.ActiveCfg = Debug|Any CPU - {A091777D-66B3-42E1-B95C-85322DE40706}.NativeDebug|x86.ActiveCfg = Debug|Any CPU - {A091777D-66B3-42E1-B95C-85322DE40706}.NativeRelease|Any CPU.ActiveCfg = Release|Any CPU - {A091777D-66B3-42E1-B95C-85322DE40706}.NativeRelease|Any CPU.Build.0 = Release|Any CPU - {A091777D-66B3-42E1-B95C-85322DE40706}.NativeRelease|x64.ActiveCfg = Release|Any CPU - {A091777D-66B3-42E1-B95C-85322DE40706}.NativeRelease|x86.ActiveCfg = Release|Any CPU - {A091777D-66B3-42E1-B95C-85322DE40706}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A091777D-66B3-42E1-B95C-85322DE40706}.Release|Any CPU.Build.0 = Release|Any CPU - {A091777D-66B3-42E1-B95C-85322DE40706}.Release|x64.ActiveCfg = Release|Any CPU - {A091777D-66B3-42E1-B95C-85322DE40706}.Release|x64.Build.0 = Release|Any CPU - {A091777D-66B3-42E1-B95C-85322DE40706}.Release|x86.ActiveCfg = Release|Any CPU - {A091777D-66B3-42E1-B95C-85322DE40706}.Release|x86.Build.0 = Release|Any CPU - {A641A208-2974-4E48-BCFF-54E3AAFA4FB9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A641A208-2974-4E48-BCFF-54E3AAFA4FB9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A641A208-2974-4E48-BCFF-54E3AAFA4FB9}.Debug|x64.ActiveCfg = Debug|Any CPU - {A641A208-2974-4E48-BCFF-54E3AAFA4FB9}.Debug|x64.Build.0 = Debug|Any CPU - {A641A208-2974-4E48-BCFF-54E3AAFA4FB9}.Debug|x86.ActiveCfg = Debug|Any CPU - {A641A208-2974-4E48-BCFF-54E3AAFA4FB9}.Debug|x86.Build.0 = Debug|Any CPU - {A641A208-2974-4E48-BCFF-54E3AAFA4FB9}.NativeDebug|Any CPU.ActiveCfg = Debug|Any CPU - {A641A208-2974-4E48-BCFF-54E3AAFA4FB9}.NativeDebug|Any CPU.Build.0 = Debug|Any CPU - {A641A208-2974-4E48-BCFF-54E3AAFA4FB9}.NativeDebug|x64.ActiveCfg = Debug|Any CPU - {A641A208-2974-4E48-BCFF-54E3AAFA4FB9}.NativeDebug|x86.ActiveCfg = Debug|Any CPU - {A641A208-2974-4E48-BCFF-54E3AAFA4FB9}.NativeRelease|Any CPU.ActiveCfg = Release|Any CPU - {A641A208-2974-4E48-BCFF-54E3AAFA4FB9}.NativeRelease|Any CPU.Build.0 = Release|Any CPU - {A641A208-2974-4E48-BCFF-54E3AAFA4FB9}.NativeRelease|x64.ActiveCfg = Release|Any CPU - {A641A208-2974-4E48-BCFF-54E3AAFA4FB9}.NativeRelease|x86.ActiveCfg = Release|Any CPU - {A641A208-2974-4E48-BCFF-54E3AAFA4FB9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A641A208-2974-4E48-BCFF-54E3AAFA4FB9}.Release|Any CPU.Build.0 = Release|Any CPU - {A641A208-2974-4E48-BCFF-54E3AAFA4FB9}.Release|x64.ActiveCfg = Release|Any CPU - {A641A208-2974-4E48-BCFF-54E3AAFA4FB9}.Release|x64.Build.0 = Release|Any CPU - {A641A208-2974-4E48-BCFF-54E3AAFA4FB9}.Release|x86.ActiveCfg = Release|Any CPU - {A641A208-2974-4E48-BCFF-54E3AAFA4FB9}.Release|x86.Build.0 = Release|Any CPU - {28055B05-25D4-4F17-9F36-A1D09FDDA607}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {28055B05-25D4-4F17-9F36-A1D09FDDA607}.Debug|Any CPU.Build.0 = Debug|Any CPU - {28055B05-25D4-4F17-9F36-A1D09FDDA607}.Debug|x64.ActiveCfg = Debug|Any CPU - {28055B05-25D4-4F17-9F36-A1D09FDDA607}.Debug|x64.Build.0 = Debug|Any CPU - {28055B05-25D4-4F17-9F36-A1D09FDDA607}.Debug|x86.ActiveCfg = Debug|Any CPU - {28055B05-25D4-4F17-9F36-A1D09FDDA607}.Debug|x86.Build.0 = Debug|Any CPU - {28055B05-25D4-4F17-9F36-A1D09FDDA607}.NativeDebug|Any CPU.ActiveCfg = Debug|Any CPU - {28055B05-25D4-4F17-9F36-A1D09FDDA607}.NativeDebug|Any CPU.Build.0 = Debug|Any CPU - {28055B05-25D4-4F17-9F36-A1D09FDDA607}.NativeDebug|x64.ActiveCfg = Debug|Any CPU - {28055B05-25D4-4F17-9F36-A1D09FDDA607}.NativeDebug|x86.ActiveCfg = Debug|Any CPU - {28055B05-25D4-4F17-9F36-A1D09FDDA607}.NativeRelease|Any CPU.ActiveCfg = Release|Any CPU - {28055B05-25D4-4F17-9F36-A1D09FDDA607}.NativeRelease|Any CPU.Build.0 = Release|Any CPU - {28055B05-25D4-4F17-9F36-A1D09FDDA607}.NativeRelease|x64.ActiveCfg = Release|Any CPU - {28055B05-25D4-4F17-9F36-A1D09FDDA607}.NativeRelease|x86.ActiveCfg = Release|Any CPU - {28055B05-25D4-4F17-9F36-A1D09FDDA607}.Release|Any CPU.ActiveCfg = Release|Any CPU - {28055B05-25D4-4F17-9F36-A1D09FDDA607}.Release|Any CPU.Build.0 = Release|Any CPU - {28055B05-25D4-4F17-9F36-A1D09FDDA607}.Release|x64.ActiveCfg = Release|Any CPU - {28055B05-25D4-4F17-9F36-A1D09FDDA607}.Release|x64.Build.0 = Release|Any CPU - {28055B05-25D4-4F17-9F36-A1D09FDDA607}.Release|x86.ActiveCfg = Release|Any CPU - {28055B05-25D4-4F17-9F36-A1D09FDDA607}.Release|x86.Build.0 = Release|Any CPU - {F6FAA65F-AA29-4DDA-AA89-C16AF4A69F9F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F6FAA65F-AA29-4DDA-AA89-C16AF4A69F9F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F6FAA65F-AA29-4DDA-AA89-C16AF4A69F9F}.Debug|x64.ActiveCfg = Debug|Any CPU - {F6FAA65F-AA29-4DDA-AA89-C16AF4A69F9F}.Debug|x86.ActiveCfg = Debug|Any CPU - {F6FAA65F-AA29-4DDA-AA89-C16AF4A69F9F}.NativeDebug|Any CPU.ActiveCfg = Debug|Any CPU - {F6FAA65F-AA29-4DDA-AA89-C16AF4A69F9F}.NativeDebug|Any CPU.Build.0 = Debug|Any CPU - {F6FAA65F-AA29-4DDA-AA89-C16AF4A69F9F}.NativeDebug|x64.ActiveCfg = Debug|Any CPU - {F6FAA65F-AA29-4DDA-AA89-C16AF4A69F9F}.NativeDebug|x86.ActiveCfg = Debug|Any CPU - {F6FAA65F-AA29-4DDA-AA89-C16AF4A69F9F}.NativeRelease|Any CPU.ActiveCfg = Release|Any CPU - {F6FAA65F-AA29-4DDA-AA89-C16AF4A69F9F}.NativeRelease|Any CPU.Build.0 = Release|Any CPU - {F6FAA65F-AA29-4DDA-AA89-C16AF4A69F9F}.NativeRelease|x64.ActiveCfg = Release|Any CPU - {F6FAA65F-AA29-4DDA-AA89-C16AF4A69F9F}.NativeRelease|x86.ActiveCfg = Release|Any CPU - {F6FAA65F-AA29-4DDA-AA89-C16AF4A69F9F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F6FAA65F-AA29-4DDA-AA89-C16AF4A69F9F}.Release|Any CPU.Build.0 = Release|Any CPU - {F6FAA65F-AA29-4DDA-AA89-C16AF4A69F9F}.Release|x64.ActiveCfg = Release|Any CPU - {F6FAA65F-AA29-4DDA-AA89-C16AF4A69F9F}.Release|x64.Build.0 = Release|Any CPU - {F6FAA65F-AA29-4DDA-AA89-C16AF4A69F9F}.Release|x86.ActiveCfg = Release|Any CPU - {F6FAA65F-AA29-4DDA-AA89-C16AF4A69F9F}.Release|x86.Build.0 = Release|Any CPU - {980DAB60-6471-46EC-82EE-B457D91C3789}.Debug|Any CPU.ActiveCfg = Debug|x86 - {980DAB60-6471-46EC-82EE-B457D91C3789}.Debug|x64.ActiveCfg = Debug|x64 - {980DAB60-6471-46EC-82EE-B457D91C3789}.Debug|x64.Build.0 = Debug|x64 - {980DAB60-6471-46EC-82EE-B457D91C3789}.Debug|x86.ActiveCfg = Debug|x86 - {980DAB60-6471-46EC-82EE-B457D91C3789}.Debug|x86.Build.0 = Debug|x86 - {980DAB60-6471-46EC-82EE-B457D91C3789}.NativeDebug|Any CPU.ActiveCfg = Release|x64 - {980DAB60-6471-46EC-82EE-B457D91C3789}.NativeDebug|Any CPU.Build.0 = Release|x64 - {980DAB60-6471-46EC-82EE-B457D91C3789}.NativeDebug|x64.ActiveCfg = Debug|x64 - {980DAB60-6471-46EC-82EE-B457D91C3789}.NativeDebug|x86.ActiveCfg = Debug|x86 - {980DAB60-6471-46EC-82EE-B457D91C3789}.NativeRelease|Any CPU.ActiveCfg = Release|x64 - {980DAB60-6471-46EC-82EE-B457D91C3789}.NativeRelease|Any CPU.Build.0 = Release|x64 - {980DAB60-6471-46EC-82EE-B457D91C3789}.NativeRelease|x64.ActiveCfg = Release|x64 - {980DAB60-6471-46EC-82EE-B457D91C3789}.NativeRelease|x86.ActiveCfg = Release|x86 - {980DAB60-6471-46EC-82EE-B457D91C3789}.Release|Any CPU.ActiveCfg = Release|x86 - {980DAB60-6471-46EC-82EE-B457D91C3789}.Release|x64.ActiveCfg = Release|x64 - {980DAB60-6471-46EC-82EE-B457D91C3789}.Release|x64.Build.0 = Release|x64 - {980DAB60-6471-46EC-82EE-B457D91C3789}.Release|x86.ActiveCfg = Release|x86 - {980DAB60-6471-46EC-82EE-B457D91C3789}.Release|x86.Build.0 = Release|x86 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64} = {C74B8F36-FD2F-45C9-9B8A-00E7CF0126A9} - {8B3446E8-E6A8-4591-AA63-A95837C6E97C} = {04B1EDB6-E967-4D25-89B9-E6F8304038CD} - {4106DB10-E09F-480E-9CE6-B39235512EE6} = {EF30B533-D715-421A-92B7-92FEF460AC9C} - {4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA} = {EF30B533-D715-421A-92B7-92FEF460AC9C} - {9BC4AFCB-325D-4C81-8228-8CF301CE2F97} = {C74B8F36-FD2F-45C9-9B8A-00E7CF0126A9} - {679FA2A2-898B-4320-884E-C2D294A97CE1} = {744ACDC6-F6A0-4FF9-9421-F25C5F2DC520} - {46A8612B-418B-4D70-B3A7-A21DD0627473} = {04B1EDB6-E967-4D25-89B9-E6F8304038CD} - {13FD8F12-FFBE-4D01-B4AC-444F2994B04F} = {744ACDC6-F6A0-4FF9-9421-F25C5F2DC520} - {064D860B-4D7C-4B1D-918F-E020F1B99E2A} = {EF30B533-D715-421A-92B7-92FEF460AC9C} - {744ACDC6-F6A0-4FF9-9421-F25C5F2DC520} = {EF30B533-D715-421A-92B7-92FEF460AC9C} - {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1} = {EF30B533-D715-421A-92B7-92FEF460AC9C} - {16E521CE-77F1-4B1C-A183-520A41C4F372} = {04B1EDB6-E967-4D25-89B9-E6F8304038CD} - {06CA2C2B-83B0-4D83-905A-E0C74790009E} = {04B1EDB6-E967-4D25-89B9-E6F8304038CD} - {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE} = {16E521CE-77F1-4B1C-A183-520A41C4F372} - {439824F9-1455-4CC4-BD79-B44FA0A16552} = {16E521CE-77F1-4B1C-A183-520A41C4F372} - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B} = {06CA2C2B-83B0-4D83-905A-E0C74790009E} - {55494E58-E061-4C4C-A0A8-837008E72F85} = {06CA2C2B-83B0-4D83-905A-E0C74790009E} - {09D9D1D6-2951-4E14-BC35-76A23CF9391A} = {06CA2C2B-83B0-4D83-905A-E0C74790009E} - {42E60F88-E23F-417A-8143-0CCEC05E1D02} = {744ACDC6-F6A0-4FF9-9421-F25C5F2DC520} - {48F46909-E76A-4788-BCE1-E543C0E140FE} = {622D35C9-627B-466E-8D15-752968CC79AF} - {D57EA297-6DC2-4BC0-8C91-334863327863} = {06CA2C2B-83B0-4D83-905A-E0C74790009E} - {7F87406C-A3C8-4139-A68D-E4C344294A67} = {06CA2C2B-83B0-4D83-905A-E0C74790009E} - {CAC1267B-8778-4257-AAC6-CAF481723B01} = {EF30B533-D715-421A-92B7-92FEF460AC9C} - {1533E271-F61B-441B-8B74-59FB61DF0552} = {06CA2C2B-83B0-4D83-905A-E0C74790009E} - {1F0C8D9B-F47B-41F3-9FC9-6954B6DC7712} = {EF30B533-D715-421A-92B7-92FEF460AC9C} - {CE4FB142-91FB-4B34-BC96-A31120EF4009} = {04B1EDB6-E967-4D25-89B9-E6F8304038CD} - {A091777D-66B3-42E1-B95C-85322DE40706} = {EF30B533-D715-421A-92B7-92FEF460AC9C} - {A641A208-2974-4E48-BCFF-54E3AAFA4FB9} = {EF30B533-D715-421A-92B7-92FEF460AC9C} - {28055B05-25D4-4F17-9F36-A1D09FDDA607} = {EF30B533-D715-421A-92B7-92FEF460AC9C} - {F6FAA65F-AA29-4DDA-AA89-C16AF4A69F9F} = {EF30B533-D715-421A-92B7-92FEF460AC9C} - {980DAB60-6471-46EC-82EE-B457D91C3789} = {744ACDC6-F6A0-4FF9-9421-F25C5F2DC520} - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {DB4F868D-E1AE-4FD7-9333-69FA15B268C5} - EndGlobalSection -EndGlobal diff --git a/src/IISIntegration/build.cmd b/src/IISIntegration/build.cmd deleted file mode 100644 index f4169ea5e411..000000000000 --- a/src/IISIntegration/build.cmd +++ /dev/null @@ -1,3 +0,0 @@ -@ECHO OFF -SET RepoRoot="%~dp0..\.." -%RepoRoot%\build.cmd -LockFile %RepoRoot%\korebuild-lock.txt -Path %~dp0 %* diff --git a/src/IISIntegration/build.sh b/src/IISIntegration/build.sh deleted file mode 100755 index d5bb0cf6312d..000000000000 --- a/src/IISIntegration/build.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env bash - -set -euo pipefail - -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -repo_root="$DIR/../.." -"$repo_root/build.sh" --path "$DIR" --lockfile "$repo_root/korebuild-lock.txt" "$@" diff --git a/src/IISIntegration/build/buildpipeline/pipeline.groovy b/src/IISIntegration/build/buildpipeline/pipeline.groovy deleted file mode 100644 index 13fd8d9addc2..000000000000 --- a/src/IISIntegration/build/buildpipeline/pipeline.groovy +++ /dev/null @@ -1,18 +0,0 @@ -import org.dotnet.ci.pipelines.Pipeline - -def windowsPipeline = Pipeline.createPipeline(this, 'build/buildpipeline/windows.groovy') - -def configurations = [ - 'Debug', - 'Release' -] - -configurations.each { configuration -> - - def params = [ - 'Configuration': configuration - ] - - windowsPipeline.triggerPipelineOnEveryGithubPR("Windows ${configuration} x64 Build", params) - windowsPipeline.triggerPipelineOnGithubPush(params) -} diff --git a/src/IISIntegration/build/buildpipeline/windows-appverif.groovy b/src/IISIntegration/build/buildpipeline/windows-appverif.groovy deleted file mode 100644 index 0c1a6affe815..000000000000 --- a/src/IISIntegration/build/buildpipeline/windows-appverif.groovy +++ /dev/null @@ -1,15 +0,0 @@ -@Library('dotnet-ci') _ - -// 'node' indicates to Jenkins that the enclosed block runs on a node that matches -// the label 'windows-with-vs' -simpleNode('Windows.10.Amd64.EnterpriseRS3.ASPNET.Open') { - stage ('Checking out source') { - checkout scm - bat 'git submodule update --init --recursive' - } - stage ('Build') { - def logFolder = getLogFolder() - def environment = "\$env:ASPNETCORE_TEST_LOG_DIR='${WORKSPACE}\\${logFolder}'" - bat "powershell -NoProfile -NoLogo -ExecutionPolicy unrestricted -Command \"${environment};&.\\tools\\SetupTestEnvironment.ps1 Setup;&.\\tools\\update_schema.ps1;&.\\tools\\UpdateIISExpressCertificate.ps1;&.\\run.cmd -CI default-build /p:Configuration=${params.Configuration}\";" - } -} diff --git a/src/IISIntegration/build/buildpipeline/windows.groovy b/src/IISIntegration/build/buildpipeline/windows.groovy deleted file mode 100644 index c482e8407909..000000000000 --- a/src/IISIntegration/build/buildpipeline/windows.groovy +++ /dev/null @@ -1,15 +0,0 @@ -@Library('dotnet-ci') _ - -// 'node' indicates to Jenkins that the enclosed block runs on a node that matches -// the label 'windows-with-vs' -simpleNode('Windows.10.Amd64.EnterpriseRS3.ASPNET.Open') { - stage ('Checking out source') { - checkout scm - bat 'git submodule update --init --recursive' - } - stage ('Build') { - def logFolder = getLogFolder() - def environment = "\$env:ASPNETCORE_TEST_LOG_DIR='${WORKSPACE}\\${logFolder}'" - bat "powershell -NoProfile -NoLogo -ExecutionPolicy unrestricted -Command \"${environment};&.\\tools\\SetupTestEnvironment.ps1 SetupDumps;&.\\tools\\update_schema.ps1;&.\\tools\\UpdateIISExpressCertificate.ps1;&.\\run.cmd -CI default-build /p:SkipIISBackwardsCompatibilityTests=true /p:SkipIISForwardsCompatibilityTests=true /p:Configuration=${params.Configuration}\";" - } -} diff --git a/src/IISIntegration/build/functional-test-assets.targets b/src/IISIntegration/build/functional-test-assets.targets deleted file mode 100644 index 81fb82b4a3d0..000000000000 --- a/src/IISIntegration/build/functional-test-assets.targets +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/src/IISIntegration/dependencies.overrides.props b/src/IISIntegration/dependencies.overrides.props deleted file mode 100644 index 189af4b5930d..000000000000 --- a/src/IISIntegration/dependencies.overrides.props +++ /dev/null @@ -1,22 +0,0 @@ - - - $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - - - - 2.0.0 - - 2.2.0-preview3-35497 - 2.2.0-preview3-35497 - 2.2.0-preview3-35497 - - 2.1.0 - 2.1.0 - 2.1.0 - 2.1.0 - 4.5.2 - 4.5.0 - - - - diff --git a/src/IISIntegration/korebuild.json b/src/IISIntegration/korebuild.json deleted file mode 100644 index b76e84272bd5..000000000000 --- a/src/IISIntegration/korebuild.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "$schema": "https://raw.githubusercontent.com/aspnet/BuildTools/master/tools/korebuild.schema.json", - "channel": "master", - "toolsets": { - "visualstudio": { - "required": ["Windows"], - "includePrerelease": true, - "minVersion": "15.0.26730.03", - "requiredWorkloads": [ - "Microsoft.VisualStudio.Component.VC.Tools.x86.x64", - "Microsoft.VisualStudio.ComponentGroup.NativeDesktop.Win81", - "Microsoft.VisualStudio.Component.VC.ATL", - "Microsoft.VisualStudio.Component.Windows10SDK.15063.Desktop" - ] - } - } - } diff --git a/src/IISIntegration/nuget/Microsoft.AspNetCore.AspNetCoreModule.nuspec b/src/IISIntegration/nuget/Microsoft.AspNetCore.AspNetCoreModule.nuspec deleted file mode 100644 index f05fcbbdd8c6..000000000000 --- a/src/IISIntegration/nuget/Microsoft.AspNetCore.AspNetCoreModule.nuspec +++ /dev/null @@ -1,33 +0,0 @@ - - - - Microsoft.AspNetCore.AspNetCoreModule - Microsoft ASP.NET Core Module - $VERSION$ - Microsoft - Microsoft - https://www.microsoft.com/web/webpi/eula/net_library_eula_ENU.htm - © .NET Foundation. All rights reserved. - https://www.asp.net/ - https://go.microsoft.com/fwlink/?LinkID=288859 - true - ASP.NET Core Module - en-US - Microsoft.AspNetCore.AspNetCoreModule - - - - - - - - - - - - - - - - - diff --git a/src/IISIntegration/nuget/Microsoft.AspNetCore.AspNetCoreModuleV2.nuspec b/src/IISIntegration/nuget/Microsoft.AspNetCore.AspNetCoreModuleV2.nuspec deleted file mode 100644 index bc33d6121cdf..000000000000 --- a/src/IISIntegration/nuget/Microsoft.AspNetCore.AspNetCoreModuleV2.nuspec +++ /dev/null @@ -1,44 +0,0 @@ - - - - Microsoft.AspNetCore.AspNetCoreModuleV2 - Microsoft ASP.NET Core Module - $VERSION$ - Microsoft - Microsoft - https://www.microsoft.com/web/webpi/eula/net_library_eula_ENU.htm - © .NET Foundation. All rights reserved. - https://www.asp.net/ - https://go.microsoft.com/fwlink/?LinkID=288859 - true - ASP.NET Core Module - en-US - Microsoft.AspNetCore.AspNetCoreModule - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/IISIntegration/samples/IISSample/IISSample.csproj b/src/IISIntegration/samples/IISSample/IISSample.csproj deleted file mode 100644 index efdf0a9906f4..000000000000 --- a/src/IISIntegration/samples/IISSample/IISSample.csproj +++ /dev/null @@ -1,15 +0,0 @@ - - - - netcoreapp3.0 - - - - - - - - - - - diff --git a/src/IISIntegration/samples/IISSample/Properties/launchSettings.json b/src/IISIntegration/samples/IISSample/Properties/launchSettings.json deleted file mode 100644 index 009aa9ab8902..000000000000 --- a/src/IISIntegration/samples/IISSample/Properties/launchSettings.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "iisSettings": { - "windowsAuthentication": false, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:25334/", - "sslPort": 0 - } - }, - "profiles": { - "IIS Express": { - "commandName": "IISExpress", - "launchBrowser": true, - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development", - "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.Server.IISIntegration" - } - }, - "IISSample": { - "commandName": "Project", - "launchBrowser": true, - "launchUrl": "http://localhost:5000", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - } - } -} \ No newline at end of file diff --git a/src/IISIntegration/samples/NativeIISSample/NativeIISSample.csproj b/src/IISIntegration/samples/NativeIISSample/NativeIISSample.csproj deleted file mode 100644 index cf234bf64428..000000000000 --- a/src/IISIntegration/samples/NativeIISSample/NativeIISSample.csproj +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - netcoreapp3.0 - true - - - - - - - - - - - - - - - inprocess - - diff --git a/src/IISIntegration/samples/NativeIISSample/Properties/launchSettings.json b/src/IISIntegration/samples/NativeIISSample/Properties/launchSettings.json deleted file mode 100644 index 246b7a0b47d4..000000000000 --- a/src/IISIntegration/samples/NativeIISSample/Properties/launchSettings.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "iisSettings": { - "windowsAuthentication": true, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:5762/", - "sslPort": 0 - } - }, - "profiles": { - "ANCM IIS Express": { - "commandName": "Executable", - "executablePath": "$(IISExpressPath)", - "commandLineArgs": "$(IISExpressArguments)", - "environmentVariables": { - "IIS_SITE_PATH": "$(MSBuildThisFileDirectory)", - "ANCM_PATH": "$(AspNetCoreModuleV1ShimDll)", - "ANCMV2_PATH": "$(AspNetCoreModuleV2ShimDll)", - "ANCM_OUTOFPROCESS_HANDLER": "$(AspNetCoreModuleV2OutOfProcessHandlerDll)", - "LAUNCHER_ARGS": "$(TargetPath)", - "ASPNETCORE_ENVIRONMENT": "Development", - "LAUNCHER_PATH": "$(DotNetPath)", - "ASPNETCORE_MODULE_DEBUG": "console" - } - }, - "ANCM IIS": { - "commandName": "Executable", - "executablePath": "$(IISPath)", - "commandLineArgs": "$(IISArguments)", - "environmentVariables": { - "IIS_SITE_PATH": "$(MSBuildThisFileDirectory)", - "ANCM_PATH": "$(AspNetCoreModuleV1ShimDll)", - "ANCMV2_PATH": "$(AspNetCoreModuleV2ShimDll)", - "ASPNETCORE_MODULE_OUTOFPROCESS_HANDLER": "$(AspNetCoreModuleV2OutOfProcessHandlerDll)", - "LAUNCHER_ARGS": "$(TargetPath)", - "ASPNETCORE_ENVIRONMENT": "Development", - "LAUNCHER_PATH": "$(DotNetPath)", - "ASPNETCORE_MODULE_DEBUG": "console" - } - } - } -} diff --git a/src/IISIntegration/src/Directory.Build.props b/src/IISIntegration/src/Directory.Build.props deleted file mode 100644 index 4b89a431e7f2..000000000000 --- a/src/IISIntegration/src/Directory.Build.props +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Microsoft.AspNetCore.Server.IIS.csproj b/src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Microsoft.AspNetCore.Server.IIS.csproj deleted file mode 100644 index 3cb4d97a5143..000000000000 --- a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Microsoft.AspNetCore.Server.IIS.csproj +++ /dev/null @@ -1,75 +0,0 @@ - - - - netcoreapp3.0 - Microsoft.AspNetCore.Server.IIS - Provides support for hosting ASP.NET Core in IIS using the AspNetCoreModule. - $(NoWarn);CS1591 - true - aspnetcore;iis - true - true - netcoreapp3.0 - True - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - False - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/Microsoft.AspNetCore.Server.IISIntegration.csproj b/src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/Microsoft.AspNetCore.Server.IISIntegration.csproj deleted file mode 100644 index 67e359cd76a2..000000000000 --- a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/Microsoft.AspNetCore.Server.IISIntegration.csproj +++ /dev/null @@ -1,29 +0,0 @@ - - - - ASP.NET Core components for working with the IIS AspNetCoreModule. - netcoreapp3.0 - $(NoWarn);CS1591 - true - aspnetcore;iis - true - - - - - - - - - - - - - - - - - - - - diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/Microsoft.AspNetCore.Server.IntegrationTesting.IIS.csproj b/src/IISIntegration/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/Microsoft.AspNetCore.Server.IntegrationTesting.IIS.csproj deleted file mode 100644 index bd5e1e201bbf..000000000000 --- a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/Microsoft.AspNetCore.Server.IntegrationTesting.IIS.csproj +++ /dev/null @@ -1,50 +0,0 @@ - - - - netcoreapp3.0 - Microsoft.AspNetCore.Server.IntegrationTesting.IIS - - $(VersionPrefix)-$(VersionSuffix) - $(Version) - Provides support for integration testing using IIS based servers. - $(NoWarn);CS1591 - true - aspnetcore;iis - True - - - - - - - - - - - - - - - - - - False - - - False - - - False - - - - - - - - - - - - - diff --git a/src/IISIntegration/test/Common.Tests/Common.Tests.csproj b/src/IISIntegration/test/Common.Tests/Common.Tests.csproj deleted file mode 100644 index a53d327877aa..000000000000 --- a/src/IISIntegration/test/Common.Tests/Common.Tests.csproj +++ /dev/null @@ -1,22 +0,0 @@ - - - - netcoreapp3.0 - false - - - - - - - - - - - - - - - - - diff --git a/src/IISIntegration/test/Directory.Build.props b/src/IISIntegration/test/Directory.Build.props deleted file mode 100644 index 4b89a431e7f2..000000000000 --- a/src/IISIntegration/test/Directory.Build.props +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/src/IISIntegration/test/IIS.BackwardsCompatibility.FunctionalTests/IIS.BackwardsCompatibility.FunctionalTests.csproj b/src/IISIntegration/test/IIS.BackwardsCompatibility.FunctionalTests/IIS.BackwardsCompatibility.FunctionalTests.csproj deleted file mode 100644 index aa012e408a66..000000000000 --- a/src/IISIntegration/test/IIS.BackwardsCompatibility.FunctionalTests/IIS.BackwardsCompatibility.FunctionalTests.csproj +++ /dev/null @@ -1,46 +0,0 @@ - - - - netcoreapp3.0 - IISBackwardsCompatibility.FunctionalTests - True - - - - - - - - - - - False - - - False - - - False - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/IISIntegration/test/IIS.ForwardsCompatibility.FunctionalTests/IIS.ForwardsCompatibility.FunctionalTests.csproj b/src/IISIntegration/test/IIS.ForwardsCompatibility.FunctionalTests/IIS.ForwardsCompatibility.FunctionalTests.csproj deleted file mode 100644 index c7c897e2e57d..000000000000 --- a/src/IISIntegration/test/IIS.ForwardsCompatibility.FunctionalTests/IIS.ForwardsCompatibility.FunctionalTests.csproj +++ /dev/null @@ -1,45 +0,0 @@ - - - - netcoreapp3.0 - IISForwardsCompatibility.FunctionalTests - True - - - - - - - - - - False - - - False - - - False - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/IISIntegration/test/IIS.FunctionalTests/IIS.FunctionalTests.csproj b/src/IISIntegration/test/IIS.FunctionalTests/IIS.FunctionalTests.csproj deleted file mode 100644 index b42e1ca4b96f..000000000000 --- a/src/IISIntegration/test/IIS.FunctionalTests/IIS.FunctionalTests.csproj +++ /dev/null @@ -1,46 +0,0 @@ - - - - netcoreapp3.0 - IIS.FunctionalTests - True - - - - - - - - - - - False - - - False - - - False - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/IISIntegration/test/IIS.Tests/IIS.Tests.csproj b/src/IISIntegration/test/IIS.Tests/IIS.Tests.csproj deleted file mode 100644 index 4d95c0cfb46d..000000000000 --- a/src/IISIntegration/test/IIS.Tests/IIS.Tests.csproj +++ /dev/null @@ -1,31 +0,0 @@ - - - - netcoreapp3.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/IISIntegration/test/IISExpress.FunctionalTests/IISExpress.FunctionalTests.csproj b/src/IISIntegration/test/IISExpress.FunctionalTests/IISExpress.FunctionalTests.csproj deleted file mode 100644 index 549d4ae3b46d..000000000000 --- a/src/IISIntegration/test/IISExpress.FunctionalTests/IISExpress.FunctionalTests.csproj +++ /dev/null @@ -1,38 +0,0 @@ - - - - netcoreapp3.0 - True - - - - - - - - - - - False - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/IISIntegration/test/Microsoft.AspNetCore.Server.IISIntegration.Tests/Microsoft.AspNetCore.Server.IISIntegration.Tests.csproj b/src/IISIntegration/test/Microsoft.AspNetCore.Server.IISIntegration.Tests/Microsoft.AspNetCore.Server.IISIntegration.Tests.csproj deleted file mode 100644 index 491dc7196392..000000000000 --- a/src/IISIntegration/test/Microsoft.AspNetCore.Server.IISIntegration.Tests/Microsoft.AspNetCore.Server.IISIntegration.Tests.csproj +++ /dev/null @@ -1,19 +0,0 @@ - - - - netcoreapp3.0 - - - - - - - - - - - - - - - diff --git a/src/IISIntegration/test/WebSites/Directory.Build.props b/src/IISIntegration/test/WebSites/Directory.Build.props deleted file mode 100644 index 9b29d34f1651..000000000000 --- a/src/IISIntegration/test/WebSites/Directory.Build.props +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/src/IISIntegration/test/WebSites/InProcessForwardsCompatWebSite/InProcessWebSite.csproj b/src/IISIntegration/test/WebSites/InProcessForwardsCompatWebSite/InProcessWebSite.csproj deleted file mode 100644 index abf9d745427d..000000000000 --- a/src/IISIntegration/test/WebSites/InProcessForwardsCompatWebSite/InProcessWebSite.csproj +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - netcoreapp3.0 - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/IISIntegration/test/WebSites/InProcessForwardsCompatWebSite/Properties/launchSettings.json b/src/IISIntegration/test/WebSites/InProcessForwardsCompatWebSite/Properties/launchSettings.json deleted file mode 100644 index 246b7a0b47d4..000000000000 --- a/src/IISIntegration/test/WebSites/InProcessForwardsCompatWebSite/Properties/launchSettings.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "iisSettings": { - "windowsAuthentication": true, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:5762/", - "sslPort": 0 - } - }, - "profiles": { - "ANCM IIS Express": { - "commandName": "Executable", - "executablePath": "$(IISExpressPath)", - "commandLineArgs": "$(IISExpressArguments)", - "environmentVariables": { - "IIS_SITE_PATH": "$(MSBuildThisFileDirectory)", - "ANCM_PATH": "$(AspNetCoreModuleV1ShimDll)", - "ANCMV2_PATH": "$(AspNetCoreModuleV2ShimDll)", - "ANCM_OUTOFPROCESS_HANDLER": "$(AspNetCoreModuleV2OutOfProcessHandlerDll)", - "LAUNCHER_ARGS": "$(TargetPath)", - "ASPNETCORE_ENVIRONMENT": "Development", - "LAUNCHER_PATH": "$(DotNetPath)", - "ASPNETCORE_MODULE_DEBUG": "console" - } - }, - "ANCM IIS": { - "commandName": "Executable", - "executablePath": "$(IISPath)", - "commandLineArgs": "$(IISArguments)", - "environmentVariables": { - "IIS_SITE_PATH": "$(MSBuildThisFileDirectory)", - "ANCM_PATH": "$(AspNetCoreModuleV1ShimDll)", - "ANCMV2_PATH": "$(AspNetCoreModuleV2ShimDll)", - "ASPNETCORE_MODULE_OUTOFPROCESS_HANDLER": "$(AspNetCoreModuleV2OutOfProcessHandlerDll)", - "LAUNCHER_ARGS": "$(TargetPath)", - "ASPNETCORE_ENVIRONMENT": "Development", - "LAUNCHER_PATH": "$(DotNetPath)", - "ASPNETCORE_MODULE_DEBUG": "console" - } - } - } -} diff --git a/src/IISIntegration/test/WebSites/InProcessWebSite/InProcessWebSite.csproj b/src/IISIntegration/test/WebSites/InProcessWebSite/InProcessWebSite.csproj deleted file mode 100644 index e50a8777e51a..000000000000 --- a/src/IISIntegration/test/WebSites/InProcessWebSite/InProcessWebSite.csproj +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - netcoreapp3.0 - true - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/IISIntegration/test/WebSites/InProcessWebSite/Properties/launchSettings.json b/src/IISIntegration/test/WebSites/InProcessWebSite/Properties/launchSettings.json deleted file mode 100644 index 246b7a0b47d4..000000000000 --- a/src/IISIntegration/test/WebSites/InProcessWebSite/Properties/launchSettings.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "iisSettings": { - "windowsAuthentication": true, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:5762/", - "sslPort": 0 - } - }, - "profiles": { - "ANCM IIS Express": { - "commandName": "Executable", - "executablePath": "$(IISExpressPath)", - "commandLineArgs": "$(IISExpressArguments)", - "environmentVariables": { - "IIS_SITE_PATH": "$(MSBuildThisFileDirectory)", - "ANCM_PATH": "$(AspNetCoreModuleV1ShimDll)", - "ANCMV2_PATH": "$(AspNetCoreModuleV2ShimDll)", - "ANCM_OUTOFPROCESS_HANDLER": "$(AspNetCoreModuleV2OutOfProcessHandlerDll)", - "LAUNCHER_ARGS": "$(TargetPath)", - "ASPNETCORE_ENVIRONMENT": "Development", - "LAUNCHER_PATH": "$(DotNetPath)", - "ASPNETCORE_MODULE_DEBUG": "console" - } - }, - "ANCM IIS": { - "commandName": "Executable", - "executablePath": "$(IISPath)", - "commandLineArgs": "$(IISArguments)", - "environmentVariables": { - "IIS_SITE_PATH": "$(MSBuildThisFileDirectory)", - "ANCM_PATH": "$(AspNetCoreModuleV1ShimDll)", - "ANCMV2_PATH": "$(AspNetCoreModuleV2ShimDll)", - "ASPNETCORE_MODULE_OUTOFPROCESS_HANDLER": "$(AspNetCoreModuleV2OutOfProcessHandlerDll)", - "LAUNCHER_ARGS": "$(TargetPath)", - "ASPNETCORE_ENVIRONMENT": "Development", - "LAUNCHER_PATH": "$(DotNetPath)", - "ASPNETCORE_MODULE_DEBUG": "console" - } - } - } -} diff --git a/src/IISIntegration/test/WebSites/OutOfProcessWebSite/OutOfProcessWebSite.csproj b/src/IISIntegration/test/WebSites/OutOfProcessWebSite/OutOfProcessWebSite.csproj deleted file mode 100644 index 4f6c2f95be9b..000000000000 --- a/src/IISIntegration/test/WebSites/OutOfProcessWebSite/OutOfProcessWebSite.csproj +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - netcoreapp3.0 - OutOfProcess - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/IISIntegration/test/WebSites/OutOfProcessWebSite/Properties/launchSettings.json b/src/IISIntegration/test/WebSites/OutOfProcessWebSite/Properties/launchSettings.json deleted file mode 100644 index 246b7a0b47d4..000000000000 --- a/src/IISIntegration/test/WebSites/OutOfProcessWebSite/Properties/launchSettings.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "iisSettings": { - "windowsAuthentication": true, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:5762/", - "sslPort": 0 - } - }, - "profiles": { - "ANCM IIS Express": { - "commandName": "Executable", - "executablePath": "$(IISExpressPath)", - "commandLineArgs": "$(IISExpressArguments)", - "environmentVariables": { - "IIS_SITE_PATH": "$(MSBuildThisFileDirectory)", - "ANCM_PATH": "$(AspNetCoreModuleV1ShimDll)", - "ANCMV2_PATH": "$(AspNetCoreModuleV2ShimDll)", - "ANCM_OUTOFPROCESS_HANDLER": "$(AspNetCoreModuleV2OutOfProcessHandlerDll)", - "LAUNCHER_ARGS": "$(TargetPath)", - "ASPNETCORE_ENVIRONMENT": "Development", - "LAUNCHER_PATH": "$(DotNetPath)", - "ASPNETCORE_MODULE_DEBUG": "console" - } - }, - "ANCM IIS": { - "commandName": "Executable", - "executablePath": "$(IISPath)", - "commandLineArgs": "$(IISArguments)", - "environmentVariables": { - "IIS_SITE_PATH": "$(MSBuildThisFileDirectory)", - "ANCM_PATH": "$(AspNetCoreModuleV1ShimDll)", - "ANCMV2_PATH": "$(AspNetCoreModuleV2ShimDll)", - "ASPNETCORE_MODULE_OUTOFPROCESS_HANDLER": "$(AspNetCoreModuleV2OutOfProcessHandlerDll)", - "LAUNCHER_ARGS": "$(TargetPath)", - "ASPNETCORE_ENVIRONMENT": "Development", - "LAUNCHER_PATH": "$(DotNetPath)", - "ASPNETCORE_MODULE_DEBUG": "console" - } - } - } -} diff --git a/src/IISIntegration/test/WebSites/StressTestWebSite/Properties/launchSettings.json b/src/IISIntegration/test/WebSites/StressTestWebSite/Properties/launchSettings.json deleted file mode 100644 index 246b7a0b47d4..000000000000 --- a/src/IISIntegration/test/WebSites/StressTestWebSite/Properties/launchSettings.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "iisSettings": { - "windowsAuthentication": true, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:5762/", - "sslPort": 0 - } - }, - "profiles": { - "ANCM IIS Express": { - "commandName": "Executable", - "executablePath": "$(IISExpressPath)", - "commandLineArgs": "$(IISExpressArguments)", - "environmentVariables": { - "IIS_SITE_PATH": "$(MSBuildThisFileDirectory)", - "ANCM_PATH": "$(AspNetCoreModuleV1ShimDll)", - "ANCMV2_PATH": "$(AspNetCoreModuleV2ShimDll)", - "ANCM_OUTOFPROCESS_HANDLER": "$(AspNetCoreModuleV2OutOfProcessHandlerDll)", - "LAUNCHER_ARGS": "$(TargetPath)", - "ASPNETCORE_ENVIRONMENT": "Development", - "LAUNCHER_PATH": "$(DotNetPath)", - "ASPNETCORE_MODULE_DEBUG": "console" - } - }, - "ANCM IIS": { - "commandName": "Executable", - "executablePath": "$(IISPath)", - "commandLineArgs": "$(IISArguments)", - "environmentVariables": { - "IIS_SITE_PATH": "$(MSBuildThisFileDirectory)", - "ANCM_PATH": "$(AspNetCoreModuleV1ShimDll)", - "ANCMV2_PATH": "$(AspNetCoreModuleV2ShimDll)", - "ASPNETCORE_MODULE_OUTOFPROCESS_HANDLER": "$(AspNetCoreModuleV2OutOfProcessHandlerDll)", - "LAUNCHER_ARGS": "$(TargetPath)", - "ASPNETCORE_ENVIRONMENT": "Development", - "LAUNCHER_PATH": "$(DotNetPath)", - "ASPNETCORE_MODULE_DEBUG": "console" - } - } - } -} diff --git a/src/IISIntegration/test/WebSites/StressTestWebSite/StressTestWebSite.csproj b/src/IISIntegration/test/WebSites/StressTestWebSite/StressTestWebSite.csproj deleted file mode 100644 index 453950b189d4..000000000000 --- a/src/IISIntegration/test/WebSites/StressTestWebSite/StressTestWebSite.csproj +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - netcoreapp3.0 - true - - - - - - - - - - - - - - - - - - diff --git a/src/IISIntegration/version.props b/src/IISIntegration/version.props deleted file mode 100644 index 235b1bbb342a..000000000000 --- a/src/IISIntegration/version.props +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/Identity/Directory.Build.props b/src/Identity/Directory.Build.props index 1c9369f9416b..5a4e9d7eef1b 100644 --- a/src/Identity/Directory.Build.props +++ b/src/Identity/Directory.Build.props @@ -17,6 +17,7 @@ true false + $(MSBuildThisFileDirectory)..\Shared\ diff --git a/src/Identity/build/dependencies.props b/src/Identity/build/dependencies.props index 6ed14073ef87..83f682940fa6 100644 --- a/src/Identity/build/dependencies.props +++ b/src/Identity/build/dependencies.props @@ -56,7 +56,6 @@ 3.0.0-preview-181113-11 3.0.0-preview-181113-11 3.0.0-preview-181113-11 - 3.0.0-preview-181113-11 3.0.0-preview1-26907-05 3.0.0-preview-18579-0056 15.6.1 diff --git a/src/MetaPackages/.gitignore b/src/MetaPackages/.gitignore deleted file mode 100644 index 3af0091ea313..000000000000 --- a/src/MetaPackages/.gitignore +++ /dev/null @@ -1,37 +0,0 @@ -[Oo]bj/ -[Bb]in/ -TestResults/ -.nuget/ -_ReSharper.*/ -packages/ -artifacts/ -PublishProfiles/ -*.user -*.suo -*.cache -*.docstates -_ReSharper.* -nuget.exe -*net45.csproj -*net451.csproj -*k10.csproj -*.psess -*.vsp -*.pidb -*.userprefs -*DS_Store -*.ncrunchsolution -*.*sdf -*.ipch -*.sln.ide -project.lock.json -.vs -.vscode/ -.build/ -.testPublish/ -global.json - -# Dependencies from pre-requisite builds -.deps/ -.rw/ -.ro/ diff --git a/src/MetaPackages/Directory.Build.props b/src/MetaPackages/Directory.Build.props deleted file mode 100644 index 3cf9e7113e90..000000000000 --- a/src/MetaPackages/Directory.Build.props +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - Microsoft ASP.NET Core - https://github.com/aspnet/AspNetCore - git - $(MSBuildThisFileDirectory) - false - $(MSBuildThisFileDirectory)..\..\eng\AspNetCore.snk - true - true - - diff --git a/src/MetaPackages/Directory.Build.targets b/src/MetaPackages/Directory.Build.targets deleted file mode 100644 index 7e3f8df92e4b..000000000000 --- a/src/MetaPackages/Directory.Build.targets +++ /dev/null @@ -1,6 +0,0 @@ - - - $(MicrosoftNETCoreAppPackageVersion) - $(NETStandardLibrary20PackageVersion) - - diff --git a/src/MetaPackages/MetaPackages.sln b/src/MetaPackages/MetaPackages.sln deleted file mode 100644 index 659427dfcb34..000000000000 --- a/src/MetaPackages/MetaPackages.sln +++ /dev/null @@ -1,116 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.27005.2 -MinimumVisualStudioVersion = 15.0.26730.03 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{ED834E68-51C3-4ADE-ACC8-6BA6D4207C09}" - ProjectSection(SolutionItems) = preProject - src\Directory.Build.props = src\Directory.Build.props - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore", "src\Microsoft.AspNetCore\Microsoft.AspNetCore.csproj", "{6F3D43F7-9546-4B41-AF04-CF4708B62051}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{97D53BEB-A511-4FBE-B784-AB407D9A219F}" - ProjectSection(SolutionItems) = preProject - Directory.Build.props = Directory.Build.props - Directory.Build.targets = Directory.Build.targets - NuGet.config = NuGet.config - version.xml = version.xml - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{F92CB7A1-C38E-408C-A7EC-A5C040D041E1}" - ProjectSection(SolutionItems) = preProject - build\dependencies.props = build\dependencies.props - build\repo.targets = build\repo.targets - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{192F583C-C4CA-43E5-B31C-D21B7806E274}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SampleApp", "samples\SampleApp\SampleApp.csproj", "{AF5BB04E-92F7-4737-8B98-F86F6244FAB2}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{9E49B5B9-9E72-42FB-B684-90CA1B1BCF9C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.FunctionalTests", "test\Microsoft.AspNetCore.FunctionalTests\Microsoft.AspNetCore.FunctionalTests.csproj", "{C72A756A-D29D-44C7-83D4-821DBE82DBCA}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TestSites", "TestSites", "{EC22261D-0DE1-47DE-8F7C-072675D6F5B4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "StartRouteBuilderUrlApp", "test\TestSites\StartRouteBuilderUrlApp\StartRouteBuilderUrlApp.csproj", "{AB42054B-1801-4FEE-B5C3-8529C6D7BFDA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "StartWithIApplicationBuilderUrlApp", "test\TestSites\StartWithIApplicationBuilderUrlApp\StartWithIApplicationBuilderUrlApp.csproj", "{3A85FA52-F601-422E-A42E-9F187DB28492}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "StartRequestDelegateUrlApp", "test\TestSites\StartRequestDelegateUrlApp\StartRequestDelegateUrlApp.csproj", "{401C741B-6C7C-4E08-9F09-C3D43D22C0DE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CreateDefaultBuilderApp", "test\TestSites\CreateDefaultBuilderApp\CreateDefaultBuilderApp.csproj", "{79CF58CE-B020-45D8-BDB5-2D8036BEAD14}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DependencyInjectionApp", "test\TestSites\DependencyInjectionApp\DependencyInjectionApp.csproj", "{65FE2E38-4529-4C93-A7B0-CF12DD7A70C3}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CreateDefaultBuilderOfTApp", "test\TestSites\CreateDefaultBuilderOfTApp\CreateDefaultBuilderOfTApp.csproj", "{A922B5AC-836B-44F4-83F1-3CB9EB08A3F8}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Tests", "test\Microsoft.AspNetCore.Tests\Microsoft.AspNetCore.Tests.csproj", "{BD08F027-3BB9-427B-9367-19534B7376B3}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {6F3D43F7-9546-4B41-AF04-CF4708B62051}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6F3D43F7-9546-4B41-AF04-CF4708B62051}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6F3D43F7-9546-4B41-AF04-CF4708B62051}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6F3D43F7-9546-4B41-AF04-CF4708B62051}.Release|Any CPU.Build.0 = Release|Any CPU - {AF5BB04E-92F7-4737-8B98-F86F6244FAB2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AF5BB04E-92F7-4737-8B98-F86F6244FAB2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AF5BB04E-92F7-4737-8B98-F86F6244FAB2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AF5BB04E-92F7-4737-8B98-F86F6244FAB2}.Release|Any CPU.Build.0 = Release|Any CPU - {C72A756A-D29D-44C7-83D4-821DBE82DBCA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C72A756A-D29D-44C7-83D4-821DBE82DBCA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C72A756A-D29D-44C7-83D4-821DBE82DBCA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C72A756A-D29D-44C7-83D4-821DBE82DBCA}.Release|Any CPU.Build.0 = Release|Any CPU - {AB42054B-1801-4FEE-B5C3-8529C6D7BFDA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AB42054B-1801-4FEE-B5C3-8529C6D7BFDA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AB42054B-1801-4FEE-B5C3-8529C6D7BFDA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AB42054B-1801-4FEE-B5C3-8529C6D7BFDA}.Release|Any CPU.Build.0 = Release|Any CPU - {3A85FA52-F601-422E-A42E-9F187DB28492}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3A85FA52-F601-422E-A42E-9F187DB28492}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3A85FA52-F601-422E-A42E-9F187DB28492}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3A85FA52-F601-422E-A42E-9F187DB28492}.Release|Any CPU.Build.0 = Release|Any CPU - {401C741B-6C7C-4E08-9F09-C3D43D22C0DE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {401C741B-6C7C-4E08-9F09-C3D43D22C0DE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {401C741B-6C7C-4E08-9F09-C3D43D22C0DE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {401C741B-6C7C-4E08-9F09-C3D43D22C0DE}.Release|Any CPU.Build.0 = Release|Any CPU - {79CF58CE-B020-45D8-BDB5-2D8036BEAD14}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {79CF58CE-B020-45D8-BDB5-2D8036BEAD14}.Debug|Any CPU.Build.0 = Debug|Any CPU - {79CF58CE-B020-45D8-BDB5-2D8036BEAD14}.Release|Any CPU.ActiveCfg = Release|Any CPU - {79CF58CE-B020-45D8-BDB5-2D8036BEAD14}.Release|Any CPU.Build.0 = Release|Any CPU - {65FE2E38-4529-4C93-A7B0-CF12DD7A70C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {65FE2E38-4529-4C93-A7B0-CF12DD7A70C3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {65FE2E38-4529-4C93-A7B0-CF12DD7A70C3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {65FE2E38-4529-4C93-A7B0-CF12DD7A70C3}.Release|Any CPU.Build.0 = Release|Any CPU - {A922B5AC-836B-44F4-83F1-3CB9EB08A3F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A922B5AC-836B-44F4-83F1-3CB9EB08A3F8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A922B5AC-836B-44F4-83F1-3CB9EB08A3F8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A922B5AC-836B-44F4-83F1-3CB9EB08A3F8}.Release|Any CPU.Build.0 = Release|Any CPU - {BD08F027-3BB9-427B-9367-19534B7376B3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BD08F027-3BB9-427B-9367-19534B7376B3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BD08F027-3BB9-427B-9367-19534B7376B3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BD08F027-3BB9-427B-9367-19534B7376B3}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {6F3D43F7-9546-4B41-AF04-CF4708B62051} = {ED834E68-51C3-4ADE-ACC8-6BA6D4207C09} - {AF5BB04E-92F7-4737-8B98-F86F6244FAB2} = {192F583C-C4CA-43E5-B31C-D21B7806E274} - {C72A756A-D29D-44C7-83D4-821DBE82DBCA} = {9E49B5B9-9E72-42FB-B684-90CA1B1BCF9C} - {EC22261D-0DE1-47DE-8F7C-072675D6F5B4} = {9E49B5B9-9E72-42FB-B684-90CA1B1BCF9C} - {AB42054B-1801-4FEE-B5C3-8529C6D7BFDA} = {EC22261D-0DE1-47DE-8F7C-072675D6F5B4} - {3A85FA52-F601-422E-A42E-9F187DB28492} = {EC22261D-0DE1-47DE-8F7C-072675D6F5B4} - {401C741B-6C7C-4E08-9F09-C3D43D22C0DE} = {EC22261D-0DE1-47DE-8F7C-072675D6F5B4} - {79CF58CE-B020-45D8-BDB5-2D8036BEAD14} = {EC22261D-0DE1-47DE-8F7C-072675D6F5B4} - {65FE2E38-4529-4C93-A7B0-CF12DD7A70C3} = {EC22261D-0DE1-47DE-8F7C-072675D6F5B4} - {A922B5AC-836B-44F4-83F1-3CB9EB08A3F8} = {EC22261D-0DE1-47DE-8F7C-072675D6F5B4} - {BD08F027-3BB9-427B-9367-19534B7376B3} = {9E49B5B9-9E72-42FB-B684-90CA1B1BCF9C} - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {A666E9B0-125B-4975-B35B-09A6D68A5047} - EndGlobalSection -EndGlobal diff --git a/src/MetaPackages/NuGetPackageVerifier.json b/src/MetaPackages/NuGetPackageVerifier.json deleted file mode 100644 index b153ab15150d..000000000000 --- a/src/MetaPackages/NuGetPackageVerifier.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "Default": { - "rules": [ - "DefaultCompositeRule" - ] - } -} \ No newline at end of file diff --git a/src/MetaPackages/README.md b/src/MetaPackages/README.md deleted file mode 100644 index 71a55178ee1a..000000000000 --- a/src/MetaPackages/README.md +++ /dev/null @@ -1,9 +0,0 @@ -Meta Packages [Archived] -======================== - -**This GitHub project has been archived.** Ongoing development on this project can be found in https://github.com/aspnet/AspNetCore. - -This repo contains NuGet meta packages that help quickly reference sets of common packages. - -This project is part of ASP.NET Core. You can find samples, documentation and getting started instructions for ASP.NET Core at the [AspNetCore](https://github.com/aspnet/AspNetCore) repo. - diff --git a/src/MetaPackages/build/dependencies.props b/src/MetaPackages/build/dependencies.props deleted file mode 100644 index ee4e17013bb6..000000000000 --- a/src/MetaPackages/build/dependencies.props +++ /dev/null @@ -1,42 +0,0 @@ - - - $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - - - 3.0.0-alpha1-20181004.7 - 3.0.0-alpha1-10733 - 3.0.0-alpha1-10733 - 3.0.0-alpha1-10733 - 3.0.0-alpha1-10733 - 3.0.0-alpha1-10733 - 3.0.0-alpha1-10733 - 3.0.0-alpha1-10733 - 3.0.0-alpha1-10733 - 3.0.0-alpha1-10733 - 0.7.0-alpha1-10733 - 3.0.0-alpha1-10733 - 3.0.0-alpha1-10733 - 3.0.0-alpha1-10733 - 3.0.0-preview-181108-06 - 3.0.0-preview-181108-06 - 3.0.0-preview-181108-06 - 3.0.0-preview-181108-06 - 3.0.0-preview-181108-06 - 3.0.0-preview-181108-06 - 3.0.0-preview-181108-06 - 3.0.0-preview-181108-06 - 3.0.0-preview-181108-06 - 3.0.0-preview-181108-06 - 3.0.0-alpha1-10733 - 2.0.9 - 2.1.3 - 2.2.0-rtm-27105-02 - 15.6.1 - 4.10.0 - 2.0.3 - 2.3.1 - 2.4.0 - - - - diff --git a/src/MetaPackages/build/repo.props b/src/MetaPackages/build/repo.props deleted file mode 100644 index 00a0c65cc2f1..000000000000 --- a/src/MetaPackages/build/repo.props +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/src/MetaPackages/build/sources.props b/src/MetaPackages/build/sources.props deleted file mode 100644 index 9215df9751b4..000000000000 --- a/src/MetaPackages/build/sources.props +++ /dev/null @@ -1,17 +0,0 @@ - - - - - $(DotNetRestoreSources) - - $(RestoreSources); - https://dotnet.myget.org/F/dotnet-core/api/v3/index.json; - https://dotnet.myget.org/F/aspnetcore-dev/api/v3/index.json; - https://dotnet.myget.org/F/aspnetcore-tools/api/v3/index.json; - - - $(RestoreSources); - https://api.nuget.org/v3/index.json; - - - diff --git a/src/MetaPackages/samples/SampleApp/Properties/launchSettings.json b/src/MetaPackages/samples/SampleApp/Properties/launchSettings.json deleted file mode 100644 index f0370cf22bf2..000000000000 --- a/src/MetaPackages/samples/SampleApp/Properties/launchSettings.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "iisSettings": { - "windowsAuthentication": false, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:53432/", - "sslPort": 0 - } - }, - "profiles": { - "IIS Express": { - "commandName": "IISExpress", - "launchBrowser": true, - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - }, - "SampleApp": { - "commandName": "Project", - "launchBrowser": true, - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - }, - "applicationUrl": "http://localhost:53433" - } - } -} diff --git a/src/MetaPackages/samples/SampleApp/SampleApp.csproj b/src/MetaPackages/samples/SampleApp/SampleApp.csproj deleted file mode 100644 index 64625f55838e..000000000000 --- a/src/MetaPackages/samples/SampleApp/SampleApp.csproj +++ /dev/null @@ -1,17 +0,0 @@ - - - - netcoreapp3.0 - aspnetcore-MetaPackagesSampleApp-20170406180413 - - - - - - - - - - - - diff --git a/src/MetaPackages/src/Directory.Build.props b/src/MetaPackages/src/Directory.Build.props deleted file mode 100644 index 410f24daa9ca..000000000000 --- a/src/MetaPackages/src/Directory.Build.props +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/src/MetaPackages/src/Microsoft.AspNetCore/Microsoft.AspNetCore.csproj b/src/MetaPackages/src/Microsoft.AspNetCore/Microsoft.AspNetCore.csproj deleted file mode 100644 index 863512167e41..000000000000 --- a/src/MetaPackages/src/Microsoft.AspNetCore/Microsoft.AspNetCore.csproj +++ /dev/null @@ -1,31 +0,0 @@ - - - - netcoreapp3.0 - aspnetcore - Microsoft.AspNetCore - true - false - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/MetaPackages/test/Directory.Build.props b/src/MetaPackages/test/Directory.Build.props deleted file mode 100644 index 34fdc31455c6..000000000000 --- a/src/MetaPackages/test/Directory.Build.props +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/src/MetaPackages/test/Microsoft.AspNetCore.FunctionalTests/Microsoft.AspNetCore.FunctionalTests.csproj b/src/MetaPackages/test/Microsoft.AspNetCore.FunctionalTests/Microsoft.AspNetCore.FunctionalTests.csproj deleted file mode 100644 index 8503374106f9..000000000000 --- a/src/MetaPackages/test/Microsoft.AspNetCore.FunctionalTests/Microsoft.AspNetCore.FunctionalTests.csproj +++ /dev/null @@ -1,23 +0,0 @@ - - - - netcoreapp3.0 - - - - - - - - - - - - - - - - - - - diff --git a/src/MetaPackages/test/Microsoft.AspNetCore.Tests/Microsoft.AspNetCore.Tests.csproj b/src/MetaPackages/test/Microsoft.AspNetCore.Tests/Microsoft.AspNetCore.Tests.csproj deleted file mode 100644 index 5df7ab6977e8..000000000000 --- a/src/MetaPackages/test/Microsoft.AspNetCore.Tests/Microsoft.AspNetCore.Tests.csproj +++ /dev/null @@ -1,18 +0,0 @@ - - - - netcoreapp3.0 - - - - - - - - - - - - - - diff --git a/src/MetaPackages/version.props b/src/MetaPackages/version.props deleted file mode 100644 index 2aae215c041e..000000000000 --- a/src/MetaPackages/version.props +++ /dev/null @@ -1,12 +0,0 @@ - - - 3.0.0 - alpha1 - $(VersionPrefix) - $(VersionPrefix)-$(VersionSuffix)-final - t000 - a- - $(FeatureBranchVersionPrefix)$(VersionSuffix)-$([System.Text.RegularExpressions.Regex]::Replace('$(FeatureBranchVersionSuffix)', '[^\w-]', '-')) - $(VersionSuffix)-$(BuildNumber) - - diff --git a/src/Middleware/CORS/test/FunctionalTests/package-lock.json b/src/Middleware/CORS/test/FunctionalTests/package-lock.json index d52f0cceb839..4f6bda1b10bd 100644 --- a/src/Middleware/CORS/test/FunctionalTests/package-lock.json +++ b/src/Middleware/CORS/test/FunctionalTests/package-lock.json @@ -1668,8 +1668,7 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "aproba": { "version": "1.2.0", @@ -1690,14 +1689,12 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, - "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -1712,20 +1709,17 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "core-util-is": { "version": "1.0.2", @@ -1842,8 +1836,7 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "ini": { "version": "1.3.5", @@ -1855,7 +1848,6 @@ "version": "1.0.0", "bundled": true, "dev": true, - "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -1870,7 +1862,6 @@ "version": "3.0.4", "bundled": true, "dev": true, - "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -1878,14 +1869,12 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "minipass": { "version": "2.2.4", "bundled": true, "dev": true, - "optional": true, "requires": { "safe-buffer": "^5.1.1", "yallist": "^3.0.0" @@ -1904,7 +1893,6 @@ "version": "0.5.1", "bundled": true, "dev": true, - "optional": true, "requires": { "minimist": "0.0.8" } @@ -1985,8 +1973,7 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "object-assign": { "version": "4.1.1", @@ -1998,7 +1985,6 @@ "version": "1.4.0", "bundled": true, "dev": true, - "optional": true, "requires": { "wrappy": "1" } @@ -2084,8 +2070,7 @@ "safe-buffer": { "version": "5.1.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "safer-buffer": { "version": "2.1.2", @@ -2121,7 +2106,6 @@ "version": "1.0.2", "bundled": true, "dev": true, - "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -2141,7 +2125,6 @@ "version": "3.0.1", "bundled": true, "dev": true, - "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -2185,14 +2168,12 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "yallist": { "version": "3.0.2", "bundled": true, - "dev": true, - "optional": true + "dev": true } } }, diff --git a/src/Middleware/Diagnostics.EntityFrameworkCore/src/Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.csproj b/src/Middleware/Diagnostics.EntityFrameworkCore/src/Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.csproj index 9178bf319030..1f3d40ab64aa 100644 --- a/src/Middleware/Diagnostics.EntityFrameworkCore/src/Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.csproj +++ b/src/Middleware/Diagnostics.EntityFrameworkCore/src/Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.csproj @@ -10,12 +10,12 @@ + - diff --git a/src/Middleware/Diagnostics/src/Microsoft.AspNetCore.Diagnostics.csproj b/src/Middleware/Diagnostics/src/Microsoft.AspNetCore.Diagnostics.csproj index 303147944354..4301e6af1044 100644 --- a/src/Middleware/Diagnostics/src/Microsoft.AspNetCore.Diagnostics.csproj +++ b/src/Middleware/Diagnostics/src/Microsoft.AspNetCore.Diagnostics.csproj @@ -10,6 +10,8 @@ + + @@ -20,8 +22,6 @@ - - diff --git a/src/Mvc/Directory.Build.props b/src/Mvc/Directory.Build.props index 3de372e98a2e..f6dd751dffd8 100644 --- a/src/Mvc/Directory.Build.props +++ b/src/Mvc/Directory.Build.props @@ -16,6 +16,7 @@ true true true + $(MSBuildThisFileDirectory)..\Shared\ diff --git a/src/Mvc/build/dependencies.props b/src/Mvc/build/dependencies.props index a2765d4851dc..64519e153ca6 100644 --- a/src/Mvc/build/dependencies.props +++ b/src/Mvc/build/dependencies.props @@ -7,7 +7,7 @@ is not otherwise referenced. They avoid unnecessary changes to the Universe build graph or to product dependencies. Do not use these properties elsewhere. --> - + 0.9.9 0.10.13 3.0.0-preview.18572.1 @@ -61,11 +61,9 @@ 3.0.0-preview-18605-0080 1.7.0 3.0.0-preview.18605.1 - 3.0.0-preview.18605.1 3.0.0-preview.18605.1 3.0.0-preview.18605.1 3.0.0-preview.18605.1 - 3.0.0-preview.18605.1 3.0.0-preview.18605.1 3.0.0-preview-27122-01 3.0.0-preview.18605.1 @@ -80,13 +78,9 @@ 3.0.0-preview.18605.1 3.0.0-preview.18605.1 3.0.0-preview.18605.1 - 3.0.0-preview.18605.1 3.0.0-preview.18605.1 3.0.0-preview.18605.1 3.0.0-preview.18605.1 - 3.0.0-preview.18605.1 - 3.0.0-preview.18605.1 - 3.0.0-preview.18605.1 3.0.0-preview.18605.1 3.0.0-preview.18605.1 3.0.0-preview.18605.1 diff --git a/src/Mvc/src/Microsoft.AspNetCore.Mvc.Abstractions/Microsoft.AspNetCore.Mvc.Abstractions.csproj b/src/Mvc/src/Microsoft.AspNetCore.Mvc.Abstractions/Microsoft.AspNetCore.Mvc.Abstractions.csproj index a9b297c08090..9e97605e8ba2 100644 --- a/src/Mvc/src/Microsoft.AspNetCore.Mvc.Abstractions/Microsoft.AspNetCore.Mvc.Abstractions.csproj +++ b/src/Mvc/src/Microsoft.AspNetCore.Mvc.Abstractions/Microsoft.AspNetCore.Mvc.Abstractions.csproj @@ -10,13 +10,16 @@ Microsoft.AspNetCore.Mvc.IActionResult aspnetcore;aspnetcoremvc + + + + - diff --git a/src/Mvc/src/Microsoft.AspNetCore.Mvc.Core/Microsoft.AspNetCore.Mvc.Core.csproj b/src/Mvc/src/Microsoft.AspNetCore.Mvc.Core/Microsoft.AspNetCore.Mvc.Core.csproj index 73bfa29ecaaf..c1253a4c9d60 100644 --- a/src/Mvc/src/Microsoft.AspNetCore.Mvc.Core/Microsoft.AspNetCore.Mvc.Core.csproj +++ b/src/Mvc/src/Microsoft.AspNetCore.Mvc.Core/Microsoft.AspNetCore.Mvc.Core.csproj @@ -17,7 +17,12 @@ Microsoft.AspNetCore.Mvc.RouteAttribute - + + + + + + @@ -41,12 +46,7 @@ Microsoft.AspNetCore.Mvc.RouteAttribute - - - - - diff --git a/src/Mvc/src/Microsoft.AspNetCore.Mvc.Formatters.Json/Microsoft.AspNetCore.Mvc.Formatters.Json.csproj b/src/Mvc/src/Microsoft.AspNetCore.Mvc.Formatters.Json/Microsoft.AspNetCore.Mvc.Formatters.Json.csproj index 18fc52f7c7ec..a40c84a6c80e 100644 --- a/src/Mvc/src/Microsoft.AspNetCore.Mvc.Formatters.Json/Microsoft.AspNetCore.Mvc.Formatters.Json.csproj +++ b/src/Mvc/src/Microsoft.AspNetCore.Mvc.Formatters.Json/Microsoft.AspNetCore.Mvc.Formatters.Json.csproj @@ -8,10 +8,13 @@ aspnetcore;aspnetcoremvc;json + + + + - diff --git a/src/Razor/Directory.Build.props b/src/Razor/Directory.Build.props index e840ce2f608d..fc7aabfa0e25 100644 --- a/src/Razor/Directory.Build.props +++ b/src/Razor/Directory.Build.props @@ -16,6 +16,7 @@ true true 7.3 + $(MSBuildThisFileDirectory)..\Shared\ diff --git a/src/Razor/build/dependencies.props b/src/Razor/build/dependencies.props index 87a64799ccd3..14d59a6be23b 100644 --- a/src/Razor/build/dependencies.props +++ b/src/Razor/build/dependencies.props @@ -8,7 +8,6 @@ 3.0.0-alpha1-10717 3.0.0-preview-181106-14 3.0.0-preview-181106-14 - 3.0.0-preview-181106-14 3.0.0-preview1-26907-05 3.0.0-preview-181106-14 3.0.0-preview-181106-14 @@ -21,7 +20,6 @@ 2.3.1 2.4.0 - - + diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.Runtime/Microsoft.AspNetCore.Razor.Runtime.csproj b/src/Razor/src/Microsoft.AspNetCore.Razor.Runtime/Microsoft.AspNetCore.Razor.Runtime.csproj index a44f29df7673..3d5e8026f48a 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.Runtime/Microsoft.AspNetCore.Razor.Runtime.csproj +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.Runtime/Microsoft.AspNetCore.Razor.Runtime.csproj @@ -6,13 +6,16 @@ $(PackageTags);taghelper;taghelpers + + + + - diff --git a/src/Security/Directory.Build.props b/src/Security/Directory.Build.props index a73e31b98407..655204d3855a 100644 --- a/src/Security/Directory.Build.props +++ b/src/Security/Directory.Build.props @@ -15,5 +15,6 @@ $(MSBuildThisFileDirectory)build\Key.snk true true + $(MSBuildThisFileDirectory)..\Shared\ diff --git a/src/Security/build/dependencies.props b/src/Security/build/dependencies.props index 163a3d400473..c10fe44937cf 100644 --- a/src/Security/build/dependencies.props +++ b/src/Security/build/dependencies.props @@ -32,7 +32,6 @@ 3.0.0-preview-181113-11 3.0.0-preview-181113-11 3.0.0-preview-181113-11 - 3.0.0-preview-181113-11 3.0.0-preview-181113-11 3.19.8 5.3.0 diff --git a/src/Security/src/Microsoft.AspNetCore.Authentication/Microsoft.AspNetCore.Authentication.csproj b/src/Security/src/Microsoft.AspNetCore.Authentication/Microsoft.AspNetCore.Authentication.csproj index 9ae0a7bccc48..59751d96897b 100644 --- a/src/Security/src/Microsoft.AspNetCore.Authentication/Microsoft.AspNetCore.Authentication.csproj +++ b/src/Security/src/Microsoft.AspNetCore.Authentication/Microsoft.AspNetCore.Authentication.csproj @@ -8,6 +8,10 @@ aspnetcore;authentication;security + + + + @@ -15,7 +19,6 @@ - diff --git a/src/Security/src/Microsoft.AspNetCore.Authorization.Policy/Microsoft.AspNetCore.Authorization.Policy.csproj b/src/Security/src/Microsoft.AspNetCore.Authorization.Policy/Microsoft.AspNetCore.Authorization.Policy.csproj index d3ad99a5111b..359f1792f95a 100644 --- a/src/Security/src/Microsoft.AspNetCore.Authorization.Policy/Microsoft.AspNetCore.Authorization.Policy.csproj +++ b/src/Security/src/Microsoft.AspNetCore.Authorization.Policy/Microsoft.AspNetCore.Authorization.Policy.csproj @@ -8,6 +8,10 @@ aspnetcore;authorization + + + + @@ -16,7 +20,6 @@ - diff --git a/src/ServerTests/Directory.Build.props b/src/ServerTests/Directory.Build.props index cefef093b13a..147891aabae3 100644 --- a/src/ServerTests/Directory.Build.props +++ b/src/ServerTests/Directory.Build.props @@ -13,6 +13,7 @@ git $(MSBuildThisFileDirectory) true + $(MSBuildThisFileDirectory)..\Shared\ diff --git a/src/ServerTests/test/aspnetcore_schema_v2.xml b/src/ServerTests/test/aspnetcore_schema_v2.xml index d65be071958c..06ff983c3276 100644 --- a/src/ServerTests/test/aspnetcore_schema_v2.xml +++ b/src/ServerTests/test/aspnetcore_schema_v2.xml @@ -1,11 +1,11 @@ diff --git a/src/Servers/HttpSys/test/FunctionalTests/HttpsTests.cs b/src/Servers/HttpSys/test/FunctionalTests/HttpsTests.cs index b3ae85687ae0..47b02a309269 100644 --- a/src/Servers/HttpSys/test/FunctionalTests/HttpsTests.cs +++ b/src/Servers/HttpSys/test/FunctionalTests/HttpsTests.cs @@ -99,7 +99,7 @@ public async Task Https_ClientCertRequested_ClientCertPresent() } } - private async Task SendRequestAsync(string uri, + private async Task SendRequestAsync(string uri, X509Certificate cert = null) { var handler = new WinHttpHandler(); diff --git a/src/Servers/HttpSys/test/FunctionalTests/ResponseCachingTests.cs b/src/Servers/HttpSys/test/FunctionalTests/ResponseCachingTests.cs index 6f63d5ca2231..7333a1ce7192 100644 --- a/src/Servers/HttpSys/test/FunctionalTests/ResponseCachingTests.cs +++ b/src/Servers/HttpSys/test/FunctionalTests/ResponseCachingTests.cs @@ -21,7 +21,7 @@ public class ResponseCachingTests public ResponseCachingTests() { - _absoluteFilePath = Directory.GetFiles(Directory.GetCurrentDirectory()).First(); + _absoluteFilePath = Path.Combine(Directory.GetCurrentDirectory(), "Microsoft.AspNetCore.Server.HttpSys.dll"); _fileLength = new FileInfo(_absoluteFilePath).Length; } diff --git a/src/IISIntegration/.gitignore b/src/Servers/IIS/.gitignore similarity index 98% rename from src/IISIntegration/.gitignore rename to src/Servers/IIS/.gitignore index c18e14397c10..b5d62b332977 100644 --- a/src/IISIntegration/.gitignore +++ b/src/Servers/IIS/.gitignore @@ -32,7 +32,6 @@ project.lock.json *.bin *.vs/ .testPublish/ - *.obj *.tlog *.CppClean.log @@ -44,7 +43,6 @@ src/*/*/x64/Debug/ src/*/*/Release/ src/*/*/x64/Release/ x64/ - *vcxproj.filters *.aps *.pdb @@ -63,7 +61,6 @@ src/*/CommonLib/aspnetcore_msg.rc test/*/Debug test/*/Release .build - *.VC.*db global.json -msbuild.binlog +msbuild.binlog \ No newline at end of file diff --git a/src/Shared/Directory.Build.props b/src/Servers/IIS/Directory.Build.props similarity index 57% rename from src/Shared/Directory.Build.props rename to src/Servers/IIS/Directory.Build.props index 2a71348381b0..f4bd362993a5 100644 --- a/src/Shared/Directory.Build.props +++ b/src/Servers/IIS/Directory.Build.props @@ -1,9 +1,10 @@ - - false - Microsoft.AspNetCore.$(ProjectDirName).Sources + + + + diff --git a/src/Servers/IIS/Directory.Build.targets b/src/Servers/IIS/Directory.Build.targets new file mode 100644 index 000000000000..d6a76c85fe70 --- /dev/null +++ b/src/Servers/IIS/Directory.Build.targets @@ -0,0 +1,5 @@ + + + + + diff --git a/src/IISIntegration/IISIntegration.NoV1.sln b/src/Servers/IIS/IISIntegration.NoV1.sln similarity index 99% rename from src/IISIntegration/IISIntegration.NoV1.sln rename to src/Servers/IIS/IISIntegration.NoV1.sln index c0985af5556c..883c9e7bb6e4 100644 --- a/src/IISIntegration/IISIntegration.NoV1.sln +++ b/src/Servers/IIS/IISIntegration.NoV1.sln @@ -38,7 +38,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{7E80C58E build\applicationhost.iis.config = build\applicationhost.iis.config build\Build.Settings = build\Build.Settings build\Config.Definitions.Props = build\Config.Definitions.Props - build\functional-test-assets.targets = build\functional-test-assets.targets build\Key.snk = build\Key.snk build\launchSettings.json = build\launchSettings.json build\native.targets = build\native.targets diff --git a/src/Servers/IIS/IISIntegration.sln b/src/Servers/IIS/IISIntegration.sln new file mode 100644 index 000000000000..4627298e8b2b --- /dev/null +++ b/src/Servers/IIS/IISIntegration.sln @@ -0,0 +1,373 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.27130.2036 +MinimumVisualStudioVersion = 15.0.26730.03 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{04B1EDB6-E967-4D25-89B9-E6F8304038CD}" + ProjectSection(SolutionItems) = preProject + src\Directory.Build.props = src\Directory.Build.props + EndProjectSection +EndProject +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("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{EF30B533-D715-421A-92B7-92FEF460AC9C}" + ProjectSection(SolutionItems) = preProject + test\Directory.Build.props = test\Directory.Build.props + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{C74B8F36-FD2F-45C9-9B8A-00E7CF0126A9}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IISSample", "samples\IISSample\IISSample.csproj", "{E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.IISIntegration", "src\Microsoft.AspNetCore.Server.IISIntegration\Microsoft.AspNetCore.Server.IISIntegration.csproj", "{8B3446E8-E6A8-4591-AA63-A95837C6E97C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OutOfProcessWebSite", "test\testassets\OutOfProcessWebSite\OutOfProcessWebSite.csproj", "{F54715C3-88D8-49E3-A291-C13570FE81FC}" + ProjectSection(ProjectDependencies) = postProject + {439824F9-1455-4CC4-BD79-B44FA0A16552} = {439824F9-1455-4CC4-BD79-B44FA0A16552} + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{7E80C58E-9CC8-450C-8A8D-94FC76428150}" + ProjectSection(SolutionItems) = preProject + build\applicationhost.config = build\applicationhost.config + build\applicationhost.iis.config = build\applicationhost.iis.config + build\dependencies.props = build\dependencies.props + build\native.targets = build\native.targets + build\repo.props = build\repo.props + build\testsite.props = build\testsite.props + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "testassets", "testassets", "{744ACDC6-F6A0-4FF9-9421-F25C5F2DC520}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AspNetCoreModuleV1", "AspNetCoreModuleV1", "{16E521CE-77F1-4B1C-A183-520A41C4F372}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "IISLib", "src\AspNetCoreModuleV1\IISLib\IISLib.vcxproj", "{4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AspNetCore", "src\AspNetCoreModuleV1\AspNetCore\AspNetCore.vcxproj", "{439824F9-1455-4CC4-BD79-B44FA0A16552}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NativeIISSample", "samples\NativeIISSample\NativeIISSample.csproj", "{FF5339B2-071F-4881-B15B-F91BD1A01153}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AspNetCore", "src\AspNetCoreModuleV2\AspNetCore\AspNetCore.vcxproj", "{EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AspNetCoreModuleV2", "AspNetCoreModuleV2", "{5180EB73-1100-4DBE-9563-94B0C183B0CA}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CommonLib", "src\AspNetCoreModuleV2\CommonLib\CommonLib.vcxproj", "{55494E58-E061-4C4C-A0A8-837008E72F85}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "IISLib", "src\AspNetCoreModuleV2\IISLib\IISLib.vcxproj", "{09D9D1D6-2951-4E14-BC35-76A23CF9391A}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "InProcessRequestHandler", "src\AspNetCoreModuleV2\InProcessRequestHandler\InProcessRequestHandler.vcxproj", "{D57EA297-6DC2-4BC0-8C91-334863327863}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OutOfProcessRequestHandler", "src\AspNetCoreModuleV2\OutOfProcessRequestHandler\OutOfProcessRequestHandler.vcxproj", "{7F87406C-A3C8-4139-A68D-E4C344294A67}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RequestHandlerLib", "src\AspNetCoreModuleV2\RequestHandlerLib\RequestHandlerLib.vcxproj", "{1533E271-F61B-441B-8B74-59FB61DF0552}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.IIS", "src\Microsoft.AspNetCore.Server.IIS\Microsoft.AspNetCore.Server.IIS.csproj", "{F47351C2-66E7-478D-A728-05A33768830A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.IntegrationTesting.IIS", "src\Microsoft.AspNetCore.Server.IntegrationTesting.IIS\Microsoft.AspNetCore.Server.IntegrationTesting.IIS.csproj", "{73552B7B-BFBB-457D-B718-E0BF5C631358}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Common.Tests", "test\Common.Tests\Common.Tests.csproj", "{DCF44144-8018-4F25-A5B8-EDE5ABAEDF26}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CommonLibTests", "test\CommonLibTests\CommonLibTests.vcxproj", "{1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest", "test\gtest\gtest.vcxproj", "{CAC1267B-8778-4257-AAC6-CAF481723B01}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IIS.BackwardsCompatibility.FunctionalTests", "test\IIS.BackwardsCompatibility.FunctionalTests\IIS.BackwardsCompatibility.FunctionalTests.csproj", "{302F6BB2-AFEF-4A75-8B51-4A068607430E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IIS.ForwardsCompatibility.FunctionalTests", "test\IIS.ForwardsCompatibility.FunctionalTests\IIS.ForwardsCompatibility.FunctionalTests.csproj", "{BB265F11-FB3F-45C6-A197-7F0468568C82}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IIS.FunctionalTests", "test\IIS.FunctionalTests\IIS.FunctionalTests.csproj", "{A112C374-B4CD-41CC-8D45-87E4357B7E22}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IIS.Tests", "test\IIS.Tests\IIS.Tests.csproj", "{7E5185FD-58B6-4F31-8600-00BDC0AFB514}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IISExpress.FunctionalTests", "test\IISExpress.FunctionalTests\IISExpress.FunctionalTests.csproj", "{2C2F3C65-6F8B-4C49-9A7F-5E21DE059CE4}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.Debug|x64.ActiveCfg = Debug|Any CPU + {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.Debug|x64.Build.0 = Debug|Any CPU + {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.Debug|x86.ActiveCfg = Debug|Any CPU + {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.Debug|x86.Build.0 = Debug|Any CPU + {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.Release|Any CPU.Build.0 = Release|Any CPU + {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.Release|x64.ActiveCfg = Release|Any CPU + {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.Release|x64.Build.0 = Release|Any CPU + {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.Release|x86.ActiveCfg = Release|Any CPU + {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.Release|x86.Build.0 = Release|Any CPU + {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.Debug|x64.ActiveCfg = Debug|Any CPU + {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.Debug|x64.Build.0 = Debug|Any CPU + {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.Debug|x86.ActiveCfg = Debug|Any CPU + {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.Debug|x86.Build.0 = Debug|Any CPU + {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.Release|Any CPU.Build.0 = Release|Any CPU + {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.Release|x64.ActiveCfg = Release|Any CPU + {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.Release|x64.Build.0 = Release|Any CPU + {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.Release|x86.ActiveCfg = Release|Any CPU + {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.Release|x86.Build.0 = Release|Any CPU + {F54715C3-88D8-49E3-A291-C13570FE81FC}.Debug|Any CPU.ActiveCfg = Debug|x86 + {F54715C3-88D8-49E3-A291-C13570FE81FC}.Debug|x64.ActiveCfg = Debug|x64 + {F54715C3-88D8-49E3-A291-C13570FE81FC}.Debug|x64.Build.0 = Debug|x64 + {F54715C3-88D8-49E3-A291-C13570FE81FC}.Debug|x86.ActiveCfg = Debug|x86 + {F54715C3-88D8-49E3-A291-C13570FE81FC}.Debug|x86.Build.0 = Debug|x86 + {F54715C3-88D8-49E3-A291-C13570FE81FC}.Release|Any CPU.ActiveCfg = Release|x86 + {F54715C3-88D8-49E3-A291-C13570FE81FC}.Release|x64.ActiveCfg = Release|x64 + {F54715C3-88D8-49E3-A291-C13570FE81FC}.Release|x64.Build.0 = Release|x64 + {F54715C3-88D8-49E3-A291-C13570FE81FC}.Release|x86.ActiveCfg = Release|x86 + {F54715C3-88D8-49E3-A291-C13570FE81FC}.Release|x86.Build.0 = Release|x86 + {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}.Debug|x64.ActiveCfg = Debug|x64 + {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}.Debug|x64.Build.0 = Debug|x64 + {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}.Debug|x86.ActiveCfg = Debug|Win32 + {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}.Debug|x86.Build.0 = Debug|Win32 + {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}.Release|Any CPU.ActiveCfg = Release|Win32 + {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}.Release|x64.ActiveCfg = Release|x64 + {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}.Release|x64.Build.0 = Release|x64 + {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}.Release|x86.ActiveCfg = Release|Win32 + {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}.Release|x86.Build.0 = Release|Win32 + {439824F9-1455-4CC4-BD79-B44FA0A16552}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {439824F9-1455-4CC4-BD79-B44FA0A16552}.Debug|x64.ActiveCfg = Debug|x64 + {439824F9-1455-4CC4-BD79-B44FA0A16552}.Debug|x64.Build.0 = Debug|x64 + {439824F9-1455-4CC4-BD79-B44FA0A16552}.Debug|x86.ActiveCfg = Debug|Win32 + {439824F9-1455-4CC4-BD79-B44FA0A16552}.Debug|x86.Build.0 = Debug|Win32 + {439824F9-1455-4CC4-BD79-B44FA0A16552}.Release|Any CPU.ActiveCfg = Release|Win32 + {439824F9-1455-4CC4-BD79-B44FA0A16552}.Release|x64.ActiveCfg = Release|x64 + {439824F9-1455-4CC4-BD79-B44FA0A16552}.Release|x64.Build.0 = Release|x64 + {439824F9-1455-4CC4-BD79-B44FA0A16552}.Release|x86.ActiveCfg = Release|Win32 + {439824F9-1455-4CC4-BD79-B44FA0A16552}.Release|x86.Build.0 = Release|Win32 + {FF5339B2-071F-4881-B15B-F91BD1A01153}.Debug|Any CPU.ActiveCfg = Debug|x86 + {FF5339B2-071F-4881-B15B-F91BD1A01153}.Debug|x64.ActiveCfg = Debug|x64 + {FF5339B2-071F-4881-B15B-F91BD1A01153}.Debug|x64.Build.0 = Debug|x64 + {FF5339B2-071F-4881-B15B-F91BD1A01153}.Debug|x86.ActiveCfg = Debug|x86 + {FF5339B2-071F-4881-B15B-F91BD1A01153}.Debug|x86.Build.0 = Debug|x86 + {FF5339B2-071F-4881-B15B-F91BD1A01153}.Release|Any CPU.ActiveCfg = Release|x86 + {FF5339B2-071F-4881-B15B-F91BD1A01153}.Release|x64.ActiveCfg = Release|x64 + {FF5339B2-071F-4881-B15B-F91BD1A01153}.Release|x64.Build.0 = Release|x64 + {FF5339B2-071F-4881-B15B-F91BD1A01153}.Release|x86.ActiveCfg = Release|x86 + {FF5339B2-071F-4881-B15B-F91BD1A01153}.Release|x86.Build.0 = Release|x86 + {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.Debug|x64.ActiveCfg = Debug|x64 + {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.Debug|x64.Build.0 = Debug|x64 + {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.Debug|x86.ActiveCfg = Debug|Win32 + {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.Debug|x86.Build.0 = Debug|Win32 + {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.Release|Any CPU.ActiveCfg = Release|Win32 + {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.Release|x64.ActiveCfg = Release|x64 + {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.Release|x64.Build.0 = Release|x64 + {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.Release|x86.ActiveCfg = Release|Win32 + {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.Release|x86.Build.0 = Release|Win32 + {55494E58-E061-4C4C-A0A8-837008E72F85}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {55494E58-E061-4C4C-A0A8-837008E72F85}.Debug|x64.ActiveCfg = Debug|x64 + {55494E58-E061-4C4C-A0A8-837008E72F85}.Debug|x64.Build.0 = Debug|x64 + {55494E58-E061-4C4C-A0A8-837008E72F85}.Debug|x86.ActiveCfg = Debug|Win32 + {55494E58-E061-4C4C-A0A8-837008E72F85}.Debug|x86.Build.0 = Debug|Win32 + {55494E58-E061-4C4C-A0A8-837008E72F85}.Release|Any CPU.ActiveCfg = Release|Win32 + {55494E58-E061-4C4C-A0A8-837008E72F85}.Release|x64.ActiveCfg = Release|x64 + {55494E58-E061-4C4C-A0A8-837008E72F85}.Release|x64.Build.0 = Release|x64 + {55494E58-E061-4C4C-A0A8-837008E72F85}.Release|x86.ActiveCfg = Release|Win32 + {55494E58-E061-4C4C-A0A8-837008E72F85}.Release|x86.Build.0 = Release|Win32 + {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.Debug|x64.ActiveCfg = Debug|x64 + {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.Debug|x64.Build.0 = Debug|x64 + {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.Debug|x86.ActiveCfg = Debug|Win32 + {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.Debug|x86.Build.0 = Debug|Win32 + {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.Release|Any CPU.ActiveCfg = Release|Win32 + {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.Release|x64.ActiveCfg = Release|x64 + {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.Release|x64.Build.0 = Release|x64 + {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.Release|x86.ActiveCfg = Release|Win32 + {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.Release|x86.Build.0 = Release|Win32 + {D57EA297-6DC2-4BC0-8C91-334863327863}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {D57EA297-6DC2-4BC0-8C91-334863327863}.Debug|x64.ActiveCfg = Debug|x64 + {D57EA297-6DC2-4BC0-8C91-334863327863}.Debug|x64.Build.0 = Debug|x64 + {D57EA297-6DC2-4BC0-8C91-334863327863}.Debug|x86.ActiveCfg = Debug|Win32 + {D57EA297-6DC2-4BC0-8C91-334863327863}.Debug|x86.Build.0 = Debug|Win32 + {D57EA297-6DC2-4BC0-8C91-334863327863}.Release|Any CPU.ActiveCfg = Release|Win32 + {D57EA297-6DC2-4BC0-8C91-334863327863}.Release|x64.ActiveCfg = Release|x64 + {D57EA297-6DC2-4BC0-8C91-334863327863}.Release|x64.Build.0 = Release|x64 + {D57EA297-6DC2-4BC0-8C91-334863327863}.Release|x86.ActiveCfg = Release|Win32 + {D57EA297-6DC2-4BC0-8C91-334863327863}.Release|x86.Build.0 = Release|Win32 + {7F87406C-A3C8-4139-A68D-E4C344294A67}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {7F87406C-A3C8-4139-A68D-E4C344294A67}.Debug|x64.ActiveCfg = Debug|x64 + {7F87406C-A3C8-4139-A68D-E4C344294A67}.Debug|x64.Build.0 = Debug|x64 + {7F87406C-A3C8-4139-A68D-E4C344294A67}.Debug|x86.ActiveCfg = Debug|Win32 + {7F87406C-A3C8-4139-A68D-E4C344294A67}.Debug|x86.Build.0 = Debug|Win32 + {7F87406C-A3C8-4139-A68D-E4C344294A67}.Release|Any CPU.ActiveCfg = Release|Win32 + {7F87406C-A3C8-4139-A68D-E4C344294A67}.Release|x64.ActiveCfg = Release|x64 + {7F87406C-A3C8-4139-A68D-E4C344294A67}.Release|x64.Build.0 = Release|x64 + {7F87406C-A3C8-4139-A68D-E4C344294A67}.Release|x86.ActiveCfg = Release|Win32 + {7F87406C-A3C8-4139-A68D-E4C344294A67}.Release|x86.Build.0 = Release|Win32 + {1533E271-F61B-441B-8B74-59FB61DF0552}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {1533E271-F61B-441B-8B74-59FB61DF0552}.Debug|x64.ActiveCfg = Debug|x64 + {1533E271-F61B-441B-8B74-59FB61DF0552}.Debug|x64.Build.0 = Debug|x64 + {1533E271-F61B-441B-8B74-59FB61DF0552}.Debug|x86.ActiveCfg = Debug|Win32 + {1533E271-F61B-441B-8B74-59FB61DF0552}.Debug|x86.Build.0 = Debug|Win32 + {1533E271-F61B-441B-8B74-59FB61DF0552}.Release|Any CPU.ActiveCfg = Release|Win32 + {1533E271-F61B-441B-8B74-59FB61DF0552}.Release|x64.ActiveCfg = Release|x64 + {1533E271-F61B-441B-8B74-59FB61DF0552}.Release|x64.Build.0 = Release|x64 + {1533E271-F61B-441B-8B74-59FB61DF0552}.Release|x86.ActiveCfg = Release|Win32 + {1533E271-F61B-441B-8B74-59FB61DF0552}.Release|x86.Build.0 = Release|Win32 + {F47351C2-66E7-478D-A728-05A33768830A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F47351C2-66E7-478D-A728-05A33768830A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F47351C2-66E7-478D-A728-05A33768830A}.Debug|x64.ActiveCfg = Debug|Any CPU + {F47351C2-66E7-478D-A728-05A33768830A}.Debug|x64.Build.0 = Debug|Any CPU + {F47351C2-66E7-478D-A728-05A33768830A}.Debug|x86.ActiveCfg = Debug|Any CPU + {F47351C2-66E7-478D-A728-05A33768830A}.Debug|x86.Build.0 = Debug|Any CPU + {F47351C2-66E7-478D-A728-05A33768830A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F47351C2-66E7-478D-A728-05A33768830A}.Release|Any CPU.Build.0 = Release|Any CPU + {F47351C2-66E7-478D-A728-05A33768830A}.Release|x64.ActiveCfg = Release|Any CPU + {F47351C2-66E7-478D-A728-05A33768830A}.Release|x64.Build.0 = Release|Any CPU + {F47351C2-66E7-478D-A728-05A33768830A}.Release|x86.ActiveCfg = Release|Any CPU + {F47351C2-66E7-478D-A728-05A33768830A}.Release|x86.Build.0 = Release|Any CPU + {73552B7B-BFBB-457D-B718-E0BF5C631358}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {73552B7B-BFBB-457D-B718-E0BF5C631358}.Debug|Any CPU.Build.0 = Debug|Any CPU + {73552B7B-BFBB-457D-B718-E0BF5C631358}.Debug|x64.ActiveCfg = Debug|Any CPU + {73552B7B-BFBB-457D-B718-E0BF5C631358}.Debug|x64.Build.0 = Debug|Any CPU + {73552B7B-BFBB-457D-B718-E0BF5C631358}.Debug|x86.ActiveCfg = Debug|Any CPU + {73552B7B-BFBB-457D-B718-E0BF5C631358}.Debug|x86.Build.0 = Debug|Any CPU + {73552B7B-BFBB-457D-B718-E0BF5C631358}.Release|Any CPU.ActiveCfg = Release|Any CPU + {73552B7B-BFBB-457D-B718-E0BF5C631358}.Release|Any CPU.Build.0 = Release|Any CPU + {73552B7B-BFBB-457D-B718-E0BF5C631358}.Release|x64.ActiveCfg = Release|Any CPU + {73552B7B-BFBB-457D-B718-E0BF5C631358}.Release|x64.Build.0 = Release|Any CPU + {73552B7B-BFBB-457D-B718-E0BF5C631358}.Release|x86.ActiveCfg = Release|Any CPU + {73552B7B-BFBB-457D-B718-E0BF5C631358}.Release|x86.Build.0 = Release|Any CPU + {DCF44144-8018-4F25-A5B8-EDE5ABAEDF26}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DCF44144-8018-4F25-A5B8-EDE5ABAEDF26}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DCF44144-8018-4F25-A5B8-EDE5ABAEDF26}.Debug|x64.ActiveCfg = Debug|Any CPU + {DCF44144-8018-4F25-A5B8-EDE5ABAEDF26}.Debug|x64.Build.0 = Debug|Any CPU + {DCF44144-8018-4F25-A5B8-EDE5ABAEDF26}.Debug|x86.ActiveCfg = Debug|Any CPU + {DCF44144-8018-4F25-A5B8-EDE5ABAEDF26}.Debug|x86.Build.0 = Debug|Any CPU + {DCF44144-8018-4F25-A5B8-EDE5ABAEDF26}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DCF44144-8018-4F25-A5B8-EDE5ABAEDF26}.Release|Any CPU.Build.0 = Release|Any CPU + {DCF44144-8018-4F25-A5B8-EDE5ABAEDF26}.Release|x64.ActiveCfg = Release|Any CPU + {DCF44144-8018-4F25-A5B8-EDE5ABAEDF26}.Release|x64.Build.0 = Release|Any CPU + {DCF44144-8018-4F25-A5B8-EDE5ABAEDF26}.Release|x86.ActiveCfg = Release|Any CPU + {DCF44144-8018-4F25-A5B8-EDE5ABAEDF26}.Release|x86.Build.0 = Release|Any CPU + {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}.Debug|x64.ActiveCfg = Debug|x64 + {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}.Debug|x64.Build.0 = Debug|x64 + {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}.Debug|x86.ActiveCfg = Debug|Win32 + {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}.Debug|x86.Build.0 = Debug|Win32 + {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}.Release|Any CPU.ActiveCfg = Release|Win32 + {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}.Release|x64.ActiveCfg = Release|x64 + {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}.Release|x64.Build.0 = Release|x64 + {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}.Release|x86.ActiveCfg = Release|Win32 + {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}.Release|x86.Build.0 = Release|Win32 + {CAC1267B-8778-4257-AAC6-CAF481723B01}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {CAC1267B-8778-4257-AAC6-CAF481723B01}.Debug|x64.ActiveCfg = Debug|x64 + {CAC1267B-8778-4257-AAC6-CAF481723B01}.Debug|x64.Build.0 = Debug|x64 + {CAC1267B-8778-4257-AAC6-CAF481723B01}.Debug|x86.ActiveCfg = Debug|Win32 + {CAC1267B-8778-4257-AAC6-CAF481723B01}.Debug|x86.Build.0 = Debug|Win32 + {CAC1267B-8778-4257-AAC6-CAF481723B01}.Release|Any CPU.ActiveCfg = Release|Win32 + {CAC1267B-8778-4257-AAC6-CAF481723B01}.Release|x64.ActiveCfg = Release|x64 + {CAC1267B-8778-4257-AAC6-CAF481723B01}.Release|x64.Build.0 = Release|x64 + {CAC1267B-8778-4257-AAC6-CAF481723B01}.Release|x86.ActiveCfg = Release|Win32 + {CAC1267B-8778-4257-AAC6-CAF481723B01}.Release|x86.Build.0 = Release|Win32 + {302F6BB2-AFEF-4A75-8B51-4A068607430E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {302F6BB2-AFEF-4A75-8B51-4A068607430E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {302F6BB2-AFEF-4A75-8B51-4A068607430E}.Debug|x64.ActiveCfg = Debug|Any CPU + {302F6BB2-AFEF-4A75-8B51-4A068607430E}.Debug|x64.Build.0 = Debug|Any CPU + {302F6BB2-AFEF-4A75-8B51-4A068607430E}.Debug|x86.ActiveCfg = Debug|Any CPU + {302F6BB2-AFEF-4A75-8B51-4A068607430E}.Debug|x86.Build.0 = Debug|Any CPU + {302F6BB2-AFEF-4A75-8B51-4A068607430E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {302F6BB2-AFEF-4A75-8B51-4A068607430E}.Release|Any CPU.Build.0 = Release|Any CPU + {302F6BB2-AFEF-4A75-8B51-4A068607430E}.Release|x64.ActiveCfg = Release|Any CPU + {302F6BB2-AFEF-4A75-8B51-4A068607430E}.Release|x64.Build.0 = Release|Any CPU + {302F6BB2-AFEF-4A75-8B51-4A068607430E}.Release|x86.ActiveCfg = Release|Any CPU + {302F6BB2-AFEF-4A75-8B51-4A068607430E}.Release|x86.Build.0 = Release|Any CPU + {BB265F11-FB3F-45C6-A197-7F0468568C82}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BB265F11-FB3F-45C6-A197-7F0468568C82}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BB265F11-FB3F-45C6-A197-7F0468568C82}.Debug|x64.ActiveCfg = Debug|Any CPU + {BB265F11-FB3F-45C6-A197-7F0468568C82}.Debug|x64.Build.0 = Debug|Any CPU + {BB265F11-FB3F-45C6-A197-7F0468568C82}.Debug|x86.ActiveCfg = Debug|Any CPU + {BB265F11-FB3F-45C6-A197-7F0468568C82}.Debug|x86.Build.0 = Debug|Any CPU + {BB265F11-FB3F-45C6-A197-7F0468568C82}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BB265F11-FB3F-45C6-A197-7F0468568C82}.Release|Any CPU.Build.0 = Release|Any CPU + {BB265F11-FB3F-45C6-A197-7F0468568C82}.Release|x64.ActiveCfg = Release|Any CPU + {BB265F11-FB3F-45C6-A197-7F0468568C82}.Release|x64.Build.0 = Release|Any CPU + {BB265F11-FB3F-45C6-A197-7F0468568C82}.Release|x86.ActiveCfg = Release|Any CPU + {BB265F11-FB3F-45C6-A197-7F0468568C82}.Release|x86.Build.0 = Release|Any CPU + {A112C374-B4CD-41CC-8D45-87E4357B7E22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A112C374-B4CD-41CC-8D45-87E4357B7E22}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A112C374-B4CD-41CC-8D45-87E4357B7E22}.Debug|x64.ActiveCfg = Debug|Any CPU + {A112C374-B4CD-41CC-8D45-87E4357B7E22}.Debug|x64.Build.0 = Debug|Any CPU + {A112C374-B4CD-41CC-8D45-87E4357B7E22}.Debug|x86.ActiveCfg = Debug|Any CPU + {A112C374-B4CD-41CC-8D45-87E4357B7E22}.Debug|x86.Build.0 = Debug|Any CPU + {A112C374-B4CD-41CC-8D45-87E4357B7E22}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A112C374-B4CD-41CC-8D45-87E4357B7E22}.Release|Any CPU.Build.0 = Release|Any CPU + {A112C374-B4CD-41CC-8D45-87E4357B7E22}.Release|x64.ActiveCfg = Release|Any CPU + {A112C374-B4CD-41CC-8D45-87E4357B7E22}.Release|x64.Build.0 = Release|Any CPU + {A112C374-B4CD-41CC-8D45-87E4357B7E22}.Release|x86.ActiveCfg = Release|Any CPU + {A112C374-B4CD-41CC-8D45-87E4357B7E22}.Release|x86.Build.0 = Release|Any CPU + {7E5185FD-58B6-4F31-8600-00BDC0AFB514}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7E5185FD-58B6-4F31-8600-00BDC0AFB514}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7E5185FD-58B6-4F31-8600-00BDC0AFB514}.Debug|x64.ActiveCfg = Debug|Any CPU + {7E5185FD-58B6-4F31-8600-00BDC0AFB514}.Debug|x64.Build.0 = Debug|Any CPU + {7E5185FD-58B6-4F31-8600-00BDC0AFB514}.Debug|x86.ActiveCfg = Debug|Any CPU + {7E5185FD-58B6-4F31-8600-00BDC0AFB514}.Debug|x86.Build.0 = Debug|Any CPU + {7E5185FD-58B6-4F31-8600-00BDC0AFB514}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7E5185FD-58B6-4F31-8600-00BDC0AFB514}.Release|Any CPU.Build.0 = Release|Any CPU + {7E5185FD-58B6-4F31-8600-00BDC0AFB514}.Release|x64.ActiveCfg = Release|Any CPU + {7E5185FD-58B6-4F31-8600-00BDC0AFB514}.Release|x64.Build.0 = Release|Any CPU + {7E5185FD-58B6-4F31-8600-00BDC0AFB514}.Release|x86.ActiveCfg = Release|Any CPU + {7E5185FD-58B6-4F31-8600-00BDC0AFB514}.Release|x86.Build.0 = Release|Any CPU + {2C2F3C65-6F8B-4C49-9A7F-5E21DE059CE4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2C2F3C65-6F8B-4C49-9A7F-5E21DE059CE4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2C2F3C65-6F8B-4C49-9A7F-5E21DE059CE4}.Debug|x64.ActiveCfg = Debug|Any CPU + {2C2F3C65-6F8B-4C49-9A7F-5E21DE059CE4}.Debug|x64.Build.0 = Debug|Any CPU + {2C2F3C65-6F8B-4C49-9A7F-5E21DE059CE4}.Debug|x86.ActiveCfg = Debug|Any CPU + {2C2F3C65-6F8B-4C49-9A7F-5E21DE059CE4}.Debug|x86.Build.0 = Debug|Any CPU + {2C2F3C65-6F8B-4C49-9A7F-5E21DE059CE4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2C2F3C65-6F8B-4C49-9A7F-5E21DE059CE4}.Release|Any CPU.Build.0 = Release|Any CPU + {2C2F3C65-6F8B-4C49-9A7F-5E21DE059CE4}.Release|x64.ActiveCfg = Release|Any CPU + {2C2F3C65-6F8B-4C49-9A7F-5E21DE059CE4}.Release|x64.Build.0 = Release|Any CPU + {2C2F3C65-6F8B-4C49-9A7F-5E21DE059CE4}.Release|x86.ActiveCfg = Release|Any CPU + {2C2F3C65-6F8B-4C49-9A7F-5E21DE059CE4}.Release|x86.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64} = {C74B8F36-FD2F-45C9-9B8A-00E7CF0126A9} + {8B3446E8-E6A8-4591-AA63-A95837C6E97C} = {04B1EDB6-E967-4D25-89B9-E6F8304038CD} + {F54715C3-88D8-49E3-A291-C13570FE81FC} = {744ACDC6-F6A0-4FF9-9421-F25C5F2DC520} + {744ACDC6-F6A0-4FF9-9421-F25C5F2DC520} = {EF30B533-D715-421A-92B7-92FEF460AC9C} + {16E521CE-77F1-4B1C-A183-520A41C4F372} = {04B1EDB6-E967-4D25-89B9-E6F8304038CD} + {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE} = {16E521CE-77F1-4B1C-A183-520A41C4F372} + {439824F9-1455-4CC4-BD79-B44FA0A16552} = {16E521CE-77F1-4B1C-A183-520A41C4F372} + {FF5339B2-071F-4881-B15B-F91BD1A01153} = {C74B8F36-FD2F-45C9-9B8A-00E7CF0126A9} + {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B} = {5180EB73-1100-4DBE-9563-94B0C183B0CA} + {5180EB73-1100-4DBE-9563-94B0C183B0CA} = {04B1EDB6-E967-4D25-89B9-E6F8304038CD} + {55494E58-E061-4C4C-A0A8-837008E72F85} = {5180EB73-1100-4DBE-9563-94B0C183B0CA} + {09D9D1D6-2951-4E14-BC35-76A23CF9391A} = {5180EB73-1100-4DBE-9563-94B0C183B0CA} + {D57EA297-6DC2-4BC0-8C91-334863327863} = {5180EB73-1100-4DBE-9563-94B0C183B0CA} + {7F87406C-A3C8-4139-A68D-E4C344294A67} = {5180EB73-1100-4DBE-9563-94B0C183B0CA} + {1533E271-F61B-441B-8B74-59FB61DF0552} = {5180EB73-1100-4DBE-9563-94B0C183B0CA} + {F47351C2-66E7-478D-A728-05A33768830A} = {04B1EDB6-E967-4D25-89B9-E6F8304038CD} + {73552B7B-BFBB-457D-B718-E0BF5C631358} = {04B1EDB6-E967-4D25-89B9-E6F8304038CD} + {DCF44144-8018-4F25-A5B8-EDE5ABAEDF26} = {EF30B533-D715-421A-92B7-92FEF460AC9C} + {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1} = {EF30B533-D715-421A-92B7-92FEF460AC9C} + {CAC1267B-8778-4257-AAC6-CAF481723B01} = {EF30B533-D715-421A-92B7-92FEF460AC9C} + {302F6BB2-AFEF-4A75-8B51-4A068607430E} = {EF30B533-D715-421A-92B7-92FEF460AC9C} + {BB265F11-FB3F-45C6-A197-7F0468568C82} = {EF30B533-D715-421A-92B7-92FEF460AC9C} + {A112C374-B4CD-41CC-8D45-87E4357B7E22} = {EF30B533-D715-421A-92B7-92FEF460AC9C} + {7E5185FD-58B6-4F31-8600-00BDC0AFB514} = {EF30B533-D715-421A-92B7-92FEF460AC9C} + {2C2F3C65-6F8B-4C49-9A7F-5E21DE059CE4} = {EF30B533-D715-421A-92B7-92FEF460AC9C} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {DB4F868D-E1AE-4FD7-9333-69FA15B268C5} + EndGlobalSection +EndGlobal diff --git a/src/IISIntegration/LICENSE.txt b/src/Servers/IIS/LICENSE.txt similarity index 100% rename from src/IISIntegration/LICENSE.txt rename to src/Servers/IIS/LICENSE.txt diff --git a/src/IISIntegration/NuGetPackageVerifier.json b/src/Servers/IIS/NuGetPackageVerifier.json similarity index 100% rename from src/IISIntegration/NuGetPackageVerifier.json rename to src/Servers/IIS/NuGetPackageVerifier.json diff --git a/src/IISIntegration/NuGetPackageVerifier.xplat.json b/src/Servers/IIS/NuGetPackageVerifier.xplat.json similarity index 100% rename from src/IISIntegration/NuGetPackageVerifier.xplat.json rename to src/Servers/IIS/NuGetPackageVerifier.xplat.json diff --git a/src/Servers/IIS/ResolveIisReferences.targets b/src/Servers/IIS/ResolveIisReferences.targets new file mode 100644 index 000000000000..b69a024af0e4 --- /dev/null +++ b/src/Servers/IIS/ResolveIisReferences.targets @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + Platform=x64 + + x64\ + + false + + NativeContent + + PreserveNewest + + Build;BuiltProjectOutputGroup;DebugSymbolsProjectOutputGroup + + true + TargetFramework + + All + + true + + + + + Platform=x86 + + x86\ + + false + + NativeContent + + PreserveNewest + + Build;BuiltProjectOutputGroup;DebugSymbolsProjectOutputGroup + + true + TargetFramework + + All + + true + + + + + + + + + + + + + %(LinkBase)%(FileName)%(Extension) + + false + + + + + + + + + diff --git a/src/IISIntegration/benchmarks/IIS.Performance/FirstRequestConfig.cs b/src/Servers/IIS/benchmarks/IIS.Performance/FirstRequestConfig.cs similarity index 100% rename from src/IISIntegration/benchmarks/IIS.Performance/FirstRequestConfig.cs rename to src/Servers/IIS/benchmarks/IIS.Performance/FirstRequestConfig.cs diff --git a/src/IISIntegration/benchmarks/IIS.Performance/IIS.Performance.csproj b/src/Servers/IIS/benchmarks/IIS.Performance/IIS.Performance.csproj similarity index 71% rename from src/IISIntegration/benchmarks/IIS.Performance/IIS.Performance.csproj rename to src/Servers/IIS/benchmarks/IIS.Performance/IIS.Performance.csproj index 6b1fecc0bbc5..d77e9e6e4480 100644 --- a/src/IISIntegration/benchmarks/IIS.Performance/IIS.Performance.csproj +++ b/src/Servers/IIS/benchmarks/IIS.Performance/IIS.Performance.csproj @@ -23,24 +23,21 @@ - + - + False - + False - + False - - - - - - + + + \ No newline at end of file diff --git a/src/IISIntegration/benchmarks/IIS.Performance/PlaintextBenchmark.cs b/src/Servers/IIS/benchmarks/IIS.Performance/PlaintextBenchmark.cs similarity index 100% rename from src/IISIntegration/benchmarks/IIS.Performance/PlaintextBenchmark.cs rename to src/Servers/IIS/benchmarks/IIS.Performance/PlaintextBenchmark.cs diff --git a/src/IISIntegration/benchmarks/IIS.Performance/StartupTimeBenchmark.cs b/src/Servers/IIS/benchmarks/IIS.Performance/StartupTimeBenchmark.cs similarity index 100% rename from src/IISIntegration/benchmarks/IIS.Performance/StartupTimeBenchmark.cs rename to src/Servers/IIS/benchmarks/IIS.Performance/StartupTimeBenchmark.cs diff --git a/src/IISIntegration/build/Build.Settings b/src/Servers/IIS/build/Build.Settings similarity index 93% rename from src/IISIntegration/build/Build.Settings rename to src/Servers/IIS/build/Build.Settings index d60b07c269b8..d2e897434c11 100644 --- a/src/IISIntegration/build/Build.Settings +++ b/src/Servers/IIS/build/Build.Settings @@ -4,19 +4,17 @@ $(MSBuildThisFileDirectory)..\ Debug Win32 - v120 - v140 - v120 + v141 $(MSBuildProjectDirectory)\bin\$(Configuration)\$(Platform)\ $(OutputPath) aspnetcore - + true false - + false true @@ -26,7 +24,7 @@ true $(RunCodeAnalysis) - + Use @@ -44,13 +42,13 @@ true - + Disabled - + MaxSpeed @@ -58,19 +56,19 @@ true - + WIN32;_DEBUG;%(PreprocessorDefinitions) - + _WIN64;_DEBUG;%(PreprocessorDefinitions) - + WIN32;NDEBUG;%(PreprocessorDefinitions) @@ -79,7 +77,7 @@ true - + _WIN64;NDEBUG;%(PreprocessorDefinitions) @@ -88,7 +86,7 @@ true - + <_TwoDigitYear>$([MSBuild]::Subtract($([System.DateTime]::UtcNow.Year), 2000)) <_ThreeDigitDayOfYear>$([System.DateTime]::UtcNow.DayOfYear.ToString().PadLeft(3, '0')) diff --git a/src/IISIntegration/build/Config.Definitions.Props b/src/Servers/IIS/build/Config.Definitions.Props similarity index 100% rename from src/IISIntegration/build/Config.Definitions.Props rename to src/Servers/IIS/build/Config.Definitions.Props diff --git a/src/IISIntegration/build/applicationhost.config b/src/Servers/IIS/build/applicationhost.config similarity index 100% rename from src/IISIntegration/build/applicationhost.config rename to src/Servers/IIS/build/applicationhost.config diff --git a/src/IISIntegration/build/applicationhost.iis.config b/src/Servers/IIS/build/applicationhost.iis.config similarity index 100% rename from src/IISIntegration/build/applicationhost.iis.config rename to src/Servers/IIS/build/applicationhost.iis.config diff --git a/src/IISIntegration/build/assets.props b/src/Servers/IIS/build/assets.props similarity index 57% rename from src/IISIntegration/build/assets.props rename to src/Servers/IIS/build/assets.props index 13b30556bd30..6df77ee807ee 100644 --- a/src/IISIntegration/build/assets.props +++ b/src/Servers/IIS/build/assets.props @@ -9,261 +9,261 @@ - $(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV1\AspNetCore\bin\$(Configuration)\$(NativeVCPlatform)\aspnetcore.dll - $(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\AspNetCore\bin\$(Configuration)\$(NativeVCPlatform)\aspnetcorev2.dll - $(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\InProcessRequestHandler\bin\$(Configuration)\$(NativeVCPlatform)\aspnetcorev2_inprocess.dll + $(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV1\AspNetCore\bin\$(Configuration)\$(NativeVCPlatform)\aspnetcore.dll + $(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\AspNetCore\bin\$(Configuration)\$(NativeVCPlatform)\aspnetcorev2.dll + $(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\InProcessRequestHandler\bin\$(Configuration)\$(NativeVCPlatform)\aspnetcorev2_inprocess.dll $(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\OutOfProcessRequestHandler\bin\$(Configuration)\$(NativeVCPlatform)\aspnetcorev2_outofprocess.dll diff --git a/src/Servers/IIS/build/build.msbuild b/src/Servers/IIS/build/build.msbuild new file mode 100644 index 000000000000..6b260d5bae44 --- /dev/null +++ b/src/Servers/IIS/build/build.msbuild @@ -0,0 +1,6 @@ + + + + + diff --git a/src/IISIntegration/build/launchSettings.json b/src/Servers/IIS/build/launchSettings.json similarity index 100% rename from src/IISIntegration/build/launchSettings.json rename to src/Servers/IIS/build/launchSettings.json diff --git a/src/IISIntegration/build/native.targets b/src/Servers/IIS/build/native.targets similarity index 99% rename from src/IISIntegration/build/native.targets rename to src/Servers/IIS/build/native.targets index 1fb386956616..c8006e6d7635 100644 --- a/src/IISIntegration/build/native.targets +++ b/src/Servers/IIS/build/native.targets @@ -1,5 +1,4 @@ - diff --git a/src/IISIntegration/build/repo.props b/src/Servers/IIS/build/repo.props similarity index 100% rename from src/IISIntegration/build/repo.props rename to src/Servers/IIS/build/repo.props diff --git a/src/IISIntegration/build/repo.targets b/src/Servers/IIS/build/repo.targets similarity index 100% rename from src/IISIntegration/build/repo.targets rename to src/Servers/IIS/build/repo.targets diff --git a/src/IISIntegration/build/testsite.props b/src/Servers/IIS/build/testsite.props similarity index 67% rename from src/IISIntegration/build/testsite.props rename to src/Servers/IIS/build/testsite.props index 9333b3531d4e..87998d09cfbf 100644 --- a/src/IISIntegration/build/testsite.props +++ b/src/Servers/IIS/build/testsite.props @@ -44,30 +44,43 @@ - - + + + False - + - $(MSBuildThisFileDirectory)..\test\TestTasks\bin\$(Configuration)\$(TargetFramework)\TestTasks + $(MSBuildThisFileDirectory)..\test\testassets\TestTasks\bin\$(Configuration)\$(TargetFramework)\TestTasks + $(InjectDepsAssembly) "win7-$(NativePlatform)" "$(AncmInProcessRHPath)" - + + $(InjectDepsAssembly).exe + $(InjectDepsAssembly) + + + $(InjectDepsAssembly).dll dotnet $(InjectDepsAssembly) $(InjectDepsArguments) - + - + diff --git a/src/Servers/IIS/samples/IISSample/IISSample.csproj b/src/Servers/IIS/samples/IISSample/IISSample.csproj new file mode 100644 index 000000000000..d81acf6d7e81 --- /dev/null +++ b/src/Servers/IIS/samples/IISSample/IISSample.csproj @@ -0,0 +1,12 @@ + + + + netcoreapp3.0 + + + + + + + + diff --git a/src/IISIntegration/samples/IISSample/Startup.cs b/src/Servers/IIS/samples/IISSample/Startup.cs similarity index 100% rename from src/IISIntegration/samples/IISSample/Startup.cs rename to src/Servers/IIS/samples/IISSample/Startup.cs diff --git a/src/IISIntegration/samples/IISSample/web.config b/src/Servers/IIS/samples/IISSample/web.config similarity index 100% rename from src/IISIntegration/samples/IISSample/web.config rename to src/Servers/IIS/samples/IISSample/web.config diff --git a/src/Servers/IIS/samples/NativeIISSample/NativeIISSample.csproj b/src/Servers/IIS/samples/NativeIISSample/NativeIISSample.csproj new file mode 100644 index 000000000000..89cfcfab4032 --- /dev/null +++ b/src/Servers/IIS/samples/NativeIISSample/NativeIISSample.csproj @@ -0,0 +1,19 @@ + + + + + + netcoreapp3.0 + true + inprocess + + + + + + + + + + + diff --git a/src/IISIntegration/samples/NativeIISSample/Startup.cs b/src/Servers/IIS/samples/NativeIISSample/Startup.cs similarity index 100% rename from src/IISIntegration/samples/NativeIISSample/Startup.cs rename to src/Servers/IIS/samples/NativeIISSample/Startup.cs diff --git a/src/IISIntegration/samples/NativeIISSample/web.config b/src/Servers/IIS/samples/NativeIISSample/web.config similarity index 100% rename from src/IISIntegration/samples/NativeIISSample/web.config rename to src/Servers/IIS/samples/NativeIISSample/web.config diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/AspNetCore.vcxproj b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/AspNetCore.vcxproj similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/AspNetCore.vcxproj rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/AspNetCore.vcxproj diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/application.h b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/application.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/application.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/application.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/applicationmanager.h b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/applicationmanager.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/applicationmanager.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/applicationmanager.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/aspnetcoreconfig.h b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/aspnetcoreconfig.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/aspnetcoreconfig.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/aspnetcoreconfig.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/debugutil.h b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/debugutil.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/debugutil.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/debugutil.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/environmentvariablehash.h b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/environmentvariablehash.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/environmentvariablehash.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/environmentvariablehash.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/filewatcher.h b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/filewatcher.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/filewatcher.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/filewatcher.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/forwarderconnection.h b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/forwarderconnection.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/forwarderconnection.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/forwarderconnection.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/forwardinghandler.h b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/forwardinghandler.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/forwardinghandler.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/forwardinghandler.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/path.h b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/path.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/path.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/path.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/processmanager.h b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/processmanager.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/processmanager.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/processmanager.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/protocolconfig.h b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/protocolconfig.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/protocolconfig.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/protocolconfig.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/proxymodule.h b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/proxymodule.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/proxymodule.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/proxymodule.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/resource.h b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/resource.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/resource.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/resource.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/responseheaderhash.h b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/responseheaderhash.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/responseheaderhash.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/responseheaderhash.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/serverprocess.h b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/serverprocess.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/serverprocess.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/serverprocess.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/sttimer.h b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/sttimer.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/sttimer.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/sttimer.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/websockethandler.h b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/websockethandler.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/websockethandler.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/websockethandler.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/winhttphelper.h b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/winhttphelper.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/winhttphelper.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/winhttphelper.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Source.def b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Source.def similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Source.def rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Source.def diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/aspnetcore_msg.mc b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/aspnetcore_msg.mc similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/aspnetcore_msg.mc rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/aspnetcore_msg.mc diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/aspnetcoremodule.rc b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/aspnetcoremodule.rc similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/aspnetcoremodule.rc rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/aspnetcoremodule.rc diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/resource.h b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/resource.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/resource.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/resource.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/application.cxx b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/application.cxx similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/application.cxx rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/application.cxx diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/applicationmanager.cxx b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/applicationmanager.cxx similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/applicationmanager.cxx rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/applicationmanager.cxx diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/aspnetcoreconfig.cxx b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/aspnetcoreconfig.cxx similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/aspnetcoreconfig.cxx rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/aspnetcoreconfig.cxx diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/filewatcher.cxx b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/filewatcher.cxx similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/filewatcher.cxx rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/filewatcher.cxx diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/forwarderconnection.cxx b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/forwarderconnection.cxx similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/forwarderconnection.cxx rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/forwarderconnection.cxx diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/forwardinghandler.cxx b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/forwardinghandler.cxx similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/forwardinghandler.cxx rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/forwardinghandler.cxx diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/main.cxx b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/main.cxx similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/main.cxx rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/main.cxx diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/path.cxx b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/path.cxx similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/path.cxx rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/path.cxx diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/precomp.hxx b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/precomp.hxx similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/precomp.hxx rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/precomp.hxx diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/processmanager.cxx b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/processmanager.cxx similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/processmanager.cxx rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/processmanager.cxx diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/protocolconfig.cxx b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/protocolconfig.cxx similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/protocolconfig.cxx rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/protocolconfig.cxx diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/proxymodule.cxx b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/proxymodule.cxx similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/proxymodule.cxx rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/proxymodule.cxx diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/responseheaderhash.cxx b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/responseheaderhash.cxx similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/responseheaderhash.cxx rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/responseheaderhash.cxx diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/serverprocess.cxx b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/serverprocess.cxx similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/serverprocess.cxx rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/serverprocess.cxx diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/websockethandler.cxx b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/websockethandler.cxx similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/websockethandler.cxx rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/websockethandler.cxx diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/winhttphelper.cxx b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/winhttphelper.cxx similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/winhttphelper.cxx rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/winhttphelper.cxx diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/IISLib.vcxproj b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/IISLib.vcxproj similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/IISLib.vcxproj rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/IISLib.vcxproj diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/acache.cxx b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/acache.cxx similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/acache.cxx rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/acache.cxx diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/acache.h b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/acache.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/acache.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/acache.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/ahutil.cpp b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/ahutil.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/ahutil.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/ahutil.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/ahutil.h b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/ahutil.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/ahutil.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/ahutil.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/base64.cpp b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/base64.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/base64.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/base64.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/base64.h b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/base64.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/base64.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/base64.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/buffer.h b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/buffer.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/buffer.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/buffer.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/datetime.h b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/datetime.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/datetime.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/datetime.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/dbgutil.h b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/dbgutil.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/dbgutil.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/dbgutil.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/hashfn.h b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/hashfn.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/hashfn.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/hashfn.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/hashtable.h b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/hashtable.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/hashtable.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/hashtable.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/listentry.h b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/listentry.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/listentry.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/listentry.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/macros.h b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/macros.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/macros.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/macros.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/multisz.cpp b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/multisz.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/multisz.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/multisz.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/multisz.h b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/multisz.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/multisz.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/multisz.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/multisza.cpp b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/multisza.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/multisza.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/multisza.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/multisza.h b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/multisza.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/multisza.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/multisza.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/ntassert.h b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/ntassert.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/ntassert.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/ntassert.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/percpu.h b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/percpu.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/percpu.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/percpu.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/precomp.h b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/precomp.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/precomp.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/precomp.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/prime.h b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/prime.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/prime.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/prime.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/pudebug.h b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/pudebug.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/pudebug.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/pudebug.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/reftrace.c b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/reftrace.c similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/reftrace.c rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/reftrace.c diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/reftrace.h b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/reftrace.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/reftrace.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/reftrace.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/rwlock.h b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/rwlock.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/rwlock.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/rwlock.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/stringa.cpp b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/stringa.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/stringa.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/stringa.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/stringa.h b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/stringa.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/stringa.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/stringa.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/stringu.cpp b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/stringu.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/stringu.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/stringu.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/stringu.h b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/stringu.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/stringu.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/stringu.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/tracelog.c b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/tracelog.c similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/tracelog.c rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/tracelog.c diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/tracelog.h b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/tracelog.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/tracelog.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/tracelog.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/treehash.h b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/treehash.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/treehash.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/treehash.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/util.cxx b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/util.cxx similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/util.cxx rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/util.cxx diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/AppOfflineApplication.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/AppOfflineApplication.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/AppOfflineApplication.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/AppOfflineApplication.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/AppOfflineApplication.h b/src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/AppOfflineApplication.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/AppOfflineApplication.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/AppOfflineApplication.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/AppOfflineHandler.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/AppOfflineHandler.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/AppOfflineHandler.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/AppOfflineHandler.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/AppOfflineHandler.h b/src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/AppOfflineHandler.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/AppOfflineHandler.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/AppOfflineHandler.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/ApplicationFactory.h b/src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/ApplicationFactory.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/ApplicationFactory.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/ApplicationFactory.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/AspNetCore.vcxproj b/src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/AspNetCore.vcxproj similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/AspNetCore.vcxproj rename to src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/AspNetCore.vcxproj diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/DisconnectHandler.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/DisconnectHandler.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/DisconnectHandler.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/DisconnectHandler.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/DisconnectHandler.h b/src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/DisconnectHandler.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/DisconnectHandler.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/DisconnectHandler.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/HandlerResolver.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/HandlerResolver.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/HandlerResolver.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/HandlerResolver.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/HandlerResolver.h b/src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/HandlerResolver.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/HandlerResolver.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/HandlerResolver.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/HtmlResponses.rc b/src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/HtmlResponses.rc similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/HtmlResponses.rc rename to src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/HtmlResponses.rc diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/InProcessShimStaticHtml.htm b/src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/InProcessShimStaticHtml.htm similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/InProcessShimStaticHtml.htm rename to src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/InProcessShimStaticHtml.htm diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/OutOfProcessShimStaticHtml.htm b/src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/OutOfProcessShimStaticHtml.htm similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/OutOfProcessShimStaticHtml.htm rename to src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/OutOfProcessShimStaticHtml.htm diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/PollingAppOfflineApplication.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/PollingAppOfflineApplication.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/PollingAppOfflineApplication.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/PollingAppOfflineApplication.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/PollingAppOfflineApplication.h b/src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/PollingAppOfflineApplication.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/PollingAppOfflineApplication.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/PollingAppOfflineApplication.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/ServerErrorApplication.h b/src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/ServerErrorApplication.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/ServerErrorApplication.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/ServerErrorApplication.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/ShimOptions.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/ShimOptions.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/ShimOptions.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/ShimOptions.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/ShimOptions.h b/src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/ShimOptions.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/ShimOptions.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/ShimOptions.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/Source.def b/src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/Source.def similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/Source.def rename to src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/Source.def diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/ancm.mof b/src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/ancm.mof similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/ancm.mof rename to src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/ancm.mof diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/applicationinfo.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/applicationinfo.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/applicationinfo.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/applicationinfo.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/applicationinfo.h b/src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/applicationinfo.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/applicationinfo.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/applicationinfo.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/applicationmanager.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/applicationmanager.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/applicationmanager.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/applicationmanager.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/applicationmanager.h b/src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/applicationmanager.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/applicationmanager.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/applicationmanager.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/aspnetcore_schema_v2.xml b/src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/aspnetcore_schema_v2.xml similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/aspnetcore_schema_v2.xml rename to src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/aspnetcore_schema_v2.xml diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/aspnetcoremodule.rc b/src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/aspnetcoremodule.rc similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/aspnetcoremodule.rc rename to src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/aspnetcoremodule.rc diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/dllmain.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/dllmain.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/dllmain.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/dllmain.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/globalmodule.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/globalmodule.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/globalmodule.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/globalmodule.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/globalmodule.h b/src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/globalmodule.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/globalmodule.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/globalmodule.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/proxymodule.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/proxymodule.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/proxymodule.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/proxymodule.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/proxymodule.h b/src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/proxymodule.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/proxymodule.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/proxymodule.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/resource.h b/src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/resource.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/resource.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/resource.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/stdafx.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/stdafx.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/stdafx.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/stdafx.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/stdafx.h b/src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/stdafx.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/stdafx.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/AspNetCore/stdafx.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/BaseOutputManager.h b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/BaseOutputManager.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/BaseOutputManager.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/BaseOutputManager.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/CommonLib.vcxproj b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/CommonLib.vcxproj similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/CommonLib.vcxproj rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/CommonLib.vcxproj diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/ConfigurationLoadException.h b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/ConfigurationLoadException.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/ConfigurationLoadException.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/ConfigurationLoadException.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/ConfigurationSection.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/ConfigurationSection.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/ConfigurationSection.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/ConfigurationSection.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/ConfigurationSection.h b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/ConfigurationSection.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/ConfigurationSection.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/ConfigurationSection.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/ConfigurationSource.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/ConfigurationSource.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/ConfigurationSource.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/ConfigurationSource.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/ConfigurationSource.h b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/ConfigurationSource.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/ConfigurationSource.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/ConfigurationSource.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/Environment.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/Environment.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/Environment.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/Environment.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/Environment.h b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/Environment.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/Environment.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/Environment.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/EventLog.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/EventLog.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/EventLog.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/EventLog.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/EventLog.h b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/EventLog.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/EventLog.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/EventLog.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/EventTracing.h b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/EventTracing.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/EventTracing.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/EventTracing.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/FileOutputManager.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/FileOutputManager.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/FileOutputManager.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/FileOutputManager.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/FileOutputManager.h b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/FileOutputManager.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/FileOutputManager.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/FileOutputManager.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/GlobalVersionUtility.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/GlobalVersionUtility.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/GlobalVersionUtility.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/GlobalVersionUtility.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/GlobalVersionUtility.h b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/GlobalVersionUtility.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/GlobalVersionUtility.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/GlobalVersionUtility.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/HandleWrapper.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/HandleWrapper.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/HandleWrapper.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/HandleWrapper.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/HandleWrapper.h b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/HandleWrapper.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/HandleWrapper.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/HandleWrapper.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/IOutputManager.h b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/IOutputManager.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/IOutputManager.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/IOutputManager.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/InvalidOperationException.h b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/InvalidOperationException.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/InvalidOperationException.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/InvalidOperationException.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/LoggingHelpers.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/LoggingHelpers.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/LoggingHelpers.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/LoggingHelpers.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/LoggingHelpers.h b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/LoggingHelpers.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/LoggingHelpers.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/LoggingHelpers.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/ModuleHelpers.h b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/ModuleHelpers.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/ModuleHelpers.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/ModuleHelpers.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/NonCopyable.h b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/NonCopyable.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/NonCopyable.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/NonCopyable.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/NullOutputManager.h b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/NullOutputManager.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/NullOutputManager.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/NullOutputManager.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/PipeOutputManager.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/PipeOutputManager.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/PipeOutputManager.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/PipeOutputManager.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/PipeOutputManager.h b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/PipeOutputManager.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/PipeOutputManager.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/PipeOutputManager.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/ResultException.h b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/ResultException.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/ResultException.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/ResultException.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/SRWExclusiveLock.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/SRWExclusiveLock.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/SRWExclusiveLock.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/SRWExclusiveLock.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/SRWExclusiveLock.h b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/SRWExclusiveLock.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/SRWExclusiveLock.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/SRWExclusiveLock.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/SRWSharedLock.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/SRWSharedLock.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/SRWSharedLock.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/SRWSharedLock.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/SRWSharedLock.h b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/SRWSharedLock.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/SRWSharedLock.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/SRWSharedLock.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/ServerErrorHandler.h b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/ServerErrorHandler.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/ServerErrorHandler.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/ServerErrorHandler.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/StdWrapper.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/StdWrapper.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/StdWrapper.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/StdWrapper.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/StdWrapper.h b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/StdWrapper.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/StdWrapper.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/StdWrapper.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/StringHelpers.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/StringHelpers.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/StringHelpers.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/StringHelpers.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/StringHelpers.h b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/StringHelpers.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/StringHelpers.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/StringHelpers.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/WebConfigConfigurationSection.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/WebConfigConfigurationSection.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/WebConfigConfigurationSection.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/WebConfigConfigurationSection.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/WebConfigConfigurationSection.h b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/WebConfigConfigurationSection.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/WebConfigConfigurationSection.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/WebConfigConfigurationSection.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/WebConfigConfigurationSource.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/WebConfigConfigurationSource.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/WebConfigConfigurationSource.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/WebConfigConfigurationSource.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/WebConfigConfigurationSource.h b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/WebConfigConfigurationSource.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/WebConfigConfigurationSource.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/WebConfigConfigurationSource.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/application.h b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/application.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/application.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/application.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/aspnetcore_event.h b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/aspnetcore_event.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/aspnetcore_event.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/aspnetcore_event.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/aspnetcore_msg.mc b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/aspnetcore_msg.mc similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/aspnetcore_msg.mc rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/aspnetcore_msg.mc diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/config_utility.h b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/config_utility.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/config_utility.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/config_utility.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/debugutil.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/debugutil.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/debugutil.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/debugutil.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/debugutil.h b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/debugutil.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/debugutil.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/debugutil.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/exceptions.h b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/exceptions.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/exceptions.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/exceptions.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/file_utility.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/file_utility.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/file_utility.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/file_utility.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/file_utility.h b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/file_utility.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/file_utility.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/file_utility.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/fx_ver.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/fx_ver.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/fx_ver.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/fx_ver.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/fx_ver.h b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/fx_ver.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/fx_ver.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/fx_ver.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/hostfxr_utility.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/hostfxr_utility.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/hostfxr_utility.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/hostfxr_utility.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/hostfxr_utility.h b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/hostfxr_utility.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/hostfxr_utility.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/hostfxr_utility.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/hostfxroptions.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/hostfxroptions.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/hostfxroptions.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/hostfxroptions.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/hostfxroptions.h b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/hostfxroptions.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/hostfxroptions.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/hostfxroptions.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/iapplication.h b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/iapplication.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/iapplication.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/iapplication.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/irequesthandler.h b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/irequesthandler.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/irequesthandler.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/irequesthandler.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/requesthandler.h b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/requesthandler.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/requesthandler.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/requesthandler.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/resources.h b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/resources.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/resources.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/resources.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/stdafx.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/stdafx.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/stdafx.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/stdafx.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/stdafx.h b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/stdafx.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/stdafx.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/stdafx.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/sttimer.h b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/sttimer.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/sttimer.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/sttimer.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/targetver.h b/src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/targetver.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/targetver.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/CommonLib/targetver.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/DefaultRules.ruleset b/src/Servers/IIS/src/AspNetCoreModuleV2/DefaultRules.ruleset similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/DefaultRules.ruleset rename to src/Servers/IIS/src/AspNetCoreModuleV2/DefaultRules.ruleset diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/IISLib.vcxproj b/src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/IISLib.vcxproj similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/IISLib/IISLib.vcxproj rename to src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/IISLib.vcxproj diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/acache.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/acache.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/IISLib/acache.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/acache.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/acache.h b/src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/acache.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/IISLib/acache.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/acache.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/ahutil.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/ahutil.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/IISLib/ahutil.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/ahutil.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/ahutil.h b/src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/ahutil.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/IISLib/ahutil.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/ahutil.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/base64.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/base64.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/IISLib/base64.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/base64.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/base64.h b/src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/base64.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/IISLib/base64.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/base64.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/buffer.h b/src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/buffer.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/IISLib/buffer.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/buffer.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/datetime.h b/src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/datetime.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/IISLib/datetime.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/datetime.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/dbgutil.h b/src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/dbgutil.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/IISLib/dbgutil.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/dbgutil.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/hashfn.h b/src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/hashfn.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/IISLib/hashfn.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/hashfn.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/hashtable.h b/src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/hashtable.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/IISLib/hashtable.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/hashtable.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/listentry.h b/src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/listentry.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/IISLib/listentry.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/listentry.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/macros.h b/src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/macros.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/IISLib/macros.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/macros.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/multisz.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/multisz.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/IISLib/multisz.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/multisz.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/multisz.h b/src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/multisz.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/IISLib/multisz.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/multisz.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/multisza.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/multisza.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/IISLib/multisza.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/multisza.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/multisza.h b/src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/multisza.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/IISLib/multisza.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/multisza.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/ntassert.h b/src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/ntassert.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/IISLib/ntassert.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/ntassert.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/percpu.h b/src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/percpu.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/IISLib/percpu.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/percpu.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/precomp.h b/src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/precomp.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/IISLib/precomp.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/precomp.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/prime.h b/src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/prime.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/IISLib/prime.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/prime.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/reftrace.c b/src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/reftrace.c similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/IISLib/reftrace.c rename to src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/reftrace.c diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/reftrace.h b/src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/reftrace.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/IISLib/reftrace.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/reftrace.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/rwlock.h b/src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/rwlock.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/IISLib/rwlock.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/rwlock.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/stringa.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/stringa.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/IISLib/stringa.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/stringa.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/stringa.h b/src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/stringa.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/IISLib/stringa.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/stringa.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/stringu.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/stringu.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/IISLib/stringu.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/stringu.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/stringu.h b/src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/stringu.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/IISLib/stringu.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/stringu.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/tracelog.c b/src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/tracelog.c similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/IISLib/tracelog.c rename to src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/tracelog.c diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/tracelog.h b/src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/tracelog.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/IISLib/tracelog.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/tracelog.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/treehash.h b/src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/treehash.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/IISLib/treehash.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/treehash.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/util.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/util.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/IISLib/util.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/IISLib/util.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/InProcessRequestHandler/HtmlResponses.rc b/src/Servers/IIS/src/AspNetCoreModuleV2/InProcessRequestHandler/HtmlResponses.rc similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/InProcessRequestHandler/HtmlResponses.rc rename to src/Servers/IIS/src/AspNetCoreModuleV2/InProcessRequestHandler/HtmlResponses.rc diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/InProcessRequestHandler/InProcessApplicationBase.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/InProcessRequestHandler/InProcessApplicationBase.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/InProcessRequestHandler/InProcessApplicationBase.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/InProcessRequestHandler/InProcessApplicationBase.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/InProcessRequestHandler/InProcessApplicationBase.h b/src/Servers/IIS/src/AspNetCoreModuleV2/InProcessRequestHandler/InProcessApplicationBase.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/InProcessRequestHandler/InProcessApplicationBase.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/InProcessRequestHandler/InProcessApplicationBase.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/InProcessRequestHandler/InProcessOptions.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/InProcessRequestHandler/InProcessOptions.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/InProcessRequestHandler/InProcessOptions.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/InProcessRequestHandler/InProcessOptions.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/InProcessRequestHandler/InProcessOptions.h b/src/Servers/IIS/src/AspNetCoreModuleV2/InProcessRequestHandler/InProcessOptions.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/InProcessRequestHandler/InProcessOptions.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/InProcessRequestHandler/InProcessOptions.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/InProcessRequestHandler/InProcessRequestHandler.vcxproj b/src/Servers/IIS/src/AspNetCoreModuleV2/InProcessRequestHandler/InProcessRequestHandler.vcxproj similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/InProcessRequestHandler/InProcessRequestHandler.vcxproj rename to src/Servers/IIS/src/AspNetCoreModuleV2/InProcessRequestHandler/InProcessRequestHandler.vcxproj diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/InProcessRequestHandler/InProcessRhStaticHtml.htm b/src/Servers/IIS/src/AspNetCoreModuleV2/InProcessRequestHandler/InProcessRhStaticHtml.htm similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/InProcessRequestHandler/InProcessRhStaticHtml.htm rename to src/Servers/IIS/src/AspNetCoreModuleV2/InProcessRequestHandler/InProcessRhStaticHtml.htm diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/InProcessRequestHandler/ShuttingDownApplication.h b/src/Servers/IIS/src/AspNetCoreModuleV2/InProcessRequestHandler/ShuttingDownApplication.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/InProcessRequestHandler/ShuttingDownApplication.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/InProcessRequestHandler/ShuttingDownApplication.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/InProcessRequestHandler/Source.def b/src/Servers/IIS/src/AspNetCoreModuleV2/InProcessRequestHandler/Source.def similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/InProcessRequestHandler/Source.def rename to src/Servers/IIS/src/AspNetCoreModuleV2/InProcessRequestHandler/Source.def diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/InProcessRequestHandler/StartupExceptionApplication.h b/src/Servers/IIS/src/AspNetCoreModuleV2/InProcessRequestHandler/StartupExceptionApplication.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/InProcessRequestHandler/StartupExceptionApplication.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/InProcessRequestHandler/StartupExceptionApplication.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/InProcessRequestHandler/StartupExceptionHandler.h b/src/Servers/IIS/src/AspNetCoreModuleV2/InProcessRequestHandler/StartupExceptionHandler.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/InProcessRequestHandler/StartupExceptionHandler.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/InProcessRequestHandler/StartupExceptionHandler.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/InProcessRequestHandler/dllmain.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/InProcessRequestHandler/dllmain.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/InProcessRequestHandler/dllmain.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/InProcessRequestHandler/dllmain.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/InProcessRequestHandler/inprocessapplication.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/InProcessRequestHandler/inprocessapplication.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/InProcessRequestHandler/inprocessapplication.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/InProcessRequestHandler/inprocessapplication.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/InProcessRequestHandler/inprocessapplication.h b/src/Servers/IIS/src/AspNetCoreModuleV2/InProcessRequestHandler/inprocessapplication.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/InProcessRequestHandler/inprocessapplication.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/InProcessRequestHandler/inprocessapplication.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/InProcessRequestHandler/inprocesshandler.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/InProcessRequestHandler/inprocesshandler.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/InProcessRequestHandler/inprocesshandler.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/InProcessRequestHandler/inprocesshandler.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/InProcessRequestHandler/inprocesshandler.h b/src/Servers/IIS/src/AspNetCoreModuleV2/InProcessRequestHandler/inprocesshandler.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/InProcessRequestHandler/inprocesshandler.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/InProcessRequestHandler/inprocesshandler.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/InProcessRequestHandler/inprocessrequesthandler.rc b/src/Servers/IIS/src/AspNetCoreModuleV2/InProcessRequestHandler/inprocessrequesthandler.rc similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/InProcessRequestHandler/inprocessrequesthandler.rc rename to src/Servers/IIS/src/AspNetCoreModuleV2/InProcessRequestHandler/inprocessrequesthandler.rc diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/InProcessRequestHandler/managedexports.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/InProcessRequestHandler/managedexports.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/InProcessRequestHandler/managedexports.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/InProcessRequestHandler/managedexports.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/InProcessRequestHandler/resource.h b/src/Servers/IIS/src/AspNetCoreModuleV2/InProcessRequestHandler/resource.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/InProcessRequestHandler/resource.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/InProcessRequestHandler/resource.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/InProcessRequestHandler/stdafx.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/InProcessRequestHandler/stdafx.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/InProcessRequestHandler/stdafx.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/InProcessRequestHandler/stdafx.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/InProcessRequestHandler/stdafx.h b/src/Servers/IIS/src/AspNetCoreModuleV2/InProcessRequestHandler/stdafx.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/InProcessRequestHandler/stdafx.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/InProcessRequestHandler/stdafx.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/HtmlResponses.rc b/src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/HtmlResponses.rc similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/HtmlResponses.rc rename to src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/HtmlResponses.rc diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/OutOfProcessRequestHandler.vcxproj b/src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/OutOfProcessRequestHandler.vcxproj similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/OutOfProcessRequestHandler.vcxproj rename to src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/OutOfProcessRequestHandler.vcxproj diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/OutOfProcessRhStaticHtml.htm b/src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/OutOfProcessRhStaticHtml.htm similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/OutOfProcessRhStaticHtml.htm rename to src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/OutOfProcessRhStaticHtml.htm diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/Source.def b/src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/Source.def similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/Source.def rename to src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/Source.def diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/dllmain.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/dllmain.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/dllmain.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/dllmain.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/forwarderconnection.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/forwarderconnection.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/forwarderconnection.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/forwarderconnection.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/forwarderconnection.h b/src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/forwarderconnection.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/forwarderconnection.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/forwarderconnection.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/forwardinghandler.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/forwardinghandler.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/forwardinghandler.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/forwardinghandler.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/forwardinghandler.h b/src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/forwardinghandler.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/forwardinghandler.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/forwardinghandler.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/outofprocessrequesthandler.rc b/src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/outofprocessrequesthandler.rc similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/outofprocessrequesthandler.rc rename to src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/outofprocessrequesthandler.rc diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/outprocessapplication.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/outprocessapplication.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/outprocessapplication.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/outprocessapplication.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/outprocessapplication.h b/src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/outprocessapplication.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/outprocessapplication.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/outprocessapplication.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/processmanager.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/processmanager.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/processmanager.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/processmanager.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/processmanager.h b/src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/processmanager.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/processmanager.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/processmanager.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/protocolconfig.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/protocolconfig.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/protocolconfig.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/protocolconfig.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/protocolconfig.h b/src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/protocolconfig.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/protocolconfig.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/protocolconfig.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/resource.h b/src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/resource.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/resource.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/resource.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/responseheaderhash.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/responseheaderhash.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/responseheaderhash.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/responseheaderhash.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/responseheaderhash.h b/src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/responseheaderhash.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/responseheaderhash.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/responseheaderhash.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/serverprocess.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/serverprocess.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/serverprocess.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/serverprocess.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/serverprocess.h b/src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/serverprocess.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/serverprocess.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/serverprocess.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/stdafx.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/stdafx.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/stdafx.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/stdafx.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/stdafx.h b/src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/stdafx.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/stdafx.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/stdafx.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/url_utility.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/url_utility.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/url_utility.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/url_utility.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/url_utility.h b/src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/url_utility.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/url_utility.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/url_utility.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/websockethandler.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/websockethandler.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/websockethandler.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/websockethandler.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/websockethandler.h b/src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/websockethandler.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/websockethandler.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/websockethandler.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/winhttphelper.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/winhttphelper.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/winhttphelper.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/winhttphelper.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/winhttphelper.h b/src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/winhttphelper.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/winhttphelper.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/winhttphelper.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandlerLib/AppOfflineTrackingApplication.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/RequestHandlerLib/AppOfflineTrackingApplication.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/RequestHandlerLib/AppOfflineTrackingApplication.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/RequestHandlerLib/AppOfflineTrackingApplication.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandlerLib/AppOfflineTrackingApplication.h b/src/Servers/IIS/src/AspNetCoreModuleV2/RequestHandlerLib/AppOfflineTrackingApplication.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/RequestHandlerLib/AppOfflineTrackingApplication.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/RequestHandlerLib/AppOfflineTrackingApplication.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandlerLib/RequestHandlerLib.vcxproj b/src/Servers/IIS/src/AspNetCoreModuleV2/RequestHandlerLib/RequestHandlerLib.vcxproj similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/RequestHandlerLib/RequestHandlerLib.vcxproj rename to src/Servers/IIS/src/AspNetCoreModuleV2/RequestHandlerLib/RequestHandlerLib.vcxproj diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandlerLib/environmentvariablehash.h b/src/Servers/IIS/src/AspNetCoreModuleV2/RequestHandlerLib/environmentvariablehash.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/RequestHandlerLib/environmentvariablehash.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/RequestHandlerLib/environmentvariablehash.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandlerLib/environmentvariablehelpers.h b/src/Servers/IIS/src/AspNetCoreModuleV2/RequestHandlerLib/environmentvariablehelpers.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/RequestHandlerLib/environmentvariablehelpers.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/RequestHandlerLib/environmentvariablehelpers.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandlerLib/filewatcher.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/RequestHandlerLib/filewatcher.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/RequestHandlerLib/filewatcher.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/RequestHandlerLib/filewatcher.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandlerLib/filewatcher.h b/src/Servers/IIS/src/AspNetCoreModuleV2/RequestHandlerLib/filewatcher.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/RequestHandlerLib/filewatcher.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/RequestHandlerLib/filewatcher.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandlerLib/requesthandler_config.cpp b/src/Servers/IIS/src/AspNetCoreModuleV2/RequestHandlerLib/requesthandler_config.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/RequestHandlerLib/requesthandler_config.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV2/RequestHandlerLib/requesthandler_config.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandlerLib/requesthandler_config.h b/src/Servers/IIS/src/AspNetCoreModuleV2/RequestHandlerLib/requesthandler_config.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/RequestHandlerLib/requesthandler_config.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/RequestHandlerLib/requesthandler_config.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandlerLib/stdafx.h b/src/Servers/IIS/src/AspNetCoreModuleV2/RequestHandlerLib/stdafx.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/RequestHandlerLib/stdafx.h rename to src/Servers/IIS/src/AspNetCoreModuleV2/RequestHandlerLib/stdafx.h diff --git a/src/Servers/IIS/src/Microsoft.AspNetCore.AspNetCoreModule/Directory.Build.targets b/src/Servers/IIS/src/Microsoft.AspNetCore.AspNetCoreModule/Directory.Build.targets new file mode 100644 index 000000000000..9b37939d97d6 --- /dev/null +++ b/src/Servers/IIS/src/Microsoft.AspNetCore.AspNetCoreModule/Directory.Build.targets @@ -0,0 +1,37 @@ + + + + + + + false + + false + + false + + true + + true + + false + + false + + $(MSBuildProjectName) + $(PackageOutputPath)$(PackageId).$(PackageVersion).nupkg + + + + + + NuGetPackage + $(PackageId) + $(PackageVersion) + $(PackageSigningCertName) + true + true + + + + diff --git a/src/Servers/IIS/src/Microsoft.AspNetCore.AspNetCoreModule/Microsoft.AspNetCore.AspNetCoreModule.pkgproj b/src/Servers/IIS/src/Microsoft.AspNetCore.AspNetCoreModule/Microsoft.AspNetCore.AspNetCoreModule.pkgproj new file mode 100644 index 000000000000..4ab6c6330a4e --- /dev/null +++ b/src/Servers/IIS/src/Microsoft.AspNetCore.AspNetCoreModule/Microsoft.AspNetCore.AspNetCoreModule.pkgproj @@ -0,0 +1,35 @@ + + + + + $(MSBuildProjectName) + false + netcoreapp2.2 + aspnetcore + Microsoft ASP.NET Core Module + true + true + ASP.NET Core Module + false + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/IISIntegration/nuget/Microsoft.AspNetCore.AspNetCoreModule.props b/src/Servers/IIS/src/Microsoft.AspNetCore.AspNetCoreModule/Microsoft.AspNetCore.AspNetCoreModule.props similarity index 96% rename from src/IISIntegration/nuget/Microsoft.AspNetCore.AspNetCoreModule.props rename to src/Servers/IIS/src/Microsoft.AspNetCore.AspNetCoreModule/Microsoft.AspNetCore.AspNetCoreModule.props index 7a761813b4a1..4e6fbe80e847 100644 --- a/src/IISIntegration/nuget/Microsoft.AspNetCore.AspNetCoreModule.props +++ b/src/Servers/IIS/src/Microsoft.AspNetCore.AspNetCoreModule/Microsoft.AspNetCore.AspNetCoreModule.props @@ -5,4 +5,4 @@ $(MSBuildThisFileDirectory)..\contentFiles\any\any\x86\aspnetcore.dll - + \ No newline at end of file diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/_._ b/src/Servers/IIS/src/Microsoft.AspNetCore.AspNetCoreModule/_._ similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/_._ rename to src/Servers/IIS/src/Microsoft.AspNetCore.AspNetCoreModule/_._ diff --git a/src/Servers/IIS/src/Microsoft.AspNetCore.AspNetCoreModuleV2/Directory.Build.targets b/src/Servers/IIS/src/Microsoft.AspNetCore.AspNetCoreModuleV2/Directory.Build.targets new file mode 100644 index 000000000000..3ccb87cc9436 --- /dev/null +++ b/src/Servers/IIS/src/Microsoft.AspNetCore.AspNetCoreModuleV2/Directory.Build.targets @@ -0,0 +1,36 @@ + + + + + + + false + + false + + false + + true + + true + + false + + false + + $(PackageOutputPath)$(PackageId).$(PackageVersion).nupkg + + + + + + NuGetPackage + $(PackageId) + $(PackageVersion) + $(PackageSigningCertName) + true + true + + + + diff --git a/src/IISIntegration/nuget/Microsoft.AspNetCore.AspNetCoreModuleV2.props.in b/src/Servers/IIS/src/Microsoft.AspNetCore.AspNetCoreModuleV2/Microsoft.AspNetCore.AspNetCoreModule.props.in similarity index 99% rename from src/IISIntegration/nuget/Microsoft.AspNetCore.AspNetCoreModuleV2.props.in rename to src/Servers/IIS/src/Microsoft.AspNetCore.AspNetCoreModuleV2/Microsoft.AspNetCore.AspNetCoreModule.props.in index 09af105513ff..7b3be4a26136 100644 --- a/src/IISIntegration/nuget/Microsoft.AspNetCore.AspNetCoreModuleV2.props.in +++ b/src/Servers/IIS/src/Microsoft.AspNetCore.AspNetCoreModuleV2/Microsoft.AspNetCore.AspNetCoreModule.props.in @@ -10,4 +10,4 @@ $(MSBuildThisFileDirectory)..\contentFiles\any\any\x86\$(AspNetCoreModuleOutOfProcessVersion)\aspnetcorev2_outofprocess.dll - + \ No newline at end of file diff --git a/src/Servers/IIS/src/Microsoft.AspNetCore.AspNetCoreModuleV2/Microsoft.AspNetCore.AspNetCoreModuleV2.pkgproj b/src/Servers/IIS/src/Microsoft.AspNetCore.AspNetCoreModuleV2/Microsoft.AspNetCore.AspNetCoreModuleV2.pkgproj new file mode 100644 index 000000000000..1649ef6927e3 --- /dev/null +++ b/src/Servers/IIS/src/Microsoft.AspNetCore.AspNetCoreModuleV2/Microsoft.AspNetCore.AspNetCoreModuleV2.pkgproj @@ -0,0 +1,42 @@ + + + + + $(MSBuildProjectName) + false + netcoreapp2.2 + aspnetcore + Microsoft ASP.NET Core Module + true + true + ASP.NET Core Module + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/IISIntegration/test/WebSites/InProcessWebSite/wwwroot/static.txt b/src/Servers/IIS/src/Microsoft.AspNetCore.AspNetCoreModuleV2/_._ similarity index 100% rename from src/IISIntegration/test/WebSites/InProcessWebSite/wwwroot/static.txt rename to src/Servers/IIS/src/Microsoft.AspNetCore.AspNetCoreModuleV2/_._ diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/AssemblyInfo.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/AssemblyInfo.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/AssemblyInfo.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/AssemblyInfo.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/DuplexStream.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/DuplexStream.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/DuplexStream.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/DuplexStream.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/EmptyStream.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/EmptyStream.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/EmptyStream.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/EmptyStream.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/HttpRequestStream.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/HttpRequestStream.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/HttpRequestStream.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/HttpRequestStream.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/HttpResponseStream.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/HttpResponseStream.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/HttpResponseStream.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/HttpResponseStream.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/HttpStreamState.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/HttpStreamState.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/HttpStreamState.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/HttpStreamState.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/HttpUpgradeStream.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/HttpUpgradeStream.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/HttpUpgradeStream.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/HttpUpgradeStream.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/IISConfigurationData.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/IISConfigurationData.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/IISConfigurationData.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/IISConfigurationData.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/IISHttpContext.FeatureCollection.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/IISHttpContext.FeatureCollection.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/IISHttpContext.FeatureCollection.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/IISHttpContext.FeatureCollection.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/IISHttpContext.Features.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/IISHttpContext.Features.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/IISHttpContext.Features.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/IISHttpContext.Features.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/IISHttpContext.IHttpConnectionFeature.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/IISHttpContext.IHttpConnectionFeature.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/IISHttpContext.IHttpConnectionFeature.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/IISHttpContext.IHttpConnectionFeature.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/IISHttpContext.IHttpRequestIdentifierFeature.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/IISHttpContext.IHttpRequestIdentifierFeature.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/IISHttpContext.IHttpRequestIdentifierFeature.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/IISHttpContext.IHttpRequestIdentifierFeature.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/IISHttpContext.IHttpRequestLifetimeFeature.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/IISHttpContext.IHttpRequestLifetimeFeature.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/IISHttpContext.IHttpRequestLifetimeFeature.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/IISHttpContext.IHttpRequestLifetimeFeature.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/IISHttpContext.IO.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/IISHttpContext.IO.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/IISHttpContext.IO.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/IISHttpContext.IO.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/IISHttpContext.Log.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/IISHttpContext.Log.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/IISHttpContext.Log.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/IISHttpContext.Log.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/IISHttpContext.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/IISHttpContext.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/IISHttpContext.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/IISHttpContext.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/IISHttpContextOfT.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/IISHttpContextOfT.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/IISHttpContextOfT.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/IISHttpContextOfT.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/IISHttpServer.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/IISHttpServer.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/IISHttpServer.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/IISHttpServer.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/IISNativeApplication.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/IISNativeApplication.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/IISNativeApplication.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/IISNativeApplication.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/IISServerAuthenticationHandler.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/IISServerAuthenticationHandler.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/IISServerAuthenticationHandler.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/IISServerAuthenticationHandler.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/IISServerSetupFilter.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/IISServerSetupFilter.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/IISServerSetupFilter.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/IISServerSetupFilter.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/IO/AsyncIOEngine.Flush.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/IO/AsyncIOEngine.Flush.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/IO/AsyncIOEngine.Flush.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/IO/AsyncIOEngine.Flush.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/IO/AsyncIOEngine.Read.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/IO/AsyncIOEngine.Read.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/IO/AsyncIOEngine.Read.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/IO/AsyncIOEngine.Read.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/IO/AsyncIOEngine.Write.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/IO/AsyncIOEngine.Write.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/IO/AsyncIOEngine.Write.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/IO/AsyncIOEngine.Write.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/IO/AsyncIOEngine.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/IO/AsyncIOEngine.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/IO/AsyncIOEngine.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/IO/AsyncIOEngine.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/IO/AsyncIOOperation.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/IO/AsyncIOOperation.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/IO/AsyncIOOperation.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/IO/AsyncIOOperation.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/IO/AsyncWriteOperationBase.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/IO/AsyncWriteOperationBase.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/IO/AsyncWriteOperationBase.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/IO/AsyncWriteOperationBase.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/IO/IAsyncIOEngine.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/IO/IAsyncIOEngine.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/IO/IAsyncIOEngine.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/IO/IAsyncIOEngine.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/IO/WebSocketsAsyncIOEngine.Initialize.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/IO/WebSocketsAsyncIOEngine.Initialize.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/IO/WebSocketsAsyncIOEngine.Initialize.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/IO/WebSocketsAsyncIOEngine.Initialize.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/IO/WebSocketsAsyncIOEngine.Read.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/IO/WebSocketsAsyncIOEngine.Read.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/IO/WebSocketsAsyncIOEngine.Read.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/IO/WebSocketsAsyncIOEngine.Read.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/IO/WebSocketsAsyncIOEngine.Write.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/IO/WebSocketsAsyncIOEngine.Write.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/IO/WebSocketsAsyncIOEngine.Write.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/IO/WebSocketsAsyncIOEngine.Write.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/IO/WebSocketsAsyncIOEngine.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/IO/WebSocketsAsyncIOEngine.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/IO/WebSocketsAsyncIOEngine.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/IO/WebSocketsAsyncIOEngine.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/OutputProducer.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/OutputProducer.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/OutputProducer.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/OutputProducer.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/ReadOnlyStream.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/ReadOnlyStream.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/ReadOnlyStream.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/ReadOnlyStream.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/Streams.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/Streams.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/Streams.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/Streams.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/ThrowingWasUpgradedWriteOnlyStream.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/ThrowingWasUpgradedWriteOnlyStream.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/ThrowingWasUpgradedWriteOnlyStream.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/ThrowingWasUpgradedWriteOnlyStream.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/WrappingStream.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/WrappingStream.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/WrappingStream.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/WrappingStream.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/WriteOnlyStream.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/WriteOnlyStream.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Core/WriteOnlyStream.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Core/WriteOnlyStream.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/CoreStrings.resx b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/CoreStrings.resx similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/CoreStrings.resx rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/CoreStrings.resx diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/HttpContextExtensions.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/HttpContextExtensions.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/HttpContextExtensions.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/HttpContextExtensions.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/IISServerDefaults.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/IISServerDefaults.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/IISServerDefaults.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/IISServerDefaults.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/IISServerOptions.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/IISServerOptions.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/IISServerOptions.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/IISServerOptions.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/IServerVariableFeature.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/IServerVariableFeature.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/IServerVariableFeature.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/IServerVariableFeature.cs diff --git a/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Microsoft.AspNetCore.Server.IIS.csproj b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Microsoft.AspNetCore.Server.IIS.csproj new file mode 100644 index 000000000000..a0d2bfbbc606 --- /dev/null +++ b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Microsoft.AspNetCore.Server.IIS.csproj @@ -0,0 +1,54 @@ + + + + netcoreapp3.0 + Microsoft.AspNetCore.Server.IIS + Provides support for hosting ASP.NET Core in IIS using the AspNetCoreModule. + $(NoWarn);CS1591 + true + aspnetcore;iis + true + true + netcoreapp3.0 + True + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Microsoft.AspNetCore.Server.IIS.targets b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Microsoft.AspNetCore.Server.IIS.targets similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Microsoft.AspNetCore.Server.IIS.targets rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Microsoft.AspNetCore.Server.IIS.targets diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/NativeMethods.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/NativeMethods.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/NativeMethods.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/NativeMethods.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Properties/CoreStrings.Designer.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Properties/CoreStrings.Designer.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/Properties/CoreStrings.Designer.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/Properties/CoreStrings.Designer.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/WebHostBuilderIISExtensions.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/WebHostBuilderIISExtensions.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IIS/WebHostBuilderIISExtensions.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/WebHostBuilderIISExtensions.cs diff --git a/src/IISIntegration/test/WebSites/OutOfProcessWebSite/wwwroot/static.txt b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/_._ similarity index 100% rename from src/IISIntegration/test/WebSites/OutOfProcessWebSite/wwwroot/static.txt rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IIS/_._ diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/AuthenticationHandler.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/AuthenticationHandler.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/AuthenticationHandler.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/AuthenticationHandler.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/ForwardedTlsConnectionFeature.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/ForwardedTlsConnectionFeature.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/ForwardedTlsConnectionFeature.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/ForwardedTlsConnectionFeature.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/IISDefaults.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/IISDefaults.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/IISDefaults.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/IISDefaults.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/IISHostingStartup.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/IISHostingStartup.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/IISHostingStartup.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/IISHostingStartup.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/IISMiddleware.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/IISMiddleware.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/IISMiddleware.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/IISMiddleware.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/IISOptions.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/IISOptions.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/IISOptions.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/IISOptions.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/IISSetupFilter.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/IISSetupFilter.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/IISSetupFilter.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/IISSetupFilter.cs diff --git a/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/Microsoft.AspNetCore.Server.IISIntegration.csproj b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/Microsoft.AspNetCore.Server.IISIntegration.csproj new file mode 100644 index 000000000000..46f912e71f44 --- /dev/null +++ b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/Microsoft.AspNetCore.Server.IISIntegration.csproj @@ -0,0 +1,33 @@ + + + + + ASP.NET Core components for working with the IIS AspNetCoreModule. + netcoreapp3.0 + $(NoWarn);CS1591 + true + aspnetcore;iis + true + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/Microsoft.AspNetCore.Server.IISIntegration.targets b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/Microsoft.AspNetCore.Server.IISIntegration.targets similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/Microsoft.AspNetCore.Server.IISIntegration.targets rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/Microsoft.AspNetCore.Server.IISIntegration.targets diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/NativeMethods.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/NativeMethods.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/NativeMethods.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/NativeMethods.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/Properties/AssemblyInfo.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/Properties/AssemblyInfo.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/Properties/AssemblyInfo.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/Properties/AssemblyInfo.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/WebHostBuilderIISExtensions.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/WebHostBuilderIISExtensions.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/WebHostBuilderIISExtensions.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/WebHostBuilderIISExtensions.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/baseline.netcore.json b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/baseline.netcore.json similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/baseline.netcore.json rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/baseline.netcore.json diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/breakingchanges.netcore.json b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/breakingchanges.netcore.json similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/breakingchanges.netcore.json rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/breakingchanges.netcore.json diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/ApplicationDeployerFactory.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/ApplicationDeployerFactory.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/ApplicationDeployerFactory.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/ApplicationDeployerFactory.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/Http.config b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/Http.config similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/Http.config rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/Http.config diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/IISDeployer.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/IISDeployer.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/IISDeployer.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/IISDeployer.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/IISDeployerBase.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/IISDeployerBase.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/IISDeployerBase.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/IISDeployerBase.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/IISDeploymentParameterExtensions.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/IISDeploymentParameterExtensions.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/IISDeploymentParameterExtensions.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/IISDeploymentParameterExtensions.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/IISDeploymentParameters.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/IISDeploymentParameters.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/IISDeploymentParameters.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/IISDeploymentParameters.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/IISDeploymentResult.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/IISDeploymentResult.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/IISDeploymentResult.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/IISDeploymentResult.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/IISExpressDeployer.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/IISExpressDeployer.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/IISExpressDeployer.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/IISExpressDeployer.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/LoggingHandler.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/LoggingHandler.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/LoggingHandler.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/LoggingHandler.cs diff --git a/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/Microsoft.AspNetCore.Server.IntegrationTesting.IIS.csproj b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/Microsoft.AspNetCore.Server.IntegrationTesting.IIS.csproj new file mode 100644 index 000000000000..920ed36fa9ac --- /dev/null +++ b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/Microsoft.AspNetCore.Server.IntegrationTesting.IIS.csproj @@ -0,0 +1,27 @@ + + + + netcoreapp3.0 + Microsoft.AspNetCore.Server.IntegrationTesting.IIS + Provides support for integration testing using IIS based servers. + $(NoWarn);CS1591 + true + aspnetcore;iis + True + true + true + true + + + + + + + + + + + + + + diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/ProcessTracker.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/ProcessTracker.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/ProcessTracker.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/ProcessTracker.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/RetryHandler.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/RetryHandler.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/RetryHandler.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/RetryHandler.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/WebConfigHelpers.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/WebConfigHelpers.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/WebConfigHelpers.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/WebConfigHelpers.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/XElementExtensions.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/XElementExtensions.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/XElementExtensions.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/XElementExtensions.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/AppHostConfig/IIS.config b/src/Servers/IIS/test/Common.FunctionalTests/AppHostConfig/IIS.config similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/AppHostConfig/IIS.config rename to src/Servers/IIS/test/Common.FunctionalTests/AppHostConfig/IIS.config diff --git a/src/IISIntegration/test/Common.FunctionalTests/AppOfflineTests.cs b/src/Servers/IIS/test/Common.FunctionalTests/AppOfflineTests.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/AppOfflineTests.cs rename to src/Servers/IIS/test/Common.FunctionalTests/AppOfflineTests.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/BasicAuthTests.cs b/src/Servers/IIS/test/Common.FunctionalTests/BasicAuthTests.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/BasicAuthTests.cs rename to src/Servers/IIS/test/Common.FunctionalTests/BasicAuthTests.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/ClientCertificateFixture.cs b/src/Servers/IIS/test/Common.FunctionalTests/ClientCertificateFixture.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/ClientCertificateFixture.cs rename to src/Servers/IIS/test/Common.FunctionalTests/ClientCertificateFixture.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/ClientCertificateTests.cs b/src/Servers/IIS/test/Common.FunctionalTests/ClientCertificateTests.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/ClientCertificateTests.cs rename to src/Servers/IIS/test/Common.FunctionalTests/ClientCertificateTests.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/ClientDisconnectStress.cs b/src/Servers/IIS/test/Common.FunctionalTests/ClientDisconnectStress.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/ClientDisconnectStress.cs rename to src/Servers/IIS/test/Common.FunctionalTests/ClientDisconnectStress.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/CommonStartupTests.cs b/src/Servers/IIS/test/Common.FunctionalTests/CommonStartupTests.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/CommonStartupTests.cs rename to src/Servers/IIS/test/Common.FunctionalTests/CommonStartupTests.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/CompressionTests.cs b/src/Servers/IIS/test/Common.FunctionalTests/CompressionTests.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/CompressionTests.cs rename to src/Servers/IIS/test/Common.FunctionalTests/CompressionTests.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/ConfigurationChangeTests.cs b/src/Servers/IIS/test/Common.FunctionalTests/ConfigurationChangeTests.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/ConfigurationChangeTests.cs rename to src/Servers/IIS/test/Common.FunctionalTests/ConfigurationChangeTests.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/Inprocess/ClientDisconnectTests.cs b/src/Servers/IIS/test/Common.FunctionalTests/Inprocess/ClientDisconnectTests.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/Inprocess/ClientDisconnectTests.cs rename to src/Servers/IIS/test/Common.FunctionalTests/Inprocess/ClientDisconnectTests.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/Inprocess/CompressionTests.cs b/src/Servers/IIS/test/Common.FunctionalTests/Inprocess/CompressionTests.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/Inprocess/CompressionTests.cs rename to src/Servers/IIS/test/Common.FunctionalTests/Inprocess/CompressionTests.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/Inprocess/EnvironmentVariableTests.cs b/src/Servers/IIS/test/Common.FunctionalTests/Inprocess/EnvironmentVariableTests.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/Inprocess/EnvironmentVariableTests.cs rename to src/Servers/IIS/test/Common.FunctionalTests/Inprocess/EnvironmentVariableTests.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/Inprocess/ErrorPagesTests.cs b/src/Servers/IIS/test/Common.FunctionalTests/Inprocess/ErrorPagesTests.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/Inprocess/ErrorPagesTests.cs rename to src/Servers/IIS/test/Common.FunctionalTests/Inprocess/ErrorPagesTests.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/Inprocess/EventLogTests.cs b/src/Servers/IIS/test/Common.FunctionalTests/Inprocess/EventLogTests.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/Inprocess/EventLogTests.cs rename to src/Servers/IIS/test/Common.FunctionalTests/Inprocess/EventLogTests.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/Inprocess/FeatureCollectionTests.cs b/src/Servers/IIS/test/Common.FunctionalTests/Inprocess/FeatureCollectionTests.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/Inprocess/FeatureCollectionTests.cs rename to src/Servers/IIS/test/Common.FunctionalTests/Inprocess/FeatureCollectionTests.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/Inprocess/FixtureLoggedTest.cs b/src/Servers/IIS/test/Common.FunctionalTests/Inprocess/FixtureLoggedTest.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/Inprocess/FixtureLoggedTest.cs rename to src/Servers/IIS/test/Common.FunctionalTests/Inprocess/FixtureLoggedTest.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/Inprocess/FrebTests.cs b/src/Servers/IIS/test/Common.FunctionalTests/Inprocess/FrebTests.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/Inprocess/FrebTests.cs rename to src/Servers/IIS/test/Common.FunctionalTests/Inprocess/FrebTests.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/Inprocess/HelloWorldTests.cs b/src/Servers/IIS/test/Common.FunctionalTests/Inprocess/HelloWorldTests.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/Inprocess/HelloWorldTests.cs rename to src/Servers/IIS/test/Common.FunctionalTests/Inprocess/HelloWorldTests.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/Inprocess/HostingEnvironmentTests.cs b/src/Servers/IIS/test/Common.FunctionalTests/Inprocess/HostingEnvironmentTests.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/Inprocess/HostingEnvironmentTests.cs rename to src/Servers/IIS/test/Common.FunctionalTests/Inprocess/HostingEnvironmentTests.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/Inprocess/InvalidReadWriteOperationTests.cs b/src/Servers/IIS/test/Common.FunctionalTests/Inprocess/InvalidReadWriteOperationTests.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/Inprocess/InvalidReadWriteOperationTests.cs rename to src/Servers/IIS/test/Common.FunctionalTests/Inprocess/InvalidReadWriteOperationTests.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/Inprocess/LargeResponseBodyTests.cs b/src/Servers/IIS/test/Common.FunctionalTests/Inprocess/LargeResponseBodyTests.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/Inprocess/LargeResponseBodyTests.cs rename to src/Servers/IIS/test/Common.FunctionalTests/Inprocess/LargeResponseBodyTests.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/Inprocess/LogPipeTests.cs b/src/Servers/IIS/test/Common.FunctionalTests/Inprocess/LogPipeTests.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/Inprocess/LogPipeTests.cs rename to src/Servers/IIS/test/Common.FunctionalTests/Inprocess/LogPipeTests.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/Inprocess/ResponseHeaderTests.cs b/src/Servers/IIS/test/Common.FunctionalTests/Inprocess/ResponseHeaderTests.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/Inprocess/ResponseHeaderTests.cs rename to src/Servers/IIS/test/Common.FunctionalTests/Inprocess/ResponseHeaderTests.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/Inprocess/ResponseInvalidOrderingTests.cs b/src/Servers/IIS/test/Common.FunctionalTests/Inprocess/ResponseInvalidOrderingTests.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/Inprocess/ResponseInvalidOrderingTests.cs rename to src/Servers/IIS/test/Common.FunctionalTests/Inprocess/ResponseInvalidOrderingTests.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/Inprocess/ServerVariablesTest.cs b/src/Servers/IIS/test/Common.FunctionalTests/Inprocess/ServerVariablesTest.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/Inprocess/ServerVariablesTest.cs rename to src/Servers/IIS/test/Common.FunctionalTests/Inprocess/ServerVariablesTest.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/Inprocess/StartupExceptionTests.cs b/src/Servers/IIS/test/Common.FunctionalTests/Inprocess/StartupExceptionTests.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/Inprocess/StartupExceptionTests.cs rename to src/Servers/IIS/test/Common.FunctionalTests/Inprocess/StartupExceptionTests.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/Inprocess/StartupTests.cs b/src/Servers/IIS/test/Common.FunctionalTests/Inprocess/StartupTests.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/Inprocess/StartupTests.cs rename to src/Servers/IIS/test/Common.FunctionalTests/Inprocess/StartupTests.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/Inprocess/SynchronousReadAndWriteTests.cs b/src/Servers/IIS/test/Common.FunctionalTests/Inprocess/SynchronousReadAndWriteTests.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/Inprocess/SynchronousReadAndWriteTests.cs rename to src/Servers/IIS/test/Common.FunctionalTests/Inprocess/SynchronousReadAndWriteTests.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/LogFileTests.cs b/src/Servers/IIS/test/Common.FunctionalTests/LogFileTests.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/LogFileTests.cs rename to src/Servers/IIS/test/Common.FunctionalTests/LogFileTests.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/MultiApplicationTests.cs b/src/Servers/IIS/test/Common.FunctionalTests/MultiApplicationTests.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/MultiApplicationTests.cs rename to src/Servers/IIS/test/Common.FunctionalTests/MultiApplicationTests.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/OutOfProcess/AspNetCorePortTests.cs b/src/Servers/IIS/test/Common.FunctionalTests/OutOfProcess/AspNetCorePortTests.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/OutOfProcess/AspNetCorePortTests.cs rename to src/Servers/IIS/test/Common.FunctionalTests/OutOfProcess/AspNetCorePortTests.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/OutOfProcess/GlobalVersionTests.cs b/src/Servers/IIS/test/Common.FunctionalTests/OutOfProcess/GlobalVersionTests.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/OutOfProcess/GlobalVersionTests.cs rename to src/Servers/IIS/test/Common.FunctionalTests/OutOfProcess/GlobalVersionTests.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/OutOfProcess/HelloWorldTest.cs b/src/Servers/IIS/test/Common.FunctionalTests/OutOfProcess/HelloWorldTest.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/OutOfProcess/HelloWorldTest.cs rename to src/Servers/IIS/test/Common.FunctionalTests/OutOfProcess/HelloWorldTest.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/PublishedSitesFixture.cs b/src/Servers/IIS/test/Common.FunctionalTests/PublishedSitesFixture.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/PublishedSitesFixture.cs rename to src/Servers/IIS/test/Common.FunctionalTests/PublishedSitesFixture.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/RequiresNewHandler.cs b/src/Servers/IIS/test/Common.FunctionalTests/RequiresNewHandler.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/RequiresNewHandler.cs rename to src/Servers/IIS/test/Common.FunctionalTests/RequiresNewHandler.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/RequiresNewShim.cs b/src/Servers/IIS/test/Common.FunctionalTests/RequiresNewShim.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/RequiresNewShim.cs rename to src/Servers/IIS/test/Common.FunctionalTests/RequiresNewShim.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/ServerAbortTests.cs b/src/Servers/IIS/test/Common.FunctionalTests/ServerAbortTests.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/ServerAbortTests.cs rename to src/Servers/IIS/test/Common.FunctionalTests/ServerAbortTests.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/SkipIfNotAdminAttribute.cs b/src/Servers/IIS/test/Common.FunctionalTests/SkipIfNotAdminAttribute.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/SkipIfNotAdminAttribute.cs rename to src/Servers/IIS/test/Common.FunctionalTests/SkipIfNotAdminAttribute.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/SkipVSTSAttribute.cs b/src/Servers/IIS/test/Common.FunctionalTests/SkipVSTSAttribute.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/SkipVSTSAttribute.cs rename to src/Servers/IIS/test/Common.FunctionalTests/SkipVSTSAttribute.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/Utilities/AppVerifier.cs b/src/Servers/IIS/test/Common.FunctionalTests/Utilities/AppVerifier.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/Utilities/AppVerifier.cs rename to src/Servers/IIS/test/Common.FunctionalTests/Utilities/AppVerifier.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/Utilities/EventLogHelpers.cs b/src/Servers/IIS/test/Common.FunctionalTests/Utilities/EventLogHelpers.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/Utilities/EventLogHelpers.cs rename to src/Servers/IIS/test/Common.FunctionalTests/Utilities/EventLogHelpers.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/Utilities/FunctionalTestsBase.cs b/src/Servers/IIS/test/Common.FunctionalTests/Utilities/FunctionalTestsBase.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/Utilities/FunctionalTestsBase.cs rename to src/Servers/IIS/test/Common.FunctionalTests/Utilities/FunctionalTestsBase.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/Utilities/Helpers.cs b/src/Servers/IIS/test/Common.FunctionalTests/Utilities/Helpers.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/Utilities/Helpers.cs rename to src/Servers/IIS/test/Common.FunctionalTests/Utilities/Helpers.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/Utilities/IISCapability.cs b/src/Servers/IIS/test/Common.FunctionalTests/Utilities/IISCapability.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/Utilities/IISCapability.cs rename to src/Servers/IIS/test/Common.FunctionalTests/Utilities/IISCapability.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/Utilities/IISCompressionSiteCollection.cs b/src/Servers/IIS/test/Common.FunctionalTests/Utilities/IISCompressionSiteCollection.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/Utilities/IISCompressionSiteCollection.cs rename to src/Servers/IIS/test/Common.FunctionalTests/Utilities/IISCompressionSiteCollection.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/Utilities/IISCompressionSiteFixture.cs b/src/Servers/IIS/test/Common.FunctionalTests/Utilities/IISCompressionSiteFixture.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/Utilities/IISCompressionSiteFixture.cs rename to src/Servers/IIS/test/Common.FunctionalTests/Utilities/IISCompressionSiteFixture.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/Utilities/IISFunctionalTestBase.cs b/src/Servers/IIS/test/Common.FunctionalTests/Utilities/IISFunctionalTestBase.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/Utilities/IISFunctionalTestBase.cs rename to src/Servers/IIS/test/Common.FunctionalTests/Utilities/IISFunctionalTestBase.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/Utilities/IISTestSiteCollection.cs b/src/Servers/IIS/test/Common.FunctionalTests/Utilities/IISTestSiteCollection.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/Utilities/IISTestSiteCollection.cs rename to src/Servers/IIS/test/Common.FunctionalTests/Utilities/IISTestSiteCollection.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/Utilities/IISTestSiteFixture.cs b/src/Servers/IIS/test/Common.FunctionalTests/Utilities/IISTestSiteFixture.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/Utilities/IISTestSiteFixture.cs rename to src/Servers/IIS/test/Common.FunctionalTests/Utilities/IISTestSiteFixture.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/Utilities/LogFileTestBase.cs b/src/Servers/IIS/test/Common.FunctionalTests/Utilities/LogFileTestBase.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/Utilities/LogFileTestBase.cs rename to src/Servers/IIS/test/Common.FunctionalTests/Utilities/LogFileTestBase.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/Utilities/RequiresEnvironmentVariableAttribute.cs b/src/Servers/IIS/test/Common.FunctionalTests/Utilities/RequiresEnvironmentVariableAttribute.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/Utilities/RequiresEnvironmentVariableAttribute.cs rename to src/Servers/IIS/test/Common.FunctionalTests/Utilities/RequiresEnvironmentVariableAttribute.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/Utilities/SkipIfDebugAttribute.cs b/src/Servers/IIS/test/Common.FunctionalTests/Utilities/SkipIfDebugAttribute.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/Utilities/SkipIfDebugAttribute.cs rename to src/Servers/IIS/test/Common.FunctionalTests/Utilities/SkipIfDebugAttribute.cs diff --git a/src/IISIntegration/test/Common.FunctionalTests/WindowsAuthTests.cs b/src/Servers/IIS/test/Common.FunctionalTests/WindowsAuthTests.cs similarity index 100% rename from src/IISIntegration/test/Common.FunctionalTests/WindowsAuthTests.cs rename to src/Servers/IIS/test/Common.FunctionalTests/WindowsAuthTests.cs diff --git a/src/Servers/IIS/test/Common.Tests/Common.Tests.csproj b/src/Servers/IIS/test/Common.Tests/Common.Tests.csproj new file mode 100644 index 000000000000..de6364046d3c --- /dev/null +++ b/src/Servers/IIS/test/Common.Tests/Common.Tests.csproj @@ -0,0 +1,20 @@ + + + + netcoreapp3.0 + + + + + + + + + + + + + + + + diff --git a/src/IISIntegration/test/Common.Tests/Utilities/DisposableList.cs b/src/Servers/IIS/test/Common.Tests/Utilities/DisposableList.cs similarity index 100% rename from src/IISIntegration/test/Common.Tests/Utilities/DisposableList.cs rename to src/Servers/IIS/test/Common.Tests/Utilities/DisposableList.cs diff --git a/src/IISIntegration/test/Common.Tests/Utilities/TestConnections.cs b/src/Servers/IIS/test/Common.Tests/Utilities/TestConnections.cs similarity index 100% rename from src/IISIntegration/test/Common.Tests/Utilities/TestConnections.cs rename to src/Servers/IIS/test/Common.Tests/Utilities/TestConnections.cs diff --git a/src/IISIntegration/test/Common.Tests/Utilities/TimeoutExtensions.cs b/src/Servers/IIS/test/Common.Tests/Utilities/TimeoutExtensions.cs similarity index 100% rename from src/IISIntegration/test/Common.Tests/Utilities/TimeoutExtensions.cs rename to src/Servers/IIS/test/Common.Tests/Utilities/TimeoutExtensions.cs diff --git a/src/IISIntegration/test/CommonLibTests/CommonLibTests.vcxproj b/src/Servers/IIS/test/CommonLibTests/CommonLibTests.vcxproj similarity index 91% rename from src/IISIntegration/test/CommonLibTests/CommonLibTests.vcxproj rename to src/Servers/IIS/test/CommonLibTests/CommonLibTests.vcxproj index 2630c2430f53..b566c1c75e9e 100644 --- a/src/IISIntegration/test/CommonLibTests/CommonLibTests.vcxproj +++ b/src/Servers/IIS/test/CommonLibTests/CommonLibTests.vcxproj @@ -1,4 +1,4 @@ - + @@ -92,7 +92,7 @@ EnableFastChecks MultiThreadedDebug Level3 - $(MSBuildThisFileDirectory)include;%(AdditionalIncludeDirectories);..\..\src\AspNetCoreModuleV2\RequestHandlerLib;..\..\src\AspNetCoreModuleV2\IISLib;..\..\src\AspNetCoreModuleV2\CommonLib;..\gtest\googletest\googletest\include;..\gtest\googletest\googlemock\include;...\..\src\AspNetCoreModuleV2\AspNetCore\Inc;..\..\src\AspNetCoreModuleV2\InProcessRequestHandler\ + $(MSBuildThisFileDirectory)include;%(AdditionalIncludeDirectories);..\..\src\AspNetCoreModuleV2\RequestHandlerLib;..\..\src\AspNetCoreModuleV2\IISLib;..\..\src\AspNetCoreModuleV2\CommonLib;$(GoogleTestSubmoduleRoot)googletest\include;$(GoogleTestSubmoduleRoot)googlemock\include;...\..\src\AspNetCoreModuleV2\AspNetCore\Inc;..\..\src\AspNetCoreModuleV2\InProcessRequestHandler\ /D "_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING" stdcpp17 true @@ -119,7 +119,7 @@ EnableFastChecks MultiThreadedDebug Level3 - $(MSBuildThisFileDirectory)include;%(AdditionalIncludeDirectories);..\..\src\AspNetCoreModuleV2\RequestHandlerLib;..\..\src\AspNetCoreModuleV2\IISLib;..\..\src\AspNetCoreModuleV2\CommonLib;..\gtest\googletest\googletest\include;..\gtest\googletest\googlemock\include;...\..\src\AspNetCoreModuleV2\AspNetCore\Inc;..\..\src\AspNetCoreModuleV2\InProcessRequestHandler\ + $(MSBuildThisFileDirectory)include;%(AdditionalIncludeDirectories);..\..\src\AspNetCoreModuleV2\RequestHandlerLib;..\..\src\AspNetCoreModuleV2\IISLib;..\..\src\AspNetCoreModuleV2\CommonLib;$(GoogleTestSubmoduleRoot)googletest\include;$(GoogleTestSubmoduleRoot)googlemock\include;...\..\src\AspNetCoreModuleV2\AspNetCore\Inc;..\..\src\AspNetCoreModuleV2\InProcessRequestHandler\ /D "_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING" stdcpp17 true @@ -145,7 +145,7 @@ MultiThreaded Level3 ProgramDatabase - $(MSBuildThisFileDirectory)include;%(AdditionalIncludeDirectories);..\..\src\AspNetCoreModuleV2\RequestHandlerLib;..\..\src\AspNetCoreModuleV2\IISLib;..\..\src\AspNetCoreModuleV2\CommonLib;..\gtest\googletest\googletest\include;..\gtest\googletest\googlemock\include;...\..\src\AspNetCoreModuleV2\AspNetCore\Inc;..\..\src\AspNetCoreModuleV2\InProcessRequestHandler\ + $(MSBuildThisFileDirectory)include;%(AdditionalIncludeDirectories);..\..\src\AspNetCoreModuleV2\RequestHandlerLib;..\..\src\AspNetCoreModuleV2\IISLib;..\..\src\AspNetCoreModuleV2\CommonLib;$(GoogleTestSubmoduleRoot)googletest\include;$(GoogleTestSubmoduleRoot)googlemock\include;...\..\src\AspNetCoreModuleV2\AspNetCore\Inc;..\..\src\AspNetCoreModuleV2\InProcessRequestHandler\ /D "_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING" stdcpp17 true @@ -174,7 +174,7 @@ MultiThreaded Level3 ProgramDatabase - $(MSBuildThisFileDirectory)include;%(AdditionalIncludeDirectories);..\..\src\AspNetCoreModuleV2\RequestHandlerLib;..\..\src\AspNetCoreModuleV2\IISLib;..\..\src\AspNetCoreModuleV2\CommonLib;..\gtest\googletest\googletest\include;..\gtest\googletest\googlemock\include;...\..\src\AspNetCoreModuleV2\AspNetCore\Inc;..\..\src\AspNetCoreModuleV2\InProcessRequestHandler\ + $(MSBuildThisFileDirectory)include;%(AdditionalIncludeDirectories);..\..\src\AspNetCoreModuleV2\RequestHandlerLib;..\..\src\AspNetCoreModuleV2\IISLib;..\..\src\AspNetCoreModuleV2\CommonLib;$(GoogleTestSubmoduleRoot)googletest\include;$(GoogleTestSubmoduleRoot)googlemock\include;...\..\src\AspNetCoreModuleV2\AspNetCore\Inc;..\..\src\AspNetCoreModuleV2\InProcessRequestHandler\ /D "_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING" stdcpp17 true @@ -195,4 +195,4 @@ - \ No newline at end of file + diff --git a/src/IISIntegration/test/CommonLibTests/ConfigUtilityTests.cpp b/src/Servers/IIS/test/CommonLibTests/ConfigUtilityTests.cpp similarity index 100% rename from src/IISIntegration/test/CommonLibTests/ConfigUtilityTests.cpp rename to src/Servers/IIS/test/CommonLibTests/ConfigUtilityTests.cpp diff --git a/src/IISIntegration/test/CommonLibTests/FileOutputManagerTests.cpp b/src/Servers/IIS/test/CommonLibTests/FileOutputManagerTests.cpp similarity index 100% rename from src/IISIntegration/test/CommonLibTests/FileOutputManagerTests.cpp rename to src/Servers/IIS/test/CommonLibTests/FileOutputManagerTests.cpp diff --git a/src/IISIntegration/test/CommonLibTests/GlobalVersionTests.cpp b/src/Servers/IIS/test/CommonLibTests/GlobalVersionTests.cpp similarity index 100% rename from src/IISIntegration/test/CommonLibTests/GlobalVersionTests.cpp rename to src/Servers/IIS/test/CommonLibTests/GlobalVersionTests.cpp diff --git a/src/IISIntegration/test/CommonLibTests/Helpers.cpp b/src/Servers/IIS/test/CommonLibTests/Helpers.cpp similarity index 100% rename from src/IISIntegration/test/CommonLibTests/Helpers.cpp rename to src/Servers/IIS/test/CommonLibTests/Helpers.cpp diff --git a/src/IISIntegration/test/CommonLibTests/Helpers.h b/src/Servers/IIS/test/CommonLibTests/Helpers.h similarity index 100% rename from src/IISIntegration/test/CommonLibTests/Helpers.h rename to src/Servers/IIS/test/CommonLibTests/Helpers.h diff --git a/src/IISIntegration/test/CommonLibTests/NativeTests.targets b/src/Servers/IIS/test/CommonLibTests/NativeTests.targets similarity index 100% rename from src/IISIntegration/test/CommonLibTests/NativeTests.targets rename to src/Servers/IIS/test/CommonLibTests/NativeTests.targets diff --git a/src/IISIntegration/test/CommonLibTests/PipeOutputManagerTests.cpp b/src/Servers/IIS/test/CommonLibTests/PipeOutputManagerTests.cpp similarity index 100% rename from src/IISIntegration/test/CommonLibTests/PipeOutputManagerTests.cpp rename to src/Servers/IIS/test/CommonLibTests/PipeOutputManagerTests.cpp diff --git a/src/IISIntegration/test/CommonLibTests/exception_handler_tests.cpp b/src/Servers/IIS/test/CommonLibTests/exception_handler_tests.cpp similarity index 100% rename from src/IISIntegration/test/CommonLibTests/exception_handler_tests.cpp rename to src/Servers/IIS/test/CommonLibTests/exception_handler_tests.cpp diff --git a/src/IISIntegration/test/CommonLibTests/fakeclasses.h b/src/Servers/IIS/test/CommonLibTests/fakeclasses.h similarity index 100% rename from src/IISIntegration/test/CommonLibTests/fakeclasses.h rename to src/Servers/IIS/test/CommonLibTests/fakeclasses.h diff --git a/src/IISIntegration/test/CommonLibTests/hostfxr_utility_tests.cpp b/src/Servers/IIS/test/CommonLibTests/hostfxr_utility_tests.cpp similarity index 100% rename from src/IISIntegration/test/CommonLibTests/hostfxr_utility_tests.cpp rename to src/Servers/IIS/test/CommonLibTests/hostfxr_utility_tests.cpp diff --git a/src/IISIntegration/test/CommonLibTests/inprocess_application_tests.cpp b/src/Servers/IIS/test/CommonLibTests/inprocess_application_tests.cpp similarity index 100% rename from src/IISIntegration/test/CommonLibTests/inprocess_application_tests.cpp rename to src/Servers/IIS/test/CommonLibTests/inprocess_application_tests.cpp diff --git a/src/IISIntegration/test/CommonLibTests/main.cpp b/src/Servers/IIS/test/CommonLibTests/main.cpp similarity index 100% rename from src/IISIntegration/test/CommonLibTests/main.cpp rename to src/Servers/IIS/test/CommonLibTests/main.cpp diff --git a/src/IISIntegration/test/CommonLibTests/stdafx.h b/src/Servers/IIS/test/CommonLibTests/stdafx.h similarity index 100% rename from src/IISIntegration/test/CommonLibTests/stdafx.h rename to src/Servers/IIS/test/CommonLibTests/stdafx.h diff --git a/src/IISIntegration/test/CommonLibTests/utility_tests.cpp b/src/Servers/IIS/test/CommonLibTests/utility_tests.cpp similarity index 100% rename from src/IISIntegration/test/CommonLibTests/utility_tests.cpp rename to src/Servers/IIS/test/CommonLibTests/utility_tests.cpp diff --git a/src/IISIntegration/test/IIS.BackwardsCompatibility.FunctionalTests/BackwardsCompatibilityTests.cs b/src/Servers/IIS/test/IIS.BackwardsCompatibility.FunctionalTests/BackwardsCompatibilityTests.cs similarity index 100% rename from src/IISIntegration/test/IIS.BackwardsCompatibility.FunctionalTests/BackwardsCompatibilityTests.cs rename to src/Servers/IIS/test/IIS.BackwardsCompatibility.FunctionalTests/BackwardsCompatibilityTests.cs diff --git a/src/IISIntegration/test/IIS.BackwardsCompatibility.FunctionalTests/DeployerSelector.cs b/src/Servers/IIS/test/IIS.BackwardsCompatibility.FunctionalTests/DeployerSelector.cs similarity index 100% rename from src/IISIntegration/test/IIS.BackwardsCompatibility.FunctionalTests/DeployerSelector.cs rename to src/Servers/IIS/test/IIS.BackwardsCompatibility.FunctionalTests/DeployerSelector.cs diff --git a/src/Servers/IIS/test/IIS.BackwardsCompatibility.FunctionalTests/IIS.BackwardsCompatibility.FunctionalTests.csproj b/src/Servers/IIS/test/IIS.BackwardsCompatibility.FunctionalTests/IIS.BackwardsCompatibility.FunctionalTests.csproj new file mode 100644 index 000000000000..58a8c695f933 --- /dev/null +++ b/src/Servers/IIS/test/IIS.BackwardsCompatibility.FunctionalTests/IIS.BackwardsCompatibility.FunctionalTests.csproj @@ -0,0 +1,38 @@ + + + + netcoreapp3.0 + IISBackwardsCompatibility.FunctionalTests + True + true + + + + + + + + + + + + False + + + + + + + + + + + + + + + + + + + diff --git a/src/IISIntegration/test/IIS.ForwardsCompatibility.FunctionalTests/DeployerSelector.cs b/src/Servers/IIS/test/IIS.ForwardsCompatibility.FunctionalTests/DeployerSelector.cs similarity index 100% rename from src/IISIntegration/test/IIS.ForwardsCompatibility.FunctionalTests/DeployerSelector.cs rename to src/Servers/IIS/test/IIS.ForwardsCompatibility.FunctionalTests/DeployerSelector.cs diff --git a/src/IISIntegration/test/IIS.ForwardsCompatibility.FunctionalTests/ForwardsCompatibilityTests.cs b/src/Servers/IIS/test/IIS.ForwardsCompatibility.FunctionalTests/ForwardsCompatibilityTests.cs similarity index 100% rename from src/IISIntegration/test/IIS.ForwardsCompatibility.FunctionalTests/ForwardsCompatibilityTests.cs rename to src/Servers/IIS/test/IIS.ForwardsCompatibility.FunctionalTests/ForwardsCompatibilityTests.cs diff --git a/src/Servers/IIS/test/IIS.ForwardsCompatibility.FunctionalTests/IIS.ForwardsCompatibility.FunctionalTests.csproj b/src/Servers/IIS/test/IIS.ForwardsCompatibility.FunctionalTests/IIS.ForwardsCompatibility.FunctionalTests.csproj new file mode 100644 index 000000000000..9da5c35404f2 --- /dev/null +++ b/src/Servers/IIS/test/IIS.ForwardsCompatibility.FunctionalTests/IIS.ForwardsCompatibility.FunctionalTests.csproj @@ -0,0 +1,37 @@ + + + + netcoreapp3.0 + IISForwardsCompatibility.FunctionalTests + True + true + + + + + + + + + + False + + + + + + + + + + + + + + + + + + + + diff --git a/src/IISIntegration/test/IIS.FunctionalTests/DeployerSelector.cs b/src/Servers/IIS/test/IIS.FunctionalTests/DeployerSelector.cs similarity index 100% rename from src/IISIntegration/test/IIS.FunctionalTests/DeployerSelector.cs rename to src/Servers/IIS/test/IIS.FunctionalTests/DeployerSelector.cs diff --git a/src/Servers/IIS/test/IIS.FunctionalTests/IIS.FunctionalTests.csproj b/src/Servers/IIS/test/IIS.FunctionalTests/IIS.FunctionalTests.csproj new file mode 100644 index 000000000000..9f311d326487 --- /dev/null +++ b/src/Servers/IIS/test/IIS.FunctionalTests/IIS.FunctionalTests.csproj @@ -0,0 +1,38 @@ + + + + netcoreapp3.0 + IIS.FunctionalTests + True + true + + + + + + + + + + False + + + + + + + + + + + + + + + + + + + + + diff --git a/src/IISIntegration/test/IIS.Shared.FunctionalTests/Inprocess/StdOutRedirectionTests.cs b/src/Servers/IIS/test/IIS.Shared.FunctionalTests/Inprocess/StdOutRedirectionTests.cs similarity index 100% rename from src/IISIntegration/test/IIS.Shared.FunctionalTests/Inprocess/StdOutRedirectionTests.cs rename to src/Servers/IIS/test/IIS.Shared.FunctionalTests/Inprocess/StdOutRedirectionTests.cs diff --git a/src/IISIntegration/test/IIS.Shared.FunctionalTests/MofFileTests.cs b/src/Servers/IIS/test/IIS.Shared.FunctionalTests/MofFileTests.cs similarity index 100% rename from src/IISIntegration/test/IIS.Shared.FunctionalTests/MofFileTests.cs rename to src/Servers/IIS/test/IIS.Shared.FunctionalTests/MofFileTests.cs diff --git a/src/IISIntegration/test/IIS.Shared.FunctionalTests/Properties/AssemblyInfo.cs b/src/Servers/IIS/test/IIS.Shared.FunctionalTests/Properties/AssemblyInfo.cs similarity index 100% rename from src/IISIntegration/test/IIS.Shared.FunctionalTests/Properties/AssemblyInfo.cs rename to src/Servers/IIS/test/IIS.Shared.FunctionalTests/Properties/AssemblyInfo.cs diff --git a/src/IISIntegration/test/IIS.Shared.FunctionalTests/RequiresIISAttribute.cs b/src/Servers/IIS/test/IIS.Shared.FunctionalTests/RequiresIISAttribute.cs similarity index 100% rename from src/IISIntegration/test/IIS.Shared.FunctionalTests/RequiresIISAttribute.cs rename to src/Servers/IIS/test/IIS.Shared.FunctionalTests/RequiresIISAttribute.cs diff --git a/src/IISIntegration/test/IIS.Shared.FunctionalTests/ServicesTests.cs b/src/Servers/IIS/test/IIS.Shared.FunctionalTests/ServicesTests.cs similarity index 100% rename from src/IISIntegration/test/IIS.Shared.FunctionalTests/ServicesTests.cs rename to src/Servers/IIS/test/IIS.Shared.FunctionalTests/ServicesTests.cs diff --git a/src/IISIntegration/test/IIS.Tests/AppHostConfig/HostableWebCore.config b/src/Servers/IIS/test/IIS.Tests/AppHostConfig/HostableWebCore.config similarity index 100% rename from src/IISIntegration/test/IIS.Tests/AppHostConfig/HostableWebCore.config rename to src/Servers/IIS/test/IIS.Tests/AppHostConfig/HostableWebCore.config diff --git a/src/IISIntegration/test/IIS.Tests/ClientDisconnectTests.cs b/src/Servers/IIS/test/IIS.Tests/ClientDisconnectTests.cs similarity index 100% rename from src/IISIntegration/test/IIS.Tests/ClientDisconnectTests.cs rename to src/Servers/IIS/test/IIS.Tests/ClientDisconnectTests.cs diff --git a/src/IISIntegration/test/IIS.Tests/ConnectionIdFeatureTests.cs b/src/Servers/IIS/test/IIS.Tests/ConnectionIdFeatureTests.cs similarity index 100% rename from src/IISIntegration/test/IIS.Tests/ConnectionIdFeatureTests.cs rename to src/Servers/IIS/test/IIS.Tests/ConnectionIdFeatureTests.cs diff --git a/src/IISIntegration/test/IIS.Tests/HttpBodyControlFeatureTests.cs b/src/Servers/IIS/test/IIS.Tests/HttpBodyControlFeatureTests.cs similarity index 100% rename from src/IISIntegration/test/IIS.Tests/HttpBodyControlFeatureTests.cs rename to src/Servers/IIS/test/IIS.Tests/HttpBodyControlFeatureTests.cs diff --git a/src/Servers/IIS/test/IIS.Tests/IIS.Tests.csproj b/src/Servers/IIS/test/IIS.Tests/IIS.Tests.csproj new file mode 100644 index 000000000000..ccdc7cced421 --- /dev/null +++ b/src/Servers/IIS/test/IIS.Tests/IIS.Tests.csproj @@ -0,0 +1,28 @@ + + + + netcoreapp3.0 + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/IISIntegration/test/IIS.Tests/ResponseAbortTests.cs b/src/Servers/IIS/test/IIS.Tests/ResponseAbortTests.cs similarity index 100% rename from src/IISIntegration/test/IIS.Tests/ResponseAbortTests.cs rename to src/Servers/IIS/test/IIS.Tests/ResponseAbortTests.cs diff --git a/src/IISIntegration/test/IIS.Tests/StrictTestServerTests.cs b/src/Servers/IIS/test/IIS.Tests/StrictTestServerTests.cs similarity index 100% rename from src/IISIntegration/test/IIS.Tests/StrictTestServerTests.cs rename to src/Servers/IIS/test/IIS.Tests/StrictTestServerTests.cs diff --git a/src/IISIntegration/test/IIS.Tests/TestServerTest.cs b/src/Servers/IIS/test/IIS.Tests/TestServerTest.cs similarity index 100% rename from src/IISIntegration/test/IIS.Tests/TestServerTest.cs rename to src/Servers/IIS/test/IIS.Tests/TestServerTest.cs diff --git a/src/IISIntegration/test/IIS.Tests/Utilities/SkipIfHostableWebCoreNotAvailibleAttribute.cs b/src/Servers/IIS/test/IIS.Tests/Utilities/SkipIfHostableWebCoreNotAvailibleAttribute.cs similarity index 100% rename from src/IISIntegration/test/IIS.Tests/Utilities/SkipIfHostableWebCoreNotAvailibleAttribute.cs rename to src/Servers/IIS/test/IIS.Tests/Utilities/SkipIfHostableWebCoreNotAvailibleAttribute.cs diff --git a/src/IISIntegration/test/IIS.Tests/Utilities/TestServer.cs b/src/Servers/IIS/test/IIS.Tests/Utilities/TestServer.cs similarity index 100% rename from src/IISIntegration/test/IIS.Tests/Utilities/TestServer.cs rename to src/Servers/IIS/test/IIS.Tests/Utilities/TestServer.cs diff --git a/src/IISIntegration/test/IISExpress.FunctionalTests/DeployerSelector.cs b/src/Servers/IIS/test/IISExpress.FunctionalTests/DeployerSelector.cs similarity index 100% rename from src/IISIntegration/test/IISExpress.FunctionalTests/DeployerSelector.cs rename to src/Servers/IIS/test/IISExpress.FunctionalTests/DeployerSelector.cs diff --git a/src/IISIntegration/test/IISExpress.FunctionalTests/HttpsTests.cs b/src/Servers/IIS/test/IISExpress.FunctionalTests/HttpsTests.cs similarity index 100% rename from src/IISIntegration/test/IISExpress.FunctionalTests/HttpsTests.cs rename to src/Servers/IIS/test/IISExpress.FunctionalTests/HttpsTests.cs diff --git a/src/Servers/IIS/test/IISExpress.FunctionalTests/IISExpress.FunctionalTests.csproj b/src/Servers/IIS/test/IISExpress.FunctionalTests/IISExpress.FunctionalTests.csproj new file mode 100644 index 000000000000..814c151b4f11 --- /dev/null +++ b/src/Servers/IIS/test/IISExpress.FunctionalTests/IISExpress.FunctionalTests.csproj @@ -0,0 +1,37 @@ + + + + netcoreapp3.0 + True + true + + + + + + + + + + + False + + + + + + + + + + + + + + + + + + + + diff --git a/src/IISIntegration/test/IISExpress.FunctionalTests/InProcess/AuthenticationTests.cs b/src/Servers/IIS/test/IISExpress.FunctionalTests/InProcess/AuthenticationTests.cs similarity index 100% rename from src/IISIntegration/test/IISExpress.FunctionalTests/InProcess/AuthenticationTests.cs rename to src/Servers/IIS/test/IISExpress.FunctionalTests/InProcess/AuthenticationTests.cs diff --git a/src/IISIntegration/test/IISExpress.FunctionalTests/InProcess/ShutdownTests.cs b/src/Servers/IIS/test/IISExpress.FunctionalTests/InProcess/ShutdownTests.cs similarity index 100% rename from src/IISIntegration/test/IISExpress.FunctionalTests/InProcess/ShutdownTests.cs rename to src/Servers/IIS/test/IISExpress.FunctionalTests/InProcess/ShutdownTests.cs diff --git a/src/IISIntegration/test/IISExpress.FunctionalTests/InProcess/WebSocketTests.cs b/src/Servers/IIS/test/IISExpress.FunctionalTests/InProcess/WebSocketTests.cs similarity index 100% rename from src/IISIntegration/test/IISExpress.FunctionalTests/InProcess/WebSocketTests.cs rename to src/Servers/IIS/test/IISExpress.FunctionalTests/InProcess/WebSocketTests.cs diff --git a/src/IISIntegration/test/IISExpress.FunctionalTests/OutOfProcess/MultipleAppTests.cs b/src/Servers/IIS/test/IISExpress.FunctionalTests/OutOfProcess/MultipleAppTests.cs similarity index 100% rename from src/IISIntegration/test/IISExpress.FunctionalTests/OutOfProcess/MultipleAppTests.cs rename to src/Servers/IIS/test/IISExpress.FunctionalTests/OutOfProcess/MultipleAppTests.cs diff --git a/src/IISIntegration/test/IISExpress.FunctionalTests/OutOfProcess/NtlmAuthentationTest.cs b/src/Servers/IIS/test/IISExpress.FunctionalTests/OutOfProcess/NtlmAuthentationTest.cs similarity index 100% rename from src/IISIntegration/test/IISExpress.FunctionalTests/OutOfProcess/NtlmAuthentationTest.cs rename to src/Servers/IIS/test/IISExpress.FunctionalTests/OutOfProcess/NtlmAuthentationTest.cs diff --git a/src/IISIntegration/test/IISExpress.FunctionalTests/Properties/AssemblyInfo.cs b/src/Servers/IIS/test/IISExpress.FunctionalTests/Properties/AssemblyInfo.cs similarity index 100% rename from src/IISIntegration/test/IISExpress.FunctionalTests/Properties/AssemblyInfo.cs rename to src/Servers/IIS/test/IISExpress.FunctionalTests/Properties/AssemblyInfo.cs diff --git a/src/IISIntegration/test/IISExpress.FunctionalTests/RequiresIISAttribute.cs b/src/Servers/IIS/test/IISExpress.FunctionalTests/RequiresIISAttribute.cs similarity index 100% rename from src/IISIntegration/test/IISExpress.FunctionalTests/RequiresIISAttribute.cs rename to src/Servers/IIS/test/IISExpress.FunctionalTests/RequiresIISAttribute.cs diff --git a/src/IISIntegration/test/IISExpress.FunctionalTests/UpgradeFeatureDetectionTests.cs b/src/Servers/IIS/test/IISExpress.FunctionalTests/UpgradeFeatureDetectionTests.cs similarity index 100% rename from src/IISIntegration/test/IISExpress.FunctionalTests/UpgradeFeatureDetectionTests.cs rename to src/Servers/IIS/test/IISExpress.FunctionalTests/UpgradeFeatureDetectionTests.cs diff --git a/src/IISIntegration/test/Microsoft.AspNetCore.Server.IISIntegration.Tests/IISExtensionTests.cs b/src/Servers/IIS/test/Microsoft.AspNetCore.Server.IISIntegration.Tests/IISExtensionTests.cs similarity index 100% rename from src/IISIntegration/test/Microsoft.AspNetCore.Server.IISIntegration.Tests/IISExtensionTests.cs rename to src/Servers/IIS/test/Microsoft.AspNetCore.Server.IISIntegration.Tests/IISExtensionTests.cs diff --git a/src/IISIntegration/test/Microsoft.AspNetCore.Server.IISIntegration.Tests/IISMiddlewareTests.cs b/src/Servers/IIS/test/Microsoft.AspNetCore.Server.IISIntegration.Tests/IISMiddlewareTests.cs similarity index 100% rename from src/IISIntegration/test/Microsoft.AspNetCore.Server.IISIntegration.Tests/IISMiddlewareTests.cs rename to src/Servers/IIS/test/Microsoft.AspNetCore.Server.IISIntegration.Tests/IISMiddlewareTests.cs diff --git a/src/Servers/IIS/test/Microsoft.AspNetCore.Server.IISIntegration.Tests/Microsoft.AspNetCore.Server.IISIntegration.Tests.csproj b/src/Servers/IIS/test/Microsoft.AspNetCore.Server.IISIntegration.Tests/Microsoft.AspNetCore.Server.IISIntegration.Tests.csproj new file mode 100644 index 000000000000..3c59a751d274 --- /dev/null +++ b/src/Servers/IIS/test/Microsoft.AspNetCore.Server.IISIntegration.Tests/Microsoft.AspNetCore.Server.IISIntegration.Tests.csproj @@ -0,0 +1,13 @@ + + + + netcoreapp3.0 + + + + + + + + + diff --git a/src/IISIntegration/test/gtest/gtest.vcxproj b/src/Servers/IIS/test/gtest/gtest.vcxproj similarity index 87% rename from src/IISIntegration/test/gtest/gtest.vcxproj rename to src/Servers/IIS/test/gtest/gtest.vcxproj index ba20b750a090..62bc98876103 100644 --- a/src/IISIntegration/test/gtest/gtest.vcxproj +++ b/src/Servers/IIS/test/gtest/gtest.vcxproj @@ -1,4 +1,4 @@ - + @@ -19,8 +19,8 @@ - - + + 15.0 @@ -110,7 +110,7 @@ true WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) true - googletest\googletest\include;googletest\googletest;googletest\googlemock;googletest\googlemock\include;%(AdditionalIncludeDirectories) + $(GoogleTestSubmoduleRoot)googletest\include;$(GoogleTestSubmoduleRoot)googletest;$(GoogleTestSubmoduleRoot)googlemock;$(GoogleTestSubmoduleRoot)googlemock\include;%(AdditionalIncludeDirectories) MultiThreadedDebug true @@ -127,7 +127,7 @@ true _DEBUG;_LIB;%(PreprocessorDefinitions) true - googletest\googletest\include;googletest\googletest;googletest\googlemock;googletest\googlemock\include;%(AdditionalIncludeDirectories) + $(GoogleTestSubmoduleRoot)googletest\include;$(GoogleTestSubmoduleRoot)googletest;$(GoogleTestSubmoduleRoot)googlemock;$(GoogleTestSubmoduleRoot)googlemock\include;%(AdditionalIncludeDirectories) MultiThreadedDebug true @@ -146,7 +146,7 @@ true WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) true - googletest\googletest\include;googletest\googletest;googletest\googlemock;googletest\googlemock\include;%(AdditionalIncludeDirectories) + $(GoogleTestSubmoduleRoot)googletest\include;$(GoogleTestSubmoduleRoot)googletest;$(GoogleTestSubmoduleRoot)googlemock;$(GoogleTestSubmoduleRoot)googlemock\include;%(AdditionalIncludeDirectories) MultiThreaded true @@ -167,7 +167,7 @@ true NDEBUG;_LIB;%(PreprocessorDefinitions) true - googletest\googletest\include;googletest\googletest;googletest\googlemock;googletest\googlemock\include;%(AdditionalIncludeDirectories) + $(GoogleTestSubmoduleRoot)googletest\include;$(GoogleTestSubmoduleRoot)googletest;$(GoogleTestSubmoduleRoot)googlemock;$(GoogleTestSubmoduleRoot)googlemock\include;%(AdditionalIncludeDirectories) MultiThreaded true @@ -181,4 +181,4 @@ - \ No newline at end of file + diff --git a/src/Servers/IIS/test/testassets/InProcessForwardsCompatWebSite/InProcessWebSite.csproj b/src/Servers/IIS/test/testassets/InProcessForwardsCompatWebSite/InProcessWebSite.csproj new file mode 100644 index 000000000000..86844203a3b6 --- /dev/null +++ b/src/Servers/IIS/test/testassets/InProcessForwardsCompatWebSite/InProcessWebSite.csproj @@ -0,0 +1,31 @@ + + + + + + netcoreapp3.0 + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/IISIntegration/test/WebSites/InProcessWebSite/DummyServer.cs b/src/Servers/IIS/test/testassets/InProcessWebSite/DummyServer.cs similarity index 100% rename from src/IISIntegration/test/WebSites/InProcessWebSite/DummyServer.cs rename to src/Servers/IIS/test/testassets/InProcessWebSite/DummyServer.cs diff --git a/src/Servers/IIS/test/testassets/InProcessWebSite/InProcessWebSite.csproj b/src/Servers/IIS/test/testassets/InProcessWebSite/InProcessWebSite.csproj new file mode 100644 index 000000000000..25cf9b4ea0bc --- /dev/null +++ b/src/Servers/IIS/test/testassets/InProcessWebSite/InProcessWebSite.csproj @@ -0,0 +1,27 @@ + + + + + + netcoreapp3.0 + true + + + + + + + + + + + + + + + + + + + + diff --git a/src/IISIntegration/test/WebSites/InProcessWebSite/Program.cs b/src/Servers/IIS/test/testassets/InProcessWebSite/Program.cs similarity index 100% rename from src/IISIntegration/test/WebSites/InProcessWebSite/Program.cs rename to src/Servers/IIS/test/testassets/InProcessWebSite/Program.cs diff --git a/src/IISIntegration/test/WebSites/InProcessWebSite/Startup.WebSockets.cs b/src/Servers/IIS/test/testassets/InProcessWebSite/Startup.WebSockets.cs similarity index 100% rename from src/IISIntegration/test/WebSites/InProcessWebSite/Startup.WebSockets.cs rename to src/Servers/IIS/test/testassets/InProcessWebSite/Startup.WebSockets.cs diff --git a/src/IISIntegration/test/WebSites/InProcessWebSite/Startup.cs b/src/Servers/IIS/test/testassets/InProcessWebSite/Startup.cs similarity index 100% rename from src/IISIntegration/test/WebSites/InProcessWebSite/Startup.cs rename to src/Servers/IIS/test/testassets/InProcessWebSite/Startup.cs diff --git a/src/IISIntegration/test/WebSites/InProcessWebSite/web.config b/src/Servers/IIS/test/testassets/InProcessWebSite/web.config similarity index 100% rename from src/IISIntegration/test/WebSites/InProcessWebSite/web.config rename to src/Servers/IIS/test/testassets/InProcessWebSite/web.config diff --git a/src/Servers/IIS/test/testassets/InProcessWebSite/wwwroot/static.txt b/src/Servers/IIS/test/testassets/InProcessWebSite/wwwroot/static.txt new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/src/Servers/IIS/test/testassets/OutOfProcessWebSite/OutOfProcessWebSite.csproj b/src/Servers/IIS/test/testassets/OutOfProcessWebSite/OutOfProcessWebSite.csproj new file mode 100644 index 000000000000..b6105d1a17dc --- /dev/null +++ b/src/Servers/IIS/test/testassets/OutOfProcessWebSite/OutOfProcessWebSite.csproj @@ -0,0 +1,29 @@ + + + + + + netcoreapp3.0 + OutOfProcess + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/IISIntegration/test/WebSites/OutOfProcessWebSite/Program.cs b/src/Servers/IIS/test/testassets/OutOfProcessWebSite/Program.cs similarity index 100% rename from src/IISIntegration/test/WebSites/OutOfProcessWebSite/Program.cs rename to src/Servers/IIS/test/testassets/OutOfProcessWebSite/Program.cs diff --git a/src/IISIntegration/test/WebSites/OutOfProcessWebSite/Startup.cs b/src/Servers/IIS/test/testassets/OutOfProcessWebSite/Startup.cs similarity index 100% rename from src/IISIntegration/test/WebSites/OutOfProcessWebSite/Startup.cs rename to src/Servers/IIS/test/testassets/OutOfProcessWebSite/Startup.cs diff --git a/src/Servers/IIS/test/testassets/OutOfProcessWebSite/wwwroot/static.txt b/src/Servers/IIS/test/testassets/OutOfProcessWebSite/wwwroot/static.txt new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/src/IISIntegration/test/WebSites/StressTestWebSite/Program.cs b/src/Servers/IIS/test/testassets/StressTestWebSite/Program.cs similarity index 100% rename from src/IISIntegration/test/WebSites/StressTestWebSite/Program.cs rename to src/Servers/IIS/test/testassets/StressTestWebSite/Program.cs diff --git a/src/IISIntegration/test/WebSites/StressTestWebSite/Startup.cs b/src/Servers/IIS/test/testassets/StressTestWebSite/Startup.cs similarity index 100% rename from src/IISIntegration/test/WebSites/StressTestWebSite/Startup.cs rename to src/Servers/IIS/test/testassets/StressTestWebSite/Startup.cs diff --git a/src/Servers/IIS/test/testassets/StressTestWebSite/StressTestWebSite.csproj b/src/Servers/IIS/test/testassets/StressTestWebSite/StressTestWebSite.csproj new file mode 100644 index 000000000000..fa651e7b82fd --- /dev/null +++ b/src/Servers/IIS/test/testassets/StressTestWebSite/StressTestWebSite.csproj @@ -0,0 +1,25 @@ + + + + + + netcoreapp3.0 + true + + + + + + + + + + + + + + + + + + diff --git a/src/IISIntegration/test/TestTasks/InjectRequestHandler.cs b/src/Servers/IIS/test/testassets/TestTasks/InjectRequestHandler.cs similarity index 100% rename from src/IISIntegration/test/TestTasks/InjectRequestHandler.cs rename to src/Servers/IIS/test/testassets/TestTasks/InjectRequestHandler.cs diff --git a/src/IISIntegration/test/TestTasks/TestTasks.csproj b/src/Servers/IIS/test/testassets/TestTasks/TestTasks.csproj similarity index 71% rename from src/IISIntegration/test/TestTasks/TestTasks.csproj rename to src/Servers/IIS/test/testassets/TestTasks/TestTasks.csproj index 24f48ce246d2..2992cd5832a1 100644 --- a/src/IISIntegration/test/TestTasks/TestTasks.csproj +++ b/src/Servers/IIS/test/testassets/TestTasks/TestTasks.csproj @@ -7,7 +7,7 @@ - + diff --git a/src/IISIntegration/test/WebSites/shared/SharedStartup/Startup.shared.cs b/src/Servers/IIS/test/testassets/shared/SharedStartup/Startup.shared.cs similarity index 100% rename from src/IISIntegration/test/WebSites/shared/SharedStartup/Startup.shared.cs rename to src/Servers/IIS/test/testassets/shared/SharedStartup/Startup.shared.cs diff --git a/src/IISIntegration/test/WebSites/shared/WebSockets/Constants.cs b/src/Servers/IIS/test/testassets/shared/WebSockets/Constants.cs similarity index 100% rename from src/IISIntegration/test/WebSites/shared/WebSockets/Constants.cs rename to src/Servers/IIS/test/testassets/shared/WebSockets/Constants.cs diff --git a/src/IISIntegration/test/WebSites/shared/WebSockets/HandshakeHelpers.cs b/src/Servers/IIS/test/testassets/shared/WebSockets/HandshakeHelpers.cs similarity index 100% rename from src/IISIntegration/test/WebSites/shared/WebSockets/HandshakeHelpers.cs rename to src/Servers/IIS/test/testassets/shared/WebSockets/HandshakeHelpers.cs diff --git a/src/IISIntegration/test/WebSites/shared/WebSockets/TestStartup.cs b/src/Servers/IIS/test/testassets/shared/WebSockets/TestStartup.cs similarity index 100% rename from src/IISIntegration/test/WebSites/shared/WebSockets/TestStartup.cs rename to src/Servers/IIS/test/testassets/shared/WebSockets/TestStartup.cs diff --git a/src/IISIntegration/tools/GenerateNativeAssets.ps1 b/src/Servers/IIS/tools/GenerateNativeAssets.ps1 similarity index 100% rename from src/IISIntegration/tools/GenerateNativeAssets.ps1 rename to src/Servers/IIS/tools/GenerateNativeAssets.ps1 diff --git a/src/IISIntegration/tools/SetupTestEnvironment.ps1 b/src/Servers/IIS/tools/SetupTestEnvironment.ps1 similarity index 100% rename from src/IISIntegration/tools/SetupTestEnvironment.ps1 rename to src/Servers/IIS/tools/SetupTestEnvironment.ps1 diff --git a/src/IISIntegration/tools/UpdateIISExpressCertificate.ps1 b/src/Servers/IIS/tools/UpdateIISExpressCertificate.ps1 similarity index 100% rename from src/IISIntegration/tools/UpdateIISExpressCertificate.ps1 rename to src/Servers/IIS/tools/UpdateIISExpressCertificate.ps1 diff --git a/src/IISIntegration/tools/certificate.ps1 b/src/Servers/IIS/tools/certificate.ps1 similarity index 100% rename from src/IISIntegration/tools/certificate.ps1 rename to src/Servers/IIS/tools/certificate.ps1 diff --git a/src/IISIntegration/tools/httpsys.ps1 b/src/Servers/IIS/tools/httpsys.ps1 similarity index 100% rename from src/IISIntegration/tools/httpsys.ps1 rename to src/Servers/IIS/tools/httpsys.ps1 diff --git a/src/IISIntegration/tools/installancm.ps1 b/src/Servers/IIS/tools/installancm.ps1 similarity index 100% rename from src/IISIntegration/tools/installancm.ps1 rename to src/Servers/IIS/tools/installancm.ps1 diff --git a/src/Servers/IIS/tools/stresstest.ps1 b/src/Servers/IIS/tools/stresstest.ps1 new file mode 100644 index 000000000000..981c6fcf44dc --- /dev/null +++ b/src/Servers/IIS/tools/stresstest.ps1 @@ -0,0 +1,96 @@ +########################################################## +# NOTE: +# For running test automation, following prerequisite required: +# +# 1. On Win7, powershell should be upgraded to 4.0 +# https://social.technet.microsoft.com/wiki/contents/articles/21016.how-to-install-windows-powershell-4-0.aspx +# 2. url-rewrite should be installed +# 3. makecert.exe tools should be available +########################################################## + +# Replace aspnetcore.dll with the latest version +copy C:\gitroot\AspNetCoreModule\artifacts\build\AspNetCore\bin\Release\x64\aspnetcore.dll "C:\Program Files\IIS Express" +copy C:\gitroot\AspNetCoreModule\artifacts\build\AspNetCore\bin\Release\x64\aspnetcore.pdb "C:\Program Files\IIS Express" + + +# Enable appverif for IISExpress.exe +appverif /verify iisexpress.exe + +# Set the AspNetCoreModuleTest environment variable with the following command +cd C:\gitroot\AspNetCoreModule\test\AspNetCoreModule.Test +dotnet restore +dotnet build +$aspNetCoreModuleTest="C:\gitroot\AspNetCoreModule\test\AspNetCoreModule.Test\bin\Debug\net46" + +if (Test-Path (Join-Path $aspNetCoreModuleTest aspnetcoremodule.test.dll)) +{ + # Clean up applicationhost.config of IISExpress + del $env:userprofile\documents\iisexpress\config\applicationhost.config -Confirm:$false -Force + Start-Process "C:\Program Files\IIS Express\iisexpress.exe" + Sleep 3 + Stop-Process -Name iisexpress + + # Create sites + (1..50) | foreach { md ("C:\inetpub\wwwroot\AspnetCoreHandler_HelloWeb\foo" + $_ ) 2> out-null } + (1..50) | foreach { copy C:\gitroot\AspNetCoreModule\test\StressTestWebRoot\web.config ("C:\inetpub\wwwroot\AspnetCoreHandler_HelloWeb\foo" + $_ ) } + (1..50) | foreach { + $path = ("C:\inetpub\wwwroot\AspnetCoreHandler_HelloWeb\foo" + $_ ) + $appPath = "/foo"+$_ + & "C:\Program Files\IIS Express\appcmd.exe" add app /site.name:"WebSite1" /path:$appPath /physicalPath:$path + } + + <#(1..50) | foreach { + $configpath = ("WebSite1/foo" + $_) + $value = "C:\inetpub\wwwroot\AspnetCoreHandler_HelloWeb\foo" + $_ + ".exe" + & "C:\Program Files\IIS Express\appcmd.exe" set config $configpath -section:system.webServer/aspNetCore /processPath:$value + } + (1..50) | foreach { copy C:\inetpub\wwwroot\AspnetCoreHandler_HelloWeb\foo.exe ("C:\inetpub\wwwroot\AspnetCoreHandler_HelloWeb\foo" + $_ +".exe") } + (1..50) | foreach { + $configpath = ("WebSite1/foo" + $_) + $value = "%AspNetCoreModuleTest%\AspnetCoreApp_HelloWeb\foo" + $_ + ".exe" + & "C:\Program Files\IIS Express\appcmd.exe" set config $configpath -section:system.webServer/aspNetCore /processPath:$value /apphostconfig:%AspNetCoreModuleTest%\config\applicationhost.config + + $value = "%AspNetCoreModuleTest%\AspnetCoreApp_HelloWeb\AutobahnTestServer.dll" + & "C:\Program Files\IIS Express\appcmd.exe" set config $configpath -section:system.webServer/aspNetCore /arguments:$value /apphostconfig:%AspNetCoreModuleTest%\config\applicationhost.config + } + #> + + # Start IISExpress with running the below command + &"C:\Program Files\Debugging Tools for Windows (x64)\windbg.exe" /g /G "C:\Program Files\IIS Express\iisexpress.exe" + + + # 6. Start stress testing + (1..10000) | foreach { + if ($_ % 2 -eq 0) + { + ("Recycling backend only") + stop-process -name dotnet + (1..50) | foreach { del ("C:\inetpub\wwwroot\AspnetCoreHandler_HelloWeb\foo" + $_ + "\app_offline.htm") -confirm:$false -Force 2> out-null } + stop-process -name dotnet + } + else + { + ("Recycling backedn + enabling appoffline ....") + stop-process -name dotnet + (1..50) | foreach { copy C:\gitroot\AspNetCoreModule\test\StressTestWebRoot\app_offline.htm ("C:\inetpub\wwwroot\AspnetCoreHandler_HelloWeb\foo" + $_ ) } + } + Sleep 1 + + (1..10) | foreach { + (1..50) | foreach { + invoke-webrequest ("http://localhost:8080/foo"+$_) > $null + } + } + } + + + # Stress test idea + # 1. Use Web Stress Tester + # 2. Run stop-process -name dotnet + # 3. Hit Q command to IISExpress console window + # 4. Use app_offline.htm + # 5. Save dummy web.config +} + +// bp aspnetcore!FORWARDING_HANDLER::FORWARDING_HANDLER +// bp aspnetcore!FORWARDING_HANDLER::~FORWARDING_HANDLER \ No newline at end of file diff --git a/src/IISIntegration/tools/update_schema.ps1 b/src/Servers/IIS/tools/update_schema.ps1 similarity index 100% rename from src/IISIntegration/tools/update_schema.ps1 rename to src/Servers/IIS/tools/update_schema.ps1 diff --git a/src/Servers/Kestrel/Core/src/Microsoft.AspNetCore.Server.Kestrel.Core.csproj b/src/Servers/Kestrel/Core/src/Microsoft.AspNetCore.Server.Kestrel.Core.csproj index 04fd9fff4f73..17bd70a6757e 100644 --- a/src/Servers/Kestrel/Core/src/Microsoft.AspNetCore.Server.Kestrel.Core.csproj +++ b/src/Servers/Kestrel/Core/src/Microsoft.AspNetCore.Server.Kestrel.Core.csproj @@ -10,7 +10,10 @@ - + + + + diff --git a/src/Servers/Kestrel/perf/PlatformBenchmarks/PlatformBenchmarks.csproj b/src/Servers/Kestrel/perf/PlatformBenchmarks/PlatformBenchmarks.csproj index a1895bec473d..c121dd51c6c0 100644 --- a/src/Servers/Kestrel/perf/PlatformBenchmarks/PlatformBenchmarks.csproj +++ b/src/Servers/Kestrel/perf/PlatformBenchmarks/PlatformBenchmarks.csproj @@ -7,6 +7,7 @@ latest true true + true @@ -24,7 +25,7 @@ - false true false + true diff --git a/src/Shared/CertificateGeneration/CertificateManager.cs b/src/Shared/CertificateGeneration/CertificateManager.cs new file mode 100644 index 000000000000..26639572e4e1 --- /dev/null +++ b/src/Shared/CertificateGeneration/CertificateManager.cs @@ -0,0 +1,951 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices; +using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Text.RegularExpressions; + +namespace Microsoft.AspNetCore.Certificates.Generation +{ + internal class CertificateManager + { + public const string AspNetHttpsOid = "1.3.6.1.4.1.311.84.1.1"; + public const string AspNetHttpsOidFriendlyName = "ASP.NET Core HTTPS development certificate"; + + private const string ServerAuthenticationEnhancedKeyUsageOid = "1.3.6.1.5.5.7.3.1"; + private const string ServerAuthenticationEnhancedKeyUsageOidFriendlyName = "Server Authentication"; + + private const string LocalhostHttpsDnsName = "localhost"; + private const string LocalhostHttpsDistinguishedName = "CN=" + LocalhostHttpsDnsName; + + public const int RSAMinimumKeySizeInBits = 2048; + + private static readonly TimeSpan MaxRegexTimeout = TimeSpan.FromMinutes(1); + private const string CertificateSubjectRegex = "CN=(.*[^,]+).*"; + private const string MacOSSystemKeyChain = "/Library/Keychains/System.keychain"; + private static readonly string MacOSUserKeyChain = Environment.GetEnvironmentVariable("HOME") + "/Library/Keychains/login.keychain-db"; + private const string MacOSFindCertificateCommandLine = "security"; +#if NETCOREAPP2_0 || NETCOREAPP2_1 || NETCOREAPP2_2 || NETCOREAPP3_0 + private static readonly string MacOSFindCertificateCommandLineArgumentsFormat = "find-certificate -c {0} -a -Z -p " + MacOSSystemKeyChain; +#endif + private const string MacOSFindCertificateOutputRegex = "SHA-1 hash: ([0-9A-Z]+)"; + private const string MacOSRemoveCertificateTrustCommandLine = "sudo"; + private const string MacOSRemoveCertificateTrustCommandLineArgumentsFormat = "security remove-trusted-cert -d {0}"; + private const string MacOSDeleteCertificateCommandLine = "sudo"; + private const string MacOSDeleteCertificateCommandLineArgumentsFormat = "security delete-certificate -Z {0} {1}"; + private const string MacOSTrustCertificateCommandLine = "sudo"; +#if NETCOREAPP2_0 || NETCOREAPP2_1 || NETCOREAPP2_2 || NETCOREAPP3_0 + private static readonly string MacOSTrustCertificateCommandLineArguments = "security add-trusted-cert -d -r trustRoot -k " + MacOSSystemKeyChain + " "; +#endif + private const int UserCancelledErrorCode = 1223; + + public IList ListCertificates( + CertificatePurpose purpose, + StoreName storeName, + StoreLocation location, + bool isValid, + bool requireExportable = true, + DiagnosticInformation diagnostics = null) + { + diagnostics?.Debug($"Listing '{purpose.ToString()}' certificates on '{location}\\{storeName}'."); + var certificates = new List(); + try + { + using (var store = new X509Store(storeName, location)) + { + store.Open(OpenFlags.ReadOnly); + certificates.AddRange(store.Certificates.OfType()); + IEnumerable matchingCertificates = certificates; + switch (purpose) + { + case CertificatePurpose.All: + matchingCertificates = matchingCertificates + .Where(c => HasOid(c, AspNetHttpsOid)); + break; + case CertificatePurpose.HTTPS: + matchingCertificates = matchingCertificates + .Where(c => HasOid(c, AspNetHttpsOid)); + break; + default: + break; + } + + diagnostics?.Debug(diagnostics.DescribeCertificates(matchingCertificates)); + if (isValid) + { + // Ensure the certificate hasn't expired, has a private key and its exportable + // (for container/unix scenarios). + diagnostics?.Debug("Checking certificates for validity."); + var now = DateTimeOffset.Now; + var validCertificates = matchingCertificates + .Where(c => c.NotBefore <= now && + now <= c.NotAfter && + (!requireExportable || !RuntimeInformation.IsOSPlatform(OSPlatform.Windows) || IsExportable(c))) + .ToArray(); + + var invalidCertificates = matchingCertificates.Except(validCertificates); + + diagnostics?.Debug("Listing valid certificates"); + diagnostics?.Debug(diagnostics.DescribeCertificates(validCertificates)); + diagnostics?.Debug("Listing invalid certificates"); + diagnostics?.Debug(diagnostics.DescribeCertificates(invalidCertificates)); + + matchingCertificates = validCertificates; + } + + // We need to enumerate the certificates early to prevent dispoisng issues. + matchingCertificates = matchingCertificates.ToList(); + + var certificatesToDispose = certificates.Except(matchingCertificates); + DisposeCertificates(certificatesToDispose); + + store.Close(); + + return (IList)matchingCertificates; + } + } + catch + { + DisposeCertificates(certificates); + certificates.Clear(); + return certificates; + } + + bool HasOid(X509Certificate2 certificate, string oid) => + certificate.Extensions.OfType() + .Any(e => string.Equals(oid, e.Oid.Value, StringComparison.Ordinal)); +#if !XPLAT + bool IsExportable(X509Certificate2 c) => + ((c.GetRSAPrivateKey() is RSACryptoServiceProvider rsaPrivateKey && + rsaPrivateKey.CspKeyContainerInfo.Exportable) || + (c.GetRSAPrivateKey() is RSACng cngPrivateKey && + cngPrivateKey.Key.ExportPolicy == CngExportPolicies.AllowExport)); +#else + // Only check for RSA CryptoServiceProvider and do not fail in XPlat tooling as + // System.Security.Cryptography.Cng is not part of the shared framework and we don't + // want to bring the dependency in on CLI scenarios. This functionality will be used + // on CLI scenarios as part of the first run experience, so checking the exportability + // of the certificate is not important. + bool IsExportable(X509Certificate2 c) => + ((c.GetRSAPrivateKey() is RSACryptoServiceProvider rsaPrivateKey && + rsaPrivateKey.CspKeyContainerInfo.Exportable) || !(c.GetRSAPrivateKey() is RSACryptoServiceProvider)); +#endif + } + + private static void DisposeCertificates(IEnumerable disposables) + { + foreach (var disposable in disposables) + { + try + { + disposable.Dispose(); + } + catch + { + } + } + } + +#if NETCOREAPP2_0 || NETCOREAPP2_1 || NETCOREAPP2_2 || NETCOREAPP3_0 + + public X509Certificate2 CreateAspNetCoreHttpsDevelopmentCertificate(DateTimeOffset notBefore, DateTimeOffset notAfter, string subjectOverride, DiagnosticInformation diagnostics = null) + { + var subject = new X500DistinguishedName(subjectOverride ?? LocalhostHttpsDistinguishedName); + var extensions = new List(); + var sanBuilder = new SubjectAlternativeNameBuilder(); + sanBuilder.AddDnsName(LocalhostHttpsDnsName); + + var keyUsage = new X509KeyUsageExtension(X509KeyUsageFlags.KeyEncipherment, critical: true); + var enhancedKeyUsage = new X509EnhancedKeyUsageExtension( + new OidCollection() { + new Oid( + ServerAuthenticationEnhancedKeyUsageOid, + ServerAuthenticationEnhancedKeyUsageOidFriendlyName) + }, + critical: true); + + var basicConstraints = new X509BasicConstraintsExtension( + certificateAuthority: false, + hasPathLengthConstraint: false, + pathLengthConstraint: 0, + critical: true); + + var aspNetHttpsExtension = new X509Extension( + new AsnEncodedData( + new Oid(AspNetHttpsOid, AspNetHttpsOidFriendlyName), + Encoding.ASCII.GetBytes(AspNetHttpsOidFriendlyName)), + critical: false); + + extensions.Add(basicConstraints); + extensions.Add(keyUsage); + extensions.Add(enhancedKeyUsage); + extensions.Add(sanBuilder.Build(critical: true)); + extensions.Add(aspNetHttpsExtension); + + var certificate = CreateSelfSignedCertificate(subject, extensions, notBefore, notAfter); + if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + { + certificate.FriendlyName = AspNetHttpsOidFriendlyName; + } + + return certificate; + } + + public X509Certificate2 CreateSelfSignedCertificate( + X500DistinguishedName subject, + IEnumerable extensions, + DateTimeOffset notBefore, + DateTimeOffset notAfter) + { + var key = CreateKeyMaterial(RSAMinimumKeySizeInBits); + + var request = new CertificateRequest(subject, key, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1); + foreach (var extension in extensions) + { + request.CertificateExtensions.Add(extension); + } + + return request.CreateSelfSigned(notBefore, notAfter); + + RSA CreateKeyMaterial(int minimumKeySize) + { + var rsa = RSA.Create(minimumKeySize); + if (rsa.KeySize < minimumKeySize) + { + throw new InvalidOperationException($"Failed to create a key with a size of {minimumKeySize} bits"); + } + + return rsa; + } + } + + public X509Certificate2 SaveCertificateInStore(X509Certificate2 certificate, StoreName name, StoreLocation location, DiagnosticInformation diagnostics = null) + { + diagnostics?.Debug("Saving the certificate into the certificate store."); + var imported = certificate; + if (!RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) + { + // On non OSX systems we need to export the certificate and import it so that the transient + // key that we generated gets persisted. + var export = certificate.Export(X509ContentType.Pkcs12, ""); + imported = new X509Certificate2(export, "", X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable); + Array.Clear(export, 0, export.Length); + } + + if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + { + imported.FriendlyName = certificate.FriendlyName; + } + + using (var store = new X509Store(name, location)) + { + store.Open(OpenFlags.ReadWrite); + store.Add(imported); + store.Close(); + }; + + return imported; + } + + public void ExportCertificate(X509Certificate2 certificate, string path, bool includePrivateKey, string password, DiagnosticInformation diagnostics = null) + { + diagnostics?.Debug( + $"Exporting certificate to '{path}'", + includePrivateKey ? "The certificate will contain the private key" : "The certificate will not contain the private key"); + if (includePrivateKey && password == null) + { + diagnostics?.Debug("No password was provided for the certificate."); + } + + var targetDirectoryPath = Path.GetDirectoryName(path); + if (targetDirectoryPath != "") + { + diagnostics?.Debug($"Ensuring that the directory for the target exported certificate path exists '{targetDirectoryPath}'"); + Directory.CreateDirectory(targetDirectoryPath); + } + + byte[] bytes; + if (includePrivateKey) + { + try + { + diagnostics?.Debug($"Exporting the certificate including the private key."); + bytes = certificate.Export(X509ContentType.Pkcs12, password); + } + catch (Exception e) + { + diagnostics?.Error($"Failed to export the certificate with the private key", e); + throw; + } + } + else + { + try + { + diagnostics?.Debug($"Exporting the certificate without the private key."); + bytes = certificate.Export(X509ContentType.Cert); + } + catch (Exception ex) + { + diagnostics?.Error($"Failed to export the certificate without the private key", ex); + throw; + } + } + try + { + diagnostics?.Debug($"Writing exported certificate to path '{path}'."); + File.WriteAllBytes(path, bytes); + } + catch (Exception ex) + { + diagnostics?.Error("Failed writing the certificate to the target path", ex); + throw; + } + finally + { + Array.Clear(bytes, 0, bytes.Length); + } + } + + public void TrustCertificate(X509Certificate2 certificate, DiagnosticInformation diagnostics = null) + { + // Strip certificate of the private key if any. + var publicCertificate = new X509Certificate2(certificate.Export(X509ContentType.Cert)); + + if (!IsTrusted(publicCertificate)) + { + if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + { + diagnostics?.Debug("Trusting the certificate on Windows."); + TrustCertificateOnWindows(certificate, publicCertificate, diagnostics); + } + else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) + { + diagnostics?.Debug("Trusting the certificate on MAC."); + TrustCertificateOnMac(publicCertificate, diagnostics); + } + } + } + + private void TrustCertificateOnMac(X509Certificate2 publicCertificate, DiagnosticInformation diagnostics) + { + var tmpFile = Path.GetTempFileName(); + try + { + ExportCertificate(publicCertificate, tmpFile, includePrivateKey: false, password: null); + diagnostics?.Debug("Running the trust command on Mac OS"); + using (var process = Process.Start(MacOSTrustCertificateCommandLine, MacOSTrustCertificateCommandLineArguments + tmpFile)) + { + process.WaitForExit(); + if (process.ExitCode != 0) + { + throw new InvalidOperationException("There was an error trusting the certificate."); + } + } + } + finally + { + try + { + if (File.Exists(tmpFile)) + { + File.Delete(tmpFile); + } + } + catch + { + // We don't care if we can't delete the temp file. + } + } + } + + private static void TrustCertificateOnWindows(X509Certificate2 certificate, X509Certificate2 publicCertificate, DiagnosticInformation diagnostics = null) + { + publicCertificate.FriendlyName = certificate.FriendlyName; + + using (var store = new X509Store(StoreName.Root, StoreLocation.CurrentUser)) + { + store.Open(OpenFlags.ReadWrite); + var existing = store.Certificates.Find(X509FindType.FindByThumbprint, publicCertificate.Thumbprint, validOnly: false); + if (existing.Count > 0) + { + diagnostics?.Debug("Certificate already trusted. Skipping trust step."); + DisposeCertificates(existing.OfType()); + return; + } + + try + { + diagnostics?.Debug("Adding certificate to the store."); + store.Add(publicCertificate); + } + catch (CryptographicException exception) when (exception.HResult == UserCancelledErrorCode) + { + diagnostics?.Debug("User cancelled the trust prompt."); + throw new UserCancelledTrustException(); + } + store.Close(); + }; + } + + public bool IsTrusted(X509Certificate2 certificate) + { + if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + { + return ListCertificates(CertificatePurpose.HTTPS, StoreName.Root, StoreLocation.CurrentUser, isValid: true, requireExportable: false) + .Any(c => c.Thumbprint == certificate.Thumbprint); + } + else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) + { + var subjectMatch = Regex.Match(certificate.Subject, CertificateSubjectRegex, RegexOptions.Singleline, MaxRegexTimeout); + if (!subjectMatch.Success) + { + throw new InvalidOperationException($"Can't determine the subject for the certificate with subject '{certificate.Subject}'."); + } + var subject = subjectMatch.Groups[1].Value; + using (var checkTrustProcess = Process.Start(new ProcessStartInfo( + MacOSFindCertificateCommandLine, + string.Format(MacOSFindCertificateCommandLineArgumentsFormat, subject)) + { + RedirectStandardOutput = true + })) + { + var output = checkTrustProcess.StandardOutput.ReadToEnd(); + checkTrustProcess.WaitForExit(); + var matches = Regex.Matches(output, MacOSFindCertificateOutputRegex, RegexOptions.Multiline, MaxRegexTimeout); + var hashes = matches.OfType().Select(m => m.Groups[1].Value).ToList(); + return hashes.Any(h => string.Equals(h, certificate.Thumbprint, StringComparison.Ordinal)); + } + } + else + { + return false; + } + } + + public void CleanupHttpsCertificates(string subject = LocalhostHttpsDistinguishedName) + { + CleanupCertificates(CertificatePurpose.HTTPS, subject); + } + + public void CleanupCertificates(CertificatePurpose purpose, string subject) + { + // On OS X we don't have a good way to manage trusted certificates in the system keychain + // so we do everything by invoking the native toolchain. + // This has some limitations, like for example not being able to identify our custom OID extension. For that + // matter, when we are cleaning up certificates on the machine, we start by removing the trusted certificates. + // To do this, we list the certificates that we can identify on the current user personal store and we invoke + // the native toolchain to remove them from the sytem keychain. Once we have removed the trusted certificates, + // we remove the certificates from the local user store to finish up the cleanup. + var certificates = ListCertificates(purpose, StoreName.My, StoreLocation.CurrentUser, isValid: false); + foreach (var certificate in certificates) + { + RemoveCertificate(certificate, RemoveLocations.All); + } + } + + public DiagnosticInformation CleanupHttpsCertificates2(string subject = LocalhostHttpsDistinguishedName) + { + return CleanupCertificates2(CertificatePurpose.HTTPS, subject); + } + + public DiagnosticInformation CleanupCertificates2(CertificatePurpose purpose, string subject) + { + var diagnostics = new DiagnosticInformation(); + // On OS X we don't have a good way to manage trusted certificates in the system keychain + // so we do everything by invoking the native toolchain. + // This has some limitations, like for example not being able to identify our custom OID extension. For that + // matter, when we are cleaning up certificates on the machine, we start by removing the trusted certificates. + // To do this, we list the certificates that we can identify on the current user personal store and we invoke + // the native toolchain to remove them from the sytem keychain. Once we have removed the trusted certificates, + // we remove the certificates from the local user store to finish up the cleanup. + var certificates = ListCertificates(purpose, StoreName.My, StoreLocation.CurrentUser, isValid: false, requireExportable: true, diagnostics); + foreach (var certificate in certificates) + { + RemoveCertificate(certificate, RemoveLocations.All, diagnostics); + } + + return diagnostics; + } + + public void RemoveAllCertificates(CertificatePurpose purpose, StoreName storeName, StoreLocation storeLocation, string subject = null) + { + var certificates = RuntimeInformation.IsOSPlatform(OSPlatform.OSX) ? + ListCertificates(purpose, StoreName.My, StoreLocation.CurrentUser, isValid: false) : + ListCertificates(purpose, storeName, storeLocation, isValid: false); + var certificatesWithName = subject == null ? certificates : certificates.Where(c => c.Subject == subject); + + var removeLocation = storeName == StoreName.My ? RemoveLocations.Local : RemoveLocations.Trusted; + + foreach (var certificate in certificates) + { + RemoveCertificate(certificate, removeLocation); + } + + DisposeCertificates(certificates); + } + + private void RemoveCertificate(X509Certificate2 certificate, RemoveLocations locations, DiagnosticInformation diagnostics = null) + { + switch (locations) + { + case RemoveLocations.Undefined: + throw new InvalidOperationException($"'{nameof(RemoveLocations.Undefined)}' is not a valid location."); + case RemoveLocations.Local: + RemoveCertificateFromUserStore(certificate, diagnostics); + break; + case RemoveLocations.Trusted when !RuntimeInformation.IsOSPlatform(OSPlatform.Linux): + RemoveCertificateFromTrustedRoots(certificate, diagnostics); + break; + case RemoveLocations.All: + if (!RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) + { + RemoveCertificateFromTrustedRoots(certificate, diagnostics); + } + RemoveCertificateFromUserStore(certificate, diagnostics); + break; + default: + throw new InvalidOperationException("Invalid location."); + } + } + + private static void RemoveCertificateFromUserStore(X509Certificate2 certificate, DiagnosticInformation diagnostics) + { + diagnostics?.Debug($"Trying to remove certificate with thumbprint '{certificate.Thumbprint}' from certificate store '{StoreLocation.CurrentUser}\\{StoreName.My}'."); + using (var store = new X509Store(StoreName.My, StoreLocation.CurrentUser)) + { + store.Open(OpenFlags.ReadWrite); + var matching = store.Certificates + .OfType() + .Single(c => c.SerialNumber == certificate.SerialNumber); + + store.Remove(matching); + store.Close(); + } + } + + private void RemoveCertificateFromTrustedRoots(X509Certificate2 certificate, DiagnosticInformation diagnostics) + { + diagnostics?.Debug($"Trying to remove certificate with thumbprint '{certificate.Thumbprint}' from certificate store '{StoreLocation.CurrentUser}\\{StoreName.Root}'."); + if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + { + using (var store = new X509Store(StoreName.Root, StoreLocation.CurrentUser)) + { + store.Open(OpenFlags.ReadWrite); + var matching = store.Certificates + .OfType() + .SingleOrDefault(c => c.SerialNumber == certificate.SerialNumber); + + if (matching != null) + { + store.Remove(matching); + } + + store.Close(); + } + } + else + { + if (IsTrusted(certificate)) // On OSX this check just ensures its on the system keychain + { + try + { + diagnostics?.Debug("Trying to remove the certificate trust rule."); + RemoveCertificateTrustRule(certificate); + } + catch + { + diagnostics?.Debug("Failed to remove the certificate trust rule."); + // We don't care if we fail to remove the trust rule if + // for some reason the certificate became untrusted. + // The delete command will fail if the certificate is + // trusted. + } + RemoveCertificateFromKeyChain(MacOSSystemKeyChain, certificate); + } + else + { + diagnostics?.Debug("The certificate was not trusted."); + } + } + } + + private static void RemoveCertificateTrustRule(X509Certificate2 certificate) + { + var certificatePath = Path.GetTempFileName(); + try + { + var certBytes = certificate.Export(X509ContentType.Cert); + File.WriteAllBytes(certificatePath, certBytes); + var processInfo = new ProcessStartInfo( + MacOSRemoveCertificateTrustCommandLine, + string.Format( + MacOSRemoveCertificateTrustCommandLineArgumentsFormat, + certificatePath + )); + using (var process = Process.Start(processInfo)) + { + process.WaitForExit(); + } + } + finally + { + try + { + if (File.Exists(certificatePath)) + { + File.Delete(certificatePath); + } + } + catch + { + // We don't care about failing to do clean-up on a temp file. + } + } + } + + private static void RemoveCertificateFromKeyChain(string keyChain, X509Certificate2 certificate) + { + var processInfo = new ProcessStartInfo( + MacOSDeleteCertificateCommandLine, + string.Format( + MacOSDeleteCertificateCommandLineArgumentsFormat, + certificate.Thumbprint.ToUpperInvariant(), + keyChain + )) + { + RedirectStandardOutput = true, + RedirectStandardError = true + }; + + using (var process = Process.Start(processInfo)) + { + var output = process.StandardOutput.ReadToEnd() + process.StandardError.ReadToEnd(); + process.WaitForExit(); + + if (process.ExitCode != 0) + { + throw new InvalidOperationException($@"There was an error removing the certificate with thumbprint '{certificate.Thumbprint}'. + +{output}"); + } + } + } + + public EnsureCertificateResult EnsureAspNetCoreHttpsDevelopmentCertificate( + DateTimeOffset notBefore, + DateTimeOffset notAfter, + string path = null, + bool trust = false, + bool includePrivateKey = false, + string password = null, + string subject = LocalhostHttpsDistinguishedName) + { + return EnsureValidCertificateExists(notBefore, notAfter, CertificatePurpose.HTTPS, path, trust, includePrivateKey, password, subject); + } + + public EnsureCertificateResult EnsureValidCertificateExists( + DateTimeOffset notBefore, + DateTimeOffset notAfter, + CertificatePurpose purpose, + string path = null, + bool trust = false, + bool includePrivateKey = false, + string password = null, + string subjectOverride = null) + { + if (purpose == CertificatePurpose.All) + { + throw new ArgumentException("The certificate must have a specific purpose."); + } + + var certificates = ListCertificates(purpose, StoreName.My, StoreLocation.CurrentUser, isValid: true).Concat( + ListCertificates(purpose, StoreName.My, StoreLocation.LocalMachine, isValid: true)); + + certificates = subjectOverride == null ? certificates : certificates.Where(c => c.Subject == subjectOverride); + + var result = EnsureCertificateResult.Succeeded; + + X509Certificate2 certificate = null; + if (certificates.Count() > 0) + { + certificate = certificates.FirstOrDefault(); + result = EnsureCertificateResult.ValidCertificatePresent; + } + else + { + try + { + switch (purpose) + { + case CertificatePurpose.All: + throw new InvalidOperationException("The certificate must have a specific purpose."); + case CertificatePurpose.HTTPS: + certificate = CreateAspNetCoreHttpsDevelopmentCertificate(notBefore, notAfter, subjectOverride); + break; + default: + throw new InvalidOperationException("The certificate must have a purpose."); + } + } + catch + { + return EnsureCertificateResult.ErrorCreatingTheCertificate; + } + + try + { + certificate = SaveCertificateInStore(certificate, StoreName.My, StoreLocation.CurrentUser); + } + catch + { + return EnsureCertificateResult.ErrorSavingTheCertificateIntoTheCurrentUserPersonalStore; + } + } + if (path != null) + { + try + { + ExportCertificate(certificate, path, includePrivateKey, password); + } + catch + { + return EnsureCertificateResult.ErrorExportingTheCertificate; + } + } + + if ((RuntimeInformation.IsOSPlatform(OSPlatform.Windows) || RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) && trust) + { + try + { + TrustCertificate(certificate); + } + catch (UserCancelledTrustException) + { + return EnsureCertificateResult.UserCancelledTrustStep; + } + catch + { + return EnsureCertificateResult.FailedToTrustTheCertificate; + } + } + + return result; + } + + // This is just to avoid breaking changes across repos. + // Will be renamed back to EnsureAspNetCoreHttpsDevelopmentCertificate once updates are made elsewhere. + public DetailedEnsureCertificateResult EnsureAspNetCoreHttpsDevelopmentCertificate2( + DateTimeOffset notBefore, + DateTimeOffset notAfter, + string path = null, + bool trust = false, + bool includePrivateKey = false, + string password = null, + string subject = LocalhostHttpsDistinguishedName) + { + return EnsureValidCertificateExists2(notBefore, notAfter, CertificatePurpose.HTTPS, path, trust, includePrivateKey, password, subject); + } + + public DetailedEnsureCertificateResult EnsureValidCertificateExists2( + DateTimeOffset notBefore, + DateTimeOffset notAfter, + CertificatePurpose purpose, + string path, + bool trust, + bool includePrivateKey, + string password, + string subject) + { + if (purpose == CertificatePurpose.All) + { + throw new ArgumentException("The certificate must have a specific purpose."); + } + + var result = new DetailedEnsureCertificateResult(); + + var certificates = ListCertificates(purpose, StoreName.My, StoreLocation.CurrentUser, isValid: true, requireExportable: true, result.Diagnostics).Concat( + ListCertificates(purpose, StoreName.My, StoreLocation.LocalMachine, isValid: true, requireExportable: true, result.Diagnostics)); + + var filteredCertificates = subject == null ? certificates : certificates.Where(c => c.Subject == subject); + if (subject != null) + { + var excludedCertificates = certificates.Except(filteredCertificates); + + result.Diagnostics.Debug($"Filtering found certificates to those with a subject equal to '{subject}'"); + result.Diagnostics.Debug(result.Diagnostics.DescribeCertificates(filteredCertificates)); + result.Diagnostics.Debug($"Listing certificates excluded from consideration."); + result.Diagnostics.Debug(result.Diagnostics.DescribeCertificates(excludedCertificates)); + } + else + { + result.Diagnostics.Debug("Skipped filtering certificates by subject."); + } + + certificates = filteredCertificates; + + result.ResultCode = EnsureCertificateResult.Succeeded; + + X509Certificate2 certificate = null; + if (certificates.Count() > 0) + { + result.Diagnostics.Debug("Found valid certificates present on the machine."); + result.Diagnostics.Debug(result.Diagnostics.DescribeCertificates(certificates)); + certificate = certificates.First(); + result.Diagnostics.Debug("Selected certificate"); + result.Diagnostics.Debug(result.Diagnostics.DescribeCertificates(certificate)); + result.ResultCode = EnsureCertificateResult.ValidCertificatePresent; + } + else + { + result.Diagnostics.Debug("No valid certificates present on this machine. Trying to create one."); + try + { + switch (purpose) + { + case CertificatePurpose.All: + throw new InvalidOperationException("The certificate must have a specific purpose."); + case CertificatePurpose.HTTPS: + certificate = CreateAspNetCoreHttpsDevelopmentCertificate(notBefore, notAfter, subject, result.Diagnostics); + break; + default: + throw new InvalidOperationException("The certificate must have a purpose."); + } + } + catch (Exception e) + { + result.Diagnostics.Error("Error creating the certificate.", e); + result.ResultCode = EnsureCertificateResult.ErrorCreatingTheCertificate; + return result; + } + + try + { + certificate = SaveCertificateInStore(certificate, StoreName.My, StoreLocation.CurrentUser, result.Diagnostics); + } + catch (Exception e) + { + result.Diagnostics.Error($"Error saving the certificate in the certificate store '{StoreLocation.CurrentUser}\\{StoreName.My}'.", e); + result.ResultCode = EnsureCertificateResult.ErrorSavingTheCertificateIntoTheCurrentUserPersonalStore; + return result; + } + } + if (path != null) + { + result.Diagnostics.Debug("Trying to export the certificate."); + result.Diagnostics.Debug(result.Diagnostics.DescribeCertificates(certificate)); + try + { + ExportCertificate(certificate, path, includePrivateKey, password, result.Diagnostics); + } + catch (Exception e) + { + result.Diagnostics.Error("An error ocurred exporting the certificate.", e); + result.ResultCode = EnsureCertificateResult.ErrorExportingTheCertificate; + return result; + } + } + + if ((RuntimeInformation.IsOSPlatform(OSPlatform.Windows) || RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) && trust) + { + try + { + result.Diagnostics.Debug("Trying to export the certificate."); + TrustCertificate(certificate, result.Diagnostics); + } + catch (UserCancelledTrustException) + { + result.Diagnostics.Error("The user cancelled trusting the certificate.", null); + result.ResultCode = EnsureCertificateResult.UserCancelledTrustStep; + return result; + } + catch (Exception e) + { + result.Diagnostics.Error("There was an error trusting the certificate.", e); + result.ResultCode = EnsureCertificateResult.FailedToTrustTheCertificate; + return result; + } + } + + return result; + } + + private class UserCancelledTrustException : Exception + { + } + + private enum RemoveLocations + { + Undefined, + Local, + Trusted, + All + } + + internal class DetailedEnsureCertificateResult + { + public EnsureCertificateResult ResultCode { get; set; } + public DiagnosticInformation Diagnostics { get; set; } = new DiagnosticInformation(); + } +#endif + + internal class DiagnosticInformation + { + public IList Messages { get; } = new List(); + + public IList Exceptions { get; } = new List(); + + internal void Debug(params string[] messages) + { + foreach (var message in messages) + { + Messages.Add(message); + } + } + + internal string[] DescribeCertificates(params X509Certificate2[] certificates) + { + return DescribeCertificates(certificates.AsEnumerable()); + } + + internal string[] DescribeCertificates(IEnumerable certificates) + { + var result = new List(); + result.Add($"'{certificates.Count()}' found matching the criteria."); + result.Add($"SUBJECT - THUMBPRINT - NOT BEFORE - EXPIRES - HAS PRIVATE KEY"); + foreach (var certificate in certificates) + { + result.Add(DescribeCertificate(certificate)); + } + + return result.ToArray(); + } + + private static string DescribeCertificate(X509Certificate2 certificate) => + $"{certificate.Subject} - {certificate.Thumbprint} - {certificate.NotBefore} - {certificate.NotAfter} - {certificate.HasPrivateKey}"; + + internal void Error(string preamble, Exception e) + { + Messages.Add(preamble); + if (Exceptions.Count > 0 && Exceptions[Exceptions.Count - 1] == e) + { + return; + } + + var ex = e; + while (ex != null) + { + Messages.Add("Exception message: " + ex.Message); + ex = ex.InnerException; + } + + } + } + } +} diff --git a/src/Shared/CertificateGeneration/CertificatePurpose.cs b/src/Shared/CertificateGeneration/CertificatePurpose.cs new file mode 100644 index 000000000000..7b3231f80d53 --- /dev/null +++ b/src/Shared/CertificateGeneration/CertificatePurpose.cs @@ -0,0 +1,11 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +namespace Microsoft.AspNetCore.Certificates.Generation +{ + internal enum CertificatePurpose + { + All, + HTTPS + } +} \ No newline at end of file diff --git a/src/Shared/CertificateGeneration/EnsureCertificateResult.cs b/src/Shared/CertificateGeneration/EnsureCertificateResult.cs new file mode 100644 index 000000000000..2106297faed9 --- /dev/null +++ b/src/Shared/CertificateGeneration/EnsureCertificateResult.cs @@ -0,0 +1,20 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +#if NETCOREAPP2_0 || NETCOREAPP2_1 || NETCOREAPP2_2 || NETCOREAPP3_0 + +namespace Microsoft.AspNetCore.Certificates.Generation +{ + internal enum EnsureCertificateResult + { + Succeeded = 1, + ValidCertificatePresent, + ErrorCreatingTheCertificate, + ErrorSavingTheCertificateIntoTheCurrentUserPersonalStore, + ErrorExportingTheCertificate, + FailedToTrustTheCertificate, + UserCancelledTrustStep + } +} + +#endif diff --git a/src/Shared/ClosedGenericMatcher/ClosedGenericMatcher.cs b/src/Shared/ClosedGenericMatcher/ClosedGenericMatcher.cs new file mode 100644 index 000000000000..f234c2edbc40 --- /dev/null +++ b/src/Shared/ClosedGenericMatcher/ClosedGenericMatcher.cs @@ -0,0 +1,106 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Linq; +using System.Reflection; + +namespace Microsoft.Extensions.Internal +{ + /// + /// Helper related to generic interface definitions and implementing classes. + /// + internal static class ClosedGenericMatcher + { + /// + /// Determine whether is or implements a closed generic + /// created from . + /// + /// The of interest. + /// The open generic to match. Usually an interface. + /// + /// The closed generic created from that + /// is or implements. null if the two s have no such + /// relationship. + /// + /// + /// This method will return if is + /// typeof(KeyValuePair{,}), and is + /// typeof(KeyValuePair{string, object}). + /// + public static Type ExtractGenericInterface(Type queryType, Type interfaceType) + { + if (queryType == null) + { + throw new ArgumentNullException(nameof(queryType)); + } + + if (interfaceType == null) + { + throw new ArgumentNullException(nameof(interfaceType)); + } + + if (IsGenericInstantiation(queryType, interfaceType)) + { + // queryType matches (i.e. is a closed generic type created from) the open generic type. + return queryType; + } + + // Otherwise check all interfaces the type implements for a match. + // - If multiple different generic instantiations exists, we want the most derived one. + // - If that doesn't break the tie, then we sort alphabetically so that it's deterministic. + // + // We do this by looking at interfaces on the type, and recursing to the base type + // if we don't find any matches. + return GetGenericInstantiation(queryType, interfaceType); + } + + private static bool IsGenericInstantiation(Type candidate, Type interfaceType) + { + return + candidate.GetTypeInfo().IsGenericType && + candidate.GetGenericTypeDefinition() == interfaceType; + } + + private static Type GetGenericInstantiation(Type queryType, Type interfaceType) + { + Type bestMatch = null; + var interfaces = queryType.GetInterfaces(); + foreach (var @interface in interfaces) + { + if (IsGenericInstantiation(@interface, interfaceType)) + { + if (bestMatch == null) + { + bestMatch = @interface; + } + else if (StringComparer.Ordinal.Compare(@interface.FullName, bestMatch.FullName) < 0) + { + bestMatch = @interface; + } + else + { + // There are two matches at this level of the class hierarchy, but @interface is after + // bestMatch in the sort order. + } + } + } + + if (bestMatch != null) + { + return bestMatch; + } + + // BaseType will be null for object and interfaces, which means we've reached 'bottom'. + var baseType = queryType?.GetTypeInfo().BaseType; + if (baseType == null) + { + return null; + } + else + { + return GetGenericInstantiation(baseType, interfaceType); + } + } + } +} \ No newline at end of file diff --git a/src/Shared/CopyOnWriteDictionary/CopyOnWriteDictionary.cs b/src/Shared/CopyOnWriteDictionary/CopyOnWriteDictionary.cs new file mode 100644 index 000000000000..1408059ad923 --- /dev/null +++ b/src/Shared/CopyOnWriteDictionary/CopyOnWriteDictionary.cs @@ -0,0 +1,155 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Collections; +using System.Collections.Generic; + +namespace Microsoft.Extensions.Internal +{ + internal class CopyOnWriteDictionary : IDictionary + { + private readonly IDictionary _sourceDictionary; + private readonly IEqualityComparer _comparer; + private IDictionary _innerDictionary; + + public CopyOnWriteDictionary( + IDictionary sourceDictionary, + IEqualityComparer comparer) + { + if (sourceDictionary == null) + { + throw new ArgumentNullException(nameof(sourceDictionary)); + } + + if (comparer == null) + { + throw new ArgumentNullException(nameof(comparer)); + } + + _sourceDictionary = sourceDictionary; + _comparer = comparer; + } + + private IDictionary ReadDictionary + { + get + { + return _innerDictionary ?? _sourceDictionary; + } + } + + private IDictionary WriteDictionary + { + get + { + if (_innerDictionary == null) + { + _innerDictionary = new Dictionary(_sourceDictionary, + _comparer); + } + + return _innerDictionary; + } + } + + public virtual ICollection Keys + { + get + { + return ReadDictionary.Keys; + } + } + + public virtual ICollection Values + { + get + { + return ReadDictionary.Values; + } + } + + public virtual int Count + { + get + { + return ReadDictionary.Count; + } + } + + public virtual bool IsReadOnly + { + get + { + return false; + } + } + + public virtual TValue this[TKey key] + { + get + { + return ReadDictionary[key]; + } + set + { + WriteDictionary[key] = value; + } + } + + public virtual bool ContainsKey(TKey key) + { + return ReadDictionary.ContainsKey(key); + } + + public virtual void Add(TKey key, TValue value) + { + WriteDictionary.Add(key, value); + } + + public virtual bool Remove(TKey key) + { + return WriteDictionary.Remove(key); + } + + public virtual bool TryGetValue(TKey key, out TValue value) + { + return ReadDictionary.TryGetValue(key, out value); + } + + public virtual void Add(KeyValuePair item) + { + WriteDictionary.Add(item); + } + + public virtual void Clear() + { + WriteDictionary.Clear(); + } + + public virtual bool Contains(KeyValuePair item) + { + return ReadDictionary.Contains(item); + } + + public virtual void CopyTo(KeyValuePair[] array, int arrayIndex) + { + ReadDictionary.CopyTo(array, arrayIndex); + } + + public bool Remove(KeyValuePair item) + { + return WriteDictionary.Remove(item); + } + + public virtual IEnumerator> GetEnumerator() + { + return ReadDictionary.GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + } +} \ No newline at end of file diff --git a/src/Shared/CopyOnWriteDictionary/CopyOnWriteDictionaryHolder.cs b/src/Shared/CopyOnWriteDictionary/CopyOnWriteDictionaryHolder.cs new file mode 100644 index 000000000000..7cd935e94018 --- /dev/null +++ b/src/Shared/CopyOnWriteDictionary/CopyOnWriteDictionaryHolder.cs @@ -0,0 +1,166 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Collections.Generic; + +namespace Microsoft.Extensions.Internal +{ + internal struct CopyOnWriteDictionaryHolder + { + private readonly Dictionary _source; + private Dictionary _copy; + + public CopyOnWriteDictionaryHolder(Dictionary source) + { + if (source == null) + { + throw new ArgumentNullException(nameof(source)); + } + + _source = source; + _copy = null; + } + + public CopyOnWriteDictionaryHolder(CopyOnWriteDictionaryHolder source) + { + _source = source._copy ?? source._source; + _copy = null; + } + + public bool HasBeenCopied => _copy != null; + + public Dictionary ReadDictionary + { + get + { + if (_copy != null) + { + return _copy; + } + else if (_source != null) + { + return _source; + } + else + { + // Default-Constructor case + _copy = new Dictionary(); + return _copy; + } + } + } + + public Dictionary WriteDictionary + { + get + { + if (_copy == null && _source == null) + { + // Default-Constructor case + _copy = new Dictionary(); + } + else if (_copy == null) + { + _copy = new Dictionary(_source, _source.Comparer); + } + + return _copy; + } + } + + public Dictionary.KeyCollection Keys + { + get + { + return ReadDictionary.Keys; + } + } + + public Dictionary.ValueCollection Values + { + get + { + return ReadDictionary.Values; + } + } + + public int Count + { + get + { + return ReadDictionary.Count; + } + } + + public bool IsReadOnly + { + get + { + return false; + } + } + + public TValue this[TKey key] + { + get + { + return ReadDictionary[key]; + } + set + { + WriteDictionary[key] = value; + } + } + + public bool ContainsKey(TKey key) + { + return ReadDictionary.ContainsKey(key); + } + + public void Add(TKey key, TValue value) + { + WriteDictionary.Add(key, value); + } + + public bool Remove(TKey key) + { + return WriteDictionary.Remove(key); + } + + public bool TryGetValue(TKey key, out TValue value) + { + return ReadDictionary.TryGetValue(key, out value); + } + + public void Add(KeyValuePair item) + { + ((ICollection>)WriteDictionary).Add(item); + } + + public void Clear() + { + WriteDictionary.Clear(); + } + + public bool Contains(KeyValuePair item) + { + return ((ICollection>)ReadDictionary).Contains(item); + } + + public void CopyTo(KeyValuePair[] array, int arrayIndex) + { + ((ICollection>)ReadDictionary).CopyTo(array, arrayIndex); + } + + public bool Remove(KeyValuePair item) + { + return ((ICollection>)WriteDictionary).Remove(item); + } + + public Dictionary.Enumerator GetEnumerator() + { + return ReadDictionary.GetEnumerator(); + } + } +} diff --git a/src/Shared/ObjectMethodExecutor/AwaitableInfo.cs b/src/Shared/ObjectMethodExecutor/AwaitableInfo.cs new file mode 100644 index 000000000000..431b83a6e561 --- /dev/null +++ b/src/Shared/ObjectMethodExecutor/AwaitableInfo.cs @@ -0,0 +1,127 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Linq; +using System.Reflection; +using System.Runtime.CompilerServices; + +namespace Microsoft.Extensions.Internal +{ + internal struct AwaitableInfo + { + public Type AwaiterType { get; } + public PropertyInfo AwaiterIsCompletedProperty { get; } + public MethodInfo AwaiterGetResultMethod { get; } + public MethodInfo AwaiterOnCompletedMethod { get; } + public MethodInfo AwaiterUnsafeOnCompletedMethod { get; } + public Type ResultType { get; } + public MethodInfo GetAwaiterMethod { get; } + + public AwaitableInfo( + Type awaiterType, + PropertyInfo awaiterIsCompletedProperty, + MethodInfo awaiterGetResultMethod, + MethodInfo awaiterOnCompletedMethod, + MethodInfo awaiterUnsafeOnCompletedMethod, + Type resultType, + MethodInfo getAwaiterMethod) + { + AwaiterType = awaiterType; + AwaiterIsCompletedProperty = awaiterIsCompletedProperty; + AwaiterGetResultMethod = awaiterGetResultMethod; + AwaiterOnCompletedMethod = awaiterOnCompletedMethod; + AwaiterUnsafeOnCompletedMethod = awaiterUnsafeOnCompletedMethod; + ResultType = resultType; + GetAwaiterMethod = getAwaiterMethod; + } + + public static bool IsTypeAwaitable(Type type, out AwaitableInfo awaitableInfo) + { + // Based on Roslyn code: http://source.roslyn.io/#Microsoft.CodeAnalysis.Workspaces/Shared/Extensions/ISymbolExtensions.cs,db4d48ba694b9347 + + // Awaitable must have method matching "object GetAwaiter()" + var getAwaiterMethod = type.GetRuntimeMethods().FirstOrDefault(m => + m.Name.Equals("GetAwaiter", StringComparison.OrdinalIgnoreCase) + && m.GetParameters().Length == 0 + && m.ReturnType != null); + if (getAwaiterMethod == null) + { + awaitableInfo = default(AwaitableInfo); + return false; + } + + var awaiterType = getAwaiterMethod.ReturnType; + + // Awaiter must have property matching "bool IsCompleted { get; }" + var isCompletedProperty = awaiterType.GetRuntimeProperties().FirstOrDefault(p => + p.Name.Equals("IsCompleted", StringComparison.OrdinalIgnoreCase) + && p.PropertyType == typeof(bool) + && p.GetMethod != null); + if (isCompletedProperty == null) + { + awaitableInfo = default(AwaitableInfo); + return false; + } + + // Awaiter must implement INotifyCompletion + var awaiterInterfaces = awaiterType.GetInterfaces(); + var implementsINotifyCompletion = awaiterInterfaces.Any(t => t == typeof(INotifyCompletion)); + if (!implementsINotifyCompletion) + { + awaitableInfo = default(AwaitableInfo); + return false; + } + + // INotifyCompletion supplies a method matching "void OnCompleted(Action action)" + var iNotifyCompletionMap = awaiterType + .GetTypeInfo() + .GetRuntimeInterfaceMap(typeof(INotifyCompletion)); + var onCompletedMethod = iNotifyCompletionMap.InterfaceMethods.Single(m => + m.Name.Equals("OnCompleted", StringComparison.OrdinalIgnoreCase) + && m.ReturnType == typeof(void) + && m.GetParameters().Length == 1 + && m.GetParameters()[0].ParameterType == typeof(Action)); + + // Awaiter optionally implements ICriticalNotifyCompletion + var implementsICriticalNotifyCompletion = awaiterInterfaces.Any(t => t == typeof(ICriticalNotifyCompletion)); + MethodInfo unsafeOnCompletedMethod; + if (implementsICriticalNotifyCompletion) + { + // ICriticalNotifyCompletion supplies a method matching "void UnsafeOnCompleted(Action action)" + var iCriticalNotifyCompletionMap = awaiterType + .GetTypeInfo() + .GetRuntimeInterfaceMap(typeof(ICriticalNotifyCompletion)); + unsafeOnCompletedMethod = iCriticalNotifyCompletionMap.InterfaceMethods.Single(m => + m.Name.Equals("UnsafeOnCompleted", StringComparison.OrdinalIgnoreCase) + && m.ReturnType == typeof(void) + && m.GetParameters().Length == 1 + && m.GetParameters()[0].ParameterType == typeof(Action)); + } + else + { + unsafeOnCompletedMethod = null; + } + + // Awaiter must have method matching "void GetResult" or "T GetResult()" + var getResultMethod = awaiterType.GetRuntimeMethods().FirstOrDefault(m => + m.Name.Equals("GetResult") + && m.GetParameters().Length == 0); + if (getResultMethod == null) + { + awaitableInfo = default(AwaitableInfo); + return false; + } + + awaitableInfo = new AwaitableInfo( + awaiterType, + isCompletedProperty, + getResultMethod, + onCompletedMethod, + unsafeOnCompletedMethod, + getResultMethod.ReturnType, + getAwaiterMethod); + return true; + } + } +} diff --git a/src/Shared/ObjectMethodExecutor/CoercedAwaitableInfo.cs b/src/Shared/ObjectMethodExecutor/CoercedAwaitableInfo.cs new file mode 100644 index 000000000000..4e48ef09a15e --- /dev/null +++ b/src/Shared/ObjectMethodExecutor/CoercedAwaitableInfo.cs @@ -0,0 +1,55 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Linq.Expressions; + +namespace Microsoft.Extensions.Internal +{ + internal struct CoercedAwaitableInfo + { + public AwaitableInfo AwaitableInfo { get; } + public Expression CoercerExpression { get; } + public Type CoercerResultType { get; } + public bool RequiresCoercion => CoercerExpression != null; + + public CoercedAwaitableInfo(AwaitableInfo awaitableInfo) + { + AwaitableInfo = awaitableInfo; + CoercerExpression = null; + CoercerResultType = null; + } + + public CoercedAwaitableInfo(Expression coercerExpression, Type coercerResultType, AwaitableInfo coercedAwaitableInfo) + { + CoercerExpression = coercerExpression; + CoercerResultType = coercerResultType; + AwaitableInfo = coercedAwaitableInfo; + } + + public static bool IsTypeAwaitable(Type type, out CoercedAwaitableInfo info) + { + if (AwaitableInfo.IsTypeAwaitable(type, out var directlyAwaitableInfo)) + { + info = new CoercedAwaitableInfo(directlyAwaitableInfo); + return true; + } + + // It's not directly awaitable, but maybe we can coerce it. + // Currently we support coercing FSharpAsync. + if (ObjectMethodExecutorFSharpSupport.TryBuildCoercerFromFSharpAsyncToAwaitable(type, + out var coercerExpression, + out var coercerResultType)) + { + if (AwaitableInfo.IsTypeAwaitable(coercerResultType, out var coercedAwaitableInfo)) + { + info = new CoercedAwaitableInfo(coercerExpression, coercerResultType, coercedAwaitableInfo); + return true; + } + } + + info = default(CoercedAwaitableInfo); + return false; + } + } +} diff --git a/src/Shared/ObjectMethodExecutor/ObjectMethodExecutor.cs b/src/Shared/ObjectMethodExecutor/ObjectMethodExecutor.cs new file mode 100644 index 000000000000..f8e5b70f0ddd --- /dev/null +++ b/src/Shared/ObjectMethodExecutor/ObjectMethodExecutor.cs @@ -0,0 +1,340 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Collections.Generic; +using System.Linq.Expressions; +using System.Reflection; + +namespace Microsoft.Extensions.Internal +{ + internal class ObjectMethodExecutor + { + private readonly object[] _parameterDefaultValues; + private readonly MethodExecutorAsync _executorAsync; + private readonly MethodExecutor _executor; + + private static readonly ConstructorInfo _objectMethodExecutorAwaitableConstructor = + typeof(ObjectMethodExecutorAwaitable).GetConstructor(new[] { + typeof(object), // customAwaitable + typeof(Func), // getAwaiterMethod + typeof(Func), // isCompletedMethod + typeof(Func), // getResultMethod + typeof(Action), // onCompletedMethod + typeof(Action) // unsafeOnCompletedMethod + }); + + private ObjectMethodExecutor(MethodInfo methodInfo, TypeInfo targetTypeInfo, object[] parameterDefaultValues) + { + if (methodInfo == null) + { + throw new ArgumentNullException(nameof(methodInfo)); + } + + MethodInfo = methodInfo; + MethodParameters = methodInfo.GetParameters(); + TargetTypeInfo = targetTypeInfo; + MethodReturnType = methodInfo.ReturnType; + + var isAwaitable = CoercedAwaitableInfo.IsTypeAwaitable(MethodReturnType, out var coercedAwaitableInfo); + + IsMethodAsync = isAwaitable; + AsyncResultType = isAwaitable ? coercedAwaitableInfo.AwaitableInfo.ResultType : null; + + // Upstream code may prefer to use the sync-executor even for async methods, because if it knows + // that the result is a specific Task where T is known, then it can directly cast to that type + // and await it without the extra heap allocations involved in the _executorAsync code path. + _executor = GetExecutor(methodInfo, targetTypeInfo); + + if (IsMethodAsync) + { + _executorAsync = GetExecutorAsync(methodInfo, targetTypeInfo, coercedAwaitableInfo); + } + + _parameterDefaultValues = parameterDefaultValues; + } + + private delegate ObjectMethodExecutorAwaitable MethodExecutorAsync(object target, object[] parameters); + + private delegate object MethodExecutor(object target, object[] parameters); + + private delegate void VoidMethodExecutor(object target, object[] parameters); + + public MethodInfo MethodInfo { get; } + + public ParameterInfo[] MethodParameters { get; } + + public TypeInfo TargetTypeInfo { get; } + + public Type AsyncResultType { get; } + + // This field is made internal set because it is set in unit tests. + public Type MethodReturnType { get; internal set; } + + public bool IsMethodAsync { get; } + + public static ObjectMethodExecutor Create(MethodInfo methodInfo, TypeInfo targetTypeInfo) + { + return new ObjectMethodExecutor(methodInfo, targetTypeInfo, null); + } + + public static ObjectMethodExecutor Create(MethodInfo methodInfo, TypeInfo targetTypeInfo, object[] parameterDefaultValues) + { + if (parameterDefaultValues == null) + { + throw new ArgumentNullException(nameof(parameterDefaultValues)); + } + + return new ObjectMethodExecutor(methodInfo, targetTypeInfo, parameterDefaultValues); + } + + /// + /// Executes the configured method on . This can be used whether or not + /// the configured method is asynchronous. + /// + /// + /// Even if the target method is asynchronous, it's desirable to invoke it using Execute rather than + /// ExecuteAsync if you know at compile time what the return type is, because then you can directly + /// "await" that value (via a cast), and then the generated code will be able to reference the + /// resulting awaitable as a value-typed variable. If you use ExecuteAsync instead, the generated + /// code will have to treat the resulting awaitable as a boxed object, because it doesn't know at + /// compile time what type it would be. + /// + /// The object whose method is to be executed. + /// Parameters to pass to the method. + /// The method return value. + public object Execute(object target, object[] parameters) + { + return _executor(target, parameters); + } + + /// + /// Executes the configured method on . This can only be used if the configured + /// method is asynchronous. + /// + /// + /// If you don't know at compile time the type of the method's returned awaitable, you can use ExecuteAsync, + /// which supplies an awaitable-of-object. This always works, but can incur several extra heap allocations + /// as compared with using Execute and then using "await" on the result value typecasted to the known + /// awaitable type. The possible extra heap allocations are for: + /// + /// 1. The custom awaitable (though usually there's a heap allocation for this anyway, since normally + /// it's a reference type, and you normally create a new instance per call). + /// 2. The custom awaiter (whether or not it's a value type, since if it's not, you need a new instance + /// of it, and if it is, it will have to be boxed so the calling code can reference it as an object). + /// 3. The async result value, if it's a value type (it has to be boxed as an object, since the calling + /// code doesn't know what type it's going to be). + /// + /// The object whose method is to be executed. + /// Parameters to pass to the method. + /// An object that you can "await" to get the method return value. + public ObjectMethodExecutorAwaitable ExecuteAsync(object target, object[] parameters) + { + return _executorAsync(target, parameters); + } + + public object GetDefaultValueForParameter(int index) + { + if (_parameterDefaultValues == null) + { + throw new InvalidOperationException($"Cannot call {nameof(GetDefaultValueForParameter)}, because no parameter default values were supplied."); + } + + if (index < 0 || index > MethodParameters.Length - 1) + { + throw new ArgumentOutOfRangeException(nameof(index)); + } + + return _parameterDefaultValues[index]; + } + + private static MethodExecutor GetExecutor(MethodInfo methodInfo, TypeInfo targetTypeInfo) + { + // Parameters to executor + var targetParameter = Expression.Parameter(typeof(object), "target"); + var parametersParameter = Expression.Parameter(typeof(object[]), "parameters"); + + // Build parameter list + var parameters = new List(); + var paramInfos = methodInfo.GetParameters(); + for (int i = 0; i < paramInfos.Length; i++) + { + var paramInfo = paramInfos[i]; + var valueObj = Expression.ArrayIndex(parametersParameter, Expression.Constant(i)); + var valueCast = Expression.Convert(valueObj, paramInfo.ParameterType); + + // valueCast is "(Ti) parameters[i]" + parameters.Add(valueCast); + } + + // Call method + var instanceCast = Expression.Convert(targetParameter, targetTypeInfo.AsType()); + var methodCall = Expression.Call(instanceCast, methodInfo, parameters); + + // methodCall is "((Ttarget) target) method((T0) parameters[0], (T1) parameters[1], ...)" + // Create function + if (methodCall.Type == typeof(void)) + { + var lambda = Expression.Lambda(methodCall, targetParameter, parametersParameter); + var voidExecutor = lambda.Compile(); + return WrapVoidMethod(voidExecutor); + } + else + { + // must coerce methodCall to match ActionExecutor signature + var castMethodCall = Expression.Convert(methodCall, typeof(object)); + var lambda = Expression.Lambda(castMethodCall, targetParameter, parametersParameter); + return lambda.Compile(); + } + } + + private static MethodExecutor WrapVoidMethod(VoidMethodExecutor executor) + { + return delegate (object target, object[] parameters) + { + executor(target, parameters); + return null; + }; + } + + private static MethodExecutorAsync GetExecutorAsync( + MethodInfo methodInfo, + TypeInfo targetTypeInfo, + CoercedAwaitableInfo coercedAwaitableInfo) + { + // Parameters to executor + var targetParameter = Expression.Parameter(typeof(object), "target"); + var parametersParameter = Expression.Parameter(typeof(object[]), "parameters"); + + // Build parameter list + var parameters = new List(); + var paramInfos = methodInfo.GetParameters(); + for (int i = 0; i < paramInfos.Length; i++) + { + var paramInfo = paramInfos[i]; + var valueObj = Expression.ArrayIndex(parametersParameter, Expression.Constant(i)); + var valueCast = Expression.Convert(valueObj, paramInfo.ParameterType); + + // valueCast is "(Ti) parameters[i]" + parameters.Add(valueCast); + } + + // Call method + var instanceCast = Expression.Convert(targetParameter, targetTypeInfo.AsType()); + var methodCall = Expression.Call(instanceCast, methodInfo, parameters); + + // Using the method return value, construct an ObjectMethodExecutorAwaitable based on + // the info we have about its implementation of the awaitable pattern. Note that all + // the funcs/actions we construct here are precompiled, so that only one instance of + // each is preserved throughout the lifetime of the ObjectMethodExecutor. + + // var getAwaiterFunc = (object awaitable) => + // (object)((CustomAwaitableType)awaitable).GetAwaiter(); + var customAwaitableParam = Expression.Parameter(typeof(object), "awaitable"); + var awaitableInfo = coercedAwaitableInfo.AwaitableInfo; + var postCoercionMethodReturnType = coercedAwaitableInfo.CoercerResultType ?? methodInfo.ReturnType; + var getAwaiterFunc = Expression.Lambda>( + Expression.Convert( + Expression.Call( + Expression.Convert(customAwaitableParam, postCoercionMethodReturnType), + awaitableInfo.GetAwaiterMethod), + typeof(object)), + customAwaitableParam).Compile(); + + // var isCompletedFunc = (object awaiter) => + // ((CustomAwaiterType)awaiter).IsCompleted; + var isCompletedParam = Expression.Parameter(typeof(object), "awaiter"); + var isCompletedFunc = Expression.Lambda>( + Expression.MakeMemberAccess( + Expression.Convert(isCompletedParam, awaitableInfo.AwaiterType), + awaitableInfo.AwaiterIsCompletedProperty), + isCompletedParam).Compile(); + + var getResultParam = Expression.Parameter(typeof(object), "awaiter"); + Func getResultFunc; + if (awaitableInfo.ResultType == typeof(void)) + { + // var getResultFunc = (object awaiter) => + // { + // ((CustomAwaiterType)awaiter).GetResult(); // We need to invoke this to surface any exceptions + // return (object)null; + // }; + getResultFunc = Expression.Lambda>( + Expression.Block( + Expression.Call( + Expression.Convert(getResultParam, awaitableInfo.AwaiterType), + awaitableInfo.AwaiterGetResultMethod), + Expression.Constant(null) + ), + getResultParam).Compile(); + } + else + { + // var getResultFunc = (object awaiter) => + // (object)((CustomAwaiterType)awaiter).GetResult(); + getResultFunc = Expression.Lambda>( + Expression.Convert( + Expression.Call( + Expression.Convert(getResultParam, awaitableInfo.AwaiterType), + awaitableInfo.AwaiterGetResultMethod), + typeof(object)), + getResultParam).Compile(); + } + + // var onCompletedFunc = (object awaiter, Action continuation) => { + // ((CustomAwaiterType)awaiter).OnCompleted(continuation); + // }; + var onCompletedParam1 = Expression.Parameter(typeof(object), "awaiter"); + var onCompletedParam2 = Expression.Parameter(typeof(Action), "continuation"); + var onCompletedFunc = Expression.Lambda>( + Expression.Call( + Expression.Convert(onCompletedParam1, awaitableInfo.AwaiterType), + awaitableInfo.AwaiterOnCompletedMethod, + onCompletedParam2), + onCompletedParam1, + onCompletedParam2).Compile(); + + Action unsafeOnCompletedFunc = null; + if (awaitableInfo.AwaiterUnsafeOnCompletedMethod != null) + { + // var unsafeOnCompletedFunc = (object awaiter, Action continuation) => { + // ((CustomAwaiterType)awaiter).UnsafeOnCompleted(continuation); + // }; + var unsafeOnCompletedParam1 = Expression.Parameter(typeof(object), "awaiter"); + var unsafeOnCompletedParam2 = Expression.Parameter(typeof(Action), "continuation"); + unsafeOnCompletedFunc = Expression.Lambda>( + Expression.Call( + Expression.Convert(unsafeOnCompletedParam1, awaitableInfo.AwaiterType), + awaitableInfo.AwaiterUnsafeOnCompletedMethod, + unsafeOnCompletedParam2), + unsafeOnCompletedParam1, + unsafeOnCompletedParam2).Compile(); + } + + // If we need to pass the method call result through a coercer function to get an + // awaitable, then do so. + var coercedMethodCall = coercedAwaitableInfo.RequiresCoercion + ? Expression.Invoke(coercedAwaitableInfo.CoercerExpression, methodCall) + : (Expression)methodCall; + + // return new ObjectMethodExecutorAwaitable( + // (object)coercedMethodCall, + // getAwaiterFunc, + // isCompletedFunc, + // getResultFunc, + // onCompletedFunc, + // unsafeOnCompletedFunc); + var returnValueExpression = Expression.New( + _objectMethodExecutorAwaitableConstructor, + Expression.Convert(coercedMethodCall, typeof(object)), + Expression.Constant(getAwaiterFunc), + Expression.Constant(isCompletedFunc), + Expression.Constant(getResultFunc), + Expression.Constant(onCompletedFunc), + Expression.Constant(unsafeOnCompletedFunc, typeof(Action))); + + var lambda = Expression.Lambda(returnValueExpression, targetParameter, parametersParameter); + return lambda.Compile(); + } + } +} diff --git a/src/Shared/ObjectMethodExecutor/ObjectMethodExecutorAwaitable.cs b/src/Shared/ObjectMethodExecutor/ObjectMethodExecutorAwaitable.cs new file mode 100644 index 000000000000..7509b86b2ba5 --- /dev/null +++ b/src/Shared/ObjectMethodExecutor/ObjectMethodExecutorAwaitable.cs @@ -0,0 +1,114 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Runtime.CompilerServices; + +namespace Microsoft.Extensions.Internal +{ + /// + /// Provides a common awaitable structure that can + /// return, regardless of whether the underlying value is a System.Task, an FSharpAsync, or an + /// application-defined custom awaitable. + /// + internal struct ObjectMethodExecutorAwaitable + { + private readonly object _customAwaitable; + private readonly Func _getAwaiterMethod; + private readonly Func _isCompletedMethod; + private readonly Func _getResultMethod; + private readonly Action _onCompletedMethod; + private readonly Action _unsafeOnCompletedMethod; + + // Perf note: since we're requiring the customAwaitable to be supplied here as an object, + // this will trigger a further allocation if it was a value type (i.e., to box it). We can't + // fix this by making the customAwaitable type generic, because the calling code typically + // does not know the type of the awaitable/awaiter at compile-time anyway. + // + // However, we could fix it by not passing the customAwaitable here at all, and instead + // passing a func that maps directly from the target object (e.g., controller instance), + // target method (e.g., action method info), and params array to the custom awaiter in the + // GetAwaiter() method below. In effect, by delaying the actual method call until the + // upstream code calls GetAwaiter on this ObjectMethodExecutorAwaitable instance. + // This optimization is not currently implemented because: + // [1] It would make no difference when the awaitable was an object type, which is + // by far the most common scenario (e.g., System.Task). + // [2] It would be complex - we'd need some kind of object pool to track all the parameter + // arrays until we needed to use them in GetAwaiter(). + // We can reconsider this in the future if there's a need to optimize for ValueTask + // or other value-typed awaitables. + + public ObjectMethodExecutorAwaitable( + object customAwaitable, + Func getAwaiterMethod, + Func isCompletedMethod, + Func getResultMethod, + Action onCompletedMethod, + Action unsafeOnCompletedMethod) + { + _customAwaitable = customAwaitable; + _getAwaiterMethod = getAwaiterMethod; + _isCompletedMethod = isCompletedMethod; + _getResultMethod = getResultMethod; + _onCompletedMethod = onCompletedMethod; + _unsafeOnCompletedMethod = unsafeOnCompletedMethod; + } + + public Awaiter GetAwaiter() + { + var customAwaiter = _getAwaiterMethod(_customAwaitable); + return new Awaiter(customAwaiter, _isCompletedMethod, _getResultMethod, _onCompletedMethod, _unsafeOnCompletedMethod); + } + + public struct Awaiter : ICriticalNotifyCompletion + { + private readonly object _customAwaiter; + private readonly Func _isCompletedMethod; + private readonly Func _getResultMethod; + private readonly Action _onCompletedMethod; + private readonly Action _unsafeOnCompletedMethod; + + public Awaiter( + object customAwaiter, + Func isCompletedMethod, + Func getResultMethod, + Action onCompletedMethod, + Action unsafeOnCompletedMethod) + { + _customAwaiter = customAwaiter; + _isCompletedMethod = isCompletedMethod; + _getResultMethod = getResultMethod; + _onCompletedMethod = onCompletedMethod; + _unsafeOnCompletedMethod = unsafeOnCompletedMethod; + } + + public bool IsCompleted => _isCompletedMethod(_customAwaiter); + + public object GetResult() => _getResultMethod(_customAwaiter); + + public void OnCompleted(Action continuation) + { + _onCompletedMethod(_customAwaiter, continuation); + } + + public void UnsafeOnCompleted(Action continuation) + { + // If the underlying awaitable implements ICriticalNotifyCompletion, use its UnsafeOnCompleted. + // If not, fall back on using its OnCompleted. + // + // Why this is safe: + // - Implementing ICriticalNotifyCompletion is a way of saying the caller can choose whether it + // needs the execution context to be preserved (which it signals by calling OnCompleted), or + // that it doesn't (which it signals by calling UnsafeOnCompleted). Obviously it's faster *not* + // to preserve and restore the context, so we prefer that where possible. + // - If a caller doesn't need the execution context to be preserved and hence calls UnsafeOnCompleted, + // there's no harm in preserving it anyway - it's just a bit of wasted cost. That's what will happen + // if a caller sees that the proxy implements ICriticalNotifyCompletion but the proxy chooses to + // pass the call on to the underlying awaitable's OnCompleted method. + + var underlyingMethodToUse = _unsafeOnCompletedMethod ?? _onCompletedMethod; + underlyingMethodToUse(_customAwaiter, continuation); + } + } + } +} \ No newline at end of file diff --git a/src/Shared/ObjectMethodExecutor/ObjectMethodExecutorFSharpSupport.cs b/src/Shared/ObjectMethodExecutor/ObjectMethodExecutorFSharpSupport.cs new file mode 100644 index 000000000000..2198c0ce4506 --- /dev/null +++ b/src/Shared/ObjectMethodExecutor/ObjectMethodExecutorFSharpSupport.cs @@ -0,0 +1,151 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Linq; +using System.Linq.Expressions; +using System.Reflection; +using System.Threading; +using System.Threading.Tasks; + +namespace Microsoft.Extensions.Internal +{ + /// + /// Helper for detecting whether a given type is FSharpAsync`1, and if so, supplying + /// an for mapping instances of that type to a C# awaitable. + /// + /// + /// The main design goal here is to avoid taking a compile-time dependency on + /// FSharp.Core.dll, because non-F# applications wouldn't use it. So all the references + /// to FSharp types have to be constructed dynamically at runtime. + /// + internal static class ObjectMethodExecutorFSharpSupport + { + private static object _fsharpValuesCacheLock = new object(); + private static Assembly _fsharpCoreAssembly; + private static MethodInfo _fsharpAsyncStartAsTaskGenericMethod; + private static PropertyInfo _fsharpOptionOfTaskCreationOptionsNoneProperty; + private static PropertyInfo _fsharpOptionOfCancellationTokenNoneProperty; + + public static bool TryBuildCoercerFromFSharpAsyncToAwaitable( + Type possibleFSharpAsyncType, + out Expression coerceToAwaitableExpression, + out Type awaitableType) + { + var methodReturnGenericType = possibleFSharpAsyncType.IsGenericType + ? possibleFSharpAsyncType.GetGenericTypeDefinition() + : null; + + if (!IsFSharpAsyncOpenGenericType(methodReturnGenericType)) + { + coerceToAwaitableExpression = null; + awaitableType = null; + return false; + } + + var awaiterResultType = possibleFSharpAsyncType.GetGenericArguments().Single(); + awaitableType = typeof(Task<>).MakeGenericType(awaiterResultType); + + // coerceToAwaitableExpression = (object fsharpAsync) => + // { + // return (object)FSharpAsync.StartAsTask( + // (Microsoft.FSharp.Control.FSharpAsync)fsharpAsync, + // FSharpOption.None, + // FSharpOption.None); + // }; + var startAsTaskClosedMethod = _fsharpAsyncStartAsTaskGenericMethod + .MakeGenericMethod(awaiterResultType); + var coerceToAwaitableParam = Expression.Parameter(typeof(object)); + coerceToAwaitableExpression = Expression.Lambda( + Expression.Convert( + Expression.Call( + startAsTaskClosedMethod, + Expression.Convert(coerceToAwaitableParam, possibleFSharpAsyncType), + Expression.MakeMemberAccess(null, _fsharpOptionOfTaskCreationOptionsNoneProperty), + Expression.MakeMemberAccess(null, _fsharpOptionOfCancellationTokenNoneProperty)), + typeof(object)), + coerceToAwaitableParam); + + return true; + } + + private static bool IsFSharpAsyncOpenGenericType(Type possibleFSharpAsyncGenericType) + { + var typeFullName = possibleFSharpAsyncGenericType?.FullName; + if (!string.Equals(typeFullName, "Microsoft.FSharp.Control.FSharpAsync`1", StringComparison.Ordinal)) + { + return false; + } + + lock (_fsharpValuesCacheLock) + { + if (_fsharpCoreAssembly != null) + { + // Since we've already found the real FSharpAsync.Core assembly, we just have + // to check that the supplied FSharpAsync`1 type is the one from that assembly. + return possibleFSharpAsyncGenericType.Assembly == _fsharpCoreAssembly; + } + else + { + // We'll keep trying to find the FSharp types/values each time any type called + // FSharpAsync`1 is supplied. + return TryPopulateFSharpValueCaches(possibleFSharpAsyncGenericType); + } + } + } + + private static bool TryPopulateFSharpValueCaches(Type possibleFSharpAsyncGenericType) + { + var assembly = possibleFSharpAsyncGenericType.Assembly; + var fsharpOptionType = assembly.GetType("Microsoft.FSharp.Core.FSharpOption`1"); + var fsharpAsyncType = assembly.GetType("Microsoft.FSharp.Control.FSharpAsync"); + + if (fsharpOptionType == null || fsharpAsyncType == null) + { + return false; + } + + // Get a reference to FSharpOption.None + var fsharpOptionOfTaskCreationOptionsType = fsharpOptionType + .MakeGenericType(typeof(TaskCreationOptions)); + _fsharpOptionOfTaskCreationOptionsNoneProperty = fsharpOptionOfTaskCreationOptionsType + .GetTypeInfo() + .GetRuntimeProperty("None"); + + // Get a reference to FSharpOption.None + var fsharpOptionOfCancellationTokenType = fsharpOptionType + .MakeGenericType(typeof(CancellationToken)); + _fsharpOptionOfCancellationTokenNoneProperty = fsharpOptionOfCancellationTokenType + .GetTypeInfo() + .GetRuntimeProperty("None"); + + // Get a reference to FSharpAsync.StartAsTask<> + var fsharpAsyncMethods = fsharpAsyncType + .GetRuntimeMethods() + .Where(m => m.Name.Equals("StartAsTask", StringComparison.Ordinal)); + foreach (var candidateMethodInfo in fsharpAsyncMethods) + { + var parameters = candidateMethodInfo.GetParameters(); + if (parameters.Length == 3 + && TypesHaveSameIdentity(parameters[0].ParameterType, possibleFSharpAsyncGenericType) + && parameters[1].ParameterType == fsharpOptionOfTaskCreationOptionsType + && parameters[2].ParameterType == fsharpOptionOfCancellationTokenType) + { + // This really does look like the correct method (and hence assembly). + _fsharpAsyncStartAsTaskGenericMethod = candidateMethodInfo; + _fsharpCoreAssembly = assembly; + break; + } + } + + return _fsharpCoreAssembly != null; + } + + private static bool TypesHaveSameIdentity(Type type1, Type type2) + { + return type1.Assembly == type2.Assembly + && string.Equals(type1.Namespace, type2.Namespace, StringComparison.Ordinal) + && string.Equals(type1.Name, type2.Name, StringComparison.Ordinal); + } + } +} diff --git a/src/Shared/Process/ProcessExtensions.cs b/src/Shared/Process/ProcessExtensions.cs new file mode 100644 index 000000000000..c6cbd1f9700b --- /dev/null +++ b/src/Shared/Process/ProcessExtensions.cs @@ -0,0 +1,106 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Runtime.InteropServices; + +namespace Microsoft.Extensions.Internal +{ + internal static class ProcessExtensions + { + private static readonly bool _isWindows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows); + private static readonly TimeSpan _defaultTimeout = TimeSpan.FromSeconds(30); + + public static void KillTree(this Process process) => process.KillTree(_defaultTimeout); + + public static void KillTree(this Process process, TimeSpan timeout) + { + var pid = process.Id; + if (_isWindows) + { + RunProcessAndWaitForExit( + "taskkill", + $"/T /F /PID {pid}", + timeout, + out var _); + } + else + { + var children = new HashSet(); + GetAllChildIdsUnix(pid, children, timeout); + foreach (var childId in children) + { + KillProcessUnix(childId, timeout); + } + KillProcessUnix(pid, timeout); + } + } + + private static void GetAllChildIdsUnix(int parentId, ISet children, TimeSpan timeout) + { + RunProcessAndWaitForExit( + "pgrep", + $"-P {parentId}", + timeout, + out var stdout); + + if (!string.IsNullOrEmpty(stdout)) + { + using (var reader = new StringReader(stdout)) + { + while (true) + { + var text = reader.ReadLine(); + if (text == null) + { + return; + } + + if (int.TryParse(text, out var id)) + { + children.Add(id); + // Recursively get the children + GetAllChildIdsUnix(id, children, timeout); + } + } + } + } + } + + private static void KillProcessUnix(int processId, TimeSpan timeout) + { + RunProcessAndWaitForExit( + "kill", + $"-TERM {processId}", + timeout, + out var stdout); + } + + private static void RunProcessAndWaitForExit(string fileName, string arguments, TimeSpan timeout, out string stdout) + { + var startInfo = new ProcessStartInfo + { + FileName = fileName, + Arguments = arguments, + RedirectStandardOutput = true, + RedirectStandardError = true, + UseShellExecute = false, + }; + + var process = Process.Start(startInfo); + + stdout = null; + if (process.WaitForExit((int)timeout.TotalMilliseconds)) + { + stdout = process.StandardOutput.ReadToEnd(); + } + else + { + process.Kill(); + } + } + } +} diff --git a/src/Shared/PropertyActivator/PropertyActivator.cs b/src/Shared/PropertyActivator/PropertyActivator.cs new file mode 100644 index 000000000000..925f6a76ae0b --- /dev/null +++ b/src/Shared/PropertyActivator/PropertyActivator.cs @@ -0,0 +1,110 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Linq; +using System.Reflection; + +namespace Microsoft.Extensions.Internal +{ + internal class PropertyActivator + { + private readonly Func _valueAccessor; + private readonly Action _fastPropertySetter; + + public PropertyActivator( + PropertyInfo propertyInfo, + Func valueAccessor) + { + if (propertyInfo == null) + { + throw new ArgumentNullException(nameof(propertyInfo)); + } + + if (valueAccessor == null) + { + throw new ArgumentNullException(nameof(valueAccessor)); + } + + PropertyInfo = propertyInfo; + _valueAccessor = valueAccessor; + _fastPropertySetter = PropertyHelper.MakeFastPropertySetter(propertyInfo); + } + + public PropertyInfo PropertyInfo { get; private set; } + + public object Activate(object instance, TContext context) + { + if (instance == null) + { + throw new ArgumentNullException(nameof(instance)); + } + + var value = _valueAccessor(context); + _fastPropertySetter(instance, value); + return value; + } + + public static PropertyActivator[] GetPropertiesToActivate( + Type type, + Type activateAttributeType, + Func> createActivateInfo) + { + if (type == null) + { + throw new ArgumentNullException(nameof(type)); + } + + if (activateAttributeType == null) + { + throw new ArgumentNullException(nameof(activateAttributeType)); + } + + if (createActivateInfo == null) + { + throw new ArgumentNullException(nameof(createActivateInfo)); + } + + return GetPropertiesToActivate(type, activateAttributeType, createActivateInfo, includeNonPublic: false); + } + + public static PropertyActivator[] GetPropertiesToActivate( + Type type, + Type activateAttributeType, + Func> createActivateInfo, + bool includeNonPublic) + { + if (type == null) + { + throw new ArgumentNullException(nameof(type)); + } + + if (activateAttributeType == null) + { + throw new ArgumentNullException(nameof(activateAttributeType)); + } + + if (createActivateInfo == null) + { + throw new ArgumentNullException(nameof(createActivateInfo)); + } + + var properties = type.GetRuntimeProperties() + .Where((property) => + { + return + property.IsDefined(activateAttributeType) && + property.GetIndexParameters().Length == 0 && + property.SetMethod != null && + !property.SetMethod.IsStatic; + }); + + if (!includeNonPublic) + { + properties = properties.Where(property => property.SetMethod.IsPublic); + } + + return properties.Select(createActivateInfo).ToArray(); + } + } +} \ No newline at end of file diff --git a/src/Shared/PropertyHelper/PropertyHelper.cs b/src/Shared/PropertyHelper/PropertyHelper.cs new file mode 100644 index 000000000000..f3641e03dc0d --- /dev/null +++ b/src/Shared/PropertyHelper/PropertyHelper.cs @@ -0,0 +1,547 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Reflection; + +namespace Microsoft.Extensions.Internal +{ + internal class PropertyHelper + { + // Delegate type for a by-ref property getter + private delegate TValue ByRefFunc(ref TDeclaringType arg); + + private static readonly MethodInfo CallPropertyGetterOpenGenericMethod = + typeof(PropertyHelper).GetTypeInfo().GetDeclaredMethod(nameof(CallPropertyGetter)); + + private static readonly MethodInfo CallPropertyGetterByReferenceOpenGenericMethod = + typeof(PropertyHelper).GetTypeInfo().GetDeclaredMethod(nameof(CallPropertyGetterByReference)); + + private static readonly MethodInfo CallNullSafePropertyGetterOpenGenericMethod = + typeof(PropertyHelper).GetTypeInfo().GetDeclaredMethod(nameof(CallNullSafePropertyGetter)); + + private static readonly MethodInfo CallNullSafePropertyGetterByReferenceOpenGenericMethod = + typeof(PropertyHelper).GetTypeInfo().GetDeclaredMethod(nameof(CallNullSafePropertyGetterByReference)); + + private static readonly MethodInfo CallPropertySetterOpenGenericMethod = + typeof(PropertyHelper).GetTypeInfo().GetDeclaredMethod(nameof(CallPropertySetter)); + + // Using an array rather than IEnumerable, as target will be called on the hot path numerous times. + private static readonly ConcurrentDictionary PropertiesCache = + new ConcurrentDictionary(); + + private static readonly ConcurrentDictionary VisiblePropertiesCache = + new ConcurrentDictionary(); + + // We need to be able to check if a type is a 'ref struct' - but we need to be able to compile + // for platforms where the attribute is not defined, like net46. So we can fetch the attribute + // by late binding. If the attribute isn't defined, then we assume we won't encounter any + // 'ref struct' types. + private static readonly Type IsByRefLikeAttribute = Type.GetType("System.Runtime.CompilerServices.IsByRefLikeAttribute", throwOnError: false); + + private Action _valueSetter; + private Func _valueGetter; + + /// + /// Initializes a fast . + /// This constructor does not cache the helper. For caching, use . + /// + public PropertyHelper(PropertyInfo property) + { + if (property == null) + { + throw new ArgumentNullException(nameof(property)); + } + + Property = property; + Name = property.Name; + } + + /// + /// Gets the backing . + /// + public PropertyInfo Property { get; } + + /// + /// Gets (or sets in derived types) the property name. + /// + public virtual string Name { get; protected set; } + + /// + /// Gets the property value getter. + /// + public Func ValueGetter + { + get + { + if (_valueGetter == null) + { + _valueGetter = MakeFastPropertyGetter(Property); + } + + return _valueGetter; + } + } + + /// + /// Gets the property value setter. + /// + public Action ValueSetter + { + get + { + if (_valueSetter == null) + { + _valueSetter = MakeFastPropertySetter(Property); + } + + return _valueSetter; + } + } + + /// + /// Returns the property value for the specified . + /// + /// The object whose property value will be returned. + /// The property value. + public object GetValue(object instance) + { + return ValueGetter(instance); + } + + /// + /// Sets the property value for the specified . + /// + /// The object whose property value will be set. + /// The property value. + public void SetValue(object instance, object value) + { + ValueSetter(instance, value); + } + + /// + /// Creates and caches fast property helpers that expose getters for every public get property on the + /// underlying type. + /// + /// The type info to extract property accessors for. + /// A cached array of all public properties of the specified type. + /// + public static PropertyHelper[] GetProperties(TypeInfo typeInfo) + { + return GetProperties(typeInfo.AsType()); + } + + /// + /// Creates and caches fast property helpers that expose getters for every public get property on the + /// specified type. + /// + /// The type to extract property accessors for. + /// A cached array of all public properties of the specified type. + /// + public static PropertyHelper[] GetProperties(Type type) + { + return GetProperties(type, p => CreateInstance(p), PropertiesCache); + } + + /// + /// + /// Creates and caches fast property helpers that expose getters for every non-hidden get property + /// on the specified type. + /// + /// + /// excludes properties defined on base types that have been + /// hidden by definitions using the new keyword. + /// + /// + /// The type info to extract property accessors for. + /// + /// A cached array of all public properties of the specified type. + /// + public static PropertyHelper[] GetVisibleProperties(TypeInfo typeInfo) + { + return GetVisibleProperties(typeInfo.AsType(), p => CreateInstance(p), PropertiesCache, VisiblePropertiesCache); + } + + /// + /// + /// Creates and caches fast property helpers that expose getters for every non-hidden get property + /// on the specified type. + /// + /// + /// excludes properties defined on base types that have been + /// hidden by definitions using the new keyword. + /// + /// + /// The type to extract property accessors for. + /// + /// A cached array of all public properties of the specified type. + /// + public static PropertyHelper[] GetVisibleProperties(Type type) + { + return GetVisibleProperties(type, p => CreateInstance(p), PropertiesCache, VisiblePropertiesCache); + } + + /// + /// Creates a single fast property getter. The result is not cached. + /// + /// propertyInfo to extract the getter for. + /// a fast getter. + /// + /// This method is more memory efficient than a dynamically compiled lambda, and about the + /// same speed. + /// + public static Func MakeFastPropertyGetter(PropertyInfo propertyInfo) + { + Debug.Assert(propertyInfo != null); + + return MakeFastPropertyGetter( + propertyInfo, + CallPropertyGetterOpenGenericMethod, + CallPropertyGetterByReferenceOpenGenericMethod); + } + + /// + /// Creates a single fast property getter which is safe for a null input object. The result is not cached. + /// + /// propertyInfo to extract the getter for. + /// a fast getter. + /// + /// This method is more memory efficient than a dynamically compiled lambda, and about the + /// same speed. + /// + public static Func MakeNullSafeFastPropertyGetter(PropertyInfo propertyInfo) + { + Debug.Assert(propertyInfo != null); + + return MakeFastPropertyGetter( + propertyInfo, + CallNullSafePropertyGetterOpenGenericMethod, + CallNullSafePropertyGetterByReferenceOpenGenericMethod); + } + + private static Func MakeFastPropertyGetter( + PropertyInfo propertyInfo, + MethodInfo propertyGetterWrapperMethod, + MethodInfo propertyGetterByRefWrapperMethod) + { + Debug.Assert(propertyInfo != null); + + // Must be a generic method with a Func<,> parameter + Debug.Assert(propertyGetterWrapperMethod != null); + Debug.Assert(propertyGetterWrapperMethod.IsGenericMethodDefinition); + Debug.Assert(propertyGetterWrapperMethod.GetParameters().Length == 2); + + // Must be a generic method with a ByRefFunc<,> parameter + Debug.Assert(propertyGetterByRefWrapperMethod != null); + Debug.Assert(propertyGetterByRefWrapperMethod.IsGenericMethodDefinition); + Debug.Assert(propertyGetterByRefWrapperMethod.GetParameters().Length == 2); + + var getMethod = propertyInfo.GetMethod; + Debug.Assert(getMethod != null); + Debug.Assert(!getMethod.IsStatic); + Debug.Assert(getMethod.GetParameters().Length == 0); + + // Instance methods in the CLR can be turned into static methods where the first parameter + // is open over "target". This parameter is always passed by reference, so we have a code + // path for value types and a code path for reference types. + if (getMethod.DeclaringType.GetTypeInfo().IsValueType) + { + // Create a delegate (ref TDeclaringType) -> TValue + return MakeFastPropertyGetter( + typeof(ByRefFunc<,>), + getMethod, + propertyGetterByRefWrapperMethod); + } + else + { + // Create a delegate TDeclaringType -> TValue + return MakeFastPropertyGetter( + typeof(Func<,>), + getMethod, + propertyGetterWrapperMethod); + } + } + + private static Func MakeFastPropertyGetter( + Type openGenericDelegateType, + MethodInfo propertyGetMethod, + MethodInfo openGenericWrapperMethod) + { + var typeInput = propertyGetMethod.DeclaringType; + var typeOutput = propertyGetMethod.ReturnType; + + var delegateType = openGenericDelegateType.MakeGenericType(typeInput, typeOutput); + var propertyGetterDelegate = propertyGetMethod.CreateDelegate(delegateType); + + var wrapperDelegateMethod = openGenericWrapperMethod.MakeGenericMethod(typeInput, typeOutput); + var accessorDelegate = wrapperDelegateMethod.CreateDelegate( + typeof(Func), + propertyGetterDelegate); + + return (Func)accessorDelegate; + } + + /// + /// Creates a single fast property setter for reference types. The result is not cached. + /// + /// propertyInfo to extract the setter for. + /// a fast getter. + /// + /// This method is more memory efficient than a dynamically compiled lambda, and about the + /// same speed. This only works for reference types. + /// + public static Action MakeFastPropertySetter(PropertyInfo propertyInfo) + { + Debug.Assert(propertyInfo != null); + Debug.Assert(!propertyInfo.DeclaringType.GetTypeInfo().IsValueType); + + var setMethod = propertyInfo.SetMethod; + Debug.Assert(setMethod != null); + Debug.Assert(!setMethod.IsStatic); + Debug.Assert(setMethod.ReturnType == typeof(void)); + var parameters = setMethod.GetParameters(); + Debug.Assert(parameters.Length == 1); + + // Instance methods in the CLR can be turned into static methods where the first parameter + // is open over "target". This parameter is always passed by reference, so we have a code + // path for value types and a code path for reference types. + var typeInput = setMethod.DeclaringType; + var parameterType = parameters[0].ParameterType; + + // Create a delegate TDeclaringType -> { TDeclaringType.Property = TValue; } + var propertySetterAsAction = + setMethod.CreateDelegate(typeof(Action<,>).MakeGenericType(typeInput, parameterType)); + var callPropertySetterClosedGenericMethod = + CallPropertySetterOpenGenericMethod.MakeGenericMethod(typeInput, parameterType); + var callPropertySetterDelegate = + callPropertySetterClosedGenericMethod.CreateDelegate( + typeof(Action), propertySetterAsAction); + + return (Action)callPropertySetterDelegate; + } + + /// + /// Given an object, adds each instance property with a public get method as a key and its + /// associated value to a dictionary. + /// + /// If the object is already an instance, then a copy + /// is returned. + /// + /// + /// The implementation of PropertyHelper will cache the property accessors per-type. This is + /// faster when the same type is used multiple times with ObjectToDictionary. + /// + public static IDictionary ObjectToDictionary(object value) + { + var dictionary = value as IDictionary; + if (dictionary != null) + { + return new Dictionary(dictionary, StringComparer.OrdinalIgnoreCase); + } + + dictionary = new Dictionary(StringComparer.OrdinalIgnoreCase); + + if (value != null) + { + foreach (var helper in GetProperties(value.GetType())) + { + dictionary[helper.Name] = helper.GetValue(value); + } + } + + return dictionary; + } + + private static PropertyHelper CreateInstance(PropertyInfo property) + { + return new PropertyHelper(property); + } + + // Called via reflection + private static object CallPropertyGetter( + Func getter, + object target) + { + return getter((TDeclaringType)target); + } + + // Called via reflection + private static object CallPropertyGetterByReference( + ByRefFunc getter, + object target) + { + var unboxed = (TDeclaringType)target; + return getter(ref unboxed); + } + + // Called via reflection + private static object CallNullSafePropertyGetter( + Func getter, + object target) + { + if (target == null) + { + return null; + } + + return getter((TDeclaringType)target); + } + + // Called via reflection + private static object CallNullSafePropertyGetterByReference( + ByRefFunc getter, + object target) + { + if (target == null) + { + return null; + } + + var unboxed = (TDeclaringType)target; + return getter(ref unboxed); + } + + private static void CallPropertySetter( + Action setter, + object target, + object value) + { + setter((TDeclaringType)target, (TValue)value); + } + + protected static PropertyHelper[] GetVisibleProperties( + Type type, + Func createPropertyHelper, + ConcurrentDictionary allPropertiesCache, + ConcurrentDictionary visiblePropertiesCache) + { + if (visiblePropertiesCache.TryGetValue(type, out var result)) + { + return result; + } + + // The simple and common case, this is normal POCO object - no need to allocate. + var allPropertiesDefinedOnType = true; + var allProperties = GetProperties(type, createPropertyHelper, allPropertiesCache); + foreach (var propertyHelper in allProperties) + { + if (propertyHelper.Property.DeclaringType != type) + { + allPropertiesDefinedOnType = false; + break; + } + } + + if (allPropertiesDefinedOnType) + { + result = allProperties; + visiblePropertiesCache.TryAdd(type, result); + return result; + } + + // There's some inherited properties here, so we need to check for hiding via 'new'. + var filteredProperties = new List(allProperties.Length); + foreach (var propertyHelper in allProperties) + { + var declaringType = propertyHelper.Property.DeclaringType; + if (declaringType == type) + { + filteredProperties.Add(propertyHelper); + continue; + } + + // If this property was declared on a base type then look for the definition closest to the + // the type to see if we should include it. + var ignoreProperty = false; + + // Walk up the hierarchy until we find the type that actually declares this + // PropertyInfo. + var currentTypeInfo = type.GetTypeInfo(); + var declaringTypeInfo = declaringType.GetTypeInfo(); + while (currentTypeInfo != null && currentTypeInfo != declaringTypeInfo) + { + // We've found a 'more proximal' public definition + var declaredProperty = currentTypeInfo.GetDeclaredProperty(propertyHelper.Name); + if (declaredProperty != null) + { + ignoreProperty = true; + break; + } + + currentTypeInfo = currentTypeInfo.BaseType?.GetTypeInfo(); + } + + if (!ignoreProperty) + { + filteredProperties.Add(propertyHelper); + } + } + + result = filteredProperties.ToArray(); + visiblePropertiesCache.TryAdd(type, result); + return result; + } + + protected static PropertyHelper[] GetProperties( + Type type, + Func createPropertyHelper, + ConcurrentDictionary cache) + { + // Unwrap nullable types. This means Nullable.Value and Nullable.HasValue will not be + // part of the sequence of properties returned by this method. + type = Nullable.GetUnderlyingType(type) ?? type; + + if (!cache.TryGetValue(type, out var helpers)) + { + // We avoid loading indexed properties using the Where statement. + var properties = type.GetRuntimeProperties().Where(p => IsInterestingProperty(p)); + + var typeInfo = type.GetTypeInfo(); + if (typeInfo.IsInterface) + { + // Reflection does not return information about inherited properties on the interface itself. + properties = properties.Concat(typeInfo.ImplementedInterfaces.SelectMany( + interfaceType => interfaceType.GetRuntimeProperties().Where(p => IsInterestingProperty(p)))); + } + + helpers = properties.Select(p => createPropertyHelper(p)).ToArray(); + cache.TryAdd(type, helpers); + } + + return helpers; + } + + private static bool IsInterestingProperty(PropertyInfo property) + { + // For improving application startup time, do not use GetIndexParameters() api early in this check as it + // creates a copy of parameter array and also we would like to check for the presence of a get method + // and short circuit asap. + return + property.GetMethod != null && + property.GetMethod.IsPublic && + !property.GetMethod.IsStatic && + + // PropertyHelper can't work with ref structs. + !IsRefStructProperty(property) && + + // Indexed properties are not useful (or valid) for grabbing properties off an object. + property.GetMethod.GetParameters().Length == 0; + } + + // PropertyHelper can't really interact with ref-struct properties since they can't be + // boxed and can't be used as generic types. We just ignore them. + // + // see: https://github.com/aspnet/Mvc/issues/8545 + private static bool IsRefStructProperty(PropertyInfo property) + { + return + IsByRefLikeAttribute != null && + property.PropertyType.IsValueType && + property.PropertyType.IsDefined(IsByRefLikeAttribute); + } + } +} diff --git a/src/Shared/RazorViews/AttributeValue.cs b/src/Shared/RazorViews/AttributeValue.cs new file mode 100644 index 000000000000..7a066a7040b3 --- /dev/null +++ b/src/Shared/RazorViews/AttributeValue.cs @@ -0,0 +1,38 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; + +namespace Microsoft.Extensions.RazorViews +{ + internal class AttributeValue + { + public AttributeValue(string prefix, object value, bool literal) + { + Prefix = prefix; + Value = value; + Literal = literal; + } + + public string Prefix { get; } + + public object Value { get; } + + public bool Literal { get; } + + public static AttributeValue FromTuple(Tuple value) + { + return new AttributeValue(value.Item1, value.Item2, value.Item3); + } + + public static AttributeValue FromTuple(Tuple value) + { + return new AttributeValue(value.Item1, value.Item2, value.Item3); + } + + public static implicit operator AttributeValue(Tuple value) + { + return FromTuple(value); + } + } +} \ No newline at end of file diff --git a/src/Shared/RazorViews/BaseView.cs b/src/Shared/RazorViews/BaseView.cs new file mode 100644 index 000000000000..a171d8d1f215 --- /dev/null +++ b/src/Shared/RazorViews/BaseView.cs @@ -0,0 +1,279 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Text; +using System.Text.Encodings.Web; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Http; + +namespace Microsoft.Extensions.RazorViews +{ + /// + /// Infrastructure + /// + internal abstract class BaseView + { + private static readonly Encoding UTF8NoBOM = new UTF8Encoding(encoderShouldEmitUTF8Identifier: false, throwOnInvalidBytes: true); + private readonly Stack _textWriterStack = new Stack(); + + /// + /// The request context + /// + protected HttpContext Context { get; private set; } + + /// + /// The request + /// + protected HttpRequest Request { get; private set; } + + /// + /// The response + /// + protected HttpResponse Response { get; private set; } + + /// + /// The output stream + /// + protected TextWriter Output { get; private set; } + + /// + /// Html encoder used to encode content. + /// + protected HtmlEncoder HtmlEncoder { get; set; } = HtmlEncoder.Default; + + /// + /// Url encoder used to encode content. + /// + protected UrlEncoder UrlEncoder { get; set; } = UrlEncoder.Default; + + /// + /// JavaScript encoder used to encode content. + /// + protected JavaScriptEncoder JavaScriptEncoder { get; set; } = JavaScriptEncoder.Default; + + /// + /// Execute an individual request + /// + /// + public async Task ExecuteAsync(HttpContext context) + { + Context = context; + Request = Context.Request; + Response = Context.Response; + Output = new StreamWriter(Response.Body, UTF8NoBOM, 4096, leaveOpen: true); + await ExecuteAsync(); + Output.Dispose(); + } + + /// + /// Execute an individual request + /// + public abstract Task ExecuteAsync(); + + protected virtual void PushWriter(TextWriter writer) + { + if (writer == null) + { + throw new ArgumentNullException(nameof(writer)); + } + + _textWriterStack.Push(Output); + Output = writer; + } + + protected virtual TextWriter PopWriter() + { + Output = _textWriterStack.Pop(); + return Output; + } + + /// + /// Write the given value without HTML encoding directly to . + /// + /// The to write. + protected void WriteLiteral(object value) + { + WriteLiteral(Convert.ToString(value, CultureInfo.InvariantCulture)); + } + + /// + /// Write the given value without HTML encoding directly to . + /// + /// The to write. + protected void WriteLiteral(string value) + { + if (!string.IsNullOrEmpty(value)) + { + Output.Write(value); + } + } + + private List AttributeValues { get; set; } + + protected void WriteAttributeValue(string thingy, int startPostion, object value, int endValue, int dealyo, bool yesno) + { + if (AttributeValues == null) + { + AttributeValues = new List(); + } + + AttributeValues.Add(value.ToString()); + } + + private string AttributeEnding { get; set; } + + protected void BeginWriteAttribute(string name, string begining, int startPosition, string ending, int endPosition, int thingy) + { + Debug.Assert(string.IsNullOrEmpty(AttributeEnding)); + + Output.Write(begining); + AttributeEnding = ending; + } + + protected void EndWriteAttribute() + { + Debug.Assert(!string.IsNullOrEmpty(AttributeEnding)); + + var attributes = string.Join(" ", AttributeValues); + Output.Write(attributes); + AttributeValues = null; + + Output.Write(AttributeEnding); + AttributeEnding = null; + } + + /// + /// Writes the given attribute to the given writer + /// + /// The name of the attribute to write + /// The value of the prefix + /// The value of the suffix + /// The s to write. + protected void WriteAttribute( + string name, + string leader, + string trailer, + params AttributeValue[] values) + { + if (name == null) + { + throw new ArgumentNullException(nameof(name)); + } + + if (leader == null) + { + throw new ArgumentNullException(nameof(leader)); + } + + if (trailer == null) + { + throw new ArgumentNullException(nameof(trailer)); + } + + WriteLiteral(leader); + foreach (var value in values) + { + WriteLiteral(value.Prefix); + + // The special cases here are that the value we're writing might already be a string, or that the + // value might be a bool. If the value is the bool 'true' we want to write the attribute name + // instead of the string 'true'. If the value is the bool 'false' we don't want to write anything. + // Otherwise the value is another object (perhaps an HtmlString) and we'll ask it to format itself. + string stringValue; + if (value.Value is bool) + { + if ((bool)value.Value) + { + stringValue = name; + } + else + { + continue; + } + } + else + { + stringValue = value.Value as string; + } + + // Call the WriteTo(string) overload when possible + if (value.Literal && stringValue != null) + { + WriteLiteral(stringValue); + } + else if (value.Literal) + { + WriteLiteral(value.Value); + } + else if (stringValue != null) + { + Write(stringValue); + } + else + { + Write(value.Value); + } + } + WriteLiteral(trailer); + } + + /// + /// is invoked + /// + /// The to invoke + protected void Write(HelperResult result) + { + Write(result); + } + + /// + /// Writes the specified to . + /// + /// The to write. + /// + /// is invoked for types. + /// For all other types, the encoded result of is written to + /// . + /// + protected void Write(object value) + { + if (value is HelperResult helperResult) + { + helperResult.WriteTo(Output); + } + else + { + Write(Convert.ToString(value, CultureInfo.InvariantCulture)); + } + } + + /// + /// Writes the specified with HTML encoding to . + /// + /// The to write. + protected void Write(string value) + { + WriteLiteral(HtmlEncoder.Encode(value)); + } + + protected string HtmlEncodeAndReplaceLineBreaks(string input) + { + if (string.IsNullOrEmpty(input)) + { + return string.Empty; + } + + // Split on line breaks before passing it through the encoder. + return string.Join("
" + Environment.NewLine, + input.Split(new[] { "\r\n" }, StringSplitOptions.None) + .SelectMany(s => s.Split(new[] { '\r', '\n' }, StringSplitOptions.None)) + .Select(HtmlEncoder.Encode)); + } + } +} \ No newline at end of file diff --git a/src/Shared/RazorViews/HelperResult.cs b/src/Shared/RazorViews/HelperResult.cs new file mode 100644 index 000000000000..c79944aae646 --- /dev/null +++ b/src/Shared/RazorViews/HelperResult.cs @@ -0,0 +1,34 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.IO; + +namespace Microsoft.Extensions.RazorViews +{ + /// + /// Represents a deferred write operation in a . + /// + internal class HelperResult + { + /// + /// Creates a new instance of . + /// + /// The delegate to invoke when is called. + public HelperResult(Action action) + { + WriteAction = action; + } + + public Action WriteAction { get; } + + /// + /// Method invoked to produce content from the . + /// + /// The instance to write to. + public void WriteTo(TextWriter writer) + { + WriteAction(writer); + } + } +} \ No newline at end of file diff --git a/src/Shared/SecurityHelper/SecurityHelper.cs b/src/Shared/SecurityHelper/SecurityHelper.cs new file mode 100644 index 000000000000..408ef6b22439 --- /dev/null +++ b/src/Shared/SecurityHelper/SecurityHelper.cs @@ -0,0 +1,40 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Linq; +using System.Security.Claims; + +namespace Microsoft.Extensions.Internal +{ + /// + /// Helper code used when implementing authentication middleware + /// + internal static class SecurityHelper + { + /// + /// Add all ClaimsIdentities from an additional ClaimPrincipal to the ClaimsPrincipal + /// Merges a new claims principal, placing all new identities first, and eliminating + /// any empty unauthenticated identities from context.User + /// + /// The containing existing . + /// The containing to be added. + public static ClaimsPrincipal MergeUserPrincipal(ClaimsPrincipal existingPrincipal, ClaimsPrincipal additionalPrincipal) + { + var newPrincipal = new ClaimsPrincipal(); + + // New principal identities go first + if (additionalPrincipal != null) + { + newPrincipal.AddIdentities(additionalPrincipal.Identities); + } + + // Then add any existing non empty or authenticated identities + if (existingPrincipal != null) + { + newPrincipal.AddIdentities(existingPrincipal.Identities.Where(i => i.IsAuthenticated || i.Claims.Any())); + } + return newPrincipal; + } + } +} diff --git a/src/Shared/StackTrace/ExceptionDetails/ExceptionDetails.cs b/src/Shared/StackTrace/ExceptionDetails/ExceptionDetails.cs new file mode 100644 index 000000000000..8862611136e7 --- /dev/null +++ b/src/Shared/StackTrace/ExceptionDetails/ExceptionDetails.cs @@ -0,0 +1,29 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Collections.Generic; + +namespace Microsoft.Extensions.StackTrace.Sources +{ + /// + /// Contains details for individual exception messages. + /// + internal class ExceptionDetails + { + /// + /// An individual exception + /// + public Exception Error { get; set; } + + /// + /// The generated stack frames + /// + public IEnumerable StackFrames { get; set; } + + /// + /// Gets or sets the summary message. + /// + public string ErrorMessage { get; set; } + } +} diff --git a/src/Shared/StackTrace/ExceptionDetails/ExceptionDetailsProvider.cs b/src/Shared/StackTrace/ExceptionDetails/ExceptionDetailsProvider.cs new file mode 100644 index 000000000000..2d1dd20710ba --- /dev/null +++ b/src/Shared/StackTrace/ExceptionDetails/ExceptionDetailsProvider.cs @@ -0,0 +1,170 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; +using Microsoft.Extensions.FileProviders; + +namespace Microsoft.Extensions.StackTrace.Sources +{ + internal class ExceptionDetailsProvider + { + private readonly IFileProvider _fileProvider; + private readonly int _sourceCodeLineCount; + + public ExceptionDetailsProvider(IFileProvider fileProvider, int sourceCodeLineCount) + { + _fileProvider = fileProvider; + _sourceCodeLineCount = sourceCodeLineCount; + } + + public IEnumerable GetDetails(Exception exception) + { + var exceptions = FlattenAndReverseExceptionTree(exception); + + foreach (var ex in exceptions) + { + yield return new ExceptionDetails + { + Error = ex, + StackFrames = StackTraceHelper.GetFrames(ex) + .Select(frame => GetStackFrameSourceCodeInfo( + frame.MethodDisplayInfo.ToString(), + frame.FilePath, + frame.LineNumber)) + }; + } + } + + private static IEnumerable FlattenAndReverseExceptionTree(Exception ex) + { + // ReflectionTypeLoadException is special because the details are in + // the LoaderExceptions property + var typeLoadException = ex as ReflectionTypeLoadException; + if (typeLoadException != null) + { + var typeLoadExceptions = new List(); + foreach (var loadException in typeLoadException.LoaderExceptions) + { + typeLoadExceptions.AddRange(FlattenAndReverseExceptionTree(loadException)); + } + + typeLoadExceptions.Add(ex); + return typeLoadExceptions; + } + + var list = new List(); + if (ex is AggregateException aggregateException) + { + list.Add(ex); + foreach (var innerException in aggregateException.Flatten().InnerExceptions) + { + list.Add(innerException); + } + } + + else + { + while (ex != null) + { + list.Add(ex); + ex = ex.InnerException; + } + list.Reverse(); + } + + return list; + } + + // make it internal to enable unit testing + internal StackFrameSourceCodeInfo GetStackFrameSourceCodeInfo(string method, string filePath, int lineNumber) + { + var stackFrame = new StackFrameSourceCodeInfo + { + Function = method, + File = filePath, + Line = lineNumber + }; + + if (string.IsNullOrEmpty(stackFrame.File)) + { + return stackFrame; + } + + IEnumerable lines = null; + if (File.Exists(stackFrame.File)) + { + lines = File.ReadLines(stackFrame.File); + } + else + { + // Handle relative paths and embedded files + var fileInfo = _fileProvider.GetFileInfo(stackFrame.File); + if (fileInfo.Exists) + { + // ReadLines doesn't accept a stream. Use ReadLines as its more efficient + // relative to reading lines via stream reader + if (!string.IsNullOrEmpty(fileInfo.PhysicalPath)) + { + lines = File.ReadLines(fileInfo.PhysicalPath); + } + else + { + lines = ReadLines(fileInfo); + } + } + } + + if (lines != null) + { + ReadFrameContent(stackFrame, lines, stackFrame.Line, stackFrame.Line); + } + + return stackFrame; + } + + // make it internal to enable unit testing + internal void ReadFrameContent( + StackFrameSourceCodeInfo frame, + IEnumerable allLines, + int errorStartLineNumberInFile, + int errorEndLineNumberInFile) + { + // Get the line boundaries in the file to be read and read all these lines at once into an array. + var preErrorLineNumberInFile = Math.Max(errorStartLineNumberInFile - _sourceCodeLineCount, 1); + var postErrorLineNumberInFile = errorEndLineNumberInFile + _sourceCodeLineCount; + var codeBlock = allLines + .Skip(preErrorLineNumberInFile - 1) + .Take(postErrorLineNumberInFile - preErrorLineNumberInFile + 1) + .ToArray(); + + var numOfErrorLines = (errorEndLineNumberInFile - errorStartLineNumberInFile) + 1; + var errorStartLineNumberInArray = errorStartLineNumberInFile - preErrorLineNumberInFile; + + frame.PreContextLine = preErrorLineNumberInFile; + frame.PreContextCode = codeBlock.Take(errorStartLineNumberInArray).ToArray(); + frame.ContextCode = codeBlock + .Skip(errorStartLineNumberInArray) + .Take(numOfErrorLines) + .ToArray(); + frame.PostContextCode = codeBlock + .Skip(errorStartLineNumberInArray + numOfErrorLines) + .ToArray(); + } + + private static IEnumerable ReadLines(IFileInfo fileInfo) + { + using (var reader = new StreamReader(fileInfo.CreateReadStream())) + { + string line; + while ((line = reader.ReadLine()) != null) + { + yield return line; + } + } + } + } +} diff --git a/src/Shared/StackTrace/StackFrame/MethodDisplayInfo.cs b/src/Shared/StackTrace/StackFrame/MethodDisplayInfo.cs new file mode 100644 index 000000000000..b1c0ccc18871 --- /dev/null +++ b/src/Shared/StackTrace/StackFrame/MethodDisplayInfo.cs @@ -0,0 +1,49 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Microsoft.Extensions.StackTrace.Sources +{ + internal class MethodDisplayInfo + { + public string DeclaringTypeName { get; set; } + + public string Name { get; set; } + + public string GenericArguments { get; set; } + + public string SubMethod { get; set; } + + public IEnumerable Parameters { get; set; } + + public override string ToString() + { + var builder = new StringBuilder(); + if (!string.IsNullOrEmpty(DeclaringTypeName)) + { + builder + .Append(DeclaringTypeName) + .Append("."); + } + + builder.Append(Name); + builder.Append(GenericArguments); + + builder.Append("("); + builder.Append(string.Join(", ", Parameters.Select(p => p.ToString()))); + builder.Append(")"); + + if (!string.IsNullOrEmpty(SubMethod)) + { + builder.Append("+"); + builder.Append(SubMethod); + builder.Append("()"); + } + + return builder.ToString(); + } + } +} diff --git a/src/Shared/StackTrace/StackFrame/ParameterDisplayInfo.cs b/src/Shared/StackTrace/StackFrame/ParameterDisplayInfo.cs new file mode 100644 index 000000000000..1199a8386d2f --- /dev/null +++ b/src/Shared/StackTrace/StackFrame/ParameterDisplayInfo.cs @@ -0,0 +1,33 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Text; + +namespace Microsoft.Extensions.StackTrace.Sources +{ + internal class ParameterDisplayInfo + { + public string Name { get; set; } + + public string Type { get; set; } + + public string Prefix { get; set; } + + public override string ToString() + { + var builder = new StringBuilder(); + if (!string.IsNullOrEmpty(Prefix)) + { + builder + .Append(Prefix) + .Append(" "); + } + + builder.Append(Type); + builder.Append(" "); + builder.Append(Name); + + return builder.ToString(); + } + } +} diff --git a/src/Shared/StackTrace/StackFrame/PortablePdbReader.cs b/src/Shared/StackTrace/StackFrame/PortablePdbReader.cs new file mode 100644 index 000000000000..ff6a4947f80e --- /dev/null +++ b/src/Shared/StackTrace/StackFrame/PortablePdbReader.cs @@ -0,0 +1,135 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Reflection; +using System.Reflection.Metadata; +using System.Reflection.Metadata.Ecma335; +using System.Reflection.PortableExecutable; + +namespace Microsoft.Extensions.StackTrace.Sources +{ + internal class PortablePdbReader : IDisposable + { + private readonly Dictionary _cache = + new Dictionary(StringComparer.Ordinal); + + public void PopulateStackFrame(StackFrameInfo frameInfo, MethodBase method, int IlOffset) + { + if (method.Module.Assembly.IsDynamic) + { + return; + } + + var metadataReader = GetMetadataReader(method.Module.Assembly.Location); + + if (metadataReader == null) + { + return; + } + + var methodToken = MetadataTokens.Handle(method.MetadataToken); + + Debug.Assert(methodToken.Kind == HandleKind.MethodDefinition); + + var handle = ((MethodDefinitionHandle)methodToken).ToDebugInformationHandle(); + + if (!handle.IsNil) + { + var methodDebugInfo = metadataReader.GetMethodDebugInformation(handle); + var sequencePoints = methodDebugInfo.GetSequencePoints(); + SequencePoint? bestPointSoFar = null; + + foreach (var point in sequencePoints) + { + if (point.Offset > IlOffset) + { + break; + } + + if (point.StartLine != SequencePoint.HiddenLine) + { + bestPointSoFar = point; + } + } + + if (bestPointSoFar.HasValue) + { + frameInfo.LineNumber = bestPointSoFar.Value.StartLine; + frameInfo.FilePath = metadataReader.GetString(metadataReader.GetDocument(bestPointSoFar.Value.Document).Name); + } + } + } + + private MetadataReader GetMetadataReader(string assemblyPath) + { + MetadataReaderProvider provider = null; + if (!_cache.TryGetValue(assemblyPath, out provider)) + { + var pdbPath = GetPdbPath(assemblyPath); + + if (!string.IsNullOrEmpty(pdbPath) && File.Exists(pdbPath) && IsPortable(pdbPath)) + { + var pdbStream = File.OpenRead(pdbPath); + provider = MetadataReaderProvider.FromPortablePdbStream(pdbStream); + } + + _cache[assemblyPath] = provider; + } + + return provider?.GetMetadataReader(); + } + + private static string GetPdbPath(string assemblyPath) + { + if (string.IsNullOrEmpty(assemblyPath)) + { + return null; + } + + if (File.Exists(assemblyPath)) + { + var peStream = File.OpenRead(assemblyPath); + + using (var peReader = new PEReader(peStream)) + { + foreach (var entry in peReader.ReadDebugDirectory()) + { + if (entry.Type == DebugDirectoryEntryType.CodeView) + { + var codeViewData = peReader.ReadCodeViewDebugDirectoryData(entry); + var peDirectory = Path.GetDirectoryName(assemblyPath); + return Path.Combine(peDirectory, Path.GetFileName(codeViewData.Path)); + } + } + } + } + + return null; + } + + private static bool IsPortable(string pdbPath) + { + using (var pdbStream = File.OpenRead(pdbPath)) + { + return pdbStream.ReadByte() == 'B' && + pdbStream.ReadByte() == 'S' && + pdbStream.ReadByte() == 'J' && + pdbStream.ReadByte() == 'B'; + } + } + + public void Dispose() + { + foreach (var entry in _cache) + { + entry.Value?.Dispose(); + } + + _cache.Clear(); + } + } +} diff --git a/src/Shared/StackTrace/StackFrame/StackFrameInfo.cs b/src/Shared/StackTrace/StackFrame/StackFrameInfo.cs new file mode 100644 index 000000000000..ffd91f213c08 --- /dev/null +++ b/src/Shared/StackTrace/StackFrame/StackFrameInfo.cs @@ -0,0 +1,18 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Diagnostics; + +namespace Microsoft.Extensions.StackTrace.Sources +{ + internal class StackFrameInfo + { + public int LineNumber { get; set; } + + public string FilePath { get; set; } + + public StackFrame StackFrame { get; set; } + + public MethodDisplayInfo MethodDisplayInfo { get; set; } + } +} diff --git a/src/Shared/StackTrace/StackFrame/StackFrameSourceCodeInfo.cs b/src/Shared/StackTrace/StackFrame/StackFrameSourceCodeInfo.cs new file mode 100644 index 000000000000..2932e083b132 --- /dev/null +++ b/src/Shared/StackTrace/StackFrame/StackFrameSourceCodeInfo.cs @@ -0,0 +1,54 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Collections.Generic; +using System.Linq; + +namespace Microsoft.Extensions.StackTrace.Sources +{ + /// + /// Contains the source code where the exception occurred. + /// + internal class StackFrameSourceCodeInfo + { + /// + /// Function containing instruction + /// + public string Function { get; set; } + + /// + /// File containing the instruction + /// + public string File { get; set; } + + /// + /// The line number of the instruction + /// + public int Line { get; set; } + + /// + /// The line preceding the frame line + /// + public int PreContextLine { get; set; } + + /// + /// Lines of code before the actual error line(s). + /// + public IEnumerable PreContextCode { get; set; } = Enumerable.Empty(); + + /// + /// Line(s) of code responsible for the error. + /// + public IEnumerable ContextCode { get; set; } = Enumerable.Empty(); + + /// + /// Lines of code after the actual error line(s). + /// + public IEnumerable PostContextCode { get; set; } = Enumerable.Empty(); + + /// + /// Specific error details for this stack frame. + /// + public string ErrorDetails { get; set; } + } +} diff --git a/src/Shared/StackTrace/StackFrame/StackTraceHelper.cs b/src/Shared/StackTrace/StackFrame/StackTraceHelper.cs new file mode 100644 index 000000000000..5ce9a4090387 --- /dev/null +++ b/src/Shared/StackTrace/StackFrame/StackTraceHelper.cs @@ -0,0 +1,261 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.ExceptionServices; +using Microsoft.Extensions.Internal; + +namespace Microsoft.Extensions.StackTrace.Sources +{ + internal class StackTraceHelper + { + public static IList GetFrames(Exception exception) + { + var frames = new List(); + + if (exception == null) + { + return frames; + } + + using (var portablePdbReader = new PortablePdbReader()) + { + var needFileInfo = true; + var stackTrace = new System.Diagnostics.StackTrace(exception, needFileInfo); + var stackFrames = stackTrace.GetFrames(); + + if (stackFrames == null) + { + return frames; + } + + for (var i = 0; i < stackFrames.Length; i++) + { + var frame = stackFrames[i]; + var method = frame.GetMethod(); + + // Always show last stackFrame + if (!ShowInStackTrace(method) && i < stackFrames.Length - 1) + { + continue; + } + + var stackFrame = new StackFrameInfo + { + StackFrame = frame, + FilePath = frame.GetFileName(), + LineNumber = frame.GetFileLineNumber(), + MethodDisplayInfo = GetMethodDisplayString(frame.GetMethod()), + }; + + if (string.IsNullOrEmpty(stackFrame.FilePath)) + { + // .NET Framework and older versions of mono don't support portable PDBs + // so we read it manually to get file name and line information + portablePdbReader.PopulateStackFrame(stackFrame, method, frame.GetILOffset()); + } + + frames.Add(stackFrame); + } + + return frames; + } + } + + internal static MethodDisplayInfo GetMethodDisplayString(MethodBase method) + { + // Special case: no method available + if (method == null) + { + return null; + } + + var methodDisplayInfo = new MethodDisplayInfo(); + + // Type name + var type = method.DeclaringType; + + var methodName = method.Name; + + if (type != null && type.IsDefined(typeof(CompilerGeneratedAttribute)) && + (typeof(IAsyncStateMachine).IsAssignableFrom(type) || typeof(IEnumerator).IsAssignableFrom(type))) + { + // Convert StateMachine methods to correct overload +MoveNext() + if (TryResolveStateMachineMethod(ref method, out type)) + { + methodDisplayInfo.SubMethod = methodName; + } + } + // ResolveStateMachineMethod may have set declaringType to null + if (type != null) + { + methodDisplayInfo.DeclaringTypeName = TypeNameHelper.GetTypeDisplayName(type, includeGenericParameterNames: true); + } + + // Method name + methodDisplayInfo.Name = method.Name; + if (method.IsGenericMethod) + { + var genericArguments = string.Join(", ", method.GetGenericArguments() + .Select(arg => TypeNameHelper.GetTypeDisplayName(arg, fullName: false, includeGenericParameterNames: true))); + methodDisplayInfo.GenericArguments += "<" + genericArguments + ">"; + } + + // Method parameters + methodDisplayInfo.Parameters = method.GetParameters().Select(parameter => + { + var parameterType = parameter.ParameterType; + + var prefix = string.Empty; + if (parameter.IsOut) + { + prefix = "out"; + } + else if (parameterType != null && parameterType.IsByRef) + { + prefix = "ref"; + } + + var parameterTypeString = "?"; + if (parameterType != null) + { + if (parameterType.IsByRef) + { + parameterType = parameterType.GetElementType(); + } + + parameterTypeString = TypeNameHelper.GetTypeDisplayName(parameterType, fullName: false, includeGenericParameterNames: true); + } + + return new ParameterDisplayInfo + { + Prefix = prefix, + Name = parameter.Name, + Type = parameterTypeString, + }; + }); + + return methodDisplayInfo; + } + + private static bool ShowInStackTrace(MethodBase method) + { + Debug.Assert(method != null); + + // Don't show any methods marked with the StackTraceHiddenAttribute + // https://github.com/dotnet/coreclr/pull/14652 + if (HasStackTraceHiddenAttribute(method)) + { + return false; + } + + + var type = method.DeclaringType; + if (type == null) + { + return true; + } + + if (HasStackTraceHiddenAttribute(type)) + { + return false; + } + + // Fallbacks for runtime pre-StackTraceHiddenAttribute + if (type == typeof(ExceptionDispatchInfo) && method.Name == "Throw") + { + return false; + } + else if (type == typeof(TaskAwaiter) || + type == typeof(TaskAwaiter<>) || + type == typeof(ConfiguredTaskAwaitable.ConfiguredTaskAwaiter) || + type == typeof(ConfiguredTaskAwaitable<>.ConfiguredTaskAwaiter)) + { + switch (method.Name) + { + case "HandleNonSuccessAndDebuggerNotification": + case "ThrowForNonSuccess": + case "ValidateEnd": + case "GetResult": + return false; + } + } + + return true; + } + + private static bool TryResolveStateMachineMethod(ref MethodBase method, out Type declaringType) + { + Debug.Assert(method != null); + Debug.Assert(method.DeclaringType != null); + + declaringType = method.DeclaringType; + + var parentType = declaringType.DeclaringType; + if (parentType == null) + { + return false; + } + + var methods = parentType.GetMethods(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance | BindingFlags.DeclaredOnly); + if (methods == null) + { + return false; + } + + foreach (var candidateMethod in methods) + { + var attributes = candidateMethod.GetCustomAttributes(); + if (attributes == null) + { + continue; + } + + foreach (var asma in attributes) + { + if (asma.StateMachineType == declaringType) + { + method = candidateMethod; + declaringType = candidateMethod.DeclaringType; + // Mark the iterator as changed; so it gets the + annotation of the original method + // async statemachines resolve directly to their builder methods so aren't marked as changed + return asma is IteratorStateMachineAttribute; + } + } + } + + return false; + } + + private static bool HasStackTraceHiddenAttribute(MemberInfo memberInfo) + { + IList attributes; + try + { + // Accessing MembmerInfo.GetCustomAttributesData throws for some types (such as types in dynamically generated assemblies). + // We'll skip looking up StackTraceHiddenAttributes on such types. + attributes = memberInfo.GetCustomAttributesData(); + } + catch + { + return false; + } + + for (var i = 0; i < attributes.Count; i++) + { + if (attributes[i].AttributeType.Name == "StackTraceHiddenAttribute") + { + return true; + } + } + + return false; + } + } +} diff --git a/src/Shared/WebEncoders/Properties/EncoderResources.cs b/src/Shared/WebEncoders/Properties/EncoderResources.cs new file mode 100644 index 000000000000..3474ae82c5b7 --- /dev/null +++ b/src/Shared/WebEncoders/Properties/EncoderResources.cs @@ -0,0 +1,38 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Globalization; + +namespace Microsoft.Extensions.WebEncoders.Sources +{ + // TODO using a resx file. project.json, unfortunately, fails to embed resx files when there are also compile items + // in the contentFiles section. Revisit once we convert repos to MSBuild + internal static class EncoderResources + { + /// + /// Invalid {0}, {1} or {2} length. + /// + internal static readonly string WebEncoders_InvalidCountOffsetOrLength = "Invalid {0}, {1} or {2} length."; + + /// + /// Malformed input: {0} is an invalid input length. + /// + internal static readonly string WebEncoders_MalformedInput = "Malformed input: {0} is an invalid input length."; + + /// + /// Invalid {0}, {1} or {2} length. + /// + internal static string FormatWebEncoders_InvalidCountOffsetOrLength(object p0, object p1, object p2) + { + return string.Format(CultureInfo.CurrentCulture, WebEncoders_InvalidCountOffsetOrLength, p0, p1, p2); + } + + /// + /// Malformed input: {0} is an invalid input length. + /// + internal static string FormatWebEncoders_MalformedInput(object p0) + { + return string.Format(CultureInfo.CurrentCulture, WebEncoders_MalformedInput, p0); + } + } +} diff --git a/src/Shared/WebEncoders/WebEncoders.cs b/src/Shared/WebEncoders/WebEncoders.cs new file mode 100644 index 000000000000..17068ae67a55 --- /dev/null +++ b/src/Shared/WebEncoders/WebEncoders.cs @@ -0,0 +1,388 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Diagnostics; +using System.Globalization; +using Microsoft.Extensions.WebEncoders.Sources; + +#if WebEncoders_In_WebUtilities +namespace Microsoft.AspNetCore.WebUtilities +#else +namespace Microsoft.Extensions.Internal +#endif +{ + /// + /// Contains utility APIs to assist with common encoding and decoding operations. + /// +#if WebEncoders_In_WebUtilities + public +#else + internal +#endif + static class WebEncoders + { + private static readonly byte[] EmptyBytes = new byte[0]; + + /// + /// Decodes a base64url-encoded string. + /// + /// The base64url-encoded input to decode. + /// The base64url-decoded form of the input. + /// + /// The input must not contain any whitespace or padding characters. + /// Throws if the input is malformed. + /// + public static byte[] Base64UrlDecode(string input) + { + if (input == null) + { + throw new ArgumentNullException(nameof(input)); + } + + return Base64UrlDecode(input, offset: 0, count: input.Length); + } + + /// + /// Decodes a base64url-encoded substring of a given string. + /// + /// A string containing the base64url-encoded input to decode. + /// The position in at which decoding should begin. + /// The number of characters in to decode. + /// The base64url-decoded form of the input. + /// + /// The input must not contain any whitespace or padding characters. + /// Throws if the input is malformed. + /// + public static byte[] Base64UrlDecode(string input, int offset, int count) + { + if (input == null) + { + throw new ArgumentNullException(nameof(input)); + } + + ValidateParameters(input.Length, nameof(input), offset, count); + + // Special-case empty input + if (count == 0) + { + return EmptyBytes; + } + + // Create array large enough for the Base64 characters, not just shorter Base64-URL-encoded form. + var buffer = new char[GetArraySizeRequiredToDecode(count)]; + + return Base64UrlDecode(input, offset, buffer, bufferOffset: 0, count: count); + } + + /// + /// Decodes a base64url-encoded into a byte[]. + /// + /// A string containing the base64url-encoded input to decode. + /// The position in at which decoding should begin. + /// + /// Scratch buffer to hold the s to decode. Array must be large enough to hold + /// and characters as well as Base64 padding + /// characters. Content is not preserved. + /// + /// + /// The offset into at which to begin writing the s to decode. + /// + /// The number of characters in to decode. + /// The base64url-decoded form of the . + /// + /// The input must not contain any whitespace or padding characters. + /// Throws if the input is malformed. + /// + public static byte[] Base64UrlDecode(string input, int offset, char[] buffer, int bufferOffset, int count) + { + if (input == null) + { + throw new ArgumentNullException(nameof(input)); + } + if (buffer == null) + { + throw new ArgumentNullException(nameof(buffer)); + } + + ValidateParameters(input.Length, nameof(input), offset, count); + if (bufferOffset < 0) + { + throw new ArgumentOutOfRangeException(nameof(bufferOffset)); + } + + if (count == 0) + { + return EmptyBytes; + } + + // Assumption: input is base64url encoded without padding and contains no whitespace. + + var paddingCharsToAdd = GetNumBase64PaddingCharsToAddForDecode(count); + var arraySizeRequired = checked(count + paddingCharsToAdd); + Debug.Assert(arraySizeRequired % 4 == 0, "Invariant: Array length must be a multiple of 4."); + + if (buffer.Length - bufferOffset < arraySizeRequired) + { + throw new ArgumentException( + string.Format( + CultureInfo.CurrentCulture, + EncoderResources.WebEncoders_InvalidCountOffsetOrLength, + nameof(count), + nameof(bufferOffset), + nameof(input)), + nameof(count)); + } + + // Copy input into buffer, fixing up '-' -> '+' and '_' -> '/'. + var i = bufferOffset; + for (var j = offset; i - bufferOffset < count; i++, j++) + { + var ch = input[j]; + if (ch == '-') + { + buffer[i] = '+'; + } + else if (ch == '_') + { + buffer[i] = '/'; + } + else + { + buffer[i] = ch; + } + } + + // Add the padding characters back. + for (; paddingCharsToAdd > 0; i++, paddingCharsToAdd--) + { + buffer[i] = '='; + } + + // Decode. + // If the caller provided invalid base64 chars, they'll be caught here. + return Convert.FromBase64CharArray(buffer, bufferOffset, arraySizeRequired); + } + + /// + /// Gets the minimum char[] size required for decoding of characters + /// with the method. + /// + /// The number of characters to decode. + /// + /// The minimum char[] size required for decoding of characters. + /// + public static int GetArraySizeRequiredToDecode(int count) + { + if (count < 0) + { + throw new ArgumentOutOfRangeException(nameof(count)); + } + + if (count == 0) + { + return 0; + } + + var numPaddingCharsToAdd = GetNumBase64PaddingCharsToAddForDecode(count); + + return checked(count + numPaddingCharsToAdd); + } + + /// + /// Encodes using base64url encoding. + /// + /// The binary input to encode. + /// The base64url-encoded form of . + public static string Base64UrlEncode(byte[] input) + { + if (input == null) + { + throw new ArgumentNullException(nameof(input)); + } + + return Base64UrlEncode(input, offset: 0, count: input.Length); + } + + /// + /// Encodes using base64url encoding. + /// + /// The binary input to encode. + /// The offset into at which to begin encoding. + /// The number of bytes from to encode. + /// The base64url-encoded form of . + public static string Base64UrlEncode(byte[] input, int offset, int count) + { + if (input == null) + { + throw new ArgumentNullException(nameof(input)); + } + + ValidateParameters(input.Length, nameof(input), offset, count); + + // Special-case empty input + if (count == 0) + { + return string.Empty; + } + + var buffer = new char[GetArraySizeRequiredToEncode(count)]; + var numBase64Chars = Base64UrlEncode(input, offset, buffer, outputOffset: 0, count: count); + + return new String(buffer, startIndex: 0, length: numBase64Chars); + } + + /// + /// Encodes using base64url encoding. + /// + /// The binary input to encode. + /// The offset into at which to begin encoding. + /// + /// Buffer to receive the base64url-encoded form of . Array must be large enough to + /// hold characters and the full base64-encoded form of + /// , including padding characters. + /// + /// + /// The offset into at which to begin writing the base64url-encoded form of + /// . + /// + /// The number of bytes from to encode. + /// + /// The number of characters written to , less any padding characters. + /// + public static int Base64UrlEncode(byte[] input, int offset, char[] output, int outputOffset, int count) + { + if (input == null) + { + throw new ArgumentNullException(nameof(input)); + } + if (output == null) + { + throw new ArgumentNullException(nameof(output)); + } + + ValidateParameters(input.Length, nameof(input), offset, count); + if (outputOffset < 0) + { + throw new ArgumentOutOfRangeException(nameof(outputOffset)); + } + + var arraySizeRequired = GetArraySizeRequiredToEncode(count); + if (output.Length - outputOffset < arraySizeRequired) + { + throw new ArgumentException( + string.Format( + CultureInfo.CurrentCulture, + EncoderResources.WebEncoders_InvalidCountOffsetOrLength, + nameof(count), + nameof(outputOffset), + nameof(output)), + nameof(count)); + } + + // Special-case empty input. + if (count == 0) + { + return 0; + } + + // Use base64url encoding with no padding characters. See RFC 4648, Sec. 5. + + // Start with default Base64 encoding. + var numBase64Chars = Convert.ToBase64CharArray(input, offset, count, output, outputOffset); + + // Fix up '+' -> '-' and '/' -> '_'. Drop padding characters. + for (var i = outputOffset; i - outputOffset < numBase64Chars; i++) + { + var ch = output[i]; + if (ch == '+') + { + output[i] = '-'; + } + else if (ch == '/') + { + output[i] = '_'; + } + else if (ch == '=') + { + // We've reached a padding character; truncate the remainder. + return i - outputOffset; + } + } + + return numBase64Chars; + } + + /// + /// Get the minimum output char[] size required for encoding + /// s with the method. + /// + /// The number of characters to encode. + /// + /// The minimum output char[] size required for encoding s. + /// + public static int GetArraySizeRequiredToEncode(int count) + { + var numWholeOrPartialInputBlocks = checked(count + 2) / 3; + return checked(numWholeOrPartialInputBlocks * 4); + } + + private static int GetNumBase64PaddingCharsInString(string str) + { + // Assumption: input contains a well-formed base64 string with no whitespace. + + // base64 guaranteed have 0 - 2 padding characters. + if (str[str.Length - 1] == '=') + { + if (str[str.Length - 2] == '=') + { + return 2; + } + return 1; + } + return 0; + } + + private static int GetNumBase64PaddingCharsToAddForDecode(int inputLength) + { + switch (inputLength % 4) + { + case 0: + return 0; + case 2: + return 2; + case 3: + return 1; + default: + throw new FormatException( + string.Format( + CultureInfo.CurrentCulture, + EncoderResources.WebEncoders_MalformedInput, + inputLength)); + } + } + + private static void ValidateParameters(int bufferLength, string inputName, int offset, int count) + { + if (offset < 0) + { + throw new ArgumentOutOfRangeException(nameof(offset)); + } + if (count < 0) + { + throw new ArgumentOutOfRangeException(nameof(count)); + } + if (bufferLength - offset < count) + { + throw new ArgumentException( + string.Format( + CultureInfo.CurrentCulture, + EncoderResources.WebEncoders_InvalidCountOffsetOrLength, + nameof(count), + nameof(offset), + inputName), + nameof(count)); + } + } + } +} diff --git a/src/Shared/test/Shared.Tests/ClosedGenericMatcherTest.cs b/src/Shared/test/Shared.Tests/ClosedGenericMatcherTest.cs new file mode 100644 index 000000000000..e71a7926921a --- /dev/null +++ b/src/Shared/test/Shared.Tests/ClosedGenericMatcherTest.cs @@ -0,0 +1,360 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using Xunit; + +namespace Microsoft.Extensions.Internal +{ + public class ClosedGenericMatcherTest + { + // queryType, interfaceType, expectedResult + public static TheoryData ExtractGenericInterfaceDataSet + { + get + { + return new TheoryData + { + // Closed generic types that match given open generic type. + { + typeof(IEnumerable), + typeof(IEnumerable<>), + typeof(IEnumerable) + }, + { + typeof(IReadOnlyList), + typeof(IReadOnlyList<>), + typeof(IReadOnlyList) + }, + { + typeof(KeyValuePair), + typeof(KeyValuePair<,>), + typeof(KeyValuePair) + }, + // Closed generic interfaces that implement sub-interface of given open generic type. + { + typeof(ICollection), + typeof(IEnumerable<>), + typeof(IEnumerable) + }, + { + typeof(IReadOnlyList), + typeof(IEnumerable<>), + typeof(IEnumerable) + }, + { + typeof(IDictionary), + typeof(IEnumerable<>), + typeof(IEnumerable>) + }, + // Class that implements closed generic based on given open generic interface. + { + typeof(BaseClass), + typeof(IDictionary<,>), + typeof(IDictionary) + }, + { + typeof(BaseClass), + typeof(IEquatable<>), + typeof(IEquatable) + }, + { + typeof(BaseClass), + typeof(ICollection<>), + typeof(ICollection>) + }, + // Derived class that implements closed generic based on given open generic interface. + { + typeof(DerivedClass), + typeof(IDictionary<,>), + typeof(IDictionary) + }, + { + typeof(DerivedClass), + typeof(IEquatable<>), + typeof(IEquatable) + }, + { + typeof(DerivedClass), + typeof(ICollection<>), + typeof(ICollection>) + }, + // Derived class that also implements another interface. + { + typeof(DerivedClassWithComparable), + typeof(IDictionary<,>), + typeof(IDictionary) + }, + { + typeof(DerivedClassWithComparable), + typeof(IEquatable<>), + typeof(IEquatable) + }, + { + typeof(DerivedClassWithComparable), + typeof(ICollection<>), + typeof(ICollection>) + }, + { + typeof(DerivedClassWithComparable), + typeof(IComparable<>), + typeof(IComparable) + }, + // Derived class using system implementation. + { + typeof(DerivedClassFromSystemImplementation), + typeof(ICollection<>), + typeof(ICollection) + }, + { + typeof(DerivedClassFromSystemImplementation), + typeof(IReadOnlyList<>), + typeof(IReadOnlyList) + }, + { + typeof(DerivedClassFromSystemImplementation), + typeof(IEnumerable<>), + typeof(IEnumerable) + }, + // Not given an open generic type. + { + typeof(IEnumerable), + typeof(IEnumerable), + null + }, + { + typeof(IEnumerable), + typeof(IEnumerable), + null + }, + { + typeof(IReadOnlyList), + typeof(BaseClass), + null + }, + { + typeof(KeyValuePair<,>), + typeof(KeyValuePair), + null + }, + // Not a match. + { + typeof(IEnumerable), + typeof(IReadOnlyList<>), + null + }, + { + typeof(IList), + typeof(IReadOnlyList<>), + null + }, + { + typeof(IDictionary), + typeof(KeyValuePair<,>), + null + }, + }; + } + } + + [Theory] + [MemberData(nameof(ExtractGenericInterfaceDataSet))] + public void ExtractGenericInterface_ReturnsExpectedType( + Type queryType, + Type interfaceType, + Type expectedResult) + { + // Arrange & Act + var result = ClosedGenericMatcher.ExtractGenericInterface(queryType, interfaceType); + + // Assert + Assert.Equal(expectedResult, result); + } + + // IEnumerable is preferred because it is defined on the more-derived type. + [Fact] + public void ExtractGenericInterface_MultipleDefinitionsInherited() + { + // Arrange + var type = typeof(TwoIEnumerableImplementationsInherited); + + // Act + var result = ClosedGenericMatcher.ExtractGenericInterface(type, typeof(IEnumerable<>)); + + // Sort + Assert.Equal(typeof(IEnumerable), result); + } + + // IEnumerable is preferred because we sort by Ordinal on the full name. + [Fact] + public void ExtractGenericInterface_MultipleDefinitionsOnSameType() + { + // Arrange + var type = typeof(TwoIEnumerableImplementationsOnSameClass); + + // Act + var result = ClosedGenericMatcher.ExtractGenericInterface(type, typeof(IEnumerable<>)); + + // Sort + Assert.Equal(typeof(IEnumerable), result); + } + + private class TwoIEnumerableImplementationsOnSameClass : IEnumerable, IEnumerable + { + IEnumerator IEnumerable.GetEnumerator() + { + throw new NotImplementedException(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + throw new NotImplementedException(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + throw new NotImplementedException(); + } + } + + private class TwoIEnumerableImplementationsInherited : List, IEnumerable + { + IEnumerator IEnumerable.GetEnumerator() + { + throw new NotImplementedException(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + throw new NotImplementedException(); + } + } + + private class BaseClass : IDictionary, IEquatable + { + object IDictionary.this[string key] + { + get + { + throw new NotImplementedException(); + } + + set + { + throw new NotImplementedException(); + } + } + + int ICollection>.Count + { + get + { + throw new NotImplementedException(); + } + } + + bool ICollection>.IsReadOnly + { + get + { + throw new NotImplementedException(); + } + } + + ICollection IDictionary.Keys + { + get + { + throw new NotImplementedException(); + } + } + + ICollection IDictionary.Values + { + get + { + throw new NotImplementedException(); + } + } + + public bool Equals(BaseClass other) + { + throw new NotImplementedException(); + } + + void ICollection>.Add(KeyValuePair item) + { + throw new NotImplementedException(); + } + + void IDictionary.Add(string key, object value) + { + throw new NotImplementedException(); + } + + void ICollection>.Clear() + { + throw new NotImplementedException(); + } + + bool ICollection>.Contains(KeyValuePair item) + { + throw new NotImplementedException(); + } + + bool IDictionary.ContainsKey(string key) + { + throw new NotImplementedException(); + } + + void ICollection>.CopyTo(KeyValuePair[] array, int arrayIndex) + { + throw new NotImplementedException(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + throw new NotImplementedException(); + } + + IEnumerator> IEnumerable>.GetEnumerator() + { + throw new NotImplementedException(); + } + + bool ICollection>.Remove(KeyValuePair item) + { + throw new NotImplementedException(); + } + + bool IDictionary.Remove(string key) + { + throw new NotImplementedException(); + } + + bool IDictionary.TryGetValue(string key, out object value) + { + throw new NotImplementedException(); + } + } + + private class DerivedClass : BaseClass + { + } + + private class DerivedClassWithComparable : DerivedClass, IComparable + { + public int CompareTo(DerivedClassWithComparable other) + { + throw new NotImplementedException(); + } + } + + private class DerivedClassFromSystemImplementation : Collection + { + } + } +} \ No newline at end of file diff --git a/src/Shared/test/Shared.Tests/CopyOnWriteDictionaryHolderTest.cs b/src/Shared/test/Shared.Tests/CopyOnWriteDictionaryHolderTest.cs new file mode 100644 index 000000000000..9a0951eb271a --- /dev/null +++ b/src/Shared/test/Shared.Tests/CopyOnWriteDictionaryHolderTest.cs @@ -0,0 +1,91 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using Xunit; + +namespace Microsoft.Extensions.Internal +{ + public class CopyOnWriteDictionaryHolderTest + { + [Fact] + public void ReadOperation_DelegatesToSourceDictionary_IfNoMutationsArePerformed() + { + // Arrange + var source = new Dictionary(StringComparer.OrdinalIgnoreCase) + { + { "test-key", "test-value" }, + { "key2", "key2-value" } + }; + + var holder = new CopyOnWriteDictionaryHolder(source); + + // Act and Assert + Assert.Equal("key2-value", holder["key2"]); + Assert.Equal(2, holder.Count); + Assert.Equal(new string[] { "test-key", "key2" }, holder.Keys.ToArray()); + Assert.Equal(new object[] { "test-value", "key2-value" }, holder.Values.ToArray()); + Assert.True(holder.ContainsKey("test-key")); + + object value; + Assert.False(holder.TryGetValue("different-key", out value)); + + Assert.False(holder.HasBeenCopied); + Assert.Same(source, holder.ReadDictionary); + } + + [Fact] + public void ReadOperation_DoesNotDelegateToSourceDictionary_OnceAValueIsChanged() + { + // Arrange + var source = new Dictionary(StringComparer.OrdinalIgnoreCase) + { + { "key1", "value1" }, + { "key2", "value2" } + }; + + var holder = new CopyOnWriteDictionaryHolder(source); + + // Act + holder["key2"] = "value3"; + + // Assert + Assert.Equal("value2", source["key2"]); + Assert.Equal(2, holder.Count); + Assert.Equal("value1", holder["key1"]); + Assert.Equal("value3", holder["key2"]); + + Assert.True(holder.HasBeenCopied); + Assert.NotSame(source, holder.ReadDictionary); + } + + [Fact] + public void ReadOperation_DoesNotDelegateToSourceDictionary_OnceValueIsAdded() + { + // Arrange + var source = new Dictionary(StringComparer.OrdinalIgnoreCase) + { + { "key1", "value1" }, + { "key2", "value2" } + }; + + var holder = new CopyOnWriteDictionaryHolder(source); + + // Act + holder.Add("key3", "value3"); + holder.Remove("key1"); + + // Assert + Assert.Equal(2, source.Count); + Assert.Equal("value1", source["key1"]); + Assert.Equal(2, holder.Count); + Assert.Equal("value2", holder["KeY2"]); + Assert.Equal("value3", holder["key3"]); + + Assert.True(holder.HasBeenCopied); + Assert.NotSame(source, holder.ReadDictionary); + } + } +} diff --git a/src/Shared/test/Shared.Tests/CopyOnWriteDictionaryTest.cs b/src/Shared/test/Shared.Tests/CopyOnWriteDictionaryTest.cs new file mode 100644 index 000000000000..c1b54036d4f9 --- /dev/null +++ b/src/Shared/test/Shared.Tests/CopyOnWriteDictionaryTest.cs @@ -0,0 +1,109 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Collections.Generic; +using Moq; +using Xunit; + +namespace Microsoft.Extensions.Internal +{ + public class CopyOnWriteDictionaryTest + { + [Fact] + public void ReadOperation_DelegatesToSourceDictionary_IfNoMutationsArePerformed() + { + // Arrange + var values = new List(); + var enumerator = Mock.Of>>(); + var sourceDictionary = new Mock>(MockBehavior.Strict); + sourceDictionary + .SetupGet(d => d.Count) + .Returns(100) + .Verifiable(); + sourceDictionary + .SetupGet(d => d.Values) + .Returns(values) + .Verifiable(); + sourceDictionary + .Setup(d => d.ContainsKey("test-key")) + .Returns(value: true) + .Verifiable(); + sourceDictionary + .Setup(d => d.GetEnumerator()) + .Returns(enumerator) + .Verifiable(); + sourceDictionary + .Setup(d => d["key2"]) + .Returns("key2-value") + .Verifiable(); + object value; + sourceDictionary.Setup(d => d.TryGetValue("different-key", out value)) + .Returns(false) + .Verifiable(); + + var copyOnWriteDictionary = new CopyOnWriteDictionary(sourceDictionary.Object, + StringComparer.OrdinalIgnoreCase); + + // Act and Assert + Assert.Equal("key2-value", copyOnWriteDictionary["key2"]); + Assert.Equal(100, copyOnWriteDictionary.Count); + Assert.Same(values, copyOnWriteDictionary.Values); + Assert.True(copyOnWriteDictionary.ContainsKey("test-key")); + Assert.Same(enumerator, copyOnWriteDictionary.GetEnumerator()); + Assert.False(copyOnWriteDictionary.TryGetValue("different-key", out value)); + sourceDictionary.Verify(); + } + + [Fact] + public void ReadOperation_DoesNotDelegateToSourceDictionary_OnceAValueIsChanged() + { + // Arrange + var values = new List(); + var sourceDictionary = new Dictionary + { + { "key1", "value1" }, + { "key2", "value2" } + }; + var copyOnWriteDictionary = new CopyOnWriteDictionary( + sourceDictionary, + StringComparer.OrdinalIgnoreCase); + + // Act + copyOnWriteDictionary["key2"] = "value3"; + + // Assert + Assert.Equal("value2", sourceDictionary["key2"]); + Assert.Equal(2, copyOnWriteDictionary.Count); + Assert.Equal("value1", copyOnWriteDictionary["key1"]); + Assert.Equal("value3", copyOnWriteDictionary["key2"]); + } + + [Fact] + public void ReadOperation_DoesNotDelegateToSourceDictionary_OnceDictionaryIsModified() + { + // Arrange + var values = new List(); + var sourceDictionary = new Dictionary + { + { "key1", "value1" }, + { "key2", "value2" } + }; + var copyOnWriteDictionary = new CopyOnWriteDictionary( + sourceDictionary, + StringComparer.OrdinalIgnoreCase); + + // Act + copyOnWriteDictionary.Add("key3", "value3"); + copyOnWriteDictionary.Remove("key1"); + + + // Assert + Assert.Equal(2, sourceDictionary.Count); + Assert.Equal("value1", sourceDictionary["key1"]); + Assert.Equal(2, copyOnWriteDictionary.Count); + Assert.Equal("value2", copyOnWriteDictionary["KeY2"]); + Assert.Equal("value3", copyOnWriteDictionary["key3"]); + } + } +} diff --git a/src/Shared/test/Shared.Tests/Microsoft.AspNetCore.Shared.Tests.csproj b/src/Shared/test/Shared.Tests/Microsoft.AspNetCore.Shared.Tests.csproj new file mode 100644 index 000000000000..48b2099db720 --- /dev/null +++ b/src/Shared/test/Shared.Tests/Microsoft.AspNetCore.Shared.Tests.csproj @@ -0,0 +1,29 @@ + + + + netcoreapp2.1;net461 + portable + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Shared/test/Shared.Tests/ObjectMethodExecutorTest.cs b/src/Shared/test/Shared.Tests/ObjectMethodExecutorTest.cs new file mode 100644 index 000000000000..fb9f82aad98c --- /dev/null +++ b/src/Shared/test/Shared.Tests/ObjectMethodExecutorTest.cs @@ -0,0 +1,634 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using Microsoft.FSharp.Control; +using Microsoft.FSharp.Core; +using System; +using System.Collections.Generic; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Threading; +using System.Threading.Tasks; +using Xunit; + +namespace Microsoft.Extensions.Internal +{ + public class ObjectMethodExecutorTest + { + private TestObject _targetObject = new TestObject(); + private TypeInfo targetTypeInfo = typeof(TestObject).GetTypeInfo(); + + [Fact] + public void ExecuteValueMethod() + { + var executor = GetExecutorForMethod("ValueMethod"); + var result = executor.Execute( + _targetObject, + new object[] { 10, 20 }); + Assert.False(executor.IsMethodAsync); + Assert.Equal(30, (int)result); + } + + [Fact] + public void ExecuteVoidValueMethod() + { + var executor = GetExecutorForMethod("VoidValueMethod"); + var result = executor.Execute( + _targetObject, + new object[] { 10 }); + Assert.False(executor.IsMethodAsync); + Assert.Null(result); + } + + [Fact] + public void ExecuteValueMethodWithReturnType() + { + var executor = GetExecutorForMethod("ValueMethodWithReturnType"); + var result = executor.Execute( + _targetObject, + new object[] { 10 }); + var resultObject = Assert.IsType(result); + Assert.False(executor.IsMethodAsync); + Assert.Equal("Hello", resultObject.value); + } + + [Fact] + public void ExecuteValueMethodUpdateValue() + { + var executor = GetExecutorForMethod("ValueMethodUpdateValue"); + var parameter = new TestObject(); + var result = executor.Execute( + _targetObject, + new object[] { parameter }); + var resultObject = Assert.IsType(result); + Assert.False(executor.IsMethodAsync); + Assert.Equal("HelloWorld", resultObject.value); + } + + [Fact] + public void ExecuteValueMethodWithReturnTypeThrowsException() + { + var executor = GetExecutorForMethod("ValueMethodWithReturnTypeThrowsException"); + var parameter = new TestObject(); + Assert.False(executor.IsMethodAsync); + Assert.Throws( + () => executor.Execute( + _targetObject, + new object[] { parameter })); + } + + [Fact] + public async Task ExecuteValueMethodAsync() + { + var executor = GetExecutorForMethod("ValueMethodAsync"); + var result = await executor.ExecuteAsync( + _targetObject, + new object[] { 10, 20 }); + Assert.True(executor.IsMethodAsync); + Assert.Equal(30, (int)result); + } + + [Fact] + public async Task ExecuteValueMethodWithReturnTypeAsync() + { + var executor = GetExecutorForMethod("ValueMethodWithReturnTypeAsync"); + var result = await executor.ExecuteAsync( + _targetObject, + new object[] { 10 }); + var resultObject = Assert.IsType(result); + Assert.True(executor.IsMethodAsync); + Assert.Equal("Hello", resultObject.value); + } + + [Fact] + public async Task ExecuteValueMethodUpdateValueAsync() + { + var executor = GetExecutorForMethod("ValueMethodUpdateValueAsync"); + var parameter = new TestObject(); + var result = await executor.ExecuteAsync( + _targetObject, + new object[] { parameter }); + var resultObject = Assert.IsType(result); + Assert.True(executor.IsMethodAsync); + Assert.Equal("HelloWorld", resultObject.value); + } + + [Fact] + public async Task ExecuteValueMethodWithReturnTypeThrowsExceptionAsync() + { + var executor = GetExecutorForMethod("ValueMethodWithReturnTypeThrowsExceptionAsync"); + var parameter = new TestObject(); + Assert.True(executor.IsMethodAsync); + await Assert.ThrowsAsync( + async () => await executor.ExecuteAsync( + _targetObject, + new object[] { parameter })); + } + + [Fact] + public async Task ExecuteValueMethodWithReturnVoidThrowsExceptionAsync() + { + var executor = GetExecutorForMethod("ValueMethodWithReturnVoidThrowsExceptionAsync"); + var parameter = new TestObject(); + Assert.True(executor.IsMethodAsync); + await Assert.ThrowsAsync( + async () => await executor.ExecuteAsync( + _targetObject, + new object[] { parameter })); + } + + [Fact] + public void GetDefaultValueForParameters_ReturnsSuppliedValues() + { + var suppliedDefaultValues = new object[] { 123, "test value" }; + var executor = GetExecutorForMethod("MethodWithMultipleParameters", suppliedDefaultValues); + Assert.Equal(suppliedDefaultValues[0], executor.GetDefaultValueForParameter(0)); + Assert.Equal(suppliedDefaultValues[1], executor.GetDefaultValueForParameter(1)); + Assert.Throws(() => executor.GetDefaultValueForParameter(2)); + } + + [Fact] + public void GetDefaultValueForParameters_ThrowsIfNoneWereSupplied() + { + var executor = GetExecutorForMethod("MethodWithMultipleParameters"); + Assert.Throws(() => executor.GetDefaultValueForParameter(0)); + } + + [Fact] + public async Task TargetMethodReturningCustomAwaitableOfReferenceType_CanInvokeViaExecute() + { + // Arrange + var executor = GetExecutorForMethod("CustomAwaitableOfReferenceTypeAsync"); + + // Act + var result = await (TestAwaitable)executor.Execute(_targetObject, new object[] { "Hello", 123 }); + + // Assert + Assert.True(executor.IsMethodAsync); + Assert.Same(typeof(TestObject), executor.AsyncResultType); + Assert.NotNull(result); + Assert.Equal("Hello 123", result.value); + } + + [Fact] + public async Task TargetMethodReturningCustomAwaitableOfValueType_CanInvokeViaExecute() + { + // Arrange + var executor = GetExecutorForMethod("CustomAwaitableOfValueTypeAsync"); + + // Act + var result = await (TestAwaitable)executor.Execute(_targetObject, new object[] { 123, 456 }); + + // Assert + Assert.True(executor.IsMethodAsync); + Assert.Same(typeof(int), executor.AsyncResultType); + Assert.Equal(579, result); + } + + [Fact] + public async Task TargetMethodReturningCustomAwaitableOfReferenceType_CanInvokeViaExecuteAsync() + { + // Arrange + var executor = GetExecutorForMethod("CustomAwaitableOfReferenceTypeAsync"); + + // Act + var result = await executor.ExecuteAsync(_targetObject, new object[] { "Hello", 123 }); + + // Assert + Assert.True(executor.IsMethodAsync); + Assert.Same(typeof(TestObject), executor.AsyncResultType); + Assert.NotNull(result); + Assert.IsType(result); + Assert.Equal("Hello 123", ((TestObject)result).value); + } + + [Fact] + public async Task TargetMethodReturningCustomAwaitableOfValueType_CanInvokeViaExecuteAsync() + { + // Arrange + var executor = GetExecutorForMethod("CustomAwaitableOfValueTypeAsync"); + + // Act + var result = await executor.ExecuteAsync(_targetObject, new object[] { 123, 456 }); + + // Assert + Assert.True(executor.IsMethodAsync); + Assert.Same(typeof(int), executor.AsyncResultType); + Assert.NotNull(result); + Assert.IsType(result); + Assert.Equal(579, (int)result); + } + + [Fact] + public async Task TargetMethodReturningAwaitableOfVoidType_CanInvokeViaExecuteAsync() + { + // Arrange + var executor = GetExecutorForMethod("VoidValueMethodAsync"); + + // Act + var result = await executor.ExecuteAsync(_targetObject, new object[] { 123 }); + + // Assert + Assert.True(executor.IsMethodAsync); + Assert.Same(typeof(void), executor.AsyncResultType); + Assert.Null(result); + } + + [Fact] + public async Task TargetMethodReturningAwaitableWithICriticalNotifyCompletion_UsesUnsafeOnCompleted() + { + // Arrange + var executor = GetExecutorForMethod("CustomAwaitableWithICriticalNotifyCompletion"); + + // Act + var result = await executor.ExecuteAsync(_targetObject, new object[0]); + + // Assert + Assert.True(executor.IsMethodAsync); + Assert.Same(typeof(string), executor.AsyncResultType); + Assert.Equal("Used UnsafeOnCompleted", (string)result); + } + + [Fact] + public async Task TargetMethodReturningAwaitableWithoutICriticalNotifyCompletion_UsesOnCompleted() + { + // Arrange + var executor = GetExecutorForMethod("CustomAwaitableWithoutICriticalNotifyCompletion"); + + // Act + var result = await executor.ExecuteAsync(_targetObject, new object[0]); + + // Assert + Assert.True(executor.IsMethodAsync); + Assert.Same(typeof(string), executor.AsyncResultType); + Assert.Equal("Used OnCompleted", (string)result); + } + + [Fact] + public async Task TargetMethodReturningValueTaskOfValueType_CanBeInvokedViaExecute() + { + // Arrange + var executor = GetExecutorForMethod("ValueTaskOfValueType"); + + // Act + var result = await (ValueTask)executor.Execute(_targetObject, new object[] { 123 }); + + // Assert + Assert.True(executor.IsMethodAsync); + Assert.Same(typeof(int), executor.AsyncResultType); + Assert.Equal(123, result); + } + + [Fact] + public async Task TargetMethodReturningValueTaskOfReferenceType_CanBeInvokedViaExecute() + { + // Arrange + var executor = GetExecutorForMethod("ValueTaskOfReferenceType"); + + // Act + var result = await (ValueTask)executor.Execute(_targetObject, new object[] { "test result" }); + + // Assert + Assert.True(executor.IsMethodAsync); + Assert.Same(typeof(string), executor.AsyncResultType); + Assert.Equal("test result", result); + } + + [Fact] + public async Task TargetMethodReturningValueTaskOfValueType_CanBeInvokedViaExecuteAsync() + { + // Arrange + var executor = GetExecutorForMethod("ValueTaskOfValueType"); + + // Act + var result = await executor.ExecuteAsync(_targetObject, new object[] { 123 }); + + // Assert + Assert.True(executor.IsMethodAsync); + Assert.Same(typeof(int), executor.AsyncResultType); + Assert.NotNull(result); + Assert.Equal(123, (int)result); + } + + [Fact] + public async Task TargetMethodReturningValueTaskOfReferenceType_CanBeInvokedViaExecuteAsync() + { + // Arrange + var executor = GetExecutorForMethod("ValueTaskOfReferenceType"); + + // Act + var result = await executor.ExecuteAsync(_targetObject, new object[] { "test result" }); + + // Assert + Assert.True(executor.IsMethodAsync); + Assert.Same(typeof(string), executor.AsyncResultType); + Assert.Equal("test result", result); + } + + [Fact] + public async Task TargetMethodReturningFSharpAsync_CanBeInvokedViaExecute() + { + // Arrange + var executor = GetExecutorForMethod("FSharpAsyncMethod"); + + // Act + var fsharpAsync = (FSharpAsync)executor.Execute(_targetObject, new object[] { "test result" }); + var result = await FSharpAsync.StartAsTask(fsharpAsync, + FSharpOption.None, + FSharpOption.None); + + // Assert + Assert.True(executor.IsMethodAsync); + Assert.Same(typeof(string), executor.AsyncResultType); + Assert.Equal("test result", result); + } + + [Fact] + public async Task TargetMethodReturningFailingFSharpAsync_CanBeInvokedViaExecute() + { + // Arrange + var executor = GetExecutorForMethod("FSharpAsyncFailureMethod"); + + // Act + var fsharpAsync = (FSharpAsync)executor.Execute(_targetObject, new object[] { "test result" }); + var resultTask = FSharpAsync.StartAsTask(fsharpAsync, + FSharpOption.None, + FSharpOption.None); + + // Assert + Assert.True(executor.IsMethodAsync); + Assert.Same(typeof(string), executor.AsyncResultType); + + var exception = await Assert.ThrowsAsync(async () => await resultTask); + Assert.IsType(exception.InnerException); + Assert.Equal("Test exception", exception.InnerException.Message); + } + + [Fact] + public async Task TargetMethodReturningFSharpAsync_CanBeInvokedViaExecuteAsync() + { + // Arrange + var executor = GetExecutorForMethod("FSharpAsyncMethod"); + + // Act + var result = await executor.ExecuteAsync(_targetObject, new object[] { "test result" }); + + // Assert + Assert.True(executor.IsMethodAsync); + Assert.Same(typeof(string), executor.AsyncResultType); + Assert.Equal("test result", result); + } + + [Fact] + public async Task TargetMethodReturningFailingFSharpAsync_CanBeInvokedViaExecuteAsync() + { + // Arrange + var executor = GetExecutorForMethod("FSharpAsyncFailureMethod"); + + // Act + var resultTask = executor.ExecuteAsync(_targetObject, new object[] { "test result" }); + + // Assert + Assert.True(executor.IsMethodAsync); + Assert.Same(typeof(string), executor.AsyncResultType); + + var exception = await Assert.ThrowsAsync(async () => await resultTask); + Assert.IsType(exception.InnerException); + Assert.Equal("Test exception", exception.InnerException.Message); + } + + private ObjectMethodExecutor GetExecutorForMethod(string methodName) + { + var method = typeof(TestObject).GetMethod(methodName); + return ObjectMethodExecutor.Create(method, targetTypeInfo); + } + + private ObjectMethodExecutor GetExecutorForMethod(string methodName, object[] parameterDefaultValues) + { + var method = typeof(TestObject).GetMethod(methodName); + return ObjectMethodExecutor.Create(method, targetTypeInfo, parameterDefaultValues); + } + + public class TestObject + { + public string value; + public int ValueMethod(int i, int j) + { + return i + j; + } + + public void VoidValueMethod(int i) + { + + } + + public TestObject ValueMethodWithReturnType(int i) + { + return new TestObject() { value = "Hello" }; ; + } + + public TestObject ValueMethodWithReturnTypeThrowsException(TestObject i) + { + throw new NotImplementedException("Not Implemented Exception"); + } + + public TestObject ValueMethodUpdateValue(TestObject parameter) + { + parameter.value = "HelloWorld"; + return parameter; + } + + public Task ValueMethodAsync(int i, int j) + { + return Task.FromResult(i + j); + } + + public async Task VoidValueMethodAsync(int i) + { + await ValueMethodAsync(3, 4); + } + public Task ValueMethodWithReturnTypeAsync(int i) + { + return Task.FromResult(new TestObject() { value = "Hello" }); + } + + public async Task ValueMethodWithReturnVoidThrowsExceptionAsync(TestObject i) + { + await Task.CompletedTask; + throw new NotImplementedException("Not Implemented Exception"); + } + + public async Task ValueMethodWithReturnTypeThrowsExceptionAsync(TestObject i) + { + await Task.CompletedTask; + throw new NotImplementedException("Not Implemented Exception"); + } + + public Task ValueMethodUpdateValueAsync(TestObject parameter) + { + parameter.value = "HelloWorld"; + return Task.FromResult(parameter); + } + + public TestAwaitable CustomAwaitableOfReferenceTypeAsync( + string input1, + int input2) + { + return new TestAwaitable(new TestObject + { + value = $"{input1} {input2}" + }); + } + + public TestAwaitable CustomAwaitableOfValueTypeAsync( + int input1, + int input2) + { + return new TestAwaitable(input1 + input2); + } + + public TestAwaitableWithICriticalNotifyCompletion CustomAwaitableWithICriticalNotifyCompletion() + { + return new TestAwaitableWithICriticalNotifyCompletion(); + } + + public TestAwaitableWithoutICriticalNotifyCompletion CustomAwaitableWithoutICriticalNotifyCompletion() + { + return new TestAwaitableWithoutICriticalNotifyCompletion(); + } + + public ValueTask ValueTaskOfValueType(int result) + { + return new ValueTask(result); + } + + public ValueTask ValueTaskOfReferenceType(string result) + { + return new ValueTask(result); + } + + public void MethodWithMultipleParameters(int valueTypeParam, string referenceTypeParam) + { + } + + public FSharpAsync FSharpAsyncMethod(string parameter) + { + return FSharpAsync.AwaitTask(Task.FromResult(parameter)); + } + + public FSharpAsync FSharpAsyncFailureMethod(string parameter) + { + return FSharpAsync.AwaitTask( + Task.FromException(new InvalidOperationException("Test exception"))); + } + } + + public class TestAwaitable + { + private T _result; + private bool _isCompleted; + private List _onCompletedCallbacks = new List(); + + public TestAwaitable(T result) + { + _result = result; + + // Simulate a brief delay before completion + ThreadPool.QueueUserWorkItem(_ => + { + Thread.Sleep(100); + SetCompleted(); + }); + } + + private void SetCompleted() + { + _isCompleted = true; + + foreach (var callback in _onCompletedCallbacks) + { + callback(); + } + } + + public TestAwaiter GetAwaiter() + { + return new TestAwaiter(this); + } + + public struct TestAwaiter : INotifyCompletion + { + private TestAwaitable _owner; + + public TestAwaiter(TestAwaitable owner) : this() + { + _owner = owner; + } + + public bool IsCompleted => _owner._isCompleted; + + public void OnCompleted(Action continuation) + { + if (_owner._isCompleted) + { + continuation(); + } + else + { + _owner._onCompletedCallbacks.Add(continuation); + } + } + + public T GetResult() + { + return _owner._result; + } + } + } + + public class TestAwaitableWithICriticalNotifyCompletion + { + public TestAwaiterWithICriticalNotifyCompletion GetAwaiter() + => new TestAwaiterWithICriticalNotifyCompletion(); + } + + public class TestAwaitableWithoutICriticalNotifyCompletion + { + public TestAwaiterWithoutICriticalNotifyCompletion GetAwaiter() + => new TestAwaiterWithoutICriticalNotifyCompletion(); + } + + public class TestAwaiterWithICriticalNotifyCompletion + : CompletionTrackingAwaiterBase, ICriticalNotifyCompletion + { + } + + public class TestAwaiterWithoutICriticalNotifyCompletion + : CompletionTrackingAwaiterBase, INotifyCompletion + { + } + + public class CompletionTrackingAwaiterBase + { + private string _result; + + public bool IsCompleted { get; private set; } + + public string GetResult() => _result; + + public void OnCompleted(Action continuation) + { + _result = "Used OnCompleted"; + IsCompleted = true; + continuation(); + } + + public void UnsafeOnCompleted(Action continuation) + { + _result = "Used UnsafeOnCompleted"; + IsCompleted = true; + continuation(); + } + } + } +} diff --git a/src/Shared/test/Shared.Tests/PropertyActivatorTest.cs b/src/Shared/test/Shared.Tests/PropertyActivatorTest.cs new file mode 100644 index 000000000000..a5cb1605b38c --- /dev/null +++ b/src/Shared/test/Shared.Tests/PropertyActivatorTest.cs @@ -0,0 +1,187 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Reflection; +using Xunit; + +namespace Microsoft.Extensions.Internal +{ + public class PropertyActivatorTest + { + [Fact] + public void Activate_InvokesValueAccessorWithExpectedValue() + { + // Arrange + var instance = new TestClass(); + var typeInfo = instance.GetType().GetTypeInfo(); + var property = typeInfo.GetDeclaredProperty("IntProperty"); + var invokedWith = -1; + var activator = new PropertyActivator( + property, + valueAccessor: (val) => + { + invokedWith = val; + return val; + }); + + // Act + activator.Activate(instance, 123); + + // Assert + Assert.Equal(123, invokedWith); + } + + [Fact] + public void Activate_SetsPropertyValue() + { + // Arrange + var instance = new TestClass(); + var typeInfo = instance.GetType().GetTypeInfo(); + var property = typeInfo.GetDeclaredProperty("IntProperty"); + var activator = new PropertyActivator(property, valueAccessor: (val) => val + 1); + + // Act + activator.Activate(instance, 123); + + // Assert + Assert.Equal(124, instance.IntProperty); + } + + [Fact] + public void GetPropertiesToActivate_RestrictsActivatableProperties() + { + // Arrange + var instance = new TestClass(); + var typeInfo = instance.GetType().GetTypeInfo(); + var expectedPropertyInfo = typeInfo.GetDeclaredProperty("ActivatableProperty"); + + // Act + var propertiesToActivate = PropertyActivator.GetPropertiesToActivate( + type: typeof(TestClass), + activateAttributeType: typeof(TestActivateAttribute), + createActivateInfo: + (propertyInfo) => new PropertyActivator(propertyInfo, valueAccessor: (val) => val + 1)); + + // Assert + Assert.Collection( + propertiesToActivate, + (activator) => + { + Assert.Equal(expectedPropertyInfo, activator.PropertyInfo); + }); + } + + [Fact] + public void GetPropertiesToActivate_CanCreateCustomPropertyActivators() + { + // Arrange + var instance = new TestClass(); + var typeInfo = instance.GetType().GetTypeInfo(); + var expectedPropertyInfo = typeInfo.GetDeclaredProperty("IntProperty"); + + // Act + var propertiesToActivate = PropertyActivator.GetPropertiesToActivate( + type: typeof(TestClass), + activateAttributeType: typeof(TestActivateAttribute), + createActivateInfo: + (propertyInfo) => new PropertyActivator(expectedPropertyInfo, valueAccessor: (val) => val + 1)); + + // Assert + Assert.Collection( + propertiesToActivate, + (activator) => + { + Assert.Equal(expectedPropertyInfo, activator.PropertyInfo); + }); + } + + [Fact] + public void GetPropertiesToActivate_ExcludesNonPublic() + { + // Arrange + var instance = new TestClassWithPropertyVisiblity(); + var typeInfo = instance.GetType().GetTypeInfo(); + var expectedPropertyInfo = typeInfo.GetDeclaredProperty("Public"); + + // Act + var propertiesToActivate = PropertyActivator.GetPropertiesToActivate( + typeof(TestClassWithPropertyVisiblity), + typeof(TestActivateAttribute), + (propertyInfo) => new PropertyActivator(propertyInfo, valueAccessor: (val) => val)); + + // Assert + Assert.Single(propertiesToActivate); + Assert.Single(propertiesToActivate, p => p.PropertyInfo == expectedPropertyInfo); + } + + [Fact] + public void GetPropertiesToActivate_IncludesNonPublic() + { + // Arrange + var instance = new TestClassWithPropertyVisiblity(); + var typeInfo = instance.GetType().GetTypeInfo(); + + // Act + var propertiesToActivate = PropertyActivator.GetPropertiesToActivate( + typeof(TestClassWithPropertyVisiblity), + typeof(TestActivateAttribute), + (propertyInfo) => new PropertyActivator(propertyInfo, valueAccessor: (val) => val), + includeNonPublic: true); + + // Assert + Assert.Equal(5, propertiesToActivate.Length); + } + + private class TestClass + { + public int IntProperty { get; set; } + + [TestActivate] + public int ActivatableProperty { get; set; } + + [TestActivate] + public int NoSetterActivatableProperty { get; } + + [TestActivate] + public int this[int something] // Not activatable + { + get + { + return 0; + } + } + + [TestActivate] + public static int StaticActivatablProperty { get; set; } + } + + private class TestClassWithPropertyVisiblity + { + [TestActivate] + public int Public { get; set; } + + [TestActivate] + protected int Protected { get; set; } + + [TestActivate] + internal int Internal { get; set; } + + [TestActivate] + protected internal int ProtectedInternal {get; set; } + + [TestActivate] + private int Private { get; set; } + } + + [AttributeUsage(AttributeTargets.Property)] + private class TestActivateAttribute : Attribute + { + } + + private class ActivationInfo + { + public string Name { get; set; } + } + } +} diff --git a/src/Shared/test/Shared.Tests/PropertyHelperTest.cs b/src/Shared/test/Shared.Tests/PropertyHelperTest.cs new file mode 100644 index 000000000000..1c43dc880b3f --- /dev/null +++ b/src/Shared/test/Shared.Tests/PropertyHelperTest.cs @@ -0,0 +1,863 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using Xunit; + +namespace Microsoft.Extensions.Internal +{ + public class PropertyHelperTest + { + [Fact] + public void PropertyHelper_ReturnsNameCorrectly() + { + // Arrange + var anonymous = new { foo = "bar" }; + var property = PropertyHelper.GetProperties(anonymous.GetType()).First().Property; + + // Act + var helper = new PropertyHelper(property); + + // Assert + Assert.Equal("foo", property.Name); + Assert.Equal("foo", helper.Name); + } + + [Fact] + public void PropertyHelper_ReturnsValueCorrectly() + { + // Arrange + var anonymous = new { bar = "baz" }; + var property = PropertyHelper.GetProperties(anonymous.GetType()).First().Property; + + // Act + var helper = new PropertyHelper(property); + + // Assert + Assert.Equal("bar", helper.Name); + Assert.Equal("baz", helper.GetValue(anonymous)); + } + + [Fact] + public void PropertyHelper_ReturnsGetterDelegate() + { + // Arrange + var anonymous = new { bar = "baz" }; + var property = PropertyHelper.GetProperties(anonymous.GetType()).First().Property; + + // Act + var helper = new PropertyHelper(property); + + // Assert + Assert.NotNull(helper.ValueGetter); + Assert.Equal("baz", helper.ValueGetter(anonymous)); + } + + [Fact] + public void SetValue_SetsPropertyValue() + { + // Arrange + var expected = "new value"; + var instance = new BaseClass { PropA = "old value" }; + var helper = PropertyHelper.GetProperties( + instance.GetType()).First(prop => prop.Name == "PropA"); + + // Act + helper.SetValue(instance, expected); + + // Assert + Assert.Equal(expected, instance.PropA); + } + + [Fact] + public void PropertyHelper_ReturnsSetterDelegate() + { + // Arrange + var expected = "new value"; + var instance = new BaseClass { PropA = "old value" }; + var helper = PropertyHelper.GetProperties( + instance.GetType()).First(prop => prop.Name == "PropA"); + + // Act and Assert + Assert.NotNull(helper.ValueSetter); + helper.ValueSetter(instance, expected); + + // Assert + Assert.Equal(expected, instance.PropA); + } + + [Fact] + public void PropertyHelper_ReturnsValueCorrectly_ForValueTypes() + { + // Arrange + var anonymous = new { foo = 32 }; + var property = PropertyHelper.GetProperties(anonymous.GetType()).First().Property; + + // Act + var helper = new PropertyHelper(property); + + // Assert + Assert.Equal("foo", helper.Name); + Assert.Equal(32, helper.GetValue(anonymous)); + } + + [Fact] + public void PropertyHelper_ReturnsCachedPropertyHelper() + { + // Arrange + var anonymous = new { foo = "bar" }; + + // Act + var helpers1 = PropertyHelper.GetProperties(anonymous.GetType().GetTypeInfo()); + var helpers2 = PropertyHelper.GetProperties(anonymous.GetType().GetTypeInfo()); + + // Assert + Assert.Single(helpers1); + Assert.Same(helpers1, helpers2); + Assert.Same(helpers1[0], helpers2[0]); + } + + [Fact] + public void PropertyHelper_DoesNotChangeUnderscores() + { + // Arrange + var anonymous = new { bar_baz2 = "foo" }; + + // Act + Assert + var helper = Assert.Single(PropertyHelper.GetProperties(anonymous.GetType().GetTypeInfo())); + Assert.Equal("bar_baz2", helper.Name); + } + + [Fact] + public void PropertyHelper_DoesNotFindPrivateProperties() + { + // Arrange + var anonymous = new PrivateProperties(); + + // Act + Assert + var helper = Assert.Single(PropertyHelper.GetProperties(anonymous.GetType().GetTypeInfo())); + Assert.Equal("Prop1", helper.Name); + } + + [Fact] + public void PropertyHelper_DoesNotFindStaticProperties() + { + // Arrange + var anonymous = new Static(); + + // Act + Assert + var helper = Assert.Single(PropertyHelper.GetProperties(anonymous.GetType().GetTypeInfo())); + Assert.Equal("Prop5", helper.Name); + } + +#if NETSTANDARD || NETCOREAPP + [Fact] + public void PropertyHelper_RefStructProperties() + { + // Arrange + var obj = new RefStructProperties(); + + // Act + Assert + var helper = Assert.Single(PropertyHelper.GetProperties(obj.GetType().GetTypeInfo())); + Assert.Equal("Prop5", helper.Name); + } +#elif NET46 || NET461 +#else +#error Unknown TFM - update the set of TFMs where we test for ref structs +#endif + + [Fact] + public void PropertyHelper_DoesNotFindSetOnlyProperties() + { + // Arrange + var anonymous = new SetOnly(); + + // Act + Assert + var helper = Assert.Single(PropertyHelper.GetProperties(anonymous.GetType().GetTypeInfo())); + Assert.Equal("Prop6", helper.Name); + } + + [Theory] + [InlineData(typeof(int?))] + [InlineData(typeof(DayOfWeek?))] + public void PropertyHelper_WorksForNullablePrimitiveAndEnumTypes(Type nullableType) + { + // Act + var properties = PropertyHelper.GetProperties(nullableType); + + // Assert + Assert.Empty(properties); + } + + [Fact] + public void PropertyHelper_UnwrapsNullableTypes() + { + // Arrange + var myType = typeof(MyStruct?); + + // Act + var properties = PropertyHelper.GetProperties(myType); + + // Assert + var property = Assert.Single(properties); + Assert.Equal("Foo", property.Name); + } + + [Fact] + public void PropertyHelper_WorksForStruct() + { + // Arrange + var anonymous = new MyProperties(); + + anonymous.IntProp = 3; + anonymous.StringProp = "Five"; + + // Act + Assert + var helper1 = Assert.Single(PropertyHelper.GetProperties(anonymous.GetType().GetTypeInfo()).Where(prop => prop.Name == "IntProp")); + var helper2 = Assert.Single(PropertyHelper.GetProperties(anonymous.GetType().GetTypeInfo()).Where(prop => prop.Name == "StringProp")); + Assert.Equal(3, helper1.GetValue(anonymous)); + Assert.Equal("Five", helper2.GetValue(anonymous)); + } + + [Fact] + public void PropertyHelper_ForDerivedClass() + { + // Arrange + var derived = new DerivedClass { PropA = "propAValue", PropB = "propBValue" }; + + // Act + var helpers = PropertyHelper.GetProperties(derived.GetType().GetTypeInfo()).ToArray(); + + // Assert + Assert.NotNull(helpers); + Assert.Equal(2, helpers.Length); + + var propAHelper = Assert.Single(helpers.Where(h => h.Name == "PropA")); + var propBHelper = Assert.Single(helpers.Where(h => h.Name == "PropB")); + + Assert.Equal("propAValue", propAHelper.GetValue(derived)); + Assert.Equal("propBValue", propBHelper.GetValue(derived)); + } + + [Fact] + public void PropertyHelper_ForDerivedClass_WithNew() + { + // Arrange + var derived = new DerivedClassWithNew { PropA = "propAValue" }; + + // Act + var helpers = PropertyHelper.GetProperties(derived.GetType().GetTypeInfo()).ToArray(); + + // Assert + Assert.NotNull(helpers); + Assert.Equal(2, helpers.Length); + + var propAHelper = Assert.Single(helpers.Where(h => h.Name == "PropA")); + var propBHelper = Assert.Single(helpers.Where(h => h.Name == "PropB")); + + Assert.Equal("propAValue", propAHelper.GetValue(derived)); + Assert.Equal("Newed", propBHelper.GetValue(derived)); + } + + [Fact] + public void PropertyHelper_ForDerived_WithVirtual() + { + // Arrange + var derived = new DerivedClassWithOverride { PropA = "propAValue", PropB = "propBValue" }; + + // Act + var helpers = PropertyHelper.GetProperties(derived.GetType().GetTypeInfo()).ToArray(); + + // Assert + Assert.NotNull(helpers); + Assert.Equal(2, helpers.Length); + + var propAHelper = Assert.Single(helpers.Where(h => h.Name == "PropA")); + var propBHelper = Assert.Single(helpers.Where(h => h.Name == "PropB")); + + Assert.Equal("OverridenpropAValue", propAHelper.GetValue(derived)); + Assert.Equal("propBValue", propBHelper.GetValue(derived)); + } + + [Fact] + public void PropertyHelper_ForInterface_ReturnsExpectedProperties() + { + // Arrange + var expectedNames = new[] { "Count", "IsReadOnly" }; + + // Act + var helpers = PropertyHelper.GetProperties(typeof(ICollection)); + + // Assert + Assert.Collection( + helpers.OrderBy(helper => helper.Name, StringComparer.Ordinal), + helper => { Assert.Equal(expectedNames[0], helper.Name, StringComparer.Ordinal); }, + helper => { Assert.Equal(expectedNames[1], helper.Name, StringComparer.Ordinal); }); + } + + [Fact] + public void PropertyHelper_ForDerivedInterface_ReturnsAllProperties() + { + // Arrange + var expectedNames = new[] { "Count", "IsReadOnly", "Keys", "Values" }; + + // Act + var helpers = PropertyHelper.GetProperties(typeof(IDictionary)); + + // Assert + Assert.Collection( + helpers.OrderBy(helper => helper.Name, StringComparer.Ordinal), + helper => { Assert.Equal(expectedNames[0], helper.Name, StringComparer.Ordinal); }, + helper => { Assert.Equal(expectedNames[1], helper.Name, StringComparer.Ordinal); }, + helper => { Assert.Equal(expectedNames[2], helper.Name, StringComparer.Ordinal); }, + helper => { Assert.Equal(expectedNames[3], helper.Name, StringComparer.Ordinal); }); + } + + [Fact] + public void GetProperties_ExcludesIndexersAndPropertiesWithoutPublicGetters() + { + // Arrange + var type = typeof(DerivedClassWithNonReadableProperties); + + // Act + var result = PropertyHelper.GetProperties(type).ToArray(); + + // Assert + Assert.Equal(3, result.Length); + Assert.Equal("Visible", result[0].Name); + Assert.Equal("PropA", result[1].Name); + Assert.Equal("PropB", result[2].Name); + } + + [Fact] + public void GetVisibleProperties_NoHiddenProperty() + { + // Arrange + var type = typeof(string); + + // Act + var result = PropertyHelper.GetVisibleProperties(type).ToArray(); + + // Assert + var property = Assert.Single(result); + Assert.Equal("Length", property.Name); + Assert.Equal(typeof(int), property.Property.PropertyType); + } + + [Fact] + public void GetVisibleProperties_HiddenProperty() + { + // Arrange + var type = typeof(DerivedHiddenProperty); + + // Act + var result = PropertyHelper.GetVisibleProperties(type).ToArray(); + + // Assert + Assert.Equal(2, result.Length); + Assert.Equal("Id", result[0].Name); + Assert.Equal(typeof(string), result[0].Property.PropertyType); + Assert.Equal("Name", result[1].Name); + Assert.Equal(typeof(string), result[1].Property.PropertyType); + } + + [Fact] + public void GetVisibleProperties_HiddenProperty_TwoLevels() + { + // Arrange + var type = typeof(DerivedHiddenProperty2); + + // Act + var result = PropertyHelper.GetVisibleProperties(type).ToArray(); + + // Assert + Assert.Equal(2, result.Length); + Assert.Equal("Id", result[0].Name); + Assert.Equal(typeof(Guid), result[0].Property.PropertyType); + Assert.Equal("Name", result[1].Name); + Assert.Equal(typeof(string), result[1].Property.PropertyType); + } + + [Fact] + public void GetVisibleProperties_NoHiddenPropertyWithTypeInfoInput() + { + // Arrange + var type = typeof(string); + + // Act + var result = PropertyHelper.GetVisibleProperties(type.GetTypeInfo()).ToArray(); + + // Assert + var property = Assert.Single(result); + Assert.Equal("Length", property.Name); + Assert.Equal(typeof(int), property.Property.PropertyType); + } + + [Fact] + public void GetVisibleProperties_HiddenPropertyWithTypeInfoInput() + { + // Arrange + var type = typeof(DerivedHiddenProperty); + + // Act + var result = PropertyHelper.GetVisibleProperties(type.GetTypeInfo()).ToArray(); + + // Assert + Assert.Equal(2, result.Length); + Assert.Equal("Id", result[0].Name); + Assert.Equal(typeof(string), result[0].Property.PropertyType); + Assert.Equal("Name", result[1].Name); + Assert.Equal(typeof(string), result[1].Property.PropertyType); + } + + [Fact] + public void GetVisibleProperties_HiddenProperty_TwoLevelsWithTypeInfoInput() + { + // Arrange + var type = typeof(DerivedHiddenProperty2); + + // Act + var result = PropertyHelper.GetVisibleProperties(type.GetTypeInfo()).ToArray(); + + // Assert + Assert.Equal(2, result.Length); + Assert.Equal("Id", result[0].Name); + Assert.Equal(typeof(Guid), result[0].Property.PropertyType); + Assert.Equal("Name", result[1].Name); + Assert.Equal(typeof(string), result[1].Property.PropertyType); + } + + [Fact] + public void MakeFastPropertySetter_SetsPropertyValues_ForPublicAndNobPublicProperties() + { + // Arrange + var instance = new BaseClass(); + var typeInfo = instance.GetType().GetTypeInfo(); + var publicProperty = typeInfo.GetDeclaredProperty("PropA"); + var protectedProperty = typeInfo.GetDeclaredProperty("PropProtected"); + var publicPropertySetter = PropertyHelper.MakeFastPropertySetter(publicProperty); + var protectedPropertySetter = PropertyHelper.MakeFastPropertySetter(protectedProperty); + + // Act + publicPropertySetter(instance, "TestPublic"); + protectedPropertySetter(instance, "TestProtected"); + + // Assert + Assert.Equal("TestPublic", instance.PropA); + Assert.Equal("TestProtected", instance.GetPropProtected()); + } + + [Fact] + public void MakeFastPropertySetter_SetsPropertyValues_ForOverridenProperties() + { + // Arrange + var instance = new DerivedClassWithOverride(); + var typeInfo = instance.GetType().GetTypeInfo(); + var property = typeInfo.GetDeclaredProperty("PropA"); + var propertySetter = PropertyHelper.MakeFastPropertySetter(property); + + // Act + propertySetter(instance, "Test value"); + + // Assert + Assert.Equal("OverridenTest value", instance.PropA); + } + + [Fact] + public void MakeFastPropertySetter_SetsPropertyValues_ForNewedProperties() + { + // Arrange + var instance = new DerivedClassWithNew(); + var typeInfo = instance.GetType().GetTypeInfo(); + var property = typeInfo.GetDeclaredProperty("PropB"); + var propertySetter = PropertyHelper.MakeFastPropertySetter(property); + + // Act + propertySetter(instance, "Test value"); + + // Assert + Assert.Equal("NewedTest value", instance.PropB); + } + + [Fact] + public void MakeFastPropertyGetter_ReferenceType_ForNullObject_Throws() + { + // Arrange + var property = PropertyHelper + .GetProperties(typeof(BaseClass)) + .Single(p => p.Name == nameof(BaseClass.PropA)); + + var accessor = PropertyHelper.MakeFastPropertyGetter(property.Property); + + // Act & Assert + Assert.Throws(() => accessor(null)); + } + + [Fact] + public void MakeFastPropertyGetter_ValueType_ForNullObject_Throws() + { + // Arrange + var property = PropertyHelper + .GetProperties(typeof(MyProperties)) + .Single(p => p.Name == nameof(MyProperties.StringProp)); + + var accessor = PropertyHelper.MakeFastPropertyGetter(property.Property); + + // Act & Assert + Assert.Throws(() => accessor(null)); + } + + [Fact] + public void MakeNullSafeFastPropertyGetter_ReferenceType_Success() + { + // Arrange + var property = PropertyHelper + .GetProperties(typeof(BaseClass)) + .Single(p => p.Name == nameof(BaseClass.PropA)); + + var accessor = PropertyHelper.MakeNullSafeFastPropertyGetter(property.Property); + + // Act + var value = accessor(new BaseClass() { PropA = "Hi" }); + + // Assert + Assert.Equal("Hi", value); + } + + [Fact] + public void MakeNullSafeFastPropertyGetter_ValueType_Success() + { + // Arrange + var property = PropertyHelper + .GetProperties(typeof(MyProperties)) + .Single(p => p.Name == nameof(MyProperties.StringProp)); + + var accessor = PropertyHelper.MakeNullSafeFastPropertyGetter(property.Property); + + // Act + var value = accessor(new MyProperties() { StringProp = "Hi" }); + + // Assert + Assert.Equal("Hi", value); + } + + [Fact] + public void MakeNullSafeFastPropertyGetter_ReferenceType_ForNullObject_ReturnsNull() + { + // Arrange + var property = PropertyHelper + .GetProperties(typeof(BaseClass)) + .Single(p => p.Name == nameof(BaseClass.PropA)); + + var accessor = PropertyHelper.MakeNullSafeFastPropertyGetter(property.Property); + + // Act + var value = accessor(null); + + // Assert + Assert.Null(value); + } + + [Fact] + public void MakeNullSafeFastPropertyGetter_ValueType_ForNullObject_ReturnsNull() + { + // Arrange + var property = PropertyHelper + .GetProperties(typeof(MyProperties)) + .Single(p => p.Name == nameof(MyProperties.StringProp)); + + var accessor = PropertyHelper.MakeNullSafeFastPropertyGetter(property.Property); + + // Act + var value = accessor(null); + + // Assert + Assert.Null(value); + } + + public static TheoryData> IgnoreCaseTestData + { + get + { + return new TheoryData> + { + { + new + { + selected = true, + SeLeCtEd = false + }, + new KeyValuePair("selected", false) + }, + { + new + { + SeLeCtEd = false, + selected = true + }, + new KeyValuePair("SeLeCtEd", true) + }, + { + new + { + SelECTeD = false, + SeLECTED = true + }, + new KeyValuePair("SelECTeD", true) + } + }; + } + } + + [Theory] + [MemberData(nameof(IgnoreCaseTestData))] + public void ObjectToDictionary_IgnoresPropertyCase(object testObject, + KeyValuePair expectedEntry) + { + // Act + var result = PropertyHelper.ObjectToDictionary(testObject); + + // Assert + var entry = Assert.Single(result); + Assert.Equal(expectedEntry, entry); + } + + [Fact] + public void ObjectToDictionary_WithNullObject_ReturnsEmptyDictionary() + { + // Arrange + object value = null; + + // Act + var dictValues = PropertyHelper.ObjectToDictionary(value); + + // Assert + Assert.NotNull(dictValues); + Assert.Equal(0, dictValues.Count); + } + + [Fact] + public void ObjectToDictionary_WithPlainObjectType_ReturnsEmptyDictionary() + { + // Arrange + var value = new object(); + + // Act + var dictValues = PropertyHelper.ObjectToDictionary(value); + + // Assert + Assert.NotNull(dictValues); + Assert.Equal(0, dictValues.Count); + } + + [Fact] + public void ObjectToDictionary_WithPrimitiveType_LooksUpPublicProperties() + { + // Arrange + var value = "test"; + + // Act + var dictValues = PropertyHelper.ObjectToDictionary(value); + + // Assert + Assert.NotNull(dictValues); + Assert.Equal(1, dictValues.Count); + Assert.Equal(4, dictValues["Length"]); + } + + [Fact] + public void ObjectToDictionary_WithAnonymousType_LooksUpProperties() + { + // Arrange + var value = new { test = "value", other = 1 }; + + // Act + var dictValues = PropertyHelper.ObjectToDictionary(value); + + // Assert + Assert.NotNull(dictValues); + Assert.Equal(2, dictValues.Count); + Assert.Equal("value", dictValues["test"]); + Assert.Equal(1, dictValues["other"]); + } + + [Fact] + public void ObjectToDictionary_ReturnsCaseInsensitiveDictionary() + { + // Arrange + var value = new { TEST = "value", oThEr = 1 }; + + // Act + var dictValues = PropertyHelper.ObjectToDictionary(value); + + // Assert + Assert.NotNull(dictValues); + Assert.Equal(2, dictValues.Count); + Assert.Equal("value", dictValues["test"]); + Assert.Equal(1, dictValues["other"]); + } + + [Fact] + public void ObjectToDictionary_ReturnsInheritedProperties() + { + // Arrange + var value = new ThreeDPoint() { X = 5, Y = 10, Z = 17 }; + + // Act + var dictValues = PropertyHelper.ObjectToDictionary(value); + + // Assert + Assert.NotNull(dictValues); + Assert.Equal(3, dictValues.Count); + Assert.Equal(5, dictValues["X"]); + Assert.Equal(10, dictValues["Y"]); + Assert.Equal(17, dictValues["Z"]); + } + + private class Point + { + public int X { get; set; } + public int Y { get; set; } + } + + private class ThreeDPoint : Point + { + public int Z { get; set; } + } + + private class Static + { + public static int Prop2 { get; set; } + public int Prop5 { get; set; } + } + +#if NETSTANDARD || NETCOREAPP + private class RefStructProperties + { + public Span Span => throw new NotImplementedException(); + public MyRefStruct UserDefined => throw new NotImplementedException(); + + public int Prop5 { get; set; } + } + + private readonly ref struct MyRefStruct + { + } +#elif NET46 || NET461 +#else +#error Unknown TFM - update the set of TFMs where we test for ref structs +#endif + private struct MyProperties + { + public int IntProp { get; set; } + public string StringProp { get; set; } + } + + private class SetOnly + { + public int Prop2 { set { } } + public int Prop6 { get; set; } + } + + private class PrivateProperties + { + public int Prop1 { get; set; } + protected int Prop2 { get; set; } + private int Prop3 { get; set; } + } + + public class BaseClass + { + public string PropA { get; set; } + + protected string PropProtected { get; set; } + + public string GetPropProtected() + { + return PropProtected; + } + } + + public class DerivedClass : BaseClass + { + public string PropB { get; set; } + } + + public class BaseClassWithVirtual + { + public virtual string PropA { get; set; } + public string PropB { get; set; } + } + + public class DerivedClassWithNew : BaseClassWithVirtual + { + private string _value = "Newed"; + + public new string PropB + { + get { return _value; } + set { _value = "Newed" + value; } + } + } + + public class DerivedClassWithOverride : BaseClassWithVirtual + { + private string _value = "Overriden"; + + public override string PropA + { + get { return _value; } + set { _value = "Overriden" + value; } + } + } + + private class DerivedClassWithNonReadableProperties : BaseClassWithVirtual + { + public string this[int index] + { + get { return string.Empty; } + set { } + } + + public int Visible { get; set; } + + private string NotVisible { get; set; } + + public string NotVisible2 { private get; set; } + + public string NotVisible3 + { + set { } + } + + public static string NotVisible4 { get; set; } + } + + private struct MyStruct + { + public string Foo { get; set; } + } + + private class BaseHiddenProperty + { + public int Id { get; set; } + } + + private class DerivedHiddenProperty : BaseHiddenProperty + { + public new string Id { get; set; } + + public string Name { get; set; } + } + + private class DerivedHiddenProperty2 : DerivedHiddenProperty + { + public new Guid Id { get; set; } + + public new string Name { get; private set; } + } + } +} diff --git a/src/Shared/test/Shared.Tests/SecurityHelperTests.cs b/src/Shared/test/Shared.Tests/SecurityHelperTests.cs new file mode 100644 index 000000000000..8e7515ad36e7 --- /dev/null +++ b/src/Shared/test/Shared.Tests/SecurityHelperTests.cs @@ -0,0 +1,93 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Linq; +using System.Security.Claims; +using System.Security.Principal; +using Xunit; + +namespace Microsoft.Extensions.Internal +{ + public class SecurityHelperTests + { + [Fact] + public void AddingToAnonymousIdentityDoesNotKeepAnonymousIdentity() + { + var user = SecurityHelper.MergeUserPrincipal(new ClaimsPrincipal(), new GenericPrincipal(new GenericIdentity("Test1", "Alpha"), new string[0])); + + Assert.NotNull(user); + Assert.Equal("Alpha", user.Identity.AuthenticationType); + Assert.Equal("Test1", user.Identity.Name); + Assert.IsAssignableFrom(user); + Assert.IsAssignableFrom(user.Identity); + Assert.Single(user.Identities); + } + + [Fact] + public void AddingExistingIdentityChangesDefaultButPreservesPrior() + { + ClaimsPrincipal user = new GenericPrincipal(new GenericIdentity("Test1", "Alpha"), null); + + Assert.Equal("Alpha", user.Identity.AuthenticationType); + Assert.Equal("Test1", user.Identity.Name); + + user = SecurityHelper.MergeUserPrincipal(user, new GenericPrincipal(new GenericIdentity("Test2", "Beta"), new string[0])); + + Assert.Equal("Beta", user.Identity.AuthenticationType); + Assert.Equal("Test2", user.Identity.Name); + + user = SecurityHelper.MergeUserPrincipal(user, new GenericPrincipal(new GenericIdentity("Test3", "Gamma"), new string[0])); + + Assert.Equal("Gamma", user.Identity.AuthenticationType); + Assert.Equal("Test3", user.Identity.Name); + + Assert.Equal(3, user.Identities.Count()); + Assert.Equal("Test3", user.Identities.Skip(0).First().Name); + Assert.Equal("Test2", user.Identities.Skip(1).First().Name); + Assert.Equal("Test1", user.Identities.Skip(2).First().Name); + } + + [Fact] + public void AddingPreservesNewIdentitiesAndDropsEmpty() + { + var existingPrincipal = new ClaimsPrincipal(new ClaimsIdentity()); + var identityNoAuthTypeWithClaim = new ClaimsIdentity(); + identityNoAuthTypeWithClaim.AddClaim(new Claim("identityNoAuthTypeWithClaim", "yes")); + existingPrincipal.AddIdentity(identityNoAuthTypeWithClaim); + var identityEmptyWithAuthType = new ClaimsIdentity("empty"); + existingPrincipal.AddIdentity(identityEmptyWithAuthType); + + Assert.False(existingPrincipal.Identity.IsAuthenticated); + + var newPrincipal = new ClaimsPrincipal(); + var newEmptyIdentity = new ClaimsIdentity(); + var identityTwo = new ClaimsIdentity("yep"); + newPrincipal.AddIdentity(newEmptyIdentity); + newPrincipal.AddIdentity(identityTwo); + + var user = SecurityHelper.MergeUserPrincipal(existingPrincipal, newPrincipal); + + // Preserve newPrincipal order + Assert.False(user.Identity.IsAuthenticated); + Assert.Null(user.Identity.Name); + + Assert.Equal(4, user.Identities.Count()); + Assert.Equal(newEmptyIdentity, user.Identities.Skip(0).First()); + Assert.Equal(identityTwo, user.Identities.Skip(1).First()); + Assert.Equal(identityNoAuthTypeWithClaim, user.Identities.Skip(2).First()); + Assert.Equal(identityEmptyWithAuthType, user.Identities.Skip(3).First()); + + // This merge should drop newEmptyIdentity since its empty + user = SecurityHelper.MergeUserPrincipal(user, new GenericPrincipal(new GenericIdentity("Test3", "Gamma"), new string[0])); + + Assert.Equal("Gamma", user.Identity.AuthenticationType); + Assert.Equal("Test3", user.Identity.Name); + + Assert.Equal(4, user.Identities.Count()); + Assert.Equal("Test3", user.Identities.Skip(0).First().Name); + Assert.Equal(identityTwo, user.Identities.Skip(1).First()); + Assert.Equal(identityNoAuthTypeWithClaim, user.Identities.Skip(2).First()); + Assert.Equal(identityEmptyWithAuthType, user.Identities.Skip(3).First()); + } + } +} diff --git a/src/Shared/test/Shared.Tests/StackTraceHelperTest.cs b/src/Shared/test/Shared.Tests/StackTraceHelperTest.cs new file mode 100644 index 000000000000..657a310b6e24 --- /dev/null +++ b/src/Shared/test/Shared.Tests/StackTraceHelperTest.cs @@ -0,0 +1,345 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using System.Runtime.CompilerServices; +using System.Threading.Tasks; +using Microsoft.Extensions.StackTrace.Sources; +using ThrowingLibrary; +using Xunit; + +namespace Microsoft.Extensions.Internal +{ + public class StackTraceHelperTest + { + [Fact] + public void StackTraceHelper_IncludesLineNumbersForFiles() + { + // Arrange + Exception exception = null; + try + { + // Throwing an exception in the current assembly always seems to populate the full stack + // trace regardless of symbol type. Crossing assembly boundaries ensures PortablePdbReader gets used + // on desktop. + Thrower.Throw(); + } + catch (Exception ex) + { + exception = ex; + } + + // Act + var stackFrames = StackTraceHelper.GetFrames(exception); + + // Assert + Assert.Collection(stackFrames, + frame => + { + Assert.Contains("Thrower.cs", frame.FilePath); + Assert.Equal(17, frame.LineNumber); + }, + frame => + { + Assert.Contains("StackTraceHelperTest.cs", frame.FilePath); + }); + } + + [Fact] + public void StackTraceHelper_PrettyPrintsStackTraceForGenericMethods() + { + // Arrange + var exception = Record.Exception(() => GenericMethod(null)); + + // Act + var stackFrames = StackTraceHelper.GetFrames(exception); + + // Assert + var methods = stackFrames.Select(frame => frame.MethodDisplayInfo.ToString()).ToArray(); + Assert.Equal("Microsoft.Extensions.Internal.StackTraceHelperTest.GenericMethod(T val)", methods[0]); + } + + [Fact] + public void StackTraceHelper_PrettyPrintsStackTraceForMethodsWithOutParameters() + { + // Arrange + var exception = Record.Exception(() => MethodWithOutParameter(out var value)); + + // Act + var stackFrames = StackTraceHelper.GetFrames(exception); + + // Assert + var methods = stackFrames.Select(frame => frame.MethodDisplayInfo.ToString()).ToArray(); + Assert.Equal("Microsoft.Extensions.Internal.StackTraceHelperTest.MethodWithOutParameter(out int value)", methods[0]); + } + + [Fact] + public void StackTraceHelper_PrettyPrintsStackTraceForMethodsWithGenericOutParameters() + { + // Arrange + var exception = Record.Exception(() => MethodWithGenericOutParameter("Test", out int value)); + + // Act + var stackFrames = StackTraceHelper.GetFrames(exception); + + // Assert + var methods = stackFrames.Select(frame => frame.MethodDisplayInfo.ToString()).ToArray(); + Assert.Equal("Microsoft.Extensions.Internal.StackTraceHelperTest.MethodWithGenericOutParameter(string a, out TVal value)", methods[0]); + } + + [Fact] + public void StackTraceHelper_PrettyPrintsStackTraceForMethodsWithRefParameters() + { + // Arrange + var value = 0; + var exception = Record.Exception(() => MethodWithRefParameter(ref value)); + + // Act + var stackFrames = StackTraceHelper.GetFrames(exception); + + // Assert + var methods = stackFrames.Select(frame => frame.MethodDisplayInfo.ToString()).ToArray(); + Assert.Equal("Microsoft.Extensions.Internal.StackTraceHelperTest.MethodWithRefParameter(ref int value)", methods[0]); + } + + [Fact] + public void StackTraceHelper_PrettyPrintsStackTraceForMethodsWithGenericRefParameters() + { + // Arrange + var value = 0; + var exception = Record.Exception(() => MethodWithGenericRefParameter(ref value)); + + // Act + var stackFrames = StackTraceHelper.GetFrames(exception); + + // Assert + var methods = stackFrames.Select(frame => frame.MethodDisplayInfo.ToString()).ToArray(); + Assert.Equal("Microsoft.Extensions.Internal.StackTraceHelperTest.MethodWithGenericRefParameter(ref TVal value)", methods[0]); + } + + [Fact] + public void StackTraceHelper_PrettyPrintsStackTraceForMethodsWithNullableParameters() + { + // Arrange + var value = 0; + var exception = Record.Exception(() => MethodWithNullableParameter(value)); + + // Act + var stackFrames = StackTraceHelper.GetFrames(exception); + + // Assert + var methods = stackFrames.Select(frame => frame.MethodDisplayInfo.ToString()).ToArray(); + Assert.Equal("Microsoft.Extensions.Internal.StackTraceHelperTest.MethodWithNullableParameter(Nullable value)", methods[0]); + } + + [Fact] + public void StackTraceHelper_PrettyPrintsStackTraceForMethodsOnGenericTypes() + { + // Arrange + var exception = Record.Exception(() => new GenericClass().Throw(0)); + + // Act + var stackFrames = StackTraceHelper.GetFrames(exception); + + // Assert + var methods = stackFrames.Select(frame => frame.MethodDisplayInfo.ToString()).ToArray(); + Assert.Equal("Microsoft.Extensions.Internal.StackTraceHelperTest+GenericClass.Throw(T parameter)", methods[0]); + } + + [Fact] + public void StackTraceHelper_ProducesReadableOutput() + { + // Arrange + var expectedCallStack = new List() + { + "Microsoft.Extensions.Internal.StackTraceHelperTest.Iterator()+MoveNext()", + "string.Join(string separator, IEnumerable values)", + "Microsoft.Extensions.Internal.StackTraceHelperTest+GenericClass.GenericMethod(ref V value)", + "Microsoft.Extensions.Internal.StackTraceHelperTest.MethodAsync(int value)", + "Microsoft.Extensions.Internal.StackTraceHelperTest.MethodAsync(TValue value)", + "Microsoft.Extensions.Internal.StackTraceHelperTest.Method(string value)", + "Microsoft.Extensions.Internal.StackTraceHelperTest.StackTraceHelper_ProducesReadableOutput()", + }; + + Exception exception = null; + try + { + Method("test"); + } + catch (Exception ex) + { + exception = ex; + } + + // Act + var stackFrames = StackTraceHelper.GetFrames(exception); + var methodNames = stackFrames.Select(stackFrame => stackFrame.MethodDisplayInfo.ToString()).ToArray(); + + // Assert + Assert.Equal(expectedCallStack, methodNames); + } + + [Fact] + public void StackTraceHelper_DoesNotIncludeInstanceMethodsOnTypesWithStackTraceHiddenAttribute() + { + // Arrange + var exception = Record.Exception(() => InvokeMethodOnTypeWithStackTraceHiddenAttribute()); + + // Act + var stackFrames = StackTraceHelper.GetFrames(exception); + + // Assert + var methods = stackFrames.Select(frame => frame.MethodDisplayInfo.ToString()).ToArray(); + Assert.Equal("Microsoft.Extensions.Internal.StackTraceHelperTest.ThrowCore()", methods[0]); + Assert.Equal("Microsoft.Extensions.Internal.StackTraceHelperTest.InvokeMethodOnTypeWithStackTraceHiddenAttribute()", methods[1]); + } + + [Fact] + public void StackTraceHelper_DoesNotIncludeStaticMethodsOnTypesWithStackTraceHiddenAttribute() + { + // Arrange + var exception = Record.Exception(() => InvokeStaticMethodOnTypeWithStackTraceHiddenAttribute()); + + // Act + var stackFrames = StackTraceHelper.GetFrames(exception); + + // Assert + var methods = stackFrames.Select(frame => frame.MethodDisplayInfo.ToString()).ToArray(); + Assert.Equal("Microsoft.Extensions.Internal.StackTraceHelperTest.ThrowCore()", methods[0]); + Assert.Equal("Microsoft.Extensions.Internal.StackTraceHelperTest.InvokeStaticMethodOnTypeWithStackTraceHiddenAttribute()", methods[1]); + } + + [Fact] + public void StackTraceHelper_DoesNotIncludeMethodsWithStackTraceHiddenAttribute() + { + // Arrange + var exception = Record.Exception(() => new TypeWithMethodWithStackTraceHiddenAttribute().Throw()); + + // Act + var stackFrames = StackTraceHelper.GetFrames(exception); + + // Assert + var methods = stackFrames.Select(frame => frame.MethodDisplayInfo.ToString()).ToArray(); + Assert.Equal("Microsoft.Extensions.Internal.StackTraceHelperTest.ThrowCore()", methods[0]); + Assert.Equal("Microsoft.Extensions.Internal.StackTraceHelperTest+TypeWithMethodWithStackTraceHiddenAttribute.Throw()", methods[1]); + } + + [Fact] + public void GetFrames_DoesNotFailForDynamicallyGeneratedAssemblies() + { + // Arrange + var action = (Action)Expression.Lambda( + Expression.Throw( + Expression.New(typeof(Exception)))).Compile(); + var exception = Record.Exception(action); + + // Act + var frames = StackTraceHelper.GetFrames(exception).ToArray(); + + // Assert + var frame = frames[0]; + Assert.Null(frame.FilePath); + Assert.Equal($"lambda_method(Closure )", frame.MethodDisplayInfo.ToString()); + } + + [MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)] + async Task MethodAsync(int value) + { + await Task.Delay(0); + return GenericClass.GenericMethod(ref value); + } + + [MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)] + async Task MethodAsync(TValue value) + { + return await MethodAsync(1); + } + + [MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)] + string Method(string value) + { + return MethodAsync(value).GetAwaiter().GetResult(); + } + + [MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)] + static IEnumerable Iterator() + { + yield return "Success"; + throw new Exception(); + } + + [MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)] + void MethodWithOutParameter(out int value) => throw new Exception(); + + [MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)] + void MethodWithGenericOutParameter(string a, out TVal value) => throw new Exception(); + + [MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)] + void MethodWithRefParameter(ref int value) => throw new Exception(); + + [MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)] + void MethodWithGenericRefParameter(ref TVal value) => throw new Exception(); + + [MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)] + void MethodWithNullableParameter(int? value) => throw new Exception(); + + [MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)] + void InvokeMethodOnTypeWithStackTraceHiddenAttribute() => new TypeWithStackTraceHiddenAttribute().Throw(); + + [MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)] + void InvokeStaticMethodOnTypeWithStackTraceHiddenAttribute() => TypeWithStackTraceHiddenAttribute.ThrowStatic(); + + class GenericClass + { + [MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)] + public static string GenericMethod(ref V value) + { + var returnVal = ""; + for (var i = 0; i < 10; i++) + { + returnVal += string.Join(", ", Iterator()); + } + return returnVal; + } + + [MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)] + public void Throw(T parameter) => throw new Exception(); + } + + [MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)] + private void GenericMethod(T val) where T : class => throw new Exception(); + + private class StackTraceHiddenAttribute : Attribute + { + } + + [StackTraceHidden] + private class TypeWithStackTraceHiddenAttribute + { + [MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)] + public void Throw() => ThrowCore(); + + [MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)] + public static void ThrowStatic() => ThrowCore(); + } + + private class TypeWithMethodWithStackTraceHiddenAttribute + { + [MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)] + [StackTraceHidden] + public void MethodWithStackTraceHiddenAttribute() + { + ThrowCore(); + } + + [MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)] + public void Throw() => MethodWithStackTraceHiddenAttribute(); + } + + [MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)] + private static void ThrowCore() => throw new Exception(); + } +} diff --git a/src/Shared/test/Shared.Tests/WebEncodersTests.cs b/src/Shared/test/Shared.Tests/WebEncodersTests.cs new file mode 100644 index 000000000000..5c71403fd653 --- /dev/null +++ b/src/Shared/test/Shared.Tests/WebEncodersTests.cs @@ -0,0 +1,113 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Linq; +using Xunit; + +namespace Microsoft.Extensions.Internal +{ + public class WebEncodersTests + { + [Theory] + [InlineData("", 1, 0)] + [InlineData("", 0, 1)] + [InlineData("0123456789", 9, 2)] + [InlineData("0123456789", Int32.MaxValue, 2)] + [InlineData("0123456789", 9, -1)] + public void Base64UrlDecode_BadOffsets(string input, int offset, int count) + { + // Act & assert + Assert.ThrowsAny(() => + { + var retVal = WebEncoders.Base64UrlDecode(input, offset, count); + }); + } + + [Theory] + [InlineData("x")] + [InlineData("(x)")] + public void Base64UrlDecode_MalformedInput(string input) + { + // Act & assert + Assert.Throws(() => + { + var retVal = WebEncoders.Base64UrlDecode(input); + }); + } + + [Theory] + [InlineData("", "")] + [InlineData("123456qwerty++//X+/x", "123456qwerty--__X-_x")] + [InlineData("123456qwerty++//X+/xxw==", "123456qwerty--__X-_xxw")] + [InlineData("123456qwerty++//X+/xxw0=", "123456qwerty--__X-_xxw0")] + public void Base64UrlEncode_And_Decode(string base64Input, string expectedBase64Url) + { + // Arrange + byte[] input = new byte[3].Concat(Convert.FromBase64String(base64Input)).Concat(new byte[2]).ToArray(); + + // Act & assert - 1 + string actualBase64Url = WebEncoders.Base64UrlEncode(input, 3, input.Length - 5); // also helps test offsets + Assert.Equal(expectedBase64Url, actualBase64Url); + + // Act & assert - 2 + // Verify that values round-trip + byte[] roundTripped = WebEncoders.Base64UrlDecode("xx" + actualBase64Url + "yyy", 2, actualBase64Url.Length); // also helps test offsets + string roundTrippedAsBase64 = Convert.ToBase64String(roundTripped); + Assert.Equal(roundTrippedAsBase64, base64Input); + } + + [Theory] + [InlineData("", "")] + [InlineData("123456qwerty++//X+/x", "123456qwerty--__X-_x")] + [InlineData("123456qwerty++//X+/xxw==", "123456qwerty--__X-_xxw")] + [InlineData("123456qwerty++//X+/xxw0=", "123456qwerty--__X-_xxw0")] + public void Base64UrlEncode_And_Decode_WithBufferOffsets(string base64Input, string expectedBase64Url) + { + // Arrange + var input = new byte[3].Concat(Convert.FromBase64String(base64Input)).Concat(new byte[2]).ToArray(); + var buffer = new char[30]; + var output = new char[30]; + for (var i = 0; i < buffer.Length; i++) + { + buffer[i] = '^'; + output[i] = '^'; + } + + // Act 1 + var numEncodedChars = + WebEncoders.Base64UrlEncode(input, offset: 3, output: output, outputOffset: 4, count: input.Length - 5); + + // Assert 1 + var encodedString = new string(output, startIndex: 4, length: numEncodedChars); + Assert.Equal(expectedBase64Url, encodedString); + + // Act 2 + var roundTripInput = new string(output); + var roundTripped = + WebEncoders.Base64UrlDecode(roundTripInput, offset: 4, buffer: buffer, bufferOffset: 5, count: numEncodedChars); + + // Assert 2, verify that values round-trip + var roundTrippedAsBase64 = Convert.ToBase64String(roundTripped); + Assert.Equal(roundTrippedAsBase64, base64Input); + } + + [Theory] + [InlineData(0, 1, 0)] + [InlineData(0, 0, 1)] + [InlineData(10, 9, 2)] + [InlineData(10, Int32.MaxValue, 2)] + [InlineData(10, 9, -1)] + public void Base64UrlEncode_BadOffsets(int inputLength, int offset, int count) + { + // Arrange + byte[] input = new byte[inputLength]; + + // Act & assert + Assert.ThrowsAny(() => + { + var retVal = WebEncoders.Base64UrlEncode(input, offset, count); + }); + } + } +} diff --git a/src/Shared/test/testassets/ThrowingLibrary/Thrower.cs b/src/Shared/test/testassets/ThrowingLibrary/Thrower.cs new file mode 100644 index 000000000000..babe2387c6ab --- /dev/null +++ b/src/Shared/test/testassets/ThrowingLibrary/Thrower.cs @@ -0,0 +1,20 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Runtime.CompilerServices; + +namespace ThrowingLibrary +{ + // Throwing an exception in the current assembly always seems to populate the full stack + // trace regardless of symbol type. This type exists to simulate an exception thrown + // across assemblies which is the typical use case for StackTraceHelper. + public static class Thrower + { + [MethodImpl(MethodImplOptions.NoInlining)] + public static void Throw() + { + throw new DivideByZeroException(); + } + } +} diff --git a/src/Shared/test/testassets/ThrowingLibrary/ThrowingLibrary.csproj b/src/Shared/test/testassets/ThrowingLibrary/ThrowingLibrary.csproj new file mode 100644 index 000000000000..2b2900911a8a --- /dev/null +++ b/src/Shared/test/testassets/ThrowingLibrary/ThrowingLibrary.csproj @@ -0,0 +1,9 @@ + + + + netstandard2.0 + portable + false + + + diff --git a/src/SignalR/Directory.Build.props b/src/SignalR/Directory.Build.props index c95e4dc5748c..c02d5445b48b 100644 --- a/src/SignalR/Directory.Build.props +++ b/src/SignalR/Directory.Build.props @@ -16,5 +16,6 @@ true true latest + $(MSBuildThisFileDirectory)..\Shared\ diff --git a/src/SignalR/build/dependencies.props b/src/SignalR/build/dependencies.props index 719ea4d5a2b7..1765b37f47d7 100644 --- a/src/SignalR/build/dependencies.props +++ b/src/SignalR/build/dependencies.props @@ -38,7 +38,6 @@ 3.0.0-preview-181109-02 3.0.0-preview-181109-02 3.0.0-alpha1-10727 - 3.0.0-preview-181113-11 3.0.0-preview-181113-11 3.0.0-preview-181113-11 3.0.0-preview-181113-11 @@ -51,11 +50,8 @@ 3.0.0-preview-181113-11 3.0.0-preview-181113-11 3.0.0-preview-181113-11 - 3.0.0-preview-181113-11 3.0.0-preview-181113-11 - 3.0.0-preview-181113-11 3.0.0-preview-181113-11 - 3.0.0-preview-181113-11 3.0.0-preview1-26907-05 15.6.1 4.10.0 diff --git a/src/SignalR/src/Microsoft.AspNetCore.Http.Connections/Microsoft.AspNetCore.Http.Connections.csproj b/src/SignalR/src/Microsoft.AspNetCore.Http.Connections/Microsoft.AspNetCore.Http.Connections.csproj index e72fe999b4e1..20e1372c824b 100644 --- a/src/SignalR/src/Microsoft.AspNetCore.Http.Connections/Microsoft.AspNetCore.Http.Connections.csproj +++ b/src/SignalR/src/Microsoft.AspNetCore.Http.Connections/Microsoft.AspNetCore.Http.Connections.csproj @@ -15,6 +15,11 @@ + + + + + @@ -25,8 +30,6 @@ - - diff --git a/src/SignalR/src/Microsoft.AspNetCore.SignalR.Core/Microsoft.AspNetCore.SignalR.Core.csproj b/src/SignalR/src/Microsoft.AspNetCore.SignalR.Core/Microsoft.AspNetCore.SignalR.Core.csproj index 7c5bd397b23f..58b5d4f08ffe 100644 --- a/src/SignalR/src/Microsoft.AspNetCore.SignalR.Core/Microsoft.AspNetCore.SignalR.Core.csproj +++ b/src/SignalR/src/Microsoft.AspNetCore.SignalR.Core/Microsoft.AspNetCore.SignalR.Core.csproj @@ -8,6 +8,8 @@ + + @@ -19,8 +21,6 @@ - - diff --git a/src/Templating/Directory.Build.props b/src/Templating/Directory.Build.props index 4677e828c162..961a62f19157 100644 --- a/src/Templating/Directory.Build.props +++ b/src/Templating/Directory.Build.props @@ -13,6 +13,7 @@ https://github.com/aspnet/AspNetCore git true + $(MSBuildThisFileDirectory)..\Shared\ diff --git a/src/Templating/build/dependencies.props b/src/Templating/build/dependencies.props index 39c875fea8ea..435a9b5706eb 100644 --- a/src/Templating/build/dependencies.props +++ b/src/Templating/build/dependencies.props @@ -9,7 +9,6 @@ 3.0.0-alpha1-10742 3.0.0-alpha1-10742 3.0.0-alpha1-10742 - 3.0.0-preview-181113-11 3.0.0-preview-18606-0103 3.0.0-alpha1-10742 3.0.0-alpha1-10742 @@ -21,7 +20,6 @@ 3.0.0-preview-181109-02 3.0.0-preview-181109-02 3.0.0-preview-181113-11 - 3.0.0-preview-181113-11 3.0.0-preview1-26907-05 3.0.0-preview-18579-0056 15.6.1 diff --git a/src/Templating/test/Templates.Test/Templates.Test.csproj b/src/Templating/test/Templates.Test/Templates.Test.csproj index f469b0ae2ceb..51fc4ac1c55a 100644 --- a/src/Templating/test/Templates.Test/Templates.Test.csproj +++ b/src/Templating/test/Templates.Test/Templates.Test.csproj @@ -6,15 +6,15 @@ + + - - diff --git a/src/Tools/Directory.Build.props b/src/Tools/Directory.Build.props index 6b358026891f..0cbe48018a31 100644 --- a/src/Tools/Directory.Build.props +++ b/src/Tools/Directory.Build.props @@ -4,6 +4,7 @@ $(RepositoryRoot)obj\$(MSBuildProjectName)\ $(RepositoryRoot)bin\$(MSBuildProjectName)\ + $(MSBuildThisFileDirectory)Shared\ diff --git a/src/Tools/FirstRunCertGenerator/src/Microsoft.AspNetCore.DeveloperCertificates.XPlat.csproj b/src/Tools/FirstRunCertGenerator/src/Microsoft.AspNetCore.DeveloperCertificates.XPlat.csproj index c6c9ce517c71..65d2840c3f15 100644 --- a/src/Tools/FirstRunCertGenerator/src/Microsoft.AspNetCore.DeveloperCertificates.XPlat.csproj +++ b/src/Tools/FirstRunCertGenerator/src/Microsoft.AspNetCore.DeveloperCertificates.XPlat.csproj @@ -8,7 +8,7 @@ - + diff --git a/src/Tools/FirstRunCertGenerator/src/Properties/AssemblyInfo.cs b/src/Tools/FirstRunCertGenerator/src/Properties/AssemblyInfo.cs new file mode 100644 index 000000000000..0f02f95e4a28 --- /dev/null +++ b/src/Tools/FirstRunCertGenerator/src/Properties/AssemblyInfo.cs @@ -0,0 +1,6 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Runtime.CompilerServices; + +[assembly: InternalsVisibleTo("Microsoft.AspNetCore.DeveloperCertificates.XPlat.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")] diff --git a/src/Tools/FirstRunCertGenerator/test/CertificateManagerTests.cs b/src/Tools/FirstRunCertGenerator/test/CertificateManagerTests.cs new file mode 100644 index 000000000000..0979eba21bc1 --- /dev/null +++ b/src/Tools/FirstRunCertGenerator/test/CertificateManagerTests.cs @@ -0,0 +1,288 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +#if NETCOREAPP3_0 + +using System; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices; +using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using Xunit; +using Xunit.Abstractions; + +namespace Microsoft.AspNetCore.Certificates.Generation.Tests +{ + public class CertificateManagerTests + { + public CertificateManagerTests(ITestOutputHelper output) + { + Output = output; + } + + public const string TestCertificateSubject = "CN=aspnet.test"; + + public ITestOutputHelper Output { get; } + + [Fact(Skip = "True")] + public void EnsureCreateHttpsCertificate_CreatesACertificate_WhenThereAreNoHttpsCertificates() + { + try + { + // Arrange + const string CertificateName = nameof(EnsureCreateHttpsCertificate_CreatesACertificate_WhenThereAreNoHttpsCertificates) + ".cer"; + var manager = new CertificateManager(); + + manager.RemoveAllCertificates(CertificatePurpose.HTTPS, StoreName.My, StoreLocation.CurrentUser, TestCertificateSubject); + if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + { + manager.RemoveAllCertificates(CertificatePurpose.HTTPS, StoreName.Root, StoreLocation.CurrentUser, TestCertificateSubject); + } + + // Act + DateTimeOffset now = DateTimeOffset.UtcNow; + now = new DateTimeOffset(now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second, 0, now.Offset); + var result = manager.EnsureAspNetCoreHttpsDevelopmentCertificate(now, now.AddYears(1), CertificateName, trust: false, subject: TestCertificateSubject); + + // Assert + Assert.Equal(EnsureCertificateResult.Succeeded, result); + Assert.True(File.Exists(CertificateName)); + + var exportedCertificate = new X509Certificate2(File.ReadAllBytes(CertificateName)); + Assert.NotNull(exportedCertificate); + Assert.False(exportedCertificate.HasPrivateKey); + + var httpsCertificates = manager.ListCertificates(CertificatePurpose.HTTPS, StoreName.My, StoreLocation.CurrentUser, isValid: false); + var httpsCertificate = Assert.Single(httpsCertificates, c => c.Subject == TestCertificateSubject); + Assert.True(httpsCertificate.HasPrivateKey); + Assert.Equal(TestCertificateSubject, httpsCertificate.Subject); + Assert.Equal(TestCertificateSubject, httpsCertificate.Issuer); + Assert.Equal("sha256RSA", httpsCertificate.SignatureAlgorithm.FriendlyName); + Assert.Equal("1.2.840.113549.1.1.11", httpsCertificate.SignatureAlgorithm.Value); + + Assert.Equal(now.LocalDateTime, httpsCertificate.NotBefore); + Assert.Equal(now.AddYears(1).LocalDateTime, httpsCertificate.NotAfter); + Assert.Contains( + httpsCertificate.Extensions.OfType(), + e => e is X509BasicConstraintsExtension basicConstraints && + basicConstraints.Critical == true && + basicConstraints.CertificateAuthority == false && + basicConstraints.HasPathLengthConstraint == false && + basicConstraints.PathLengthConstraint == 0); + + Assert.Contains( + httpsCertificate.Extensions.OfType(), + e => e is X509KeyUsageExtension keyUsage && + keyUsage.Critical == true && + keyUsage.KeyUsages == X509KeyUsageFlags.KeyEncipherment); + + Assert.Contains( + httpsCertificate.Extensions.OfType(), + e => e is X509EnhancedKeyUsageExtension enhancedKeyUsage && + enhancedKeyUsage.Critical == true && + enhancedKeyUsage.EnhancedKeyUsages.OfType().Single() is Oid keyUsage && + keyUsage.Value == "1.3.6.1.5.5.7.3.1"); + + // Subject alternative name + Assert.Contains( + httpsCertificate.Extensions.OfType(), + e => e.Critical == true && + e.Oid.Value == "2.5.29.17"); + + // ASP.NET HTTPS Development certificate extension + Assert.Contains( + httpsCertificate.Extensions.OfType(), + e => e.Critical == false && + e.Oid.Value == "1.3.6.1.4.1.311.84.1.1" && + Encoding.ASCII.GetString(e.RawData) == "ASP.NET Core HTTPS development certificate"); + + Assert.Equal(httpsCertificate.GetCertHashString(), exportedCertificate.GetCertHashString()); + + } + catch (Exception e) + { + Output.WriteLine(e.Message); + ListCertificates(Output); + throw; + } + } + + [Fact] + public void EnsureCreateHttpsCertificate2_CreatesACertificate_WhenThereAreNoHttpsCertificates() + { + try + { + // Arrange + const string CertificateName = nameof(EnsureCreateHttpsCertificate_CreatesACertificate_WhenThereAreNoHttpsCertificates) + ".cer"; + var manager = new CertificateManager(); + manager.RemoveAllCertificates(CertificatePurpose.HTTPS, StoreName.My, StoreLocation.CurrentUser, TestCertificateSubject); + if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + { + manager.RemoveAllCertificates(CertificatePurpose.HTTPS, StoreName.Root, StoreLocation.CurrentUser, TestCertificateSubject); + } + + // Act + DateTimeOffset now = DateTimeOffset.UtcNow; + now = new DateTimeOffset(now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second, 0, now.Offset); + var result = manager.EnsureAspNetCoreHttpsDevelopmentCertificate2(now, now.AddYears(1), CertificateName, trust: false, subject: TestCertificateSubject); + + // Assert + Assert.Equal(EnsureCertificateResult.Succeeded, result.ResultCode); + Assert.NotNull(result.Diagnostics); + Assert.NotEmpty(result.Diagnostics.Messages); + Assert.Empty(result.Diagnostics.Exceptions); + + Assert.True(File.Exists(CertificateName)); + + var exportedCertificate = new X509Certificate2(File.ReadAllBytes(CertificateName)); + Assert.NotNull(exportedCertificate); + Assert.False(exportedCertificate.HasPrivateKey); + + var httpsCertificates = manager.ListCertificates(CertificatePurpose.HTTPS, StoreName.My, StoreLocation.CurrentUser, isValid: false); + var httpsCertificate = Assert.Single(httpsCertificates, c => c.Subject == TestCertificateSubject); + Assert.True(httpsCertificate.HasPrivateKey); + Assert.Equal(TestCertificateSubject, httpsCertificate.Subject); + Assert.Equal(TestCertificateSubject, httpsCertificate.Issuer); + Assert.Equal("sha256RSA", httpsCertificate.SignatureAlgorithm.FriendlyName); + Assert.Equal("1.2.840.113549.1.1.11", httpsCertificate.SignatureAlgorithm.Value); + + Assert.Equal(now.LocalDateTime, httpsCertificate.NotBefore); + Assert.Equal(now.AddYears(1).LocalDateTime, httpsCertificate.NotAfter); + Assert.Contains( + httpsCertificate.Extensions.OfType(), + e => e is X509BasicConstraintsExtension basicConstraints && + basicConstraints.Critical == true && + basicConstraints.CertificateAuthority == false && + basicConstraints.HasPathLengthConstraint == false && + basicConstraints.PathLengthConstraint == 0); + + Assert.Contains( + httpsCertificate.Extensions.OfType(), + e => e is X509KeyUsageExtension keyUsage && + keyUsage.Critical == true && + keyUsage.KeyUsages == X509KeyUsageFlags.KeyEncipherment); + + Assert.Contains( + httpsCertificate.Extensions.OfType(), + e => e is X509EnhancedKeyUsageExtension enhancedKeyUsage && + enhancedKeyUsage.Critical == true && + enhancedKeyUsage.EnhancedKeyUsages.OfType().Single() is Oid keyUsage && + keyUsage.Value == "1.3.6.1.5.5.7.3.1"); + + // Subject alternative name + Assert.Contains( + httpsCertificate.Extensions.OfType(), + e => e.Critical == true && + e.Oid.Value == "2.5.29.17"); + + // ASP.NET HTTPS Development certificate extension + Assert.Contains( + httpsCertificate.Extensions.OfType(), + e => e.Critical == false && + e.Oid.Value == "1.3.6.1.4.1.311.84.1.1" && + Encoding.ASCII.GetString(e.RawData) == "ASP.NET Core HTTPS development certificate"); + + Assert.Equal(httpsCertificate.GetCertHashString(), exportedCertificate.GetCertHashString()); + + } + catch (Exception e) + { + Output.WriteLine(e.Message); + ListCertificates(Output); + throw; + } + } + + private void ListCertificates(ITestOutputHelper output) + { + using (var store = new X509Store(StoreName.My, StoreLocation.CurrentUser)) + { + store.Open(OpenFlags.ReadOnly); + var certificates = store.Certificates; + foreach (var certificate in certificates) + { + Output.WriteLine($"Certificate: '{Convert.ToBase64String(certificate.Export(X509ContentType.Cert))}'."); + certificate.Dispose(); + } + + store.Close(); + } + } + + [Fact(Skip = "true")] + public void EnsureCreateHttpsCertificate_DoesNotCreateACertificate_WhenThereIsAnExistingHttpsCertificates() + { + // Arrange + const string CertificateName = nameof(EnsureCreateHttpsCertificate_DoesNotCreateACertificate_WhenThereIsAnExistingHttpsCertificates) + ".pfx"; + var certificatePassword = Guid.NewGuid().ToString(); + + var manager = new CertificateManager(); + + manager.RemoveAllCertificates(CertificatePurpose.HTTPS, StoreName.My, StoreLocation.CurrentUser, TestCertificateSubject); + if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + { + manager.RemoveAllCertificates(CertificatePurpose.HTTPS, StoreName.Root, StoreLocation.CurrentUser, TestCertificateSubject); + } + + DateTimeOffset now = DateTimeOffset.UtcNow; + now = new DateTimeOffset(now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second, 0, now.Offset); + manager.EnsureAspNetCoreHttpsDevelopmentCertificate(now, now.AddYears(1), path: null, trust: false, subject: TestCertificateSubject); + + var httpsCertificate = manager.ListCertificates(CertificatePurpose.HTTPS, StoreName.My, StoreLocation.CurrentUser, isValid: false).Single(c => c.Subject == TestCertificateSubject); + + // Act + var result = manager.EnsureAspNetCoreHttpsDevelopmentCertificate(now, now.AddYears(1), CertificateName, trust: false, includePrivateKey: true, password: certificatePassword, subject: TestCertificateSubject); + + // Assert + Assert.Equal(EnsureCertificateResult.ValidCertificatePresent, result); + Assert.True(File.Exists(CertificateName)); + + var exportedCertificate = new X509Certificate2(File.ReadAllBytes(CertificateName), certificatePassword); + Assert.NotNull(exportedCertificate); + Assert.True(exportedCertificate.HasPrivateKey); + + + Assert.Equal(httpsCertificate.GetCertHashString(), exportedCertificate.GetCertHashString()); + } + + [Fact(Skip = "Requires user interaction")] + public void EnsureAspNetCoreHttpsDevelopmentCertificate_ReturnsCorrectResult_WhenUserCancelsTrustStepOnWindows() + { + var manager = new CertificateManager(); + + manager.RemoveAllCertificates(CertificatePurpose.HTTPS, StoreName.My, StoreLocation.CurrentUser, TestCertificateSubject); + if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + { + manager.RemoveAllCertificates(CertificatePurpose.HTTPS, StoreName.Root, StoreLocation.CurrentUser, TestCertificateSubject); + } + + DateTimeOffset now = DateTimeOffset.UtcNow; + now = new DateTimeOffset(now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second, 0, now.Offset); + var trustFailed = manager.EnsureAspNetCoreHttpsDevelopmentCertificate(now, now.AddYears(1), path: null, trust: true, subject: TestCertificateSubject); + + Assert.Equal(EnsureCertificateResult.UserCancelledTrustStep, trustFailed); + } + + [Fact(Skip = "Requires user interaction")] + public void EnsureAspNetCoreHttpsDevelopmentCertificate_CanRemoveCertificates() + { + var manager = new CertificateManager(); + + DateTimeOffset now = DateTimeOffset.UtcNow; + now = new DateTimeOffset(now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second, 0, now.Offset); + manager.EnsureAspNetCoreHttpsDevelopmentCertificate(now, now.AddYears(1), path: null, trust: true, subject: TestCertificateSubject); + + manager.CleanupHttpsCertificates(TestCertificateSubject); + + Assert.Empty(manager.ListCertificates(CertificatePurpose.HTTPS, StoreName.My, StoreLocation.CurrentUser, isValid: false).Where(c => c.Subject == TestCertificateSubject)); + if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + { + Assert.Empty(manager.ListCertificates(CertificatePurpose.HTTPS, StoreName.Root, StoreLocation.CurrentUser, isValid: false).Where(c => c.Subject == TestCertificateSubject)); + } + } + } +} + +#endif diff --git a/src/Tools/FirstRunCertGenerator/test/Microsoft.AspNetCore.DeveloperCertificates.XPlat.Tests.csproj b/src/Tools/FirstRunCertGenerator/test/Microsoft.AspNetCore.DeveloperCertificates.XPlat.Tests.csproj new file mode 100644 index 000000000000..68049992742c --- /dev/null +++ b/src/Tools/FirstRunCertGenerator/test/Microsoft.AspNetCore.DeveloperCertificates.XPlat.Tests.csproj @@ -0,0 +1,11 @@ + + + + netcoreapp3.0 + + + + + + + diff --git a/src/Tools/shared/src/CliContext.cs b/src/Tools/Shared/CommandLine/CliContext.cs similarity index 100% rename from src/Tools/shared/src/CliContext.cs rename to src/Tools/Shared/CommandLine/CliContext.cs diff --git a/src/Tools/shared/src/CommandLineApplicationExtensions.cs b/src/Tools/Shared/CommandLine/CommandLineApplicationExtensions.cs similarity index 100% rename from src/Tools/shared/src/CommandLineApplicationExtensions.cs rename to src/Tools/Shared/CommandLine/CommandLineApplicationExtensions.cs diff --git a/src/Tools/shared/src/ConsoleReporter.cs b/src/Tools/Shared/CommandLine/ConsoleReporter.cs similarity index 100% rename from src/Tools/shared/src/ConsoleReporter.cs rename to src/Tools/Shared/CommandLine/ConsoleReporter.cs diff --git a/src/Tools/shared/src/DebugHelper.cs b/src/Tools/Shared/CommandLine/DebugHelper.cs similarity index 100% rename from src/Tools/shared/src/DebugHelper.cs rename to src/Tools/Shared/CommandLine/DebugHelper.cs diff --git a/src/Tools/shared/src/Ensure.cs b/src/Tools/Shared/CommandLine/Ensure.cs similarity index 100% rename from src/Tools/shared/src/Ensure.cs rename to src/Tools/Shared/CommandLine/Ensure.cs diff --git a/src/Tools/shared/src/IConsole.cs b/src/Tools/Shared/CommandLine/IConsole.cs similarity index 100% rename from src/Tools/shared/src/IConsole.cs rename to src/Tools/Shared/CommandLine/IConsole.cs diff --git a/src/Tools/shared/src/IReporter.cs b/src/Tools/Shared/CommandLine/IReporter.cs similarity index 100% rename from src/Tools/shared/src/IReporter.cs rename to src/Tools/Shared/CommandLine/IReporter.cs diff --git a/src/Tools/shared/src/NullReporter.cs b/src/Tools/Shared/CommandLine/NullReporter.cs similarity index 100% rename from src/Tools/shared/src/NullReporter.cs rename to src/Tools/Shared/CommandLine/NullReporter.cs diff --git a/src/Tools/shared/src/PhysicalConsole.cs b/src/Tools/Shared/CommandLine/PhysicalConsole.cs similarity index 100% rename from src/Tools/shared/src/PhysicalConsole.cs rename to src/Tools/Shared/CommandLine/PhysicalConsole.cs diff --git a/src/Tools/shared/test/TestConsole.cs b/src/Tools/Shared/TestHelpers/TestConsole.cs similarity index 100% rename from src/Tools/shared/test/TestConsole.cs rename to src/Tools/Shared/TestHelpers/TestConsole.cs diff --git a/src/Tools/shared/test/TestReporter.cs b/src/Tools/Shared/TestHelpers/TestReporter.cs similarity index 100% rename from src/Tools/shared/test/TestReporter.cs rename to src/Tools/Shared/TestHelpers/TestReporter.cs diff --git a/src/Tools/dotnet-dev-certs/src/dotnet-dev-certs.csproj b/src/Tools/dotnet-dev-certs/src/dotnet-dev-certs.csproj index 8be696049a18..39b08b71a19b 100644 --- a/src/Tools/dotnet-dev-certs/src/dotnet-dev-certs.csproj +++ b/src/Tools/dotnet-dev-certs/src/dotnet-dev-certs.csproj @@ -12,19 +12,11 @@ - - - - - - - - - + + - diff --git a/src/Tools/dotnet-sql-cache/src/dotnet-sql-cache.csproj b/src/Tools/dotnet-sql-cache/src/dotnet-sql-cache.csproj index d7f9e0c274e1..239e4195a1bc 100644 --- a/src/Tools/dotnet-sql-cache/src/dotnet-sql-cache.csproj +++ b/src/Tools/dotnet-sql-cache/src/dotnet-sql-cache.csproj @@ -11,7 +11,7 @@ - + diff --git a/src/Tools/dotnet-user-secrets/src/dotnet-user-secrets.csproj b/src/Tools/dotnet-user-secrets/src/dotnet-user-secrets.csproj index fc5284440b01..0bab8e1a9216 100644 --- a/src/Tools/dotnet-user-secrets/src/dotnet-user-secrets.csproj +++ b/src/Tools/dotnet-user-secrets/src/dotnet-user-secrets.csproj @@ -13,7 +13,7 @@ - + diff --git a/src/Tools/dotnet-user-secrets/test/dotnet-user-secrets.Tests.csproj b/src/Tools/dotnet-user-secrets/test/dotnet-user-secrets.Tests.csproj index 1f8f1e4deb35..8b80964219a4 100644 --- a/src/Tools/dotnet-user-secrets/test/dotnet-user-secrets.Tests.csproj +++ b/src/Tools/dotnet-user-secrets/test/dotnet-user-secrets.Tests.csproj @@ -6,7 +6,7 @@ - + diff --git a/src/Tools/dotnet-watch/src/dotnet-watch.csproj b/src/Tools/dotnet-watch/src/dotnet-watch.csproj index 2e4cb173d199..a0b3e1cff51c 100644 --- a/src/Tools/dotnet-watch/src/dotnet-watch.csproj +++ b/src/Tools/dotnet-watch/src/dotnet-watch.csproj @@ -12,13 +12,13 @@ - + + - diff --git a/src/Tools/dotnet-watch/test/dotnet-watch.Tests.csproj b/src/Tools/dotnet-watch/test/dotnet-watch.Tests.csproj index 6deaae84efc1..0b8684a7de99 100644 --- a/src/Tools/dotnet-watch/test/dotnet-watch.Tests.csproj +++ b/src/Tools/dotnet-watch/test/dotnet-watch.Tests.csproj @@ -7,7 +7,7 @@ - + diff --git a/src/IISIntegration/test/gtest/googletest b/src/submodules/googletest similarity index 100% rename from src/IISIntegration/test/gtest/googletest rename to src/submodules/googletest diff --git a/version.props b/version.props index f0098cfbf21f..4d43c73394b4 100644 --- a/version.props +++ b/version.props @@ -6,8 +6,11 @@ preview Preview 0.3.$(AspNetCorePatchVersion) + 1$(AspNetCoreMajorVersion) + $(AspNetCoreMinorVersion) + $(AspNetCorePatchVersion) $(BUILD_BUILDNUMBER) $([System.DateTime]::Now.ToString('yyyyMMdd')).$(BUILD_NUMBER)