Merge pull request #3787 from aspnet/jkotalik/new30Merge
Merge IISIntegration into master
This commit is contained in:
commit
4d57528704
|
|
@ -7,6 +7,7 @@ _ReSharper.*/
|
|||
packages/
|
||||
artifacts/
|
||||
PublishProfiles/
|
||||
BenchmarkDotNet.Artifacts/
|
||||
*.user
|
||||
*.suo
|
||||
*.cache
|
||||
|
|
@ -36,6 +37,7 @@ project.lock.json
|
|||
*.tlog
|
||||
*.CppClean.log
|
||||
*msbuild.log
|
||||
gtest.log
|
||||
|
||||
src/*/*/Debug/
|
||||
src/*/*/x64/Debug/
|
||||
|
|
@ -48,18 +50,18 @@ x64/
|
|||
*.pdb
|
||||
*.lib
|
||||
*.idb
|
||||
*.TMP
|
||||
|
||||
src/*/AspNetCore/aspnetcoremodule.h
|
||||
src/*/AspNetCore/aspnetcore_msg.h
|
||||
src/*/AspNetCore/aspnetcore_msg.rc
|
||||
src/*/*/version.h
|
||||
src/*/RequestHandler/version.h
|
||||
src/*/InProcessRequestHandler/version.h
|
||||
src/*/OutOfProcessRequestHandler/version.h
|
||||
src/*/CommonLib/aspnetcore_msg.h
|
||||
src/*/CommonLib/aspnetcore_msg.rc
|
||||
test/*/Debug
|
||||
test/*/Release
|
||||
test/gtest-1.8.0/msvc/Debug
|
||||
test/gtest-1.8.0/msvc/Release
|
||||
.build
|
||||
|
||||
*.VC.*db
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
<Project>
|
||||
<Project>
|
||||
<Import
|
||||
Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), AspNetCoreSettings.props))\AspNetCoreSettings.props"
|
||||
Condition=" '$(CI)' != 'true' AND '$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), AspNetCoreSettings.props))' != '' " />
|
||||
|
|
@ -14,10 +14,9 @@
|
|||
<RepositoryRoot>$(MSBuildThisFileDirectory)</RepositoryRoot>
|
||||
<AssemblyOriginatorKeyFile>$(MSBuildThisFileDirectory)build\Key.snk</AssemblyOriginatorKeyFile>
|
||||
<SignAssembly>true</SignAssembly>
|
||||
<PublicSign Condition="'$(OS)' != 'Windows_NT'">true</PublicSign>
|
||||
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
|
||||
<!-- https://github.com/aspnet/IISIntegration/issues/617 -->
|
||||
<EnableApiCheck>false</EnableApiCheck>
|
||||
<!-- Workaround microsoft/msbuild#3626 -->
|
||||
<AddSyntheticProjectReferencesForSolutionDependencies>false</AddSyntheticProjectReferencesForSolutionDependencies>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,9 @@
|
|||
<Project>
|
||||
<Project>
|
||||
<PropertyGroup>
|
||||
<RuntimeFrameworkVersion Condition=" '$(TargetFramework)' == 'netcoreapp2.0' ">$(MicrosoftNETCoreApp20PackageVersion)</RuntimeFrameworkVersion>
|
||||
<RuntimeFrameworkVersion Condition=" '$(TargetFramework)' == 'netcoreapp2.1' ">$(MicrosoftNETCoreApp21PackageVersion)</RuntimeFrameworkVersion>
|
||||
<RuntimeFrameworkVersion Condition=" '$(TargetFramework)' == 'netcoreapp2.2' ">$(MicrosoftNETCoreApp22PackageVersion)</RuntimeFrameworkVersion>
|
||||
<NETStandardImplicitPackageVersion Condition=" '$(TargetFramework)' == 'netstandard2.0' ">$(NETStandardLibrary20PackageVersion)</NETStandardImplicitPackageVersion>
|
||||
<!-- aspnet/BuildTools#662 Don't police what version of NetCoreApp we use -->
|
||||
<NETCoreAppMaximumVersion>99.9</NETCoreAppMaximumVersion>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,463 @@
|
|||
|
||||
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}"
|
||||
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.Settings = build\Build.Settings
|
||||
build\Config.Definitions.Props = build\Config.Definitions.Props
|
||||
build\dependencies.props = build\dependencies.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
|
||||
build\repo.props = build\repo.props
|
||||
build\repo.targets = build\repo.targets
|
||||
build\sources.props = build\sources.props
|
||||
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}
|
||||
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}") = "AspNetCoreModuleV2", "AspNetCoreModuleV2", "{06CA2C2B-83B0-4D83-905A-E0C74790009E}"
|
||||
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", "{D182103F-8405-4647-B158-C36F598657EF}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.IntegrationTesting.IIS", "src\Microsoft.AspNetCore.Server.IntegrationTesting.IIS\Microsoft.AspNetCore.Server.IntegrationTesting.IIS.csproj", "{34135ED7-313D-4E68-860C-D6B51AA28523}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IIS.Tests", "test\IIS.Tests\IIS.Tests.csproj", "{C0310D84-BC2F-4B2E-870E-D35044DB3E3E}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Common.Tests", "test\Common.Tests\Common.Tests.csproj", "{D17B7B35-5361-4A50-B499-E03E5C3CC095}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IIS.BackwardsCompatibility.FunctionalTests", "test\IIS.BackwardsCompatibility.FunctionalTests\IIS.BackwardsCompatibility.FunctionalTests.csproj", "{582B07BC-73F4-4689-8557-B039298BD82C}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IIS.ForwardsCompatibility.FunctionalTests", "test\IIS.ForwardsCompatibility.FunctionalTests\IIS.ForwardsCompatibility.FunctionalTests.csproj", "{D1EA5D99-28FD-4197-81DE-17098846B38B}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InProcessForwardsCompatWebSite", "test\WebSites\InProcessForwardsCompatWebSite\InProcessWebSite.csproj", "{BBBC85B2-5D7A-4D09-90B1-8DBCC9059493}"
|
||||
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
|
||||
{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}.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}.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}.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}.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}.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}.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}.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}.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
|
||||
{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
|
||||
{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}.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}.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}.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
|
||||
{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
|
||||
{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
|
||||
{D182103F-8405-4647-B158-C36F598657EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D182103F-8405-4647-B158-C36F598657EF}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D182103F-8405-4647-B158-C36F598657EF}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{D182103F-8405-4647-B158-C36F598657EF}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{D182103F-8405-4647-B158-C36F598657EF}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{D182103F-8405-4647-B158-C36F598657EF}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{D182103F-8405-4647-B158-C36F598657EF}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D182103F-8405-4647-B158-C36F598657EF}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{D182103F-8405-4647-B158-C36F598657EF}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{D182103F-8405-4647-B158-C36F598657EF}.Release|x64.Build.0 = Release|Any CPU
|
||||
{D182103F-8405-4647-B158-C36F598657EF}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{D182103F-8405-4647-B158-C36F598657EF}.Release|x86.Build.0 = Release|Any CPU
|
||||
{34135ED7-313D-4E68-860C-D6B51AA28523}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{34135ED7-313D-4E68-860C-D6B51AA28523}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{34135ED7-313D-4E68-860C-D6B51AA28523}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{34135ED7-313D-4E68-860C-D6B51AA28523}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{34135ED7-313D-4E68-860C-D6B51AA28523}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{34135ED7-313D-4E68-860C-D6B51AA28523}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{34135ED7-313D-4E68-860C-D6B51AA28523}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{34135ED7-313D-4E68-860C-D6B51AA28523}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{34135ED7-313D-4E68-860C-D6B51AA28523}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{34135ED7-313D-4E68-860C-D6B51AA28523}.Release|x64.Build.0 = Release|Any CPU
|
||||
{34135ED7-313D-4E68-860C-D6B51AA28523}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{34135ED7-313D-4E68-860C-D6B51AA28523}.Release|x86.Build.0 = Release|Any CPU
|
||||
{C0310D84-BC2F-4B2E-870E-D35044DB3E3E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{C0310D84-BC2F-4B2E-870E-D35044DB3E3E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{C0310D84-BC2F-4B2E-870E-D35044DB3E3E}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{C0310D84-BC2F-4B2E-870E-D35044DB3E3E}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{C0310D84-BC2F-4B2E-870E-D35044DB3E3E}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{C0310D84-BC2F-4B2E-870E-D35044DB3E3E}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{C0310D84-BC2F-4B2E-870E-D35044DB3E3E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{C0310D84-BC2F-4B2E-870E-D35044DB3E3E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{C0310D84-BC2F-4B2E-870E-D35044DB3E3E}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{C0310D84-BC2F-4B2E-870E-D35044DB3E3E}.Release|x64.Build.0 = Release|Any CPU
|
||||
{C0310D84-BC2F-4B2E-870E-D35044DB3E3E}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{C0310D84-BC2F-4B2E-870E-D35044DB3E3E}.Release|x86.Build.0 = Release|Any CPU
|
||||
{D17B7B35-5361-4A50-B499-E03E5C3CC095}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D17B7B35-5361-4A50-B499-E03E5C3CC095}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D17B7B35-5361-4A50-B499-E03E5C3CC095}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{D17B7B35-5361-4A50-B499-E03E5C3CC095}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{D17B7B35-5361-4A50-B499-E03E5C3CC095}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{D17B7B35-5361-4A50-B499-E03E5C3CC095}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{D17B7B35-5361-4A50-B499-E03E5C3CC095}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D17B7B35-5361-4A50-B499-E03E5C3CC095}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{D17B7B35-5361-4A50-B499-E03E5C3CC095}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{D17B7B35-5361-4A50-B499-E03E5C3CC095}.Release|x64.Build.0 = Release|Any CPU
|
||||
{D17B7B35-5361-4A50-B499-E03E5C3CC095}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{D17B7B35-5361-4A50-B499-E03E5C3CC095}.Release|x86.Build.0 = Release|Any CPU
|
||||
{582B07BC-73F4-4689-8557-B039298BD82C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{582B07BC-73F4-4689-8557-B039298BD82C}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{582B07BC-73F4-4689-8557-B039298BD82C}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{582B07BC-73F4-4689-8557-B039298BD82C}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{582B07BC-73F4-4689-8557-B039298BD82C}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{582B07BC-73F4-4689-8557-B039298BD82C}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{582B07BC-73F4-4689-8557-B039298BD82C}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{582B07BC-73F4-4689-8557-B039298BD82C}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{582B07BC-73F4-4689-8557-B039298BD82C}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{582B07BC-73F4-4689-8557-B039298BD82C}.Release|x64.Build.0 = Release|Any CPU
|
||||
{582B07BC-73F4-4689-8557-B039298BD82C}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{582B07BC-73F4-4689-8557-B039298BD82C}.Release|x86.Build.0 = Release|Any CPU
|
||||
{D1EA5D99-28FD-4197-81DE-17098846B38B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D1EA5D99-28FD-4197-81DE-17098846B38B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D1EA5D99-28FD-4197-81DE-17098846B38B}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{D1EA5D99-28FD-4197-81DE-17098846B38B}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{D1EA5D99-28FD-4197-81DE-17098846B38B}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{D1EA5D99-28FD-4197-81DE-17098846B38B}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{D1EA5D99-28FD-4197-81DE-17098846B38B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D1EA5D99-28FD-4197-81DE-17098846B38B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{D1EA5D99-28FD-4197-81DE-17098846B38B}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{D1EA5D99-28FD-4197-81DE-17098846B38B}.Release|x64.Build.0 = Release|Any CPU
|
||||
{D1EA5D99-28FD-4197-81DE-17098846B38B}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{D1EA5D99-28FD-4197-81DE-17098846B38B}.Release|x86.Build.0 = Release|Any CPU
|
||||
{BBBC85B2-5D7A-4D09-90B1-8DBCC9059493}.Debug|Any CPU.ActiveCfg = Debug|x86
|
||||
{BBBC85B2-5D7A-4D09-90B1-8DBCC9059493}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{BBBC85B2-5D7A-4D09-90B1-8DBCC9059493}.Debug|x64.Build.0 = Debug|x64
|
||||
{BBBC85B2-5D7A-4D09-90B1-8DBCC9059493}.Debug|x86.ActiveCfg = Debug|x86
|
||||
{BBBC85B2-5D7A-4D09-90B1-8DBCC9059493}.Debug|x86.Build.0 = Debug|x86
|
||||
{BBBC85B2-5D7A-4D09-90B1-8DBCC9059493}.Release|Any CPU.ActiveCfg = Release|x86
|
||||
{BBBC85B2-5D7A-4D09-90B1-8DBCC9059493}.Release|x64.ActiveCfg = Release|x64
|
||||
{BBBC85B2-5D7A-4D09-90B1-8DBCC9059493}.Release|x64.Build.0 = Release|x64
|
||||
{BBBC85B2-5D7A-4D09-90B1-8DBCC9059493}.Release|x86.ActiveCfg = Release|x86
|
||||
{BBBC85B2-5D7A-4D09-90B1-8DBCC9059493}.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}
|
||||
{06CA2C2B-83B0-4D83-905A-E0C74790009E} = {04B1EDB6-E967-4D25-89B9-E6F8304038CD}
|
||||
{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}
|
||||
{D182103F-8405-4647-B158-C36F598657EF} = {EF30B533-D715-421A-92B7-92FEF460AC9C}
|
||||
{34135ED7-313D-4E68-860C-D6B51AA28523} = {04B1EDB6-E967-4D25-89B9-E6F8304038CD}
|
||||
{C0310D84-BC2F-4B2E-870E-D35044DB3E3E} = {EF30B533-D715-421A-92B7-92FEF460AC9C}
|
||||
{D17B7B35-5361-4A50-B499-E03E5C3CC095} = {EF30B533-D715-421A-92B7-92FEF460AC9C}
|
||||
{582B07BC-73F4-4689-8557-B039298BD82C} = {EF30B533-D715-421A-92B7-92FEF460AC9C}
|
||||
{D1EA5D99-28FD-4197-81DE-17098846B38B} = {EF30B533-D715-421A-92B7-92FEF460AC9C}
|
||||
{BBBC85B2-5D7A-4D09-90B1-8DBCC9059493} = {744ACDC6-F6A0-4FF9-9421-F25C5F2DC520}
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {DB4F868D-E1AE-4FD7-9333-69FA15B268C5}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
|
@ -10,6 +10,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{04B1EDB6-E96
|
|||
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
|
||||
|
|
@ -26,53 +27,57 @@ 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("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OutOfProcessWebSite", "test\WebSites\OutOfProcessWebSite\OutOfProcessWebSite.csproj", "{F54715C3-88D8-49E3-A291-C13570FE81FC}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{D57EA297-6DC2-4BC0-8C91-334863327863} = {D57EA297-6DC2-4BC0-8C91-334863327863}
|
||||
{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\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\Key.snk = build\Key.snk
|
||||
build\launchSettings.json = build\launchSettings.json
|
||||
build\native.targets = build\native.targets
|
||||
build\repo.props = build\repo.props
|
||||
build\repo.targets = build\repo.targets
|
||||
build\sources.props = build\sources.props
|
||||
build\testsite.props = build\testsite.props
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IISIntegration.FunctionalTests", "test\IISIntegration.FunctionalTests\IISIntegration.FunctionalTests.csproj", "{4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}"
|
||||
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}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{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}") = "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}") = "Microsoft.AspNetCore.Server.IIS", "src\Microsoft.AspNetCore.Server.IIS\Microsoft.AspNetCore.Server.IIS.csproj", "{46A8612B-418B-4D70-B3A7-A21DD0627473}"
|
||||
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("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OverriddenServerWebSite", "test\WebSites\OverriddenServerWebSite\OverriddenServerWebSite.csproj", "{FC2A97F8-A749-4C04-97D1-97500066A820}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{D57EA297-6DC2-4BC0-8C91-334863327863} = {D57EA297-6DC2-4BC0-8C91-334863327863}
|
||||
{439824F9-1455-4CC4-BD79-B44FA0A16552} = {439824F9-1455-4CC4-BD79-B44FA0A16552}
|
||||
EndProjectSection
|
||||
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
|
||||
|
|
@ -88,13 +93,51 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CommonLib", "src\AspNetCore
|
|||
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}") = "RequestHandler", "src\AspNetCoreModuleV2\RequestHandler\RequestHandler.vcxproj", "{D57EA297-6DC2-4BC0-8C91-334863327863}"
|
||||
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
|
||||
|
|
@ -106,6 +149,14 @@ Global
|
|||
{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
|
||||
|
|
@ -118,6 +169,14 @@ Global
|
|||
{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
|
||||
|
|
@ -130,28 +189,34 @@ Global
|
|||
{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
|
||||
{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
|
||||
{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
|
||||
|
|
@ -164,18 +229,36 @@ Global
|
|||
{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|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}.Release|Any CPU.ActiveCfg = Release|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
|
||||
|
|
@ -186,18 +269,36 @@ Global
|
|||
{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|x86
|
||||
{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}.Release|Any CPU.ActiveCfg = Release|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
|
||||
|
|
@ -208,27 +309,55 @@ Global
|
|||
{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
|
||||
{FC2A97F8-A749-4C04-97D1-97500066A820}.Debug|Any CPU.ActiveCfg = Debug|x86
|
||||
{FC2A97F8-A749-4C04-97D1-97500066A820}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{FC2A97F8-A749-4C04-97D1-97500066A820}.Debug|x64.Build.0 = Debug|x64
|
||||
{FC2A97F8-A749-4C04-97D1-97500066A820}.Debug|x86.ActiveCfg = Debug|x86
|
||||
{FC2A97F8-A749-4C04-97D1-97500066A820}.Debug|x86.Build.0 = Debug|x86
|
||||
{FC2A97F8-A749-4C04-97D1-97500066A820}.Release|Any CPU.ActiveCfg = Release|x86
|
||||
{FC2A97F8-A749-4C04-97D1-97500066A820}.Release|x64.ActiveCfg = Release|x64
|
||||
{FC2A97F8-A749-4C04-97D1-97500066A820}.Release|x64.Build.0 = Release|x64
|
||||
{FC2A97F8-A749-4C04-97D1-97500066A820}.Release|x86.ActiveCfg = Release|x86
|
||||
{FC2A97F8-A749-4C04-97D1-97500066A820}.Release|x86.Build.0 = Release|x86
|
||||
{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
|
||||
|
|
@ -239,6 +368,16 @@ Global
|
|||
{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
|
||||
|
|
@ -249,6 +388,16 @@ Global
|
|||
{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
|
||||
|
|
@ -259,6 +408,16 @@ Global
|
|||
{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
|
||||
|
|
@ -269,21 +428,277 @@ Global
|
|||
{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
|
||||
|
|
@ -292,7 +707,6 @@ Global
|
|||
{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}
|
||||
{F54715C3-88D8-49E3-A291-C13570FE81FC} = {744ACDC6-F6A0-4FF9-9421-F25C5F2DC520}
|
||||
{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}
|
||||
|
|
@ -300,7 +714,7 @@ Global
|
|||
{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}
|
||||
{FC2A97F8-A749-4C04-97D1-97500066A820} = {744ACDC6-F6A0-4FF9-9421-F25C5F2DC520}
|
||||
{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}
|
||||
|
|
@ -308,7 +722,19 @@ Global
|
|||
{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}
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
"rules": [],
|
||||
"packages": {
|
||||
"Microsoft.AspNetCore.AspNetCoreModule": {},
|
||||
"Microsoft.AspNetCore.AspNetCoreModuleV1": {}
|
||||
"Microsoft.AspNetCore.AspNetCoreModuleV2": {}
|
||||
}
|
||||
},
|
||||
"Default": {
|
||||
|
|
|
|||
|
|
@ -1,3 +0,0 @@
|
|||
This repo hosts the ASP.NET Core middleware for IIS integration and the ASP.NET Core Module.
|
||||
|
||||
This project is part of ASP.NET Core. You can find samples, documentation and getting started instructions for ASP.NET Core at the [Home](https://github.com/aspnet/home) repo.
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
// 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 BenchmarkDotNet.Columns;
|
||||
using BenchmarkDotNet.Configs;
|
||||
using BenchmarkDotNet.Diagnosers;
|
||||
using BenchmarkDotNet.Engines;
|
||||
using BenchmarkDotNet.Exporters;
|
||||
using BenchmarkDotNet.Jobs;
|
||||
using BenchmarkDotNet.Loggers;
|
||||
using BenchmarkDotNet.Toolchains.CsProj;
|
||||
using BenchmarkDotNet.Toolchains.DotNetCli;
|
||||
using BenchmarkDotNet.Validators;
|
||||
|
||||
namespace BenchmarkDotNet.Attributes
|
||||
{
|
||||
internal class FirstRequestConfig : ManualConfig
|
||||
{
|
||||
public FirstRequestConfig()
|
||||
{
|
||||
Add(ConsoleLogger.Default);
|
||||
Add(MarkdownExporter.GitHub);
|
||||
|
||||
Add(MemoryDiagnoser.Default);
|
||||
Add(StatisticColumn.OperationsPerSecond);
|
||||
Add(DefaultColumnProviders.Instance);
|
||||
|
||||
Add(JitOptimizationsValidator.FailOnError);
|
||||
|
||||
Add(Job.Core
|
||||
.With(CsProjCoreToolchain.From(NetCoreAppSettings.NetCoreApp21))
|
||||
.With(new GcMode { Server = true })
|
||||
.WithTargetCount(10)
|
||||
.WithInvocationCount(1)
|
||||
.WithUnrollFactor(1)
|
||||
.With(RunStrategy.ColdStart));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<!-- Using shorter assembly name instead of Microsoft.AspNetCore.Server.Kestrel.Performance because https://github.com/dotnet/BenchmarkDotNet/issues/498 -->
|
||||
<AssemblyName>IIS.Performance</AssemblyName>
|
||||
<RootNamespace>Microsoft.AspNetCore.Server.IIS.Performance</RootNamespace>
|
||||
<TargetFramework>netcoreapp2.2</TargetFramework>
|
||||
<OutputType>Exe</OutputType>
|
||||
<ServerGarbageCollection>true</ServerGarbageCollection>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<IsPackable>false</IsPackable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Content Include="..\..\test\Common.FunctionalTests\AppHostConfig\*.config" CopyToOutputDirectory="PreserveNewest" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition="'$(OS)' == 'Windows_NT'">
|
||||
<None Include="$(MSBuildThisFileDirectory)..\..\src\AspNetCoreModuleV2\InProcessRequestHandler\bin\$(Configuration)\x64\aspnetcorev2_inprocess.dll" CopyToOutputDirectory="PreserveNewest" Visible="true" Link="%(FileName)%(Extension)" />
|
||||
<None Include="$(MSBuildThisFileDirectory)..\..\src\AspNetCoreModuleV2\InProcessRequestHandler\bin\$(Configuration)\x64\aspnetcorev2_inprocess.pdb" CopyToOutputDirectory="PreserveNewest" Visible="true" Link="%(FileName)%(Extension)" />
|
||||
<None Include="$(MSBuildThisFileDirectory)..\..\src\AspNetCoreModuleV2\AspNetCore\bin\$(Configuration)\x64\aspnetcorev2.dll" CopyToOutputDirectory="PreserveNewest" Visible="true" Link="%(FileName)%(Extension)" />
|
||||
<None Include="$(MSBuildThisFileDirectory)..\..\src\AspNetCoreModuleV2\AspNetCore\bin\$(Configuration)\x64\aspnetcorev2.pdb" CopyToOutputDirectory="PreserveNewest" Visible="true" Link="%(FileName)%(Extension)" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\src\Microsoft.AspNetCore.Server.IISIntegration\Microsoft.AspNetCore.Server.IISIntegration.csproj" />
|
||||
<ProjectReference Include="..\..\test\IISExpress.FunctionalTests\IISExpress.FunctionalTests.csproj" />
|
||||
<ProjectReference Include="..\..\test\IIS.Tests\IIS.Tests.csproj" />
|
||||
<ProjectReference Include="..\..\test\WebSites\InProcessWebSite\InProcessWebSite.csproj">
|
||||
<ReferenceOutputAssembly>False</ReferenceOutputAssembly>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\test\WebSites\OutOfProcessWebSite\OutOfProcessWebSite.csproj">
|
||||
<ReferenceOutputAssembly>False</ReferenceOutputAssembly>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\test\WebSites\StressTestWebSite\StressTestWebSite.csproj">
|
||||
<ReferenceOutputAssembly>False</ReferenceOutputAssembly>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="BenchmarkDotNet" Version="$(BenchmarkDotNetPackageVersion)" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.BenchmarkRunner.Sources" PrivateAssets="All" Version="$(MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion)" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Server.IntegrationTesting" Version="$(MicrosoftAspNetCoreServerIntegrationTestingPackageVersion)" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
|
@ -0,0 +1,73 @@
|
|||
// 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.Net.Http;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using BenchmarkDotNet.Attributes;
|
||||
using Microsoft.AspNetCore.Builder;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace Microsoft.AspNetCore.Server.IIS.Performance
|
||||
{
|
||||
[AspNetCoreBenchmark]
|
||||
public class PlaintextBenchmark
|
||||
{
|
||||
private TestServer _server;
|
||||
|
||||
private HttpClient _client;
|
||||
|
||||
[GlobalSetup]
|
||||
public void Setup()
|
||||
{
|
||||
_server = TestServer.Create(builder => builder.UseMiddleware<PlaintextMiddleware>(), new LoggerFactory()).GetAwaiter().GetResult();
|
||||
// Recreate client, TestServer.Client has additional logging that can hurt performance
|
||||
_client = new HttpClient()
|
||||
{
|
||||
BaseAddress = _server.HttpClient.BaseAddress
|
||||
};
|
||||
}
|
||||
|
||||
[Benchmark]
|
||||
public async Task Plaintext()
|
||||
{
|
||||
await _client.GetAsync("/plaintext");
|
||||
}
|
||||
|
||||
// Copied from https://github.com/aspnet/benchmarks/blob/dev/src/Benchmarks/Middleware/PlaintextMiddleware.cs
|
||||
public class PlaintextMiddleware
|
||||
{
|
||||
private static readonly PathString _path = new PathString("/plaintext");
|
||||
private static readonly byte[] _helloWorldPayload = Encoding.UTF8.GetBytes("Hello, World!");
|
||||
|
||||
private readonly RequestDelegate _next;
|
||||
|
||||
public PlaintextMiddleware(RequestDelegate next)
|
||||
{
|
||||
_next = next;
|
||||
}
|
||||
|
||||
public Task Invoke(HttpContext httpContext)
|
||||
{
|
||||
if (httpContext.Request.Path.StartsWithSegments(_path, StringComparison.Ordinal))
|
||||
{
|
||||
return WriteResponse(httpContext.Response);
|
||||
}
|
||||
|
||||
return _next(httpContext);
|
||||
}
|
||||
|
||||
public static Task WriteResponse(HttpResponse response)
|
||||
{
|
||||
var payloadLength = _helloWorldPayload.Length;
|
||||
response.StatusCode = 200;
|
||||
response.ContentType = "text/plain";
|
||||
response.ContentLength = payloadLength;
|
||||
return response.Body.WriteAsync(_helloWorldPayload, 0, payloadLength);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,53 +1,50 @@
|
|||
// 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;
|
||||
using System.Net.Http;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using BenchmarkDotNet.Attributes;
|
||||
using Microsoft.AspNetCore.Server.IntegrationTesting;
|
||||
using Microsoft.AspNetCore.Testing;
|
||||
using Microsoft.Extensions.Logging.Abstractions;
|
||||
|
||||
namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests
|
||||
namespace Microsoft.AspNetCore.Server.IIS.Performance
|
||||
{
|
||||
public class IISTestSiteFixture : IDisposable
|
||||
[AspNetCoreBenchmark(typeof(FirstRequestConfig))]
|
||||
public class StartupTimeBenchmark
|
||||
{
|
||||
private readonly IApplicationDeployer _deployer;
|
||||
private ApplicationDeployer _deployer;
|
||||
public HttpClient _client;
|
||||
|
||||
public IISTestSiteFixture()
|
||||
[IterationSetup]
|
||||
public void Setup()
|
||||
{
|
||||
var deploymentParameters = new DeploymentParameters(Helpers.GetInProcessTestSitesPath(),
|
||||
var deploymentParameters = new DeploymentParameters(Path.Combine(TestPathUtilities.GetSolutionRootDirectory("IISIntegration"), "test/Websites/InProcessWebSite"),
|
||||
ServerType.IISExpress,
|
||||
RuntimeFlavor.CoreClr,
|
||||
RuntimeArchitecture.x64)
|
||||
{
|
||||
ServerConfigTemplateContent = File.ReadAllText("AppHostConfig/Http.config"),
|
||||
ServerConfigTemplateContent = File.ReadAllText("IISExpress.config"),
|
||||
SiteName = "HttpTestSite",
|
||||
TargetFramework = "netcoreapp2.1",
|
||||
ApplicationType = ApplicationType.Portable,
|
||||
Configuration =
|
||||
#if DEBUG
|
||||
"Debug"
|
||||
#else
|
||||
"Release"
|
||||
#endif
|
||||
AncmVersion = AncmVersion.AspNetCoreModuleV2
|
||||
};
|
||||
|
||||
_deployer = ApplicationDeployerFactory.Create(deploymentParameters, NullLoggerFactory.Instance);
|
||||
DeploymentResult = _deployer.DeployAsync().Result;
|
||||
Client = DeploymentResult.HttpClient;
|
||||
BaseUri = DeploymentResult.ApplicationBaseUri;
|
||||
ShutdownToken = DeploymentResult.HostShutdownToken;
|
||||
_client = _deployer.DeployAsync().Result.HttpClient;
|
||||
}
|
||||
|
||||
public string BaseUri { get; }
|
||||
public HttpClient Client { get; }
|
||||
public CancellationToken ShutdownToken { get; }
|
||||
public DeploymentResult DeploymentResult { get; }
|
||||
|
||||
public void Dispose()
|
||||
[IterationCleanup]
|
||||
public void Cleanup()
|
||||
{
|
||||
_deployer.Dispose();
|
||||
}
|
||||
|
||||
[Benchmark]
|
||||
public async Task SendFirstRequest()
|
||||
{
|
||||
var response = await _client.GetAsync("");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -20,6 +20,11 @@
|
|||
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CodeAnalysisRuleSet>..\DefaultRules.ruleset</CodeAnalysisRuleSet>
|
||||
<RunCodeAnalysis>false</RunCodeAnalysis>
|
||||
<!-- Do not enable code analysis on old compiler versions -->
|
||||
<RunCodeAnalysis Condition="'$(VCToolsRedistVersion)' != '' AND '$(VCToolsRedistVersion)' >= 14.15.26706">true</RunCodeAnalysis>
|
||||
<EnablePREfast>$(RunCodeAnalysis)</EnablePREfast>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemDefinitionGroup>
|
||||
|
|
|
|||
|
|
@ -233,6 +233,7 @@
|
|||
<add name="ManagedEngineV4.0_64bit" image="%windir%\Microsoft.NET\Framework64\v4.0.30319\webengine4.dll" preCondition="integratedMode,runtimeVersionv4.0,bitness64" />
|
||||
<add name="ApplicationInitializationModule" image="%IIS_BIN%\warmup.dll" />
|
||||
<add name="AspNetCoreModule" image="%ANCM_PATH%" />
|
||||
<add name="AspNetCoreModuleV2" image="%ANCMV2_PATH%" />
|
||||
</globalModules>
|
||||
<httpCompression directory="%TEMP%\iisexpress\IIS Temporary Compressed Files">
|
||||
<scheme name="gzip" dll="%IIS_BIN%\gzip.dll" />
|
||||
|
|
@ -875,6 +876,7 @@
|
|||
<add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="managedHandler,runtimeVersionv4.0" />
|
||||
<add name="ScriptModule-4.0" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="managedHandler,runtimeVersionv4.0" />
|
||||
<add name="AspNetCoreModule" lockItem="true" />
|
||||
<add name="AspNetCoreModuleV2" lockItem="true" />
|
||||
</modules>
|
||||
<handlers accessPolicy="Read, Script">
|
||||
<!-- <add name="WebDAV" path="*" verb="PROPFIND,PROPPATCH,MKCOL,PUT,COPY,DELETE,MOVE,LOCK,UNLOCK" modules="WebDAVModule" resourceType="Unspecified" requireAccess="None" /> -->
|
||||
|
|
|
|||
|
|
@ -226,6 +226,7 @@
|
|||
<add name="RequestFilteringModule" image="%windir%\System32\inetsrv\modrqflt.dll" />
|
||||
<add name="CustomErrorModule" image="%windir%\System32\inetsrv\custerr.dll" />
|
||||
<add name="AspNetCoreModule" image="%ANCM_PATH%" />
|
||||
<add name="AspNetCoreModuleV2" image="%ANCMV2_PATH%" />
|
||||
</globalModules>
|
||||
|
||||
<handlers accessPolicy="Read, Script">
|
||||
|
|
@ -288,6 +289,7 @@
|
|||
<add name="RequestFilteringModule" lockItem="true" />
|
||||
<add name="CustomErrorModule" lockItem="true" />
|
||||
<add name="AspNetCoreModule" lockItem="true" />
|
||||
<add name="AspNetCoreModuleV2" lockItem="true" />
|
||||
</modules>
|
||||
|
||||
<odbcLogging />
|
||||
|
|
|
|||
|
|
@ -0,0 +1,269 @@
|
|||
<!-- This file is autogenerated -->
|
||||
<Project>
|
||||
<PropertyGroup>
|
||||
<PackNativeAssets Condition="'$(OS)' == 'Windows_NT'">true</PackNativeAssets>
|
||||
<NativePlatform Condition="'$(Platform)' == 'AnyCPU'">x64</NativePlatform>
|
||||
<NativePlatform Condition="'$(NativePlatform)' == ''">$(Platform)</NativePlatform>
|
||||
<NativeVCPlatform Condition="'$(NativePlatform)' == 'x86'">Win32</NativeVCPlatform>
|
||||
<NativeVCPlatform Condition="'$(NativeVCPlatform)' == ''">$(NativePlatform)</NativeVCPlatform>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Components
|
||||
VCPlatform="x64"
|
||||
Platform="x64"
|
||||
ProjectName="AspNetCore.vcxproj"
|
||||
NativeAsset="aspnetcore"
|
||||
PropetyName="AspNetCoreModuleV1Shim"
|
||||
BaseOutputPath="AspNetCoreModuleV1"
|
||||
ProjectDirectory="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV1\AspNetCore"
|
||||
DllLocation="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV1\AspNetCore\bin\$(Configuration)\x64\aspnetcore.dll"
|
||||
Include="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV1\AspNetCore\AspNetCore.vcxproj"
|
||||
PdbLocation="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV1\AspNetCore\bin\$(Configuration)\x64\aspnetcore.pdb"
|
||||
/>
|
||||
<Components
|
||||
VCPlatform="Win32"
|
||||
Platform="x86"
|
||||
ProjectName="AspNetCore.vcxproj"
|
||||
NativeAsset="aspnetcore"
|
||||
PropetyName="AspNetCoreModuleV1Shim"
|
||||
BaseOutputPath="AspNetCoreModuleV1"
|
||||
ProjectDirectory="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV1\AspNetCore"
|
||||
DllLocation="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV1\AspNetCore\bin\$(Configuration)\Win32\aspnetcore.dll"
|
||||
Include="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV1\AspNetCore\AspNetCore.vcxproj"
|
||||
PdbLocation="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV1\AspNetCore\bin\$(Configuration)\Win32\aspnetcore.pdb"
|
||||
/>
|
||||
<Components
|
||||
VCPlatform="x64"
|
||||
Platform="x64"
|
||||
ProjectName="AspNetCore.vcxproj"
|
||||
NativeAsset="aspnetcorev2"
|
||||
PropetyName="AspNetCoreModuleV2Shim"
|
||||
BaseOutputPath="AspNetCoreModuleV2"
|
||||
ProjectDirectory="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\AspNetCore"
|
||||
DllLocation="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\AspNetCore\bin\$(Configuration)\x64\aspnetcorev2.dll"
|
||||
Include="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\AspNetCore\AspNetCore.vcxproj"
|
||||
PdbLocation="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\AspNetCore\bin\$(Configuration)\x64\aspnetcorev2.pdb"
|
||||
/>
|
||||
<Components
|
||||
VCPlatform="Win32"
|
||||
Platform="x86"
|
||||
ProjectName="AspNetCore.vcxproj"
|
||||
NativeAsset="aspnetcorev2"
|
||||
PropetyName="AspNetCoreModuleV2Shim"
|
||||
BaseOutputPath="AspNetCoreModuleV2"
|
||||
ProjectDirectory="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\AspNetCore"
|
||||
DllLocation="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\AspNetCore\bin\$(Configuration)\Win32\aspnetcorev2.dll"
|
||||
Include="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\AspNetCore\AspNetCore.vcxproj"
|
||||
PdbLocation="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\AspNetCore\bin\$(Configuration)\Win32\aspnetcorev2.pdb"
|
||||
/>
|
||||
<Components
|
||||
VCPlatform="x64"
|
||||
Platform="x64"
|
||||
ProjectName="InProcessRequestHandler.vcxproj"
|
||||
NativeAsset="aspnetcorev2_inprocess"
|
||||
PropetyName="AspNetCoreModuleV2InProcessHandler"
|
||||
BaseOutputPath="AspNetCoreModuleV2"
|
||||
ProjectDirectory="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\InProcessRequestHandler"
|
||||
DllLocation="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\InProcessRequestHandler\bin\$(Configuration)\x64\aspnetcorev2_inprocess.dll"
|
||||
Include="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\InProcessRequestHandler\InProcessRequestHandler.vcxproj"
|
||||
PdbLocation="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\InProcessRequestHandler\bin\$(Configuration)\x64\aspnetcorev2_inprocess.pdb"
|
||||
/>
|
||||
<Components
|
||||
VCPlatform="Win32"
|
||||
Platform="x86"
|
||||
ProjectName="InProcessRequestHandler.vcxproj"
|
||||
NativeAsset="aspnetcorev2_inprocess"
|
||||
PropetyName="AspNetCoreModuleV2InProcessHandler"
|
||||
BaseOutputPath="AspNetCoreModuleV2"
|
||||
ProjectDirectory="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\InProcessRequestHandler"
|
||||
DllLocation="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\InProcessRequestHandler\bin\$(Configuration)\Win32\aspnetcorev2_inprocess.dll"
|
||||
Include="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\InProcessRequestHandler\InProcessRequestHandler.vcxproj"
|
||||
PdbLocation="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\InProcessRequestHandler\bin\$(Configuration)\Win32\aspnetcorev2_inprocess.pdb"
|
||||
/>
|
||||
<Components
|
||||
VCPlatform="x64"
|
||||
Platform="x64"
|
||||
ProjectDirectory="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\OutOfProcessRequestHandler"
|
||||
ProjectName="OutOfProcessRequestHandler.vcxproj"
|
||||
PropetyName="AspNetCoreModuleV2OutOfProcessHandler"
|
||||
NativeAsset="aspnetcorev2_outofprocess"
|
||||
BaseOutputPath="AspNetCoreModuleV2"
|
||||
PackageSubPath="$(AspNetCoreModuleOutOfProcessVersion)\"
|
||||
DllLocation="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\OutOfProcessRequestHandler\bin\$(Configuration)\x64\aspnetcorev2_outofprocess.dll"
|
||||
Include="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\OutOfProcessRequestHandler\OutOfProcessRequestHandler.vcxproj"
|
||||
PdbLocation="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\OutOfProcessRequestHandler\bin\$(Configuration)\x64\aspnetcorev2_outofprocess.pdb"
|
||||
/>
|
||||
<Components
|
||||
VCPlatform="Win32"
|
||||
Platform="x86"
|
||||
ProjectDirectory="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\OutOfProcessRequestHandler"
|
||||
ProjectName="OutOfProcessRequestHandler.vcxproj"
|
||||
PropetyName="AspNetCoreModuleV2OutOfProcessHandler"
|
||||
NativeAsset="aspnetcorev2_outofprocess"
|
||||
BaseOutputPath="AspNetCoreModuleV2"
|
||||
PackageSubPath="$(AspNetCoreModuleOutOfProcessVersion)\"
|
||||
DllLocation="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\OutOfProcessRequestHandler\bin\$(Configuration)\Win32\aspnetcorev2_outofprocess.dll"
|
||||
Include="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\OutOfProcessRequestHandler\OutOfProcessRequestHandler.vcxproj"
|
||||
PdbLocation="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\OutOfProcessRequestHandler\bin\$(Configuration)\Win32\aspnetcorev2_outofprocess.pdb"
|
||||
/>
|
||||
|
||||
<ShimComponents
|
||||
VCPlatform="x64"
|
||||
Platform="x64"
|
||||
ProjectName="AspNetCore.vcxproj"
|
||||
NativeAsset="aspnetcore"
|
||||
PropetyName="AspNetCoreModuleV1Shim"
|
||||
BaseOutputPath="AspNetCoreModuleV1"
|
||||
ProjectDirectory="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV1\AspNetCore"
|
||||
DllLocation="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV1\AspNetCore\bin\$(Configuration)\x64\aspnetcore.dll"
|
||||
Include="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV1\AspNetCore\AspNetCore.vcxproj"
|
||||
PdbLocation="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV1\AspNetCore\bin\$(Configuration)\x64\aspnetcore.pdb"
|
||||
/>
|
||||
<ShimComponents
|
||||
VCPlatform="Win32"
|
||||
Platform="x86"
|
||||
ProjectName="AspNetCore.vcxproj"
|
||||
NativeAsset="aspnetcore"
|
||||
PropetyName="AspNetCoreModuleV1Shim"
|
||||
BaseOutputPath="AspNetCoreModuleV1"
|
||||
ProjectDirectory="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV1\AspNetCore"
|
||||
DllLocation="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV1\AspNetCore\bin\$(Configuration)\Win32\aspnetcore.dll"
|
||||
Include="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV1\AspNetCore\AspNetCore.vcxproj"
|
||||
PdbLocation="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV1\AspNetCore\bin\$(Configuration)\Win32\aspnetcore.pdb"
|
||||
/>
|
||||
<ShimComponents
|
||||
VCPlatform="x64"
|
||||
Platform="x64"
|
||||
ProjectName="AspNetCore.vcxproj"
|
||||
NativeAsset="aspnetcorev2"
|
||||
PropetyName="AspNetCoreModuleV2Shim"
|
||||
BaseOutputPath="AspNetCoreModuleV2"
|
||||
ProjectDirectory="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\AspNetCore"
|
||||
DllLocation="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\AspNetCore\bin\$(Configuration)\x64\aspnetcorev2.dll"
|
||||
Include="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\AspNetCore\AspNetCore.vcxproj"
|
||||
PdbLocation="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\AspNetCore\bin\$(Configuration)\x64\aspnetcorev2.pdb"
|
||||
/>
|
||||
<ShimComponents
|
||||
VCPlatform="Win32"
|
||||
Platform="x86"
|
||||
ProjectName="AspNetCore.vcxproj"
|
||||
NativeAsset="aspnetcorev2"
|
||||
PropetyName="AspNetCoreModuleV2Shim"
|
||||
BaseOutputPath="AspNetCoreModuleV2"
|
||||
ProjectDirectory="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\AspNetCore"
|
||||
DllLocation="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\AspNetCore\bin\$(Configuration)\Win32\aspnetcorev2.dll"
|
||||
Include="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\AspNetCore\AspNetCore.vcxproj"
|
||||
PdbLocation="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\AspNetCore\bin\$(Configuration)\Win32\aspnetcorev2.pdb"
|
||||
/>
|
||||
<ShimComponents
|
||||
VCPlatform="x64"
|
||||
Platform="x64"
|
||||
ProjectDirectory="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\OutOfProcessRequestHandler"
|
||||
ProjectName="OutOfProcessRequestHandler.vcxproj"
|
||||
PropetyName="AspNetCoreModuleV2OutOfProcessHandler"
|
||||
NativeAsset="aspnetcorev2_outofprocess"
|
||||
BaseOutputPath="AspNetCoreModuleV2"
|
||||
PackageSubPath="$(AspNetCoreModuleOutOfProcessVersion)\"
|
||||
DllLocation="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\OutOfProcessRequestHandler\bin\$(Configuration)\x64\aspnetcorev2_outofprocess.dll"
|
||||
Include="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\OutOfProcessRequestHandler\OutOfProcessRequestHandler.vcxproj"
|
||||
PdbLocation="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\OutOfProcessRequestHandler\bin\$(Configuration)\x64\aspnetcorev2_outofprocess.pdb"
|
||||
/>
|
||||
<ShimComponents
|
||||
VCPlatform="Win32"
|
||||
Platform="x86"
|
||||
ProjectDirectory="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\OutOfProcessRequestHandler"
|
||||
ProjectName="OutOfProcessRequestHandler.vcxproj"
|
||||
PropetyName="AspNetCoreModuleV2OutOfProcessHandler"
|
||||
NativeAsset="aspnetcorev2_outofprocess"
|
||||
BaseOutputPath="AspNetCoreModuleV2"
|
||||
PackageSubPath="$(AspNetCoreModuleOutOfProcessVersion)\"
|
||||
DllLocation="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\OutOfProcessRequestHandler\bin\$(Configuration)\Win32\aspnetcorev2_outofprocess.dll"
|
||||
Include="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\OutOfProcessRequestHandler\OutOfProcessRequestHandler.vcxproj"
|
||||
PdbLocation="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\OutOfProcessRequestHandler\bin\$(Configuration)\Win32\aspnetcorev2_outofprocess.pdb"
|
||||
/>
|
||||
|
||||
<InProcessComponents
|
||||
VCPlatform="x64"
|
||||
Platform="x64"
|
||||
ProjectName="InProcessRequestHandler.vcxproj"
|
||||
NativeAsset="aspnetcorev2_inprocess"
|
||||
PropetyName="AspNetCoreModuleV2InProcessHandler"
|
||||
BaseOutputPath="AspNetCoreModuleV2"
|
||||
ProjectDirectory="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\InProcessRequestHandler"
|
||||
DllLocation="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\InProcessRequestHandler\bin\$(Configuration)\x64\aspnetcorev2_inprocess.dll"
|
||||
Include="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\InProcessRequestHandler\InProcessRequestHandler.vcxproj"
|
||||
PdbLocation="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\InProcessRequestHandler\bin\$(Configuration)\x64\aspnetcorev2_inprocess.pdb"
|
||||
/>
|
||||
<InProcessComponents
|
||||
VCPlatform="Win32"
|
||||
Platform="x86"
|
||||
ProjectName="InProcessRequestHandler.vcxproj"
|
||||
NativeAsset="aspnetcorev2_inprocess"
|
||||
PropetyName="AspNetCoreModuleV2InProcessHandler"
|
||||
BaseOutputPath="AspNetCoreModuleV2"
|
||||
ProjectDirectory="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\InProcessRequestHandler"
|
||||
DllLocation="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\InProcessRequestHandler\bin\$(Configuration)\Win32\aspnetcorev2_inprocess.dll"
|
||||
Include="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\InProcessRequestHandler\InProcessRequestHandler.vcxproj"
|
||||
PdbLocation="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\InProcessRequestHandler\bin\$(Configuration)\Win32\aspnetcorev2_inprocess.pdb"
|
||||
/>
|
||||
|
||||
<RunShimComponents
|
||||
VCPlatform="$(NativeVCPlatform)"
|
||||
Platform="$(NativePlatform)"
|
||||
ProjectName="AspNetCore.vcxproj"
|
||||
NativeAsset="aspnetcore"
|
||||
PropetyName="AspNetCoreModuleV1Shim"
|
||||
BaseOutputPath="AspNetCoreModuleV1"
|
||||
ProjectDirectory="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV1\AspNetCore"
|
||||
DllLocation="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV1\AspNetCore\bin\$(Configuration)\$(NativeVCPlatform)\aspnetcore.dll"
|
||||
Include="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV1\AspNetCore\AspNetCore.vcxproj"
|
||||
PdbLocation="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV1\AspNetCore\bin\$(Configuration)\$(NativeVCPlatform)\aspnetcore.pdb"
|
||||
/>
|
||||
<RunShimComponents
|
||||
VCPlatform="$(NativeVCPlatform)"
|
||||
Platform="$(NativePlatform)"
|
||||
ProjectName="AspNetCore.vcxproj"
|
||||
NativeAsset="aspnetcorev2"
|
||||
PropetyName="AspNetCoreModuleV2Shim"
|
||||
BaseOutputPath="AspNetCoreModuleV2"
|
||||
ProjectDirectory="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\AspNetCore"
|
||||
DllLocation="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\AspNetCore\bin\$(Configuration)\$(NativeVCPlatform)\aspnetcorev2.dll"
|
||||
Include="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\AspNetCore\AspNetCore.vcxproj"
|
||||
PdbLocation="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\AspNetCore\bin\$(Configuration)\$(NativeVCPlatform)\aspnetcorev2.pdb"
|
||||
/>
|
||||
<RunShimComponents
|
||||
VCPlatform="$(NativeVCPlatform)"
|
||||
Platform="$(NativePlatform)"
|
||||
ProjectDirectory="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\OutOfProcessRequestHandler"
|
||||
ProjectName="OutOfProcessRequestHandler.vcxproj"
|
||||
PropetyName="AspNetCoreModuleV2OutOfProcessHandler"
|
||||
NativeAsset="aspnetcorev2_outofprocess"
|
||||
BaseOutputPath="AspNetCoreModuleV2"
|
||||
PackageSubPath="$(AspNetCoreModuleOutOfProcessVersion)\"
|
||||
DllLocation="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\OutOfProcessRequestHandler\bin\$(Configuration)\$(NativeVCPlatform)\aspnetcorev2_outofprocess.dll"
|
||||
Include="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\OutOfProcessRequestHandler\OutOfProcessRequestHandler.vcxproj"
|
||||
PdbLocation="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\OutOfProcessRequestHandler\bin\$(Configuration)\$(NativeVCPlatform)\aspnetcorev2_outofprocess.pdb"
|
||||
/>
|
||||
|
||||
<RunInProcessComponents
|
||||
VCPlatform="$(NativeVCPlatform)"
|
||||
Platform="$(NativePlatform)"
|
||||
ProjectName="InProcessRequestHandler.vcxproj"
|
||||
NativeAsset="aspnetcorev2_inprocess"
|
||||
PropetyName="AspNetCoreModuleV2InProcessHandler"
|
||||
BaseOutputPath="AspNetCoreModuleV2"
|
||||
ProjectDirectory="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\InProcessRequestHandler"
|
||||
DllLocation="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\InProcessRequestHandler\bin\$(Configuration)\$(NativeVCPlatform)\aspnetcorev2_inprocess.dll"
|
||||
Include="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\InProcessRequestHandler\InProcessRequestHandler.vcxproj"
|
||||
PdbLocation="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\InProcessRequestHandler\bin\$(Configuration)\$(NativeVCPlatform)\aspnetcorev2_inprocess.pdb"
|
||||
/>
|
||||
|
||||
</ItemGroup>
|
||||
<PropertyGroup>
|
||||
|
||||
<AspNetCoreModuleV1ShimDll>$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV1\AspNetCore\bin\$(Configuration)\$(NativeVCPlatform)\aspnetcore.dll</AspNetCoreModuleV1ShimDll>
|
||||
<AspNetCoreModuleV2ShimDll>$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\AspNetCore\bin\$(Configuration)\$(NativeVCPlatform)\aspnetcorev2.dll</AspNetCoreModuleV2ShimDll>
|
||||
<AspNetCoreModuleV2InProcessHandlerDll>$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\InProcessRequestHandler\bin\$(Configuration)\$(NativeVCPlatform)\aspnetcorev2_inprocess.dll</AspNetCoreModuleV2InProcessHandlerDll>
|
||||
<AspNetCoreModuleV2OutOfProcessHandlerDll>$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\OutOfProcessRequestHandler\bin\$(Configuration)\$(NativeVCPlatform)\aspnetcorev2_outofprocess.dll</AspNetCoreModuleV2OutOfProcessHandlerDll>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
|
|
@ -1,31 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="12.0" DefaultTargets="Test" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildThisFileDirectory)\Build.Settings" />
|
||||
<ItemGroup>
|
||||
<Projects Include="$(SolutionDir)\src\AspNetCoreModuleV1\AspNetCore\AspNetCore.vcxproj" />
|
||||
<Projects Include="$(SolutionDir)\src\AspNetCoreModuleV2\AspNetCore\AspNetCore.vcxproj" />
|
||||
<Projects Include="$(SolutionDir)\src\AspNetCoreModuleV2\RequestHandler\RequestHandler.vcxproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<Target Name="Build">
|
||||
<MSBuild Targets="$(BuildTargets)"
|
||||
Projects="@(Projects)"
|
||||
Properties="Configuration=$(Configuration);Platform=$(Platform);PlatformToolset=$(PlatformToolset)" />
|
||||
</Target>
|
||||
|
||||
<Target Name="Clean">
|
||||
<MSBuild Targets="Clean"
|
||||
Projects="@(Projects)" />
|
||||
</Target>
|
||||
|
||||
<Target Name="Rebuild">
|
||||
<MSBuild Targets="Clean;Build"
|
||||
Projects="$(MSBuildProjectFile)"
|
||||
Properties="BuildTargets=Rebuild;Configuration=$(Configuration);Platform=$(Platform);PlatformToolset=$(PlatformToolset)"/>
|
||||
</Target>
|
||||
|
||||
<Target Name="Test" DependsOnTargets="Build">
|
||||
<!-- once we have test project ready, we should add executions to run the test post build-->
|
||||
</Target>
|
||||
<Import Project="Config.Definitions.Props" />
|
||||
</Project>
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
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)
|
||||
}
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
@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}\";"
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
@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}\";"
|
||||
}
|
||||
}
|
||||
|
|
@ -1,55 +1,69 @@
|
|||
<Project>
|
||||
<Project>
|
||||
<PropertyGroup>
|
||||
<MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
|
||||
</PropertyGroup>
|
||||
|
||||
<!-- These package versions may be overridden or updated by automation. -->
|
||||
<PropertyGroup Label="Package Versions: Auto">
|
||||
<InternalAspNetCoreSdkPackageVersion>2.1.3-rtm-15802</InternalAspNetCoreSdkPackageVersion>
|
||||
<MicrosoftBuildFrameworkPackageVersion>15.6.82</MicrosoftBuildFrameworkPackageVersion>
|
||||
<MicrosoftBuildUtilitiesCorePackageVersion>15.6.82</MicrosoftBuildUtilitiesCorePackageVersion>
|
||||
<MicrosoftNETCoreApp20PackageVersion>2.0.0</MicrosoftNETCoreApp20PackageVersion>
|
||||
<MicrosoftNETCoreApp21PackageVersion>2.1.2</MicrosoftNETCoreApp21PackageVersion>
|
||||
<PropertyGroup Label="Package Versions">
|
||||
<BenchmarkDotNetPackageVersion>0.10.13</BenchmarkDotNetPackageVersion>
|
||||
<InternalAspNetCoreSdkPackageVersion>3.0.0-alpha1-20181011.11</InternalAspNetCoreSdkPackageVersion>
|
||||
<MicrosoftAspNetCoreAllPackageVersion>3.0.0-alpha1-10657</MicrosoftAspNetCoreAllPackageVersion>
|
||||
<MicrosoftAspNetCoreAuthenticationCorePackageVersion>3.0.0-alpha1-10657</MicrosoftAspNetCoreAuthenticationCorePackageVersion>
|
||||
<MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>3.0.0-alpha1-10657</MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>
|
||||
<MicrosoftAspNetCoreConnectionsAbstractionsPackageVersion>3.0.0-alpha1-10657</MicrosoftAspNetCoreConnectionsAbstractionsPackageVersion>
|
||||
<MicrosoftAspNetCoreHostingAbstractionsPackageVersion>3.0.0-alpha1-10657</MicrosoftAspNetCoreHostingAbstractionsPackageVersion>
|
||||
<MicrosoftAspNetCoreHostingPackageVersion>3.0.0-alpha1-10657</MicrosoftAspNetCoreHostingPackageVersion>
|
||||
<MicrosoftAspNetCoreHttpExtensionsPackageVersion>3.0.0-alpha1-10657</MicrosoftAspNetCoreHttpExtensionsPackageVersion>
|
||||
<MicrosoftAspNetCoreHttpOverridesPackageVersion>3.0.0-alpha1-10657</MicrosoftAspNetCoreHttpOverridesPackageVersion>
|
||||
<MicrosoftAspNetCoreHttpPackageVersion>3.0.0-alpha1-10657</MicrosoftAspNetCoreHttpPackageVersion>
|
||||
<MicrosoftAspNetCoreHttpSysSourcesPackageVersion>3.0.0-alpha1-10657</MicrosoftAspNetCoreHttpSysSourcesPackageVersion>
|
||||
<MicrosoftAspNetCoreResponseCompressionPackageVersion>3.0.0-alpha1-10657</MicrosoftAspNetCoreResponseCompressionPackageVersion>
|
||||
<MicrosoftAspNetCoreServerIntegrationTestingPackageVersion>0.7.0-alpha1-10657</MicrosoftAspNetCoreServerIntegrationTestingPackageVersion>
|
||||
<MicrosoftAspNetCoreServerKestrelPackageVersion>3.0.0-alpha1-10657</MicrosoftAspNetCoreServerKestrelPackageVersion>
|
||||
<MicrosoftAspNetCoreTestHostPackageVersion>3.0.0-alpha1-10657</MicrosoftAspNetCoreTestHostPackageVersion>
|
||||
<MicrosoftAspNetCoreTestingPackageVersion>3.0.0-alpha1-10657</MicrosoftAspNetCoreTestingPackageVersion>
|
||||
<MicrosoftAspNetCoreWebUtilitiesPackageVersion>3.0.0-alpha1-10657</MicrosoftAspNetCoreWebUtilitiesPackageVersion>
|
||||
<MicrosoftBuildFrameworkPackageVersion>15.8.166</MicrosoftBuildFrameworkPackageVersion>
|
||||
<MicrosoftBuildUtilitiesCorePackageVersion>15.8.166</MicrosoftBuildUtilitiesCorePackageVersion>
|
||||
<MicrosoftExtensionsBuffersMemoryPoolSourcesPackageVersion>3.0.0-alpha1-10657</MicrosoftExtensionsBuffersMemoryPoolSourcesPackageVersion>
|
||||
<MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>3.0.0-alpha1-10657</MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>3.0.0-alpha1-10657</MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationJsonPackageVersion>3.0.0-alpha1-10657</MicrosoftExtensionsConfigurationJsonPackageVersion>
|
||||
<MicrosoftExtensionsLoggingAbstractionsPackageVersion>3.0.0-alpha1-10657</MicrosoftExtensionsLoggingAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsLoggingConsolePackageVersion>3.0.0-alpha1-10657</MicrosoftExtensionsLoggingConsolePackageVersion>
|
||||
<MicrosoftExtensionsLoggingDebugPackageVersion>3.0.0-alpha1-10657</MicrosoftExtensionsLoggingDebugPackageVersion>
|
||||
<MicrosoftExtensionsLoggingPackageVersion>3.0.0-alpha1-10657</MicrosoftExtensionsLoggingPackageVersion>
|
||||
<MicrosoftExtensionsLoggingTestingPackageVersion>3.0.0-alpha1-10657</MicrosoftExtensionsLoggingTestingPackageVersion>
|
||||
<MicrosoftExtensionsOptionsPackageVersion>3.0.0-alpha1-10657</MicrosoftExtensionsOptionsPackageVersion>
|
||||
<MicrosoftNETCoreApp20PackageVersion>2.0.9</MicrosoftNETCoreApp20PackageVersion>
|
||||
<MicrosoftNETCoreApp21PackageVersion>2.1.3</MicrosoftNETCoreApp21PackageVersion>
|
||||
<MicrosoftNETCoreApp22PackageVersion>2.2.0-preview3-27014-02</MicrosoftNETCoreApp22PackageVersion>
|
||||
<MicrosoftNETCoreWindowsApiSetsPackageVersion>1.0.1</MicrosoftNETCoreWindowsApiSetsPackageVersion>
|
||||
<MicrosoftNetHttpHeadersPackageVersion>3.0.0-alpha1-10657</MicrosoftNetHttpHeadersPackageVersion>
|
||||
<MicrosoftNETTestSdkPackageVersion>15.6.1</MicrosoftNETTestSdkPackageVersion>
|
||||
<MicrosoftWebAdministrationPackageVersion>11.1.0</MicrosoftWebAdministrationPackageVersion>
|
||||
<NETStandardLibrary20PackageVersion>2.0.3</NETStandardLibrary20PackageVersion>
|
||||
<SystemBuffersPackageVersion>4.5.0</SystemBuffersPackageVersion>
|
||||
<SystemIOPipelinesPackageVersion>4.5.0</SystemIOPipelinesPackageVersion>
|
||||
<SystemMemoryPackageVersion>4.5.1</SystemMemoryPackageVersion>
|
||||
<SystemNetWebSocketsWebSocketProtocolPackageVersion>4.5.1</SystemNetWebSocketsWebSocketProtocolPackageVersion>
|
||||
<SystemNumericsVectorsPackageVersion>4.5.0</SystemNumericsVectorsPackageVersion>
|
||||
<SystemRuntimeCompilerServicesUnsafePackageVersion>4.5.1</SystemRuntimeCompilerServicesUnsafePackageVersion>
|
||||
<SystemSecurityPrincipalWindowsPackageVersion>4.5.0</SystemSecurityPrincipalWindowsPackageVersion>
|
||||
<SystemBuffersPackageVersion>4.6.0-preview1-26907-04</SystemBuffersPackageVersion>
|
||||
<SystemDiagnosticsEventLogPackageVersion>4.6.0-preview1-26907-04</SystemDiagnosticsEventLogPackageVersion>
|
||||
<SystemIOPipelinesPackageVersion>4.6.0-preview1-26907-04</SystemIOPipelinesPackageVersion>
|
||||
<SystemMemoryPackageVersion>4.6.0-preview1-26717-04</SystemMemoryPackageVersion>
|
||||
<SystemNetWebSocketsWebSocketProtocolPackageVersion>4.6.0-preview1-26907-04</SystemNetWebSocketsWebSocketProtocolPackageVersion>
|
||||
<SystemNumericsVectorsPackageVersion>4.6.0-preview1-26907-04</SystemNumericsVectorsPackageVersion>
|
||||
<SystemRuntimeCompilerServicesUnsafePackageVersion>4.6.0-preview1-26907-04</SystemRuntimeCompilerServicesUnsafePackageVersion>
|
||||
<SystemSecurityPrincipalWindowsPackageVersion>4.6.0-preview1-26907-04</SystemSecurityPrincipalWindowsPackageVersion>
|
||||
<SystemServiceProcessServiceControllerPackageVersion>4.6.0-preview1-26907-04</SystemServiceProcessServiceControllerPackageVersion>
|
||||
<Tooling_NewtonsoftJsonPackageVersion>9.0.1</Tooling_NewtonsoftJsonPackageVersion>
|
||||
<XunitPackageVersion>2.3.1</XunitPackageVersion>
|
||||
<XunitRunnerVisualStudioPackageVersion>2.4.0-beta.1.build3945</XunitRunnerVisualStudioPackageVersion>
|
||||
<XunitRunnerVisualStudioPackageVersion>2.4.0</XunitRunnerVisualStudioPackageVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<!-- This may import a generated file which may override the variables above. -->
|
||||
<Import Project="$(DotNetPackageVersionPropsPath)" Condition=" '$(DotNetPackageVersionPropsPath)' != '' " />
|
||||
|
||||
<!-- These are package versions that should not be overridden or updated by automation. -->
|
||||
<PropertyGroup Label="Package Versions: Pinned">
|
||||
<MicrosoftAspNetCoreAllPackageVersion>2.1.2</MicrosoftAspNetCoreAllPackageVersion>
|
||||
<MicrosoftAspNetCoreAuthenticationCorePackageVersion>2.1.1</MicrosoftAspNetCoreAuthenticationCorePackageVersion>
|
||||
<MicrosoftAspNetCoreHostingAbstractionsPackageVersion>2.1.1</MicrosoftAspNetCoreHostingAbstractionsPackageVersion>
|
||||
<MicrosoftAspNetCoreHostingPackageVersion>2.1.1</MicrosoftAspNetCoreHostingPackageVersion>
|
||||
<MicrosoftAspNetCoreHttpExtensionsPackageVersion>2.1.1</MicrosoftAspNetCoreHttpExtensionsPackageVersion>
|
||||
<MicrosoftAspNetCoreHttpOverridesPackageVersion>2.1.1</MicrosoftAspNetCoreHttpOverridesPackageVersion>
|
||||
<MicrosoftAspNetCoreHttpPackageVersion>2.1.1</MicrosoftAspNetCoreHttpPackageVersion>
|
||||
<MicrosoftAspNetCoreHttpSysSourcesPackageVersion>2.1.1</MicrosoftAspNetCoreHttpSysSourcesPackageVersion>
|
||||
<MicrosoftAspNetCoreServerIntegrationTestingPackageVersion>0.5.1</MicrosoftAspNetCoreServerIntegrationTestingPackageVersion>
|
||||
<MicrosoftAspNetCoreServerKestrelPackageVersion>2.1.2</MicrosoftAspNetCoreServerKestrelPackageVersion>
|
||||
<MicrosoftAspNetCoreTestHostPackageVersion>2.1.1</MicrosoftAspNetCoreTestHostPackageVersion>
|
||||
<MicrosoftAspNetCoreTestingPackageVersion>2.1.0</MicrosoftAspNetCoreTestingPackageVersion>
|
||||
<MicrosoftAspNetCoreWebUtilitiesPackageVersion>2.1.1</MicrosoftAspNetCoreWebUtilitiesPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>2.1.1</MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationJsonPackageVersion>2.1.1</MicrosoftExtensionsConfigurationJsonPackageVersion>
|
||||
<MicrosoftExtensionsLoggingAbstractionsPackageVersion>2.1.1</MicrosoftExtensionsLoggingAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsLoggingConsolePackageVersion>2.1.1</MicrosoftExtensionsLoggingConsolePackageVersion>
|
||||
<MicrosoftExtensionsLoggingDebugPackageVersion>2.1.1</MicrosoftExtensionsLoggingDebugPackageVersion>
|
||||
<MicrosoftExtensionsLoggingPackageVersion>2.1.1</MicrosoftExtensionsLoggingPackageVersion>
|
||||
<MicrosoftExtensionsLoggingTestingPackageVersion>2.1.1</MicrosoftExtensionsLoggingTestingPackageVersion>
|
||||
<MicrosoftExtensionsOptionsPackageVersion>2.1.1</MicrosoftExtensionsOptionsPackageVersion>
|
||||
<MicrosoftNetHttpHeadersPackageVersion>2.1.1</MicrosoftNetHttpHeadersPackageVersion>
|
||||
<MicrosoftAspNetCoreAspNetCoreModuleStablePackageVersion>2.2.0-preview3-35497</MicrosoftAspNetCoreAspNetCoreModuleStablePackageVersion>
|
||||
<MicrosoftAspNetCoreAspNetCoreModuleV2StablePackageVersion>2.2.0-preview3-35497</MicrosoftAspNetCoreAspNetCoreModuleV2StablePackageVersion>
|
||||
<MicrosoftAspNetCoreServerIISStablePackageVersion>2.2.0-preview3-35497</MicrosoftAspNetCoreServerIISStablePackageVersion>
|
||||
<MicrosoftAspNetCoreAuthenticationCore21PackageVersion>2.1.0</MicrosoftAspNetCoreAuthenticationCore21PackageVersion>
|
||||
<MicrosoftAspNetCoreConnectionsAbstractions21PackageVersion>2.1.0</MicrosoftAspNetCoreConnectionsAbstractions21PackageVersion>
|
||||
<MicrosoftAspNetCoreHostingAbstractions21PackageVersion>2.1.0</MicrosoftAspNetCoreHostingAbstractions21PackageVersion>
|
||||
<MicrosoftAspNetCoreHttpSysSources21PackageVersion>2.1.0</MicrosoftAspNetCoreHttpSysSources21PackageVersion>
|
||||
<SystemIOPipelines21PackageVersion>4.5.2</SystemIOPipelines21PackageVersion>
|
||||
<SystemSecurityPrincipalWindows21PackageVersion>4.5.0</SystemSecurityPrincipalWindows21PackageVersion>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,10 @@
|
|||
<Project>
|
||||
<Import Project="assets.props"/>
|
||||
<Target Name="AddRunNativeComponents" BeforeTargets="AssignTargetPaths" Condition="$(PackNativeAssets) == 'true'">
|
||||
<ItemGroup>
|
||||
<None Include="%(RunShimComponents.DllLocation)" CopyToOutputDirectory="PreserveNewest" Link="%(RunShimComponents.Platform)\%(RunShimComponents.PackageSubPath)%(RunShimComponents.NativeAsset).dll" />
|
||||
|
||||
<None Include="%(RunShimComponents.PdbLocation)" CopyToOutputDirectory="PreserveNewest" Link="%(RunShimComponents.Platform)\%(RunShimComponents.PackageSubPath)%(RunShimComponents.NativeAsset).pdb" />
|
||||
</ItemGroup>
|
||||
</Target>
|
||||
</Project>
|
||||
|
|
@ -12,13 +12,15 @@
|
|||
"commandName": "Executable",
|
||||
"executablePath": "$(IISExpressPath)",
|
||||
"commandLineArgs": "$(IISExpressArguments)",
|
||||
"nativeDebugging": true,
|
||||
"environmentVariables": {
|
||||
"IIS_SITE_PATH": "$(MSBuildThisFileDirectory)",
|
||||
"ANCM_PATH": "$(TargetDir)$(AncmPath)",
|
||||
"ANCM_PATH": "$(AspNetCoreModuleV1ShimDll)",
|
||||
"ANCMV2_PATH": "$(AspNetCoreModuleV2ShimDll)",
|
||||
"ANCM_OUTOFPROCESS_HANDLER": "$(AspNetCoreModuleV2OutOfProcessHandlerDll)",
|
||||
"LAUNCHER_ARGS": "$(TargetPath)",
|
||||
"ASPNETCORE_ENVIRONMENT": "Development",
|
||||
"LAUNCHER_PATH": "$(DotNetPath)"
|
||||
"LAUNCHER_PATH": "$(DotNetPath)",
|
||||
"ASPNETCORE_MODULE_DEBUG": "console"
|
||||
}
|
||||
},
|
||||
"ANCM IIS": {
|
||||
|
|
@ -27,10 +29,13 @@
|
|||
"commandLineArgs": "$(IISArguments)",
|
||||
"environmentVariables": {
|
||||
"IIS_SITE_PATH": "$(MSBuildThisFileDirectory)",
|
||||
"ANCM_PATH": "$(TargetDir)$(AncmPath)",
|
||||
"ANCM_PATH": "$(AspNetCoreModuleV1ShimDll)",
|
||||
"ANCMV2_PATH": "$(AspNetCoreModuleV2ShimDll)",
|
||||
"ASPNETCORE_MODULE_OUTOFPROCESS_HANDLER": "$(AspNetCoreModuleV2OutOfProcessHandlerDll)",
|
||||
"LAUNCHER_ARGS": "$(TargetPath)",
|
||||
"ASPNETCORE_ENVIRONMENT": "Development",
|
||||
"LAUNCHER_PATH": "$(DotNetPath)"
|
||||
"LAUNCHER_PATH": "$(DotNetPath)",
|
||||
"ASPNETCORE_MODULE_DEBUG": "console"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,32 +2,42 @@
|
|||
<Import Project="dependencies.props" />
|
||||
|
||||
<PropertyGroup>
|
||||
<AssemblySigningCertName>Microsoft</AssemblySigningCertName>
|
||||
<AncmZipOutputPath>$(BuildDir)AspNetCoreModule.zip</AncmZipOutputPath>
|
||||
<StressTestWebSiteZipOutputPath>$(BuildDir)StressTestWebSite.zip</StressTestWebSiteZipOutputPath>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ExcludeFromTest Include="$(RepositoryRoot)test\TestSites\*.csproj" />
|
||||
<ExcludeFromTest Include="$(RepositoryRoot)test\IISTestSite\*.csproj" />
|
||||
<ExcludeFromTest Include="$(RepositoryRoot)test\IISIntegration.FunctionalTests\*.csproj" Condition="'$(OS)' != 'Windows_NT'" />
|
||||
<ExcludeFromTest Include="$(RepositoryRoot)test\IISIntegration.IISServerFunctionalTests\*.csproj" Condition="'$(OS)' != 'Windows_NT'" />
|
||||
<ExcludeFromTest Include="$(RepositoryRoot)test\AspNetCoreModule.TestSites.Standard\*.csproj" />
|
||||
<ExcludeFromTest Include="$(RepositoryRoot)test\WebSocketClientEXE\*.csproj" />
|
||||
<ExcludeFromTest Include="$(RepositoryRoot)test\AspNetCoreModule.Test\*.csproj" Condition="'$(OS)' != 'Windows_NT'" />
|
||||
<ExcludeSolutions Include="$(RepositoryRoot)IISIntegration.NoV1.sln" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition="'$(SkipIISTests)' == 'true'" >
|
||||
<ExcludeFromTest Include="$(RepositoryRoot)test\IIS.FunctionalTests\*.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition="'$(SkipIISExpressTests)' == 'true'" >
|
||||
<ExcludeFromTest Include="$(RepositoryRoot)test\IISExpress.FunctionalTests\*.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition="'$(SkipIISBackwardsCompatibilityTests)' == 'true'" >
|
||||
<ExcludeFromTest Include="$(RepositoryRoot)test\IIS.BackwardsCompatibility.FunctionalTests\*.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition="'$(SkipIISForwardsCompatibilityTests)' == 'true'" >
|
||||
<ExcludeFromTest Include="$(RepositoryRoot)test\IIS.ForwardsCompatibility.FunctionalTests\*.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<!-- These properties are use by the automation that updates dependencies.props -->
|
||||
<LineupPackageId>Internal.AspNetCore.Universe.Lineup</LineupPackageId>
|
||||
<LineupPackageVersion>2.1.0-rc1-*</LineupPackageVersion>
|
||||
<LineupPackageRestoreSource>https://dotnet.myget.org/F/aspnetcore-dev/api/v3/index.json</LineupPackageRestoreSource>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<DotNetCoreRuntime Include="$(MicrosoftNETCoreApp20PackageVersion)" />
|
||||
<DotNetCoreRuntime Include="$(MicrosoftNETCoreApp21PackageVersion)" />
|
||||
<DotNetCoreRuntime Include="$(MicrosoftNETCoreApp22PackageVersion)" />
|
||||
<!-- These are for functional test projects that are only runable on windows -->
|
||||
<DotNetCoreRuntime Condition="'$(OS)' == 'Windows_NT'" Include="$(MicrosoftNETCoreApp20PackageVersion)" Arch="x86" />
|
||||
<DotNetCoreRuntime Condition="'$(OS)' == 'Windows_NT'" Include="$(MicrosoftNETCoreApp21PackageVersion)" Arch="x86" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
|
|
|||
|
|
@ -1,96 +1,112 @@
|
|||
<Project>
|
||||
|
||||
<PropertyGroup>
|
||||
<PrepareDependsOn>$(PrepareDependsOn)</PrepareDependsOn>
|
||||
<GetArtifactInfoDependsOn>$(GetArtifactInfoDependsOn);GetNativeArtifactsInfo</GetArtifactInfoDependsOn>
|
||||
<CompileDependsOn Condition="'$(OS)'=='Windows_NT'">BuildNativeAssets;$(CompileDependsOn)</CompileDependsOn>
|
||||
<PackageDependsOn Condition="'$(OS)'=='Windows_NT'">$(PackageDependsOn);PackageNativeProjects</PackageDependsOn>
|
||||
<PackageDependsOn Condition="'$(OS)'=='Windows_NT'">$(PackageDependsOn);PackageNativeProjects;PackageStressTestApp</PackageDependsOn>
|
||||
<TestDependsOn>$(TestDependsOn);RunNativeTest</TestDependsOn>
|
||||
<NuGetVerifierRuleFile Condition="'$(OS)' != 'Windows_NT'">$(RepositoryRoot)NuGetPackageVerifier.xplat.json</NuGetVerifierRuleFile>
|
||||
<SourceBase>$(RepositoryRoot)src\</SourceBase>
|
||||
<NativeOutput>bin\$(Configuration)\</NativeOutput>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Platforms Include="x86" VCPlatform="Win32" />
|
||||
<Platforms Include="x64" VCPlatform="x64" />
|
||||
</ItemGroup>
|
||||
<Import Project="assets.props" />
|
||||
|
||||
<Target Name="BuildNativeAssets" DependsOnTargets="Prepare;GetToolsets" >
|
||||
<PropertyGroup>
|
||||
<BuildArgs>-p:Configuration=$(Configuration) -v:m -nologo -clp:NoSummary -p:CommitHash=$(CommitHash)</BuildArgs>
|
||||
<BuildArgs>-p:Configuration=Native$(Configuration) -v:m -nologo -clp:NoSummary -p:CommitHash=$(CommitHash) -m</BuildArgs>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Platforms Include="Win32;x64" />
|
||||
<ANCMProject Include="$(MSBuildThisFileDirectory)..\IISIntegration.sln $(BuildArgs) -p:Platform=%(Platforms.Identity) -bl:$(LogOutputDir)native.%(Platforms.Identity).binlog"/>
|
||||
</ItemGroup>
|
||||
|
||||
<Error
|
||||
Text="Could not find an installation of Visual Studio with the C++ development tools."
|
||||
Condition="'$(VisualStudioMSBuildx86Path)' == ''" />
|
||||
|
||||
<Exec Command=""$(VisualStudioMSBuildx86Path)" "$(RepositoryRoot)src\AspNetCoreModuleV1\AspNetCore\AspNetCore.vcxproj" $(BuildArgs) -p:Platform=%(Platforms.Identity) -bl:$(LogOutputDir)native.%(Platforms.Identity).binlog"
|
||||
Condition="'$(VisualStudioMSBuildx86Path)' != ''" />
|
||||
<Exec Command=""$(VisualStudioMSBuildx86Path)" "$(RepositoryRoot)src\AspNetCoreModuleV2\AspNetCore\AspNetCore.vcxproj" $(BuildArgs) -p:Platform=%(Platforms.Identity) -bl:$(LogOutputDir)native.%(Platforms.Identity).binlog"
|
||||
Condition="'$(VisualStudioMSBuildx86Path)' != ''" />
|
||||
<Exec Command=""$(VisualStudioMSBuildx86Path)" "$(RepositoryRoot)src\AspNetCoreModuleV2\RequestHandler\RequestHandler.vcxproj" $(BuildArgs) -p:Platform=%(Platforms.Identity) -bl:$(LogOutputDir)native.%(Platforms.Identity).binlog"
|
||||
<Exec Command=""$(VisualStudioMSBuildx86Path)" %(ANCMProject.Identity)"
|
||||
Condition="'$(VisualStudioMSBuildx86Path)' != ''" />
|
||||
</Target>
|
||||
|
||||
<ItemGroup Condition=" '$(OS)' == 'Windows_NT' ">
|
||||
<ArtifactInfo Include="$(BuildDir)Microsoft.AspNetCore.AspNetCoreModule.$(PackageVersion).nupkg">
|
||||
<ArtifactType>NuGetPackage</ArtifactType>
|
||||
<PackageId>Microsoft.AspNetCore.AspNetCoreModule</PackageId>
|
||||
<Version>$(PackageVersion)</Version>
|
||||
<RepositoryRoot>$(RepositoryRoot)</RepositoryRoot>
|
||||
</ArtifactInfo>
|
||||
<FilesToExcludeFromSigning Include="$(BuildDir)Microsoft.AspNetCore.AspNetCoreModule.$(PackageVersion).nupkg" />
|
||||
<Target Name="GetNativeArtifactsInfo">
|
||||
<PropertyGroup>
|
||||
<AncmPackageOutputPath>$(BuildDir)Microsoft.AspNetCore.AspNetCoreModule.$(PackageVersion).nupkg</AncmPackageOutputPath>
|
||||
<AncmV2PackageOutputPath>$(BuildDir)Microsoft.AspNetCore.AspNetCoreModuleV2.$(PackageVersion).nupkg</AncmV2PackageOutputPath>
|
||||
</PropertyGroup>
|
||||
|
||||
<ArtifactInfo Include="$(BuildDir)Microsoft.AspNetCore.AspNetCoreModuleV1.$(PackageVersion).nupkg">
|
||||
<ArtifactType>NuGetPackage</ArtifactType>
|
||||
<PackageId>Microsoft.AspNetCore.AspNetCoreModuleV1</PackageId>
|
||||
<Version>$(PackageVersion)</Version>
|
||||
<RepositoryRoot>$(RepositoryRoot)</RepositoryRoot>
|
||||
</ArtifactInfo>
|
||||
<FilesToExcludeFromSigning Include="$(BuildDir)Microsoft.AspNetCore.AspNetCoreModuleV1.$(PackageVersion).nupkg" />
|
||||
<ItemGroup Condition=" '$(OS)' == 'Windows_NT' ">
|
||||
<ArtifactInfo Include="$(AncmPackageOutputPath)">
|
||||
<ArtifactType>NuGetPackage</ArtifactType>
|
||||
<PackageId>Microsoft.AspNetCore.AspNetCoreModule</PackageId>
|
||||
<Version>$(PackageVersion)</Version>
|
||||
<RepositoryRoot>$(RepositoryRoot)</RepositoryRoot>
|
||||
</ArtifactInfo>
|
||||
<FilesToSign Include="$(AncmPackageOutputPath)" Certificate="$(PackageSigningCertName)" />
|
||||
<FilesToSign Include="$(RepositoryRoot)tools\installancm.ps1" Container="$(AncmPackageOutputPath)" Certificate="$(PowerShellSigningCertName)" />
|
||||
|
||||
<ArtifactInfo Include="$(AncmZipOutputPath)">
|
||||
<ArtifactType>ZipArchive</ArtifactType>
|
||||
<RepositoryRoot>$(RepositoryRoot)</RepositoryRoot>
|
||||
<Category>shipoob</Category>
|
||||
</ArtifactInfo>
|
||||
<ArtifactInfo Include="$(AncmV2PackageOutputPath)">
|
||||
<ArtifactType>NuGetPackage</ArtifactType>
|
||||
<PackageId>Microsoft.AspNetCore.AspNetCoreModuleV2</PackageId>
|
||||
<Version>$(PackageVersion)</Version>
|
||||
<RepositoryRoot>$(RepositoryRoot)</RepositoryRoot>
|
||||
</ArtifactInfo>
|
||||
<FilesToSign Include="$(AncmV2PackageOutputPath)" Certificate="$(PackageSigningCertName)" />
|
||||
|
||||
<FilesToSign Include="$(AncmZipOutputPath)" IsContainer="true" />
|
||||
<FilesToSign Include="AspNetCoreModuleV1/x64/aspnetcore.dll" Container="$(AncmZipOutputPath)" Certificate="$(AssemblySigningCertName)" />
|
||||
<FilesToSign Include="AspNetCoreModuleV1/x86/aspnetcore.dll" Container="$(AncmZipOutputPath)" Certificate="$(AssemblySigningCertName)" />
|
||||
<FilesToSign Include="AspNetCoreModuleV2/x64/aspnetcore.dll" Container="$(AncmZipOutputPath)" Certificate="$(AssemblySigningCertName)" />
|
||||
<FilesToSign Include="AspNetCoreModuleV2/x86/aspnetcore.dll" Container="$(AncmZipOutputPath)" Certificate="$(AssemblySigningCertName)" />
|
||||
<FilesToSign Include="AspNetCoreModuleV2/x64/aspnetcorerh.dll" Container="$(AncmZipOutputPath)" Certificate="$(AssemblySigningCertName)" />
|
||||
<FilesToSign Include="AspNetCoreModuleV2/x86/aspnetcorerh.dll" Container="$(AncmZipOutputPath)" Certificate="$(AssemblySigningCertName)" />
|
||||
</ItemGroup>
|
||||
<ArtifactInfo Include="$(AncmZipOutputPath)">
|
||||
<ArtifactType>ZipArchive</ArtifactType>
|
||||
<RepositoryRoot>$(RepositoryRoot)</RepositoryRoot>
|
||||
<Category>shipoob</Category>
|
||||
</ArtifactInfo>
|
||||
|
||||
<ArtifactInfo Include="$(StressTestWebSiteZipOutputPath)">
|
||||
<ArtifactType>ZipArchive</ArtifactType>
|
||||
<RepositoryRoot>$(RepositoryRoot)</RepositoryRoot>
|
||||
<Category>noship</Category>
|
||||
</ArtifactInfo>
|
||||
|
||||
<FilesToSign Include="$(AncmZipOutputPath)" Certificate="None" IsContainer="true" />
|
||||
<FilesToExcludeFromSigning Include="$(StressTestWebSiteZipOutputPath)" />
|
||||
<FilesToExcludeFromSigning Include="AspNetCore\ancm.mof" Container="$(AncmV2PackageOutputPath)" />
|
||||
</ItemGroup>
|
||||
</Target>
|
||||
|
||||
<Target Name="PackageNativeProjects">
|
||||
<PackNuspec NuspecPath="$(MSBuildThisFileDirectory)..\nuget\AspNetCoreV1.nuspec"
|
||||
<PropertyGroup>
|
||||
<AspNetCoreModuleV2PropsFile>$(MSBuildThisFileDirectory)..\nuget\Microsoft.AspNetCore.AspNetCoreModuleV2.props.in</AspNetCoreModuleV2PropsFile>
|
||||
<AspNetCoreModuleV2PropsOutputFile>$(MSBuildThisFileDirectory)..\artifacts\Microsoft.AspNetCore.AspNetCoreModuleV2.props</AspNetCoreModuleV2PropsOutputFile>
|
||||
</PropertyGroup>
|
||||
|
||||
<GenerateFileFromTemplate
|
||||
TemplateFile="$(AspNetCoreModuleV2PropsFile)"
|
||||
Properties="AspNetCoreModuleOutOfProcessVersion=$(AspNetCoreModuleOutOfProcessVersion)"
|
||||
OutputPath="$(AspNetCoreModuleV2PropsOutputFile)" />
|
||||
|
||||
<PackNuspec NuspecPath="$(MSBuildThisFileDirectory)..\nuget\Microsoft.AspNetCore.AspNetCoreModule.nuspec"
|
||||
DestinationFolder="$(BuildDir)"
|
||||
Properties="version=$(PackageVersion);Configuration=$(Configuration)"
|
||||
Overwrite="true"
|
||||
BasePath="$(RepositoryRoot)" />
|
||||
|
||||
<PackNuspec NuspecPath="$(MSBuildThisFileDirectory)..\nuget\AspNetCoreV2.nuspec"
|
||||
<PackNuspec NuspecPath="$(MSBuildThisFileDirectory)..\nuget\Microsoft.AspNetCore.AspNetCoreModuleV2.nuspec"
|
||||
DestinationFolder="$(BuildDir)"
|
||||
Properties="version=$(PackageVersion);Configuration=$(Configuration)"
|
||||
Properties="version=$(PackageVersion);Configuration=$(Configuration);AspNetCoreModuleOutOfProcessVersion=$(AspNetCoreModuleOutOfProcessVersion);AspNetCoreModuleV2Props=$(AspNetCoreModuleV2PropsOutputFile)"
|
||||
Overwrite="true"
|
||||
BasePath="$(RepositoryRoot)" />
|
||||
|
||||
<ItemGroup>
|
||||
<!-- x64 -->
|
||||
<AncmFiles Include="$(RepositoryRoot)src\AspNetCoreModuleV1\AspNetCore\bin\$(Configuration)\x64\aspnetcore.dll" Link="AspNetCoreModuleV1\x64\aspnetcore.dll" />
|
||||
<AncmFiles Include="$(RepositoryRoot)src\AspNetCoreModuleV1\AspNetCore\bin\$(Configuration)\x64\aspnetcore.pdb" Link="AspNetCoreModuleV1\x64\aspnetcore.pdb" />
|
||||
<AncmFiles Include="$(RepositoryRoot)src\AspNetCoreModuleV2\AspNetCore\bin\$(Configuration)\x64\aspnetcore.dll" Link="AspNetCoreModuleV2\x64\aspnetcore.dll" />
|
||||
<AncmFiles Include="$(RepositoryRoot)src\AspNetCoreModuleV2\AspNetCore\bin\$(Configuration)\x64\aspnetcore.pdb" Link="AspNetCoreModuleV2\x64\aspnetcore.pdb" />
|
||||
<AncmFiles Include="$(RepositoryRoot)src\AspNetCoreModuleV2\RequestHandler\bin\$(Configuration)\x64\aspnetcorerh.dll" Link="AspNetCoreModuleV2\x64\aspnetcorerh.dll" />
|
||||
<AncmFiles Include="$(RepositoryRoot)src\AspNetCoreModuleV2\RequestHandler\bin\$(Configuration)\x64\aspnetcorerh.pdb" Link="AspNetCoreModuleV2\x64\aspnetcorerh.pdb" />
|
||||
<!-- x86 -->
|
||||
<AncmFiles Include="$(RepositoryRoot)src\AspNetCoreModuleV1\AspNetCore\bin\$(Configuration)\Win32\aspnetcore.dll" Link="AspNetCoreModuleV1\x86\aspnetcore.dll" />
|
||||
<AncmFiles Include="$(RepositoryRoot)src\AspNetCoreModuleV1\AspNetCore\bin\$(Configuration)\Win32\aspnetcore.pdb" Link="AspNetCoreModuleV1\x86\aspnetcore.pdb" />
|
||||
<AncmFiles Include="$(RepositoryRoot)src\AspNetCoreModuleV2\AspNetCore\bin\$(Configuration)\Win32\aspnetcore.dll" Link="AspNetCoreModuleV2\x86\aspnetcore.dll" />
|
||||
<AncmFiles Include="$(RepositoryRoot)src\AspNetCoreModuleV2\AspNetCore\bin\$(Configuration)\Win32\aspnetcore.pdb" Link="AspNetCoreModuleV2\x86\aspnetcore.pdb" />
|
||||
<AncmFiles Include="$(RepositoryRoot)src\AspNetCoreModuleV2\RequestHandler\bin\$(Configuration)\Win32\aspnetcorerh.dll" Link="AspNetCoreModuleV2\x86\aspnetcorerh.dll" />
|
||||
<AncmFiles Include="$(RepositoryRoot)src\AspNetCoreModuleV2\RequestHandler\bin\$(Configuration)\Win32\aspnetcorerh.pdb" Link="AspNetCoreModuleV2\x86\aspnetcorerh.pdb" />
|
||||
<AncmFiles Include="%(Components.DllLocation)" Link="%(Components.BaseOutputPath)\%(Components.Platform)\%(Components.NativeAsset).dll" />
|
||||
<AncmFiles Include="%(Components.PdbLocation)" Link="%(Components.BaseOutputPath)\%(Components.Platform)\%(Components.NativeAsset).pdb" />
|
||||
|
||||
<!-- Schema-->
|
||||
<AncmFiles Include="$(RepositoryRoot)src\AspNetCoreModuleV1\AspNetCore\bin\$(Configuration)\x64\aspnetcore_schema.xml" Link="AspNetCoreModuleV1\aspnetcore_schema.xml" />
|
||||
<AncmFiles Include="$(RepositoryRoot)src\AspNetCoreModuleV2\AspNetCore\bin\$(Configuration)\x64\aspnetcore_schema.xml" Link="AspNetCoreModuleV2\aspnetcore_schema.xml" />
|
||||
<AncmFiles Include="$(RepositoryRoot)src\AspNetCoreModuleV2\AspNetCore\bin\$(Configuration)\x64\ancm.mof" Link="AspNetCoreModuleV2\ancm.mof" />
|
||||
<AncmFiles Include="$(SourceBase)AspNetCoreModuleV2\AspNetCore\aspnetcore_schema_v2.xml" Link="AspNetCoreModuleV1\aspnetcore_schema.xml" />
|
||||
<AncmFiles Include="$(SourceBase)AspNetCoreModuleV2\AspNetCore\aspnetcore_schema_v2.xml" Link="AspNetCoreModuleV2\aspnetcore_schema_v2.xml" />
|
||||
<AncmFiles Include="$(SourceBase)AspNetCoreModuleV2\AspNetCore\ancm.mof" Link="AspNetCoreModuleV2\ancm.mof" />
|
||||
</ItemGroup>
|
||||
|
||||
<ZipArchive File="$(AncmZipOutputPath)"
|
||||
|
|
@ -99,4 +115,33 @@
|
|||
WorkingDirectory="$(RepositoryRoot)" />
|
||||
</Target>
|
||||
|
||||
<Target Name="RunNativeTest" DependsOnTargets="GetToolsets">
|
||||
<PropertyGroup>
|
||||
<BuildArgs>-p:Configuration=$(Configuration) -v:m -nologo -clp:NoSummary</BuildArgs>
|
||||
</PropertyGroup>
|
||||
<Exec Command=""$(VisualStudioMSBuildx86Path)" "$(RepositoryRoot)test\CommonLibTests\CommonLibTests.vcxproj" /t:Test $(BuildArgs) -p:Platform=%(Platforms.VCPlatform)"
|
||||
Condition="'$(VisualStudioMSBuildx86Path)' != ''" />
|
||||
</Target>
|
||||
|
||||
<Target Name="PackageStressTestApp">
|
||||
<PropertyGroup>
|
||||
<StressAppBasePath>$(MSBuildThisFileDirectory)..\test\WebSites\StressTestWebSite\</StressAppBasePath>
|
||||
<StressAppPublishPath>$(StressAppBasePath)bin\published\</StressAppPublishPath>
|
||||
</PropertyGroup>
|
||||
|
||||
<RemoveDir Directories="$(StressAppPublishPath)" />
|
||||
<MSBuild
|
||||
Projects="$(StressAppBasePath)\StressTestWebSite.csproj"
|
||||
Targets="Publish"
|
||||
Properties="TargetFramework=netcoreapp2.2;Configuration=$(Configuration);RuntimeIdentifier=win7-%(Platforms.Identity);PublishDir=$(StressAppPublishPath)\%(Identity);BuildProjectReferences=false" />
|
||||
|
||||
<ItemGroup>
|
||||
<StressAppFiles Include="$(StressAppPublishPath)\**\*" />
|
||||
</ItemGroup>
|
||||
|
||||
<ZipArchive File="$(StressTestWebSiteZipOutputPath)"
|
||||
Overwrite="true"
|
||||
SourceFiles="@(StressAppFiles)"
|
||||
WorkingDirectory="$(StressAppPublishPath)" />
|
||||
</Target>
|
||||
</Project>
|
||||
|
|
|
|||
|
|
@ -5,10 +5,12 @@
|
|||
<Platforms>x64;x86</Platforms>
|
||||
<IISExpressAppHostConfig>$(MSBuildThisFileDirectory)applicationhost.config</IISExpressAppHostConfig>
|
||||
<IISAppHostConfig>$(MSBuildThisFileDirectory)applicationhost.iis.config</IISAppHostConfig>
|
||||
<NativePlatform Condition="'$(Platform)' == 'AnyCPU'">x64</NativePlatform>
|
||||
<NativePlatform Condition="'$(NativePlatform)' == ''">$(Platform)</NativePlatform>
|
||||
<PreserveCompilationContext>false</PreserveCompilationContext>
|
||||
<DisableFastUpToDateCheck>True</DisableFastUpToDateCheck>
|
||||
</PropertyGroup>
|
||||
|
||||
|
||||
<Import Project="assets.props" />
|
||||
|
||||
<PropertyGroup Condition="'$(NativePlatform)' == 'x86'">
|
||||
<IISExpressPath>$(MSBuildProgramFiles32)\IIS Express\iisexpress.exe</IISExpressPath>
|
||||
<IISPath>$(SystemRoot)\SysWOW64\inetsrv\w3wp.exe</IISPath>
|
||||
|
|
@ -22,51 +24,38 @@
|
|||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<!-- For standalone publish, all dlls are flattened to the same folder.
|
||||
Set the base path to the request handler
|
||||
<!-- For standalone publish, all dlls are flattened to the same folder.
|
||||
Set the base path to the request handler
|
||||
-->
|
||||
<BasePathForRequestHandler Condition="'$(RuntimeIdentifier)' == ''">$(NativePlatform)\</BasePathForRequestHandler>
|
||||
|
||||
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition="'$(OS)' == 'Windows_NT' AND ('$(ANCMVersion)' == 'V2' Or '$(ANCMVersion)' == '')">
|
||||
<None Include="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\RequestHandler\bin\$(Configuration)\$(NativeFolder)\aspnetcorerh.dll" CopyToOutputDirectory="PreserveNewest" Visible="true" Link="$(BasePathForRequestHandler)%(FileName)%(Extension)" />
|
||||
<None Include="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\RequestHandler\bin\$(Configuration)\$(NativeFolder)\aspnetcorerh.pdb" CopyToOutputDirectory="PreserveNewest" Visible="true" Link="$(BasePathForRequestHandler)%(FileName)%(Extension)" />
|
||||
<None Include="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\AspNetCore\bin\$(Configuration)\$(NativeFolder)\aspnetcore.dll" CopyToOutputDirectory="PreserveNewest" Visible="true" Link="$(NativePlatform)\%(FileName)%(Extension)" />
|
||||
<None Include="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV2\AspNetCore\bin\$(Configuration)\$(NativeFolder)\aspnetcore.pdb" CopyToOutputDirectory="PreserveNewest" Visible="true" Link="$(NativePlatform)\%(FileName)%(Extension)" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition="'$(OS)' == 'Windows_NT' AND '$(ANCMVersion)' == 'V1'">
|
||||
<None Include="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV1\AspNetCore\bin\$(Configuration)\$(NativeFolder)\aspnetcore.dll" CopyToOutputDirectory="PreserveNewest" Visible="true" Link="$(NativePlatform)\%(FileName)%(Extension)" />
|
||||
<None Include="$(MSBuildThisFileDirectory)..\src\AspNetCoreModuleV1\AspNetCore\bin\$(Configuration)\$(NativeFolder)\aspnetcore.pdb" CopyToOutputDirectory="PreserveNewest" Visible="true" Link="$(NativePlatform)\%(FileName)%(Extension)" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
<PropertyGroup>
|
||||
<IISExpressArguments>/config:"$(IISExpressAppHostConfig)"</IISExpressArguments>
|
||||
<IISExpressArguments>/config:"$(IISExpressAppHostConfig)" /systray:false</IISExpressArguments>
|
||||
<IISArguments>-h "$(IISAppHostConfig)"</IISArguments>
|
||||
|
||||
<AncmPath>$(NativePlatform)\aspnetcore.dll</AncmPath>
|
||||
<AncmRHPath>$(NativePlatform)\aspnetcorerh.dll</AncmRHPath>
|
||||
<AncmInProcessRHPath>aspnetcorev2_inprocess.dll</AncmInProcessRHPath>
|
||||
<DotNetPath>$(userprofile)\.dotnet\$(NativePlatform)\dotnet.exe</DotNetPath>
|
||||
</PropertyGroup>
|
||||
|
||||
<Target Name="CopyLaunchSettings" AfterTargets="CoreBuild">
|
||||
<!-- This would always override launch settings files in test projects by the default one -->
|
||||
<Copy SourceFiles="$(MSBuildThisFileDirectory)launchSettings.json" DestinationFolder="$(MSBuildProjectDirectory)\Properties" />
|
||||
<Copy SourceFiles="$(MSBuildThisFileDirectory)launchSettings.json" DestinationFolder="$(MSBuildProjectDirectory)\Properties" SkipUnchangedFiles="true" />
|
||||
</Target>
|
||||
|
||||
<!-- Deps file injection-->
|
||||
<ItemGroup>
|
||||
<ItemGroup Condition="('$(InProcessTestSite)' == 'true') AND ('$(ReferenceTestTasks)' != 'false')">
|
||||
<ProjectReference Include="$(MSBuildThisFileDirectory)..\test\TestTasks\TestTasks.csproj">
|
||||
<ReferenceOutputAssembly>False</ReferenceOutputAssembly>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
<Target Name="PrepareInjectionApp" Condition="'$(ANCMVersion)' == 'V2' Or '$(ANCMVersion)' == ''">
|
||||
<Target Name="PrepareInjectionApp" Condition="'$(InProcessTestSite)' == 'true'">
|
||||
<PropertyGroup>
|
||||
<InjectDepsAssembly>$(MSBuildThisFileDirectory)..\test\TestTasks\bin\$(Configuration)\$(TargetFramework)\TestTasks</InjectDepsAssembly>
|
||||
|
||||
<InjectDepsApp Condition="'$(TargetFramework)' == 'net461'">$(InjectDepsAssembly)</InjectDepsApp>
|
||||
<InjectDepsArguments>"win7-$(NativePlatform)" "$(AncmRHPath)"</InjectDepsArguments>
|
||||
<InjectDepsArguments>"win7-$(NativePlatform)" "$(AncmInProcessRHPath)"</InjectDepsArguments>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(TargetFramework)' == 'net461'">
|
||||
|
|
@ -81,11 +70,11 @@
|
|||
</PropertyGroup>
|
||||
</Target>
|
||||
|
||||
<Target Name="InjectRequestHandler" AfterTargets="GenerateBuildDependencyFile" DependsOnTargets="PrepareInjectionApp" Condition="'$(ANCMVersion)' == 'V2' Or '$(ANCMVersion)' == ''">
|
||||
<Target Name="InjectRequestHandler" AfterTargets="GenerateBuildDependencyFile" DependsOnTargets="PrepareInjectionApp" Condition="'$(InProcessTestSite)' == 'true'">
|
||||
<Exec Command="$(InjectDepsApp) $(InjectDepsArguments) "$(ProjectDepsFilePath)"" />
|
||||
</Target>
|
||||
|
||||
<Target Name="InjectRequestHandlerOnPublish" AfterTargets="GeneratePublishDependencyFile" DependsOnTargets="PrepareInjectionApp" Condition="'$(ANCMVersion)' == 'V2' Or '$(ANCMVersion)' == ''">
|
||||
<Target Name="InjectRequestHandlerOnPublish" AfterTargets="GeneratePublishDependencyFile" DependsOnTargets="PrepareInjectionApp" Condition="'$(InProcessTestSite)' == 'true'">
|
||||
<Exec Command="$(InjectDepsApp) $(InjectDepsArguments) "$(PublishDepsFilePath)"" />
|
||||
</Target>
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"$schema": "https://raw.githubusercontent.com/aspnet/BuildTools/release/2.1/tools/korebuild.schema.json",
|
||||
"channel": "release/2.1",
|
||||
"$schema": "https://raw.githubusercontent.com/aspnet/BuildTools/master/tools/korebuild.schema.json",
|
||||
"channel": "master",
|
||||
"toolsets": {
|
||||
"visualstudio": {
|
||||
"required": ["Windows"],
|
||||
|
|
@ -14,4 +14,4 @@
|
|||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,31 +0,0 @@
|
|||
<?xml version="1.0"?>
|
||||
<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
|
||||
<metadata>
|
||||
<id>Microsoft.AspNetCore.AspNetCoreModule</id> <!--TODO make this package version V2 when possible -->
|
||||
<title>Microsoft ASP.NET Core Module</title>
|
||||
<version>$VERSION$</version>
|
||||
<authors>Microsoft</authors>
|
||||
<owners>Microsoft</owners>
|
||||
<licenseUrl>https://www.microsoft.com/web/webpi/eula/net_library_eula_ENU.htm</licenseUrl>
|
||||
<copyright>© .NET Foundation. All rights reserved.</copyright>
|
||||
<projectUrl>https://www.asp.net/</projectUrl>
|
||||
<iconUrl>https://go.microsoft.com/fwlink/?LinkID=288859</iconUrl>
|
||||
<requireLicenseAcceptance>true</requireLicenseAcceptance>
|
||||
<description>ASP.NET Core Module</description>
|
||||
<language>en-US</language>
|
||||
<tags>Microsoft.AspNetCore.AspNetCoreModule</tags>
|
||||
<contentFiles>
|
||||
<files include="any/any/*/*.dll" buildAction="None" copyToOutput="true" flatten="false" />
|
||||
</contentFiles>
|
||||
</metadata>
|
||||
<files>
|
||||
<file src="src\AspNetCoreModuleV2\AspNetCore\bin\$Configuration$\Win32\aspnetcore.dll" target="contentFiles\any\any\x86\aspnetcore.dll" />
|
||||
<file src="src\AspNetCoreModuleV2\AspNetCore\bin\$Configuration$\x64\aspnetcore.dll" target="contentFiles\any\any\x64\aspnetcore.dll" />
|
||||
<file src="src\AspNetCoreModuleV2\RequestHandler\bin\$Configuration$\Win32\aspnetcorerh.dll" target="contentFiles\any\any\x86\aspnetcorerh.dll" />
|
||||
<file src="src\AspNetCoreModuleV2\RequestHandler\bin\$Configuration$\x64\aspnetcorerh.dll" target="contentFiles\any\any\x64\aspnetcorerh.dll" />
|
||||
<file src="src\AspNetCoreModuleV2\AspNetCore\bin\$Configuration$\x64\*.xml"/>
|
||||
<file src="tools\installancm.ps1"/>
|
||||
<file src="LICENSE.txt"/>
|
||||
<file src="nuget\Microsoft.AspNetCore.AspNetCoreModule.props" target="build\" />
|
||||
</files>
|
||||
</package>
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0"?>
|
||||
<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
|
||||
<metadata>
|
||||
<id>Microsoft.AspNetCore.AspNetCoreModuleV1</id>
|
||||
<id>Microsoft.AspNetCore.AspNetCoreModule</id>
|
||||
<title>Microsoft ASP.NET Core Module</title>
|
||||
<version>$VERSION$</version>
|
||||
<authors>Microsoft</authors>
|
||||
|
|
@ -13,15 +13,19 @@
|
|||
<requireLicenseAcceptance>true</requireLicenseAcceptance>
|
||||
<description>ASP.NET Core Module</description>
|
||||
<language>en-US</language>
|
||||
<tags>Microsoft.AspNetCore.AspNetCoreModuleV1</tags>
|
||||
<tags>Microsoft.AspNetCore.AspNetCoreModule</tags>
|
||||
<contentFiles>
|
||||
<files include="any/any/*/*.dll" buildAction="None" copyToOutput="true" flatten="false" />
|
||||
<files include="any/any/*/*.pdb" buildAction="None" copyToOutput="true" flatten="false" />
|
||||
</contentFiles>
|
||||
</metadata>
|
||||
<files>
|
||||
<file src="src\AspNetCoreModuleV1\AspNetCore\bin\$Configuration$\Win32\aspnetcore.dll" target="contentFiles\any\any\x86\aspnetcore.dll" />
|
||||
<file src="src\AspNetCoreModuleV1\AspNetCore\bin\$Configuration$\x64\aspnetcore.dll" target="contentFiles\any\any\x64\aspnetcore.dll" />
|
||||
<file src="src\AspNetCoreModuleV1\AspNetCore\bin\$Configuration$\x64\*.xml"/>
|
||||
<file src="src\AspNetCoreModuleV1\AspNetCore\bin\$Configuration$\Win32\aspnetcore.dll" target="contentFiles\any\any\x86\" />
|
||||
<file src="src\AspNetCoreModuleV1\AspNetCore\bin\$Configuration$\x64\aspnetcore.dll" target="contentFiles\any\any\x64\" />
|
||||
<file src="src\AspNetCoreModuleV1\AspNetCore\bin\$Configuration$\Win32\aspnetcore.pdb" target="contentFiles\any\any\x86\" />
|
||||
<file src="src\AspNetCoreModuleV1\AspNetCore\bin\$Configuration$\x64\aspnetcore.pdb" target="contentFiles\any\any\x64\" />
|
||||
|
||||
<file src="src\AspNetCoreModuleV2\AspNetCore\aspnetcore_schema_v2.xml" target="aspnetcore_schema.xml"/>
|
||||
<file src="tools\installancm.ps1"/>
|
||||
<file src="LICENSE.txt"/>
|
||||
<file src="nuget\Microsoft.AspNetCore.AspNetCoreModule.props" target="build\" />
|
||||
|
|
@ -3,8 +3,6 @@
|
|||
<PropertyGroup>
|
||||
<AspNetCoreModuleX64Location>$(MSBuildThisFileDirectory)..\contentFiles\any\any\x64\aspnetcore.dll</AspNetCoreModuleX64Location>
|
||||
<AspNetCoreModuleX86Location>$(MSBuildThisFileDirectory)..\contentFiles\any\any\x86\aspnetcore.dll</AspNetCoreModuleX86Location>
|
||||
<RequestHandlerX64Location>$(MSBuildThisFileDirectory)..\contentFiles\any\any\x64\aspnetcorerh.dll</RequestHandlerX64Location>
|
||||
<RequestHandlerX86Location>$(MSBuildThisFileDirectory)..\contentFiles\any\any\x86\aspnetcorerh.dll</RequestHandlerX86Location>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,44 @@
|
|||
<?xml version="1.0"?>
|
||||
<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
|
||||
<metadata>
|
||||
<id>Microsoft.AspNetCore.AspNetCoreModuleV2</id>
|
||||
<title>Microsoft ASP.NET Core Module</title>
|
||||
<version>$VERSION$</version>
|
||||
<authors>Microsoft</authors>
|
||||
<owners>Microsoft</owners>
|
||||
<licenseUrl>https://www.microsoft.com/web/webpi/eula/net_library_eula_ENU.htm</licenseUrl>
|
||||
<copyright>© .NET Foundation. All rights reserved.</copyright>
|
||||
<projectUrl>https://www.asp.net/</projectUrl>
|
||||
<iconUrl>https://go.microsoft.com/fwlink/?LinkID=288859</iconUrl>
|
||||
<requireLicenseAcceptance>true</requireLicenseAcceptance>
|
||||
<description>ASP.NET Core Module</description>
|
||||
<language>en-US</language>
|
||||
<tags>Microsoft.AspNetCore.AspNetCoreModule</tags>
|
||||
<contentFiles>
|
||||
<files include="any/any/*/*.dll" buildAction="None" copyToOutput="true" flatten="false" />
|
||||
<files include="any/any/*/*/*.dll" buildAction="None" copyToOutput="true" flatten="false" />
|
||||
<files include="any/any/*/*.pdb" buildAction="None" copyToOutput="true" flatten="false" />
|
||||
<files include="any/any/*/*/*.pdb" buildAction="None" copyToOutput="true" flatten="false" />
|
||||
</contentFiles>
|
||||
</metadata>
|
||||
<files>
|
||||
<file src="src\AspNetCoreModuleV2\AspNetCore\bin\$Configuration$\Win32\aspnetcorev2.dll" target="contentFiles\any\any\x86" />
|
||||
<file src="src\AspNetCoreModuleV2\AspNetCore\bin\$Configuration$\x64\aspnetcorev2.dll" target="contentFiles\any\any\x64" />
|
||||
<file src="src\AspNetCoreModuleV2\OutOfProcessRequestHandler\bin\$Configuration$\Win32\aspnetcorev2_outofprocess.dll" target="contentFiles\any\any\x86\$AspNetCoreModuleOutOfProcessVersion$" />
|
||||
<file src="src\AspNetCoreModuleV2\OutOfProcessRequestHandler\bin\$Configuration$\x64\aspnetcorev2_outofprocess.dll" target="contentFiles\any\any\x64\$AspNetCoreModuleOutOfProcessVersion$" />
|
||||
<file src="src\AspNetCoreModuleV2\InProcessRequestHandler\bin\$Configuration$\Win32\aspnetcorev2_inprocess.dll" target="contentFiles\any\any\x86" />
|
||||
<file src="src\AspNetCoreModuleV2\InProcessRequestHandler\bin\$Configuration$\x64\aspnetcorev2_inprocess.dll" target="contentFiles\any\any\x64" />
|
||||
|
||||
<file src="src\AspNetCoreModuleV2\AspNetCore\bin\$Configuration$\Win32\aspnetcorev2.pdb" target="contentFiles\any\any\x86" />
|
||||
<file src="src\AspNetCoreModuleV2\AspNetCore\bin\$Configuration$\x64\aspnetcorev2.pdb" target="contentFiles\any\any\x64" />
|
||||
<file src="src\AspNetCoreModuleV2\OutOfProcessRequestHandler\bin\$Configuration$\Win32\aspnetcorev2_outofprocess.pdb" target="contentFiles\any\any\x86\$AspNetCoreModuleOutOfProcessVersion$" />
|
||||
<file src="src\AspNetCoreModuleV2\OutOfProcessRequestHandler\bin\$Configuration$\x64\aspnetcorev2_outofprocess.pdb" target="contentFiles\any\any\x64\$AspNetCoreModuleOutOfProcessVersion$" />
|
||||
<file src="src\AspNetCoreModuleV2\InProcessRequestHandler\bin\$Configuration$\Win32\aspnetcorev2_inprocess.pdb" target="contentFiles\any\any\x86" />
|
||||
<file src="src\AspNetCoreModuleV2\InProcessRequestHandler\bin\$Configuration$\x64\aspnetcorev2_inprocess.pdb" target="contentFiles\any\any\x64" />
|
||||
|
||||
<file src="src\AspNetCoreModuleV2\AspNetCore\aspnetcore_schema_v2.xml"/>
|
||||
<file src="src\AspNetCoreModuleV2\AspNetCore\ancm.mof" />
|
||||
<file src="LICENSE.txt"/>
|
||||
<file src="$AspNetCoreModuleV2Props$" target="build\" />
|
||||
</files>
|
||||
</package>
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
<Project>
|
||||
|
||||
<PropertyGroup>
|
||||
<AspNetCoreModuleOutOfProcessVersion>${AspNetCoreModuleOutOfProcessVersion}</AspNetCoreModuleOutOfProcessVersion>
|
||||
<AspNetCoreModuleX64Location>$(MSBuildThisFileDirectory)..\contentFiles\any\any\x64\aspnetcorev2.dll</AspNetCoreModuleX64Location>
|
||||
<AspNetCoreModuleX86Location>$(MSBuildThisFileDirectory)..\contentFiles\any\any\x86\aspnetcorev2.dll</AspNetCoreModuleX86Location>
|
||||
<InProcessRequestHandlerX64Location>$(MSBuildThisFileDirectory)..\contentFiles\any\any\x64\aspnetcorev2_inprocess.dll</InProcessRequestHandlerX64Location>
|
||||
<InProcessRequestHandlerX86Location>$(MSBuildThisFileDirectory)..\contentFiles\any\any\x86\aspnetcorev2_inprocess.dll</InProcessRequestHandlerX86Location>
|
||||
<OutOfProcessRequestHandlerX64Location>$(MSBuildThisFileDirectory)..\contentFiles\any\any\x64\$(AspNetCoreModuleOutOfProcessVersion)\aspnetcorev2_outofprocess.dll</OutOfProcessRequestHandlerX64Location>
|
||||
<OutOfProcessRequestHandlerX86Location>$(MSBuildThisFileDirectory)..\contentFiles\any\any\x86\$(AspNetCoreModuleOutOfProcessVersion)\aspnetcorev2_outofprocess.dll</OutOfProcessRequestHandlerX86Location>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFrameworks>netcoreapp2.1;net461</TargetFrameworks>
|
||||
<TargetFrameworks>netcoreapp2.2;net461</TargetFrameworks>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
|||
|
|
@ -1,3 +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;
|
||||
using System.Linq;
|
||||
using Microsoft.AspNetCore.Authentication;
|
||||
|
|
|
|||
|
|
@ -9,11 +9,11 @@
|
|||
</handlers>
|
||||
<!-- This set of attributes are used for launching the sample using IISExpress via Visual Studio tooling -->
|
||||
<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false"/>
|
||||
|
||||
|
||||
<!-- This set of attributes are used for launching the sample for full CLR (net46) without Visual Studio tooling
|
||||
<aspNetCore processPath=".\IISSample.exe" arguments="" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false"/>
|
||||
-->
|
||||
|
||||
|
||||
<!-- This set of attributes are used for launching the sample for Core CLR (netcoreapp2.0) without Visual Studio tooling
|
||||
<aspNetCore processPath="dotnet" arguments=".\IISSample.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false"/>
|
||||
-->
|
||||
|
|
|
|||
|
|
@ -1,20 +1,24 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||
|
||||
<Import Project="..\..\build\testsite.props" />
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netcoreapp2.1</TargetFramework>
|
||||
<TargetFramework>netcoreapp2.2</TargetFramework>
|
||||
<InProcessTestSite>true</InProcessTestSite>
|
||||
</PropertyGroup>
|
||||
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\src\Microsoft.AspNetCore.Server.IIS\Microsoft.AspNetCore.Server.IIS.csproj" />
|
||||
<ProjectReference Include="..\..\src\Microsoft.AspNetCore.Server.IISIntegration\Microsoft.AspNetCore.Server.IISIntegration.csproj" />
|
||||
<ProjectReference Include="..\..\src\Microsoft.AspNetCore.Server.IntegrationTesting.IIS\Microsoft.AspNetCore.Server.IntegrationTesting.IIS.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.AspNetCore.Hosting" Version="$(MicrosoftAspNetCoreHostingPackageVersion)" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Server.Kestrel" Version="$(MicrosoftAspNetCoreServerKestrelPackageVersion)" />
|
||||
</ItemGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<AspNetCoreModuleHostingModel>inprocess</AspNetCoreModuleHostingModel>
|
||||
<AspNetCoreHostingModel>inprocess</AspNetCoreHostingModel>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
|
|
|
|||
|
|
@ -12,13 +12,15 @@
|
|||
"commandName": "Executable",
|
||||
"executablePath": "$(IISExpressPath)",
|
||||
"commandLineArgs": "$(IISExpressArguments)",
|
||||
"nativeDebugging": true,
|
||||
"environmentVariables": {
|
||||
"IIS_SITE_PATH": "$(MSBuildThisFileDirectory)",
|
||||
"ANCM_PATH": "$(TargetDir)$(AncmPath)",
|
||||
"ANCM_PATH": "$(AspNetCoreModuleV1ShimDll)",
|
||||
"ANCMV2_PATH": "$(AspNetCoreModuleV2ShimDll)",
|
||||
"ANCM_OUTOFPROCESS_HANDLER": "$(AspNetCoreModuleV2OutOfProcessHandlerDll)",
|
||||
"LAUNCHER_ARGS": "$(TargetPath)",
|
||||
"ASPNETCORE_ENVIRONMENT": "Development",
|
||||
"LAUNCHER_PATH": "$(DotNetPath)"
|
||||
"LAUNCHER_PATH": "$(DotNetPath)",
|
||||
"ASPNETCORE_MODULE_DEBUG": "console"
|
||||
}
|
||||
},
|
||||
"ANCM IIS": {
|
||||
|
|
@ -27,10 +29,13 @@
|
|||
"commandLineArgs": "$(IISArguments)",
|
||||
"environmentVariables": {
|
||||
"IIS_SITE_PATH": "$(MSBuildThisFileDirectory)",
|
||||
"ANCM_PATH": "$(TargetDir)$(AncmPath)",
|
||||
"ANCM_PATH": "$(AspNetCoreModuleV1ShimDll)",
|
||||
"ANCMV2_PATH": "$(AspNetCoreModuleV2ShimDll)",
|
||||
"ASPNETCORE_MODULE_OUTOFPROCESS_HANDLER": "$(AspNetCoreModuleV2OutOfProcessHandlerDll)",
|
||||
"LAUNCHER_ARGS": "$(TargetPath)",
|
||||
"ASPNETCORE_ENVIRONMENT": "Development",
|
||||
"LAUNCHER_PATH": "$(DotNetPath)"
|
||||
"LAUNCHER_PATH": "$(DotNetPath)",
|
||||
"ASPNETCORE_MODULE_DEBUG": "console"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,14 +8,21 @@ using Microsoft.AspNetCore.Builder;
|
|||
using Microsoft.AspNetCore.Hosting;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Http.Features;
|
||||
using Microsoft.AspNetCore.Server.IISIntegration;
|
||||
using Microsoft.AspNetCore.Server.IIS;
|
||||
|
||||
namespace NativeIISSample
|
||||
{
|
||||
public class Startup
|
||||
{
|
||||
private readonly IAuthenticationSchemeProvider _authSchemeProvider;
|
||||
|
||||
public Startup(IAuthenticationSchemeProvider authSchemeProvider = null)
|
||||
{
|
||||
_authSchemeProvider = authSchemeProvider;
|
||||
}
|
||||
|
||||
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
|
||||
public void Configure(IApplicationBuilder app, IHostingEnvironment env, IAuthenticationSchemeProvider authSchemeProvider)
|
||||
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
|
||||
{
|
||||
app.Run(async (context) =>
|
||||
{
|
||||
|
|
@ -41,8 +48,11 @@ namespace NativeIISSample
|
|||
await context.Response.WriteAsync(Environment.NewLine);
|
||||
|
||||
await context.Response.WriteAsync("User: " + context.User.Identity.Name + Environment.NewLine);
|
||||
var scheme = await authSchemeProvider.GetSchemeAsync(IISDefaults.AuthenticationScheme);
|
||||
await context.Response.WriteAsync("DisplayName: " + scheme?.DisplayName + Environment.NewLine);
|
||||
if (_authSchemeProvider != null)
|
||||
{
|
||||
var scheme = await _authSchemeProvider.GetSchemeAsync(IISServerDefaults.AuthenticationScheme);
|
||||
await context.Response.WriteAsync("DisplayName: " + scheme?.DisplayName + Environment.NewLine);
|
||||
}
|
||||
|
||||
await context.Response.WriteAsync(Environment.NewLine);
|
||||
|
||||
|
|
@ -65,6 +75,12 @@ namespace NativeIISSample
|
|||
// accessing IIS server variables
|
||||
await context.Response.WriteAsync("Server Variables:" + Environment.NewLine);
|
||||
|
||||
foreach (var varName in IISServerVarNames)
|
||||
{
|
||||
await context.Response.WriteAsync(varName + ": " + context.GetIISServerVariable(varName) + Environment.NewLine);
|
||||
}
|
||||
|
||||
await context.Response.WriteAsync(Environment.NewLine);
|
||||
if (context.Features.Get<IHttpUpgradeFeature>() != null)
|
||||
{
|
||||
await context.Response.WriteAsync("Websocket feature is enabled.");
|
||||
|
|
@ -75,9 +91,25 @@ namespace NativeIISSample
|
|||
}
|
||||
});
|
||||
}
|
||||
|
||||
private static readonly string[] IISServerVarNames =
|
||||
{
|
||||
"AUTH_TYPE",
|
||||
"AUTH_USER",
|
||||
"CONTENT_TYPE",
|
||||
"HTTP_HOST",
|
||||
"HTTPS",
|
||||
"REMOTE_PORT",
|
||||
"REMOTE_USER",
|
||||
"REQUEST_METHOD",
|
||||
"WEBSOCKET_VERSION"
|
||||
};
|
||||
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
var host = new WebHostBuilder()
|
||||
.UseKestrel()
|
||||
.UseIIS()
|
||||
.UseIISIntegration()
|
||||
.UseStartup<Startup>()
|
||||
.Build();
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
<configuration>
|
||||
<system.webServer>
|
||||
<handlers>
|
||||
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
|
||||
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
|
||||
</handlers>
|
||||
<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" forwardWindowsAuthToken="false" stdoutLogEnabled="false" hostingModel="inprocess"/>
|
||||
</system.webServer>
|
||||
|
|
|
|||
|
|
@ -213,14 +213,6 @@
|
|||
<ItemGroup>
|
||||
<None Include="Source.def" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="aspnetcore_schema.xml">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Xml Include="aspnetcore_schema.xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="src\application.cxx" />
|
||||
<ClCompile Include="src\applicationmanager.cxx" />
|
||||
|
|
|
|||
|
|
@ -11,10 +11,11 @@
|
|||
#define ASPNETCORE_EVENT_RAPID_FAIL_COUNT_EXCEEDED_MSG L"Maximum rapid fail count per minute of '%d' exceeded."
|
||||
#define ASPNETCORE_EVENT_PROCESS_START_INTERNAL_ERROR_MSG L"Application '%s' failed to parse processPath and arguments due to internal error, ErrorCode = '0x%x'."
|
||||
#define ASPNETCORE_EVENT_PROCESS_START_POSTCREATE_ERROR_MSG L"Application '%s' with physical root '%s' created process with commandline '%s'but failed to get its status, ErrorCode = '0x%x'."
|
||||
#define ASPNETCORE_EVENT_PROCESS_START_ERROR_MSG L"Application '%s' with physical root '%s' failed to start process with commandline '%s', ErrorCode = '0x%x : %x."
|
||||
#define ASPNETCORE_EVENT_PROCESS_START_ERROR_MSG L"Application '%s' with physical root '%s' failed to start process with commandline '%s', ErrorCode = '0x%x' : %x."
|
||||
#define ASPNETCORE_EVENT_PROCESS_START_WRONGPORT_ERROR_MSG L"Application '%s' with physical root '%s' created process with commandline '%s' but failed to listen on the given port '%d'"
|
||||
#define ASPNETCORE_EVENT_PROCESS_START_NOTREADY_ERROR_MSG L"Application '%s' with physical root '%s' created process with commandline '%s' but either crashed or did not reponse or did not listen on the given port '%d', ErrorCode = '0x%x'"
|
||||
#define ASPNETCORE_EVENT_INVALID_STDOUT_LOG_FILE_MSG L"Warning: Could not create stdoutLogFile %s, ErrorCode = %d."
|
||||
#define ASPNETCORE_EVENT_GRACEFUL_SHUTDOWN_FAILURE_MSG L"Failed to gracefully shutdown process '%d'."
|
||||
#define ASPNETCORE_EVENT_SENT_SHUTDOWN_HTTP_REQUEST_MSG L"Sent shutdown HTTP message to process '%d' and received http status '%d'."
|
||||
#define ASPNETCORE_EVENT_RECYCLE_APPOFFLINE_MSG L"App_offline file '%s' was detected."
|
||||
#define ASPNETCORE_EVENT_PROCESS_SHUTDOWN_MSG L"Application '%s' with physical root '%s' shut down process with Id '%d' listening on port '%d'"
|
||||
|
|
|
|||
|
|
@ -67,6 +67,14 @@ public:
|
|||
return m_fReady;
|
||||
}
|
||||
|
||||
BOOL
|
||||
IsDebuggerAttached(
|
||||
VOID
|
||||
)
|
||||
{
|
||||
return m_fDebuggerAttached;
|
||||
}
|
||||
|
||||
VOID
|
||||
StopProcess(
|
||||
VOID
|
||||
|
|
@ -280,6 +288,7 @@ private:
|
|||
BOOL m_fWindowsAuthEnabled;
|
||||
BOOL m_fBasicAuthEnabled;
|
||||
BOOL m_fAnonymousAuthEnabled;
|
||||
BOOL m_fDebuggerAttached;
|
||||
|
||||
STTIMER m_Timer;
|
||||
SOCKET m_socket;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
;/*++
|
||||
;
|
||||
;Copyright (c) 2014 Microsoft Corporation
|
||||
; Copyright (c) .NET Foundation. All rights reserved.
|
||||
; Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
;
|
||||
;Module Name:
|
||||
;
|
||||
|
|
@ -73,6 +74,12 @@ Language=English
|
|||
%1
|
||||
.
|
||||
|
||||
Messageid=1030
|
||||
SymbolicName=ASPNETCORE_EVENT_PROCESS_SHUTDOWN
|
||||
Language=English
|
||||
%1
|
||||
.
|
||||
|
||||
;
|
||||
;#endif // _ASPNETCORE_MODULE_MSG_H_
|
||||
;
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
|
||||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||
|
||||
#define FileDescription "IIS AspNetCore Module. Commit: " CommitHash
|
||||
#define FileDescription "IIS ASP.NET Core Module. Commit: " CommitHash
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
|
|
@ -76,11 +76,11 @@ BEGIN
|
|||
BEGIN
|
||||
BLOCK "040904b0"
|
||||
BEGIN
|
||||
VALUE "CompanyName", "Microsoft"
|
||||
VALUE "CompanyName", "Microsoft Corporation"
|
||||
VALUE "FileDescription", FileDescription
|
||||
VALUE "FileVersion", FileVersionStr
|
||||
VALUE "InternalName", "aspnetcore.dll"
|
||||
VALUE "LegalCopyright", "Copyright (C) 2016"
|
||||
VALUE "InternalName", "aspnetcore"
|
||||
VALUE "LegalCopyright", "Copyright (C) Microsoft Corporation"
|
||||
VALUE "OriginalFilename", "aspnetcore.dll"
|
||||
VALUE "ProductName", "ASP.NET Core Module"
|
||||
VALUE "ProductVersion", ProductVersionStr
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ FILE_WATCHER::Create(
|
|||
|
||||
m_hChangeNotificationThread = CreateThread(NULL,
|
||||
0,
|
||||
ChangeNotificationThread,
|
||||
(LPTHREAD_START_ROUTINE)ChangeNotificationThread,
|
||||
this,
|
||||
0,
|
||||
NULL);
|
||||
|
|
|
|||
|
|
@ -883,6 +883,7 @@ FORWARDING_HANDLER::CreateWinHttpRequest(
|
|||
HRESULT hr = S_OK;
|
||||
PCWSTR pszVersion = NULL;
|
||||
PCSTR pszVerb;
|
||||
DWORD dwTimeout = INFINITE;
|
||||
STACK_STRU(strVerb, 32);
|
||||
|
||||
//
|
||||
|
|
@ -923,11 +924,16 @@ FORWARDING_HANDLER::CreateWinHttpRequest(
|
|||
goto Finished;
|
||||
}
|
||||
|
||||
if (!pServerProcess->IsDebuggerAttached())
|
||||
{
|
||||
dwTimeout = pProtocol->QueryTimeout();
|
||||
}
|
||||
|
||||
if (!WinHttpSetTimeouts(m_hRequest,
|
||||
pProtocol->QueryTimeout(),
|
||||
pProtocol->QueryTimeout(),
|
||||
pProtocol->QueryTimeout(),
|
||||
pProtocol->QueryTimeout()))
|
||||
dwTimeout, //resolve timeout
|
||||
dwTimeout, // connect timeout
|
||||
dwTimeout, // send timeout
|
||||
dwTimeout)) // receive timeout
|
||||
{
|
||||
hr = HRESULT_FROM_WIN32(GetLastError());
|
||||
goto Finished;
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@ SERVER_PROCESS::Initialize(
|
|||
m_fBasicAuthEnabled = fBasicAuthEnabled;
|
||||
m_fAnonymousAuthEnabled = fAnonymousAuthEnabled;
|
||||
m_pProcessManager->ReferenceProcessManager();
|
||||
m_fDebuggerAttached = FALSE;
|
||||
|
||||
if (FAILED (hr = m_ProcessPath.Copy(*pszProcessExePath)) ||
|
||||
FAILED (hr = m_struLogFile.Copy(*pstruStdoutLogFile))||
|
||||
|
|
@ -131,7 +132,7 @@ SERVER_PROCESS::SetupListenPort(
|
|||
pEnvironmentVarTable->FindKey(ASPNETCORE_PORT_ENV_STR, &pEntry);
|
||||
if (pEntry != NULL)
|
||||
{
|
||||
if (pEntry->QueryValue() != NULL || pEntry->QueryValue()[0] != L'\0')
|
||||
if (pEntry->QueryValue() != NULL && pEntry->QueryValue()[0] != L'\0')
|
||||
{
|
||||
m_dwPort = (DWORD)_wtoi(pEntry->QueryValue());
|
||||
if(m_dwPort >MAX_PORT || m_dwPort < MIN_PORT)
|
||||
|
|
@ -149,6 +150,8 @@ SERVER_PROCESS::SetupListenPort(
|
|||
// user set the env variable but did not give value, let's set it up
|
||||
//
|
||||
pEnvironmentVarTable->DeleteKey(ASPNETCORE_PORT_ENV_STR);
|
||||
pEntry->Dereference();
|
||||
pEntry = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -881,6 +884,7 @@ SERVER_PROCESS::PostStartCheck(
|
|||
m_fReady = TRUE;
|
||||
|
||||
Finished:
|
||||
m_fDebuggerAttached = fDebuggerAttached;
|
||||
return hr;
|
||||
}
|
||||
|
||||
|
|
@ -1066,8 +1070,8 @@ Finished:
|
|||
{
|
||||
if (!fDonePrepareCommandLine)
|
||||
strEventMsg.SafeSnwprintf(
|
||||
m_struAppFullPath.QueryStr(),
|
||||
ASPNETCORE_EVENT_PROCESS_START_INTERNAL_ERROR_MSG,
|
||||
m_struAppFullPath.QueryStr(),
|
||||
hr);
|
||||
else
|
||||
strEventMsg.SafeSnwprintf(
|
||||
|
|
@ -1329,10 +1333,10 @@ SERVER_PROCESS::CheckIfServerIsUp(
|
|||
)
|
||||
{
|
||||
HRESULT hr = S_OK;
|
||||
DWORD dwResult = 0;
|
||||
DWORD dwResult = ERROR_INSUFFICIENT_BUFFER;
|
||||
MIB_TCPTABLE_OWNER_PID *pTCPInfo = NULL;
|
||||
MIB_TCPROW_OWNER_PID *pOwner = NULL;
|
||||
DWORD dwSize = 0;
|
||||
DWORD dwSize = 1000;
|
||||
int iResult = 0;
|
||||
SOCKADDR_IN sockAddr;
|
||||
SOCKET socketCheck = INVALID_SOCKET;
|
||||
|
|
@ -1348,36 +1352,36 @@ SERVER_PROCESS::CheckIfServerIsUp(
|
|||
|
||||
if (!g_fNsiApiNotSupported)
|
||||
{
|
||||
dwResult = GetExtendedTcpTable(NULL,
|
||||
&dwSize,
|
||||
FALSE,
|
||||
AF_INET,
|
||||
TCP_TABLE_OWNER_PID_LISTENER,
|
||||
0);
|
||||
|
||||
if (dwResult != NO_ERROR && dwResult != ERROR_INSUFFICIENT_BUFFER)
|
||||
while (dwResult == ERROR_INSUFFICIENT_BUFFER)
|
||||
{
|
||||
hr = HRESULT_FROM_WIN32(dwResult);
|
||||
goto Finished;
|
||||
}
|
||||
// Increase the buffer size with additional space, MIB_TCPROW 20 bytes
|
||||
// New entries may be added by other processes before calling GetExtendedTcpTable
|
||||
dwSize += 200;
|
||||
|
||||
pTCPInfo = (MIB_TCPTABLE_OWNER_PID*)HeapAlloc(GetProcessHeap(), 0, dwSize);
|
||||
if (pTCPInfo == NULL)
|
||||
{
|
||||
hr = E_OUTOFMEMORY;
|
||||
goto Finished;
|
||||
}
|
||||
if (pTCPInfo != NULL)
|
||||
{
|
||||
HeapFree(GetProcessHeap(), 0, pTCPInfo);
|
||||
}
|
||||
|
||||
dwResult = GetExtendedTcpTable(pTCPInfo,
|
||||
&dwSize,
|
||||
FALSE,
|
||||
AF_INET,
|
||||
TCP_TABLE_OWNER_PID_LISTENER,
|
||||
0);
|
||||
if (dwResult != NO_ERROR)
|
||||
{
|
||||
hr = HRESULT_FROM_WIN32(dwResult);
|
||||
goto Finished;
|
||||
pTCPInfo = (MIB_TCPTABLE_OWNER_PID*)HeapAlloc(GetProcessHeap(), 0, dwSize);
|
||||
if (pTCPInfo == NULL)
|
||||
{
|
||||
hr = E_OUTOFMEMORY;
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
dwResult = GetExtendedTcpTable(pTCPInfo,
|
||||
&dwSize,
|
||||
FALSE,
|
||||
AF_INET,
|
||||
TCP_TABLE_OWNER_PID_LISTENER,
|
||||
0);
|
||||
|
||||
if (dwResult != NO_ERROR && dwResult != ERROR_INSUFFICIENT_BUFFER)
|
||||
{
|
||||
hr = HRESULT_FROM_WIN32(dwResult);
|
||||
goto Finished;
|
||||
}
|
||||
}
|
||||
|
||||
// iterate pTcpInfo struct to find PID/PORT entry
|
||||
|
|
@ -1422,6 +1426,12 @@ SERVER_PROCESS::CheckIfServerIsUp(
|
|||
if (iResult == SOCKET_ERROR)
|
||||
{
|
||||
hr = HRESULT_FROM_WIN32(WSAGetLastError());
|
||||
if (hr == HRESULT_FROM_WIN32(WSAECONNREFUSED))
|
||||
{
|
||||
// WSAECONNREFUSED means no application listen on the given port.
|
||||
// This is not a failure. Reset the hresult to S_OK and return fReady to false
|
||||
hr = S_OK;
|
||||
}
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
|
|
@ -1484,7 +1494,7 @@ SERVER_PROCESS::SendSignal(
|
|||
goto Finished;
|
||||
}
|
||||
|
||||
if (WaitForSingleObject(m_hShutdownHandle, m_dwShutdownTimeLimitInMS) != WAIT_OBJECT_0)
|
||||
if (WaitForSingleObject(m_hShutdownHandle, m_fDebuggerAttached ? INFINITE : m_dwShutdownTimeLimitInMS) != WAIT_OBJECT_0)
|
||||
{
|
||||
hr = HRESULT_FROM_WIN32(ERROR_TIMEOUT);
|
||||
goto Finished;
|
||||
|
|
@ -2006,7 +2016,9 @@ SERVER_PROCESS::~SERVER_PROCESS()
|
|||
InterlockedDecrement(&g_dwActiveServerProcesses);
|
||||
}
|
||||
|
||||
VOID
|
||||
static
|
||||
VOID
|
||||
CALLBACK
|
||||
ProcessHandleCallback(
|
||||
_In_ PVOID pContext,
|
||||
_In_ BOOL
|
||||
|
|
@ -2064,12 +2076,36 @@ SERVER_PROCESS::HandleProcessExit()
|
|||
HRESULT hr = S_OK;
|
||||
BOOL fReady = FALSE;
|
||||
DWORD dwProcessId = 0;
|
||||
LPCWSTR apsz[1];
|
||||
STACK_STRU(strEventMsg, 256);
|
||||
|
||||
if (InterlockedCompareExchange(&m_lStopping, 1L, 0L) == 0L)
|
||||
{
|
||||
CheckIfServerIsUp(m_dwPort, &dwProcessId, &fReady);
|
||||
|
||||
if (!fReady)
|
||||
{
|
||||
if (SUCCEEDED(strEventMsg.SafeSnwprintf(
|
||||
ASPNETCORE_EVENT_PROCESS_SHUTDOWN_MSG,
|
||||
m_struAppFullPath.QueryStr(),
|
||||
m_pszRootApplicationPath.QueryStr(),
|
||||
m_dwProcessId,
|
||||
m_dwPort)))
|
||||
{
|
||||
apsz[0] = strEventMsg.QueryStr();
|
||||
if (FORWARDING_HANDLER::QueryEventLog() != NULL)
|
||||
{
|
||||
ReportEventW(FORWARDING_HANDLER::QueryEventLog(),
|
||||
EVENTLOG_INFORMATION_TYPE,
|
||||
0,
|
||||
ASPNETCORE_EVENT_PROCESS_SHUTDOWN,
|
||||
NULL,
|
||||
1,
|
||||
0,
|
||||
apsz,
|
||||
NULL);
|
||||
}
|
||||
}
|
||||
m_pProcessManager->ShutdownProcess(this);
|
||||
}
|
||||
|
||||
|
|
@ -2348,4 +2384,4 @@ SERVER_PROCESS::TerminateBackendProcess(
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,62 @@
|
|||
// 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.
|
||||
|
||||
#include "AppOfflineApplication.h"
|
||||
|
||||
#include "HandleWrapper.h"
|
||||
#include "AppOfflineHandler.h"
|
||||
#include "exceptions.h"
|
||||
|
||||
HRESULT AppOfflineApplication::CreateHandler(IHttpContext* pHttpContext, IREQUEST_HANDLER** pRequestHandler)
|
||||
{
|
||||
try
|
||||
{
|
||||
auto handler = std::make_unique<AppOfflineHandler>(*pHttpContext, m_strAppOfflineContent);
|
||||
*pRequestHandler = handler.release();
|
||||
}
|
||||
CATCH_RETURN();
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT AppOfflineApplication::OnAppOfflineFound()
|
||||
{
|
||||
LARGE_INTEGER li = {};
|
||||
|
||||
HandleWrapper<InvalidHandleTraits> handle = CreateFile(m_appOfflineLocation.c_str(),
|
||||
GENERIC_READ,
|
||||
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
|
||||
nullptr,
|
||||
OPEN_EXISTING,
|
||||
FILE_ATTRIBUTE_NORMAL,
|
||||
nullptr);
|
||||
|
||||
RETURN_LAST_ERROR_IF(handle == INVALID_HANDLE_VALUE);
|
||||
|
||||
RETURN_LAST_ERROR_IF(!GetFileSizeEx(handle, &li));
|
||||
|
||||
if (li.HighPart != 0)
|
||||
{
|
||||
// > 4gb file size not supported
|
||||
// todo: log a warning at event log
|
||||
return E_INVALIDARG;
|
||||
}
|
||||
|
||||
if (li.LowPart > 0)
|
||||
{
|
||||
DWORD bytesRead = 0;
|
||||
std::string pszBuff(static_cast<size_t>(li.LowPart) + 1, '\0');
|
||||
|
||||
RETURN_LAST_ERROR_IF(!ReadFile(handle, pszBuff.data(), li.LowPart, &bytesRead, nullptr));
|
||||
pszBuff.resize(bytesRead);
|
||||
|
||||
m_strAppOfflineContent = pszBuff;
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
bool AppOfflineApplication::ShouldBeStarted(const IHttpApplication& pApplication)
|
||||
{
|
||||
return FileExists(GetAppOfflineLocation(pApplication));
|
||||
}
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
// 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.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "application.h"
|
||||
#include "requesthandler.h"
|
||||
#include "PollingAppOfflineApplication.h"
|
||||
|
||||
class AppOfflineApplication: public PollingAppOfflineApplication
|
||||
{
|
||||
public:
|
||||
AppOfflineApplication(const IHttpApplication& pApplication)
|
||||
: PollingAppOfflineApplication(pApplication, PollingAppOfflineApplicationMode::StopWhenRemoved)
|
||||
{
|
||||
CheckAppOffline();
|
||||
}
|
||||
|
||||
HRESULT CreateHandler(IHttpContext* pHttpContext, IREQUEST_HANDLER** pRequestHandler) override;
|
||||
|
||||
HRESULT OnAppOfflineFound() override;
|
||||
|
||||
static bool ShouldBeStarted(const IHttpApplication& pApplication);
|
||||
|
||||
private:
|
||||
std::string m_strAppOfflineContent;
|
||||
};
|
||||
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
// 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.
|
||||
|
||||
#include "AppOfflineHandler.h"
|
||||
|
||||
#include "HandleWrapper.h"
|
||||
|
||||
REQUEST_NOTIFICATION_STATUS AppOfflineHandler::ExecuteRequestHandler()
|
||||
{
|
||||
HTTP_DATA_CHUNK DataChunk {};
|
||||
auto pResponse = m_pContext.GetResponse();
|
||||
|
||||
DBG_ASSERT(pResponse);
|
||||
|
||||
// Ignore failure hresults as nothing we can do
|
||||
// Set fTrySkipCustomErrors to true as we want client see the offline content
|
||||
pResponse->SetStatus(503, "Service Unavailable", 0, S_OK, nullptr, TRUE);
|
||||
pResponse->SetHeader("Content-Type",
|
||||
"text/html",
|
||||
static_cast<USHORT>(strlen("text/html")),
|
||||
FALSE
|
||||
);
|
||||
|
||||
DataChunk.DataChunkType = HttpDataChunkFromMemory;
|
||||
DataChunk.FromMemory.pBuffer = m_strAppOfflineContent.data();
|
||||
DataChunk.FromMemory.BufferLength = static_cast<ULONG>(m_strAppOfflineContent.size());
|
||||
pResponse->WriteEntityChunkByReference(&DataChunk);
|
||||
|
||||
return REQUEST_NOTIFICATION_STATUS::RQ_NOTIFICATION_FINISH_REQUEST;
|
||||
}
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
// 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.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include "requesthandler.h"
|
||||
|
||||
class AppOfflineHandler: public REQUEST_HANDLER
|
||||
{
|
||||
public:
|
||||
AppOfflineHandler(IHttpContext& pContext, const std::string appOfflineContent)
|
||||
: REQUEST_HANDLER(pContext),
|
||||
m_pContext(pContext),
|
||||
m_strAppOfflineContent(appOfflineContent)
|
||||
{
|
||||
}
|
||||
|
||||
REQUEST_NOTIFICATION_STATUS ExecuteRequestHandler() override;
|
||||
|
||||
private:
|
||||
IHttpContext& m_pContext;
|
||||
std::string m_strAppOfflineContent;
|
||||
};
|
||||
|
|
@ -0,0 +1,53 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <array>
|
||||
#include <string>
|
||||
#include <utility>
|
||||
#include "iapplication.h"
|
||||
#include "HandleWrapper.h"
|
||||
|
||||
typedef
|
||||
HRESULT
|
||||
(WINAPI * PFN_ASPNETCORE_CREATE_APPLICATION)(
|
||||
_In_ IHttpServer *pServer,
|
||||
_In_ const IHttpApplication * pHttpApplication,
|
||||
_In_ APPLICATION_PARAMETER *pParameters,
|
||||
_In_ DWORD nParameters,
|
||||
_Out_ IAPPLICATION **pApplication
|
||||
);
|
||||
|
||||
class ApplicationFactory
|
||||
{
|
||||
public:
|
||||
ApplicationFactory(HMODULE hRequestHandlerDll, std::wstring location, PFN_ASPNETCORE_CREATE_APPLICATION pfnAspNetCoreCreateApplication) noexcept:
|
||||
m_pfnAspNetCoreCreateApplication(pfnAspNetCoreCreateApplication),
|
||||
m_location(std::move(location)),
|
||||
m_hRequestHandlerDll(hRequestHandlerDll)
|
||||
{
|
||||
}
|
||||
|
||||
HRESULT Execute(
|
||||
_In_ IHttpServer *pServer,
|
||||
_In_ IHttpContext *pHttpContext,
|
||||
_Outptr_ IAPPLICATION **pApplication) const
|
||||
{
|
||||
// m_location.data() is const ptr copy to local to get mutable pointer
|
||||
auto location = m_location;
|
||||
std::array<APPLICATION_PARAMETER, 2> parameters {
|
||||
{
|
||||
{"InProcessExeLocation", location.data()},
|
||||
{"TraceContext", pHttpContext->GetTraceContext()}
|
||||
}
|
||||
};
|
||||
|
||||
return m_pfnAspNetCoreCreateApplication(pServer, pHttpContext->GetApplication(), parameters.data(), static_cast<DWORD>(parameters.size()), pApplication);
|
||||
}
|
||||
|
||||
private:
|
||||
PFN_ASPNETCORE_CREATE_APPLICATION m_pfnAspNetCoreCreateApplication;
|
||||
std::wstring m_location;
|
||||
HandleWrapper<ModuleHandleTraits> m_hRequestHandlerDll;
|
||||
};
|
||||
|
|
@ -1,6 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="..\..\..\Build\Build.Settings" />
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
|
|
@ -24,7 +23,7 @@
|
|||
<Keyword>Win32Proj</Keyword>
|
||||
<RootNamespace>AspNetCoreModule</RootNamespace>
|
||||
<ProjectName>AspNetCore</ProjectName>
|
||||
<TargetName>aspnetcore</TargetName>
|
||||
<TargetName>aspnetcorev2</TargetName>
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
|
|
@ -56,6 +55,7 @@
|
|||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<Import Project="..\..\..\Build\Build.Settings" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
|
|
@ -76,13 +76,12 @@
|
|||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;ASPNETCOREMODULE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PrecompiledHeaderFile>precomp.hxx</PrecompiledHeaderFile>
|
||||
<PrecompiledHeaderFile>stdafx.h</PrecompiledHeaderFile>
|
||||
<PrecompiledHeaderOutputFile>$(IntDir)$(TargetName).pch</PrecompiledHeaderOutputFile>
|
||||
<AdditionalIncludeDirectories>..\IISLib;.\Inc</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>..\IISLib;.\Inc;..\CommonLib</AdditionalIncludeDirectories>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
|
|
@ -96,12 +95,16 @@
|
|||
<OmitDefaultLibName>true</OmitDefaultLibName>
|
||||
<CompileAs>CompileAsCpp</CompileAs>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||
<ForcedIncludeFiles>stdafx.h</ForcedIncludeFiles>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalDependencies>kernel32.lib;user32.lib;advapi32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;ahadmin.lib;rpcrt4.lib;winhttp.lib;pdh.lib;ws2_32.lib;wbemuuid.lib;iphlpapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalDependencies>kernel32.lib;user32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;ahadmin.lib;ws2_32.lib;iphlpapi.lib;version.lib</AdditionalDependencies>
|
||||
<ModuleDefinitionFile>Source.def</ModuleDefinitionFile>
|
||||
<LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
|
||||
</Link>
|
||||
<ResourceCompile>
|
||||
<AdditionalIncludeDirectories>..\Commonlib</AdditionalIncludeDirectories>
|
||||
|
|
@ -109,13 +112,12 @@
|
|||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;ASPNETCOREMODULE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PrecompiledHeaderFile>precomp.hxx</PrecompiledHeaderFile>
|
||||
<PrecompiledHeaderFile>stdafx.h</PrecompiledHeaderFile>
|
||||
<PrecompiledHeaderOutputFile>$(IntDir)$(TargetName).pch</PrecompiledHeaderOutputFile>
|
||||
<AdditionalIncludeDirectories>..\IISLib;.\Inc</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>..\IISLib;.\Inc;..\CommonLib</AdditionalIncludeDirectories>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
|
|
@ -128,13 +130,17 @@
|
|||
<RuntimeTypeInfo>false</RuntimeTypeInfo>
|
||||
<OmitDefaultLibName>true</OmitDefaultLibName>
|
||||
<CompileAs>CompileAsCpp</CompileAs>
|
||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||
<ForcedIncludeFiles>stdafx.h</ForcedIncludeFiles>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalDependencies>kernel32.lib;user32.lib;advapi32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;ahadmin.lib;rpcrt4.lib;winhttp.lib;pdh.lib;ws2_32.lib;wbemuuid.lib;iphlpapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalDependencies>kernel32.lib;user32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;ahadmin.lib;ws2_32.lib;iphlpapi.lib;version.lib</AdditionalDependencies>
|
||||
<ModuleDefinitionFile>Source.def</ModuleDefinitionFile>
|
||||
<LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
|
||||
</Link>
|
||||
<ResourceCompile>
|
||||
<AdditionalIncludeDirectories>..\Commonlib</AdditionalIncludeDirectories>
|
||||
|
|
@ -148,8 +154,8 @@
|
|||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;ASPNETCOREMODULE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>..\IISLib;inc</AdditionalIncludeDirectories>
|
||||
<PrecompiledHeaderFile>precomp.hxx</PrecompiledHeaderFile>
|
||||
<AdditionalIncludeDirectories>..\IISLib;.\Inc;..\CommonLib</AdditionalIncludeDirectories>
|
||||
<PrecompiledHeaderFile>stdafx.h</PrecompiledHeaderFile>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
|
|
@ -162,14 +168,19 @@
|
|||
<OmitDefaultLibName>true</OmitDefaultLibName>
|
||||
<CompileAs>CompileAsCpp</CompileAs>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||
<ForcedIncludeFiles>stdafx.h</ForcedIncludeFiles>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<GenerateDebugInformation>false</GenerateDebugInformation>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<AdditionalOptions>/NODEFAULTLIB:libucrt.lib /DEFAULTLIB:ucrt.lib %(AdditionalOptions)</AdditionalOptions>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<ModuleDefinitionFile>Source.def</ModuleDefinitionFile>
|
||||
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;ahadmin.lib;winhttp.lib;odbc32.lib;ws2_32.lib;odbccp32.lib;wbemuuid.lib;iphlpapi.lib;pdh.lib;rpcrt4.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalDependencies>kernel32.lib;user32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;ahadmin.lib;ws2_32.lib;iphlpapi.lib;version.lib</AdditionalDependencies>
|
||||
<LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
|
||||
</Link>
|
||||
<ResourceCompile>
|
||||
<AdditionalIncludeDirectories>..\Commonlib</AdditionalIncludeDirectories>
|
||||
|
|
@ -183,8 +194,8 @@
|
|||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;ASPNETCOREMODULE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PrecompiledHeaderFile>precomp.hxx</PrecompiledHeaderFile>
|
||||
<AdditionalIncludeDirectories>..\IISLib;inc</AdditionalIncludeDirectories>
|
||||
<PrecompiledHeaderFile>stdafx.h</PrecompiledHeaderFile>
|
||||
<AdditionalIncludeDirectories>..\IISLib;.\Inc;..\CommonLib</AdditionalIncludeDirectories>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
|
|
@ -197,35 +208,58 @@
|
|||
<OmitDefaultLibName>true</OmitDefaultLibName>
|
||||
<CompileAs>CompileAsCpp</CompileAs>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||
<ForcedIncludeFiles>stdafx.h</ForcedIncludeFiles>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<GenerateDebugInformation>false</GenerateDebugInformation>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<AdditionalOptions>/NODEFAULTLIB:libucrt.lib /DEFAULTLIB:ucrt.lib %(AdditionalOptions)</AdditionalOptions>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<ModuleDefinitionFile>Source.def</ModuleDefinitionFile>
|
||||
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;ahadmin.lib;rpcrt4.lib;winhttp.lib;pdh.lib;ws2_32.lib;wbemuuid.lib;iphlpapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalDependencies>kernel32.lib;user32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;ahadmin.lib;ws2_32.lib;iphlpapi.lib;version.lib</AdditionalDependencies>
|
||||
<LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
|
||||
</Link>
|
||||
<ResourceCompile>
|
||||
<AdditionalIncludeDirectories>..\Commonlib</AdditionalIncludeDirectories>
|
||||
</ResourceCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="Inc\applicationinfo.h" />
|
||||
<ClInclude Include="Inc\appoffline.h" />
|
||||
<ClInclude Include="inc\globalmodule.h" />
|
||||
<ClInclude Include="Inc\applicationmanager.h" />
|
||||
<ClInclude Include="Inc\filewatcher.h" />
|
||||
<ClInclude Include="Inc\proxymodule.h" />
|
||||
<ClInclude Include="Src\precomp.hxx" />
|
||||
<ClInclude Include="ApplicationFactory.h" />
|
||||
<ClInclude Include="applicationinfo.h" />
|
||||
<ClInclude Include="AppOfflineApplication.h" />
|
||||
<ClInclude Include="AppOfflineHandler.h" />
|
||||
<ClInclude Include="DisconnectHandler.h" />
|
||||
<ClInclude Include="PollingAppOfflineApplication.h" />
|
||||
<ClInclude Include="ServerErrorApplication.h" />
|
||||
<ClInclude Include="ShimOptions.h" />
|
||||
<ClInclude Include="globalmodule.h" />
|
||||
<ClInclude Include="resource.h" />
|
||||
<ClInclude Include="applicationmanager.h" />
|
||||
<ClInclude Include="HandlerResolver.h" />
|
||||
<ClInclude Include="proxymodule.h" />
|
||||
<ClInclude Include="stdafx.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="Src\applicationinfo.cpp" />
|
||||
<ClCompile Include="Src\applicationmanager.cxx" />
|
||||
<ClCompile Include="Src\dllmain.cpp" />
|
||||
<ClCompile Include="Src\filewatcher.cxx" />
|
||||
<ClCompile Include="src\globalmodule.cpp" />
|
||||
<ClCompile Include="Src\proxymodule.cxx" />
|
||||
<ClCompile Include="applicationinfo.cpp" />
|
||||
<ClCompile Include="applicationmanager.cpp" />
|
||||
<ClCompile Include="AppOfflineApplication.cpp" />
|
||||
<ClCompile Include="AppOfflineHandler.cpp" />
|
||||
<ClCompile Include="DisconnectHandler.cpp" />
|
||||
<ClCompile Include="PollingAppOfflineApplication.cpp" />
|
||||
<ClCompile Include="ShimOptions.cpp" />
|
||||
<ClCompile Include="dllmain.cpp" />
|
||||
<ClCompile Include="globalmodule.cpp" />
|
||||
<ClCompile Include="HandlerResolver.cpp" />
|
||||
<ClCompile Include="stdafx.cpp">
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
|
||||
</ClCompile>
|
||||
<ClCompile Include="proxymodule.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\CommonLib\CommonLib.vcxproj">
|
||||
|
|
@ -243,7 +277,7 @@
|
|||
<ResourceCompile Include="aspnetcoremodule.rc" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="aspnetcore_schema.xml">
|
||||
<Content Include="aspnetcore_schema_v2.xml">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="ancm.mof">
|
||||
|
|
@ -251,7 +285,18 @@
|
|||
</Content>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Xml Include="aspnetcore_schema.xml" />
|
||||
<ResourceCompile Include="HtmlResponses.rc" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="InProcessShimStaticHtml.htm">
|
||||
<DeploymentContent>true</DeploymentContent>
|
||||
</None>
|
||||
<None Include="OutOfProcessShimStaticHtml.htm">
|
||||
<DeploymentContent>true</DeploymentContent>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Xml Include="aspnetcore_schema_v2.xml" />
|
||||
</ItemGroup>
|
||||
<Import Project="..\..\..\build\native.targets" />
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
|
|
|
|||
|
|
@ -0,0 +1,57 @@
|
|||
// 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.
|
||||
|
||||
#include "DisconnectHandler.h"
|
||||
#include "exceptions.h"
|
||||
#include "proxymodule.h"
|
||||
#include "SRWExclusiveLock.h"
|
||||
|
||||
void DisconnectHandler::NotifyDisconnect()
|
||||
{
|
||||
try
|
||||
{
|
||||
std::unique_ptr<IREQUEST_HANDLER, IREQUEST_HANDLER_DELETER> pHandler;
|
||||
{
|
||||
SRWExclusiveLock lock(m_handlerLock);
|
||||
m_pHandler.swap(pHandler);
|
||||
m_disconnectFired = true;
|
||||
}
|
||||
|
||||
if (pHandler != nullptr)
|
||||
{
|
||||
pHandler->NotifyDisconnect();
|
||||
}
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
OBSERVE_CAUGHT_EXCEPTION();
|
||||
}
|
||||
}
|
||||
|
||||
void DisconnectHandler::CleanupStoredContext() noexcept
|
||||
{
|
||||
delete this;
|
||||
}
|
||||
|
||||
void DisconnectHandler::SetHandler(std::unique_ptr<IREQUEST_HANDLER, IREQUEST_HANDLER_DELETER> handler)
|
||||
{
|
||||
IREQUEST_HANDLER* pHandler = nullptr;
|
||||
{
|
||||
SRWExclusiveLock lock(m_handlerLock);
|
||||
|
||||
handler.swap(m_pHandler);
|
||||
pHandler = m_pHandler.get();
|
||||
}
|
||||
|
||||
assert(pHandler != nullptr);
|
||||
|
||||
if (pHandler != nullptr && (m_disconnectFired || m_pHttpConnection != nullptr && !m_pHttpConnection->IsConnected()))
|
||||
{
|
||||
pHandler->NotifyDisconnect();
|
||||
}
|
||||
}
|
||||
|
||||
void DisconnectHandler::RemoveHandler() noexcept
|
||||
{
|
||||
m_pHandler = nullptr;
|
||||
}
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
// 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.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
#include "irequesthandler.h"
|
||||
|
||||
class ASPNET_CORE_PROXY_MODULE;
|
||||
|
||||
class DisconnectHandler final: public IHttpConnectionStoredContext
|
||||
{
|
||||
public:
|
||||
DisconnectHandler(IHttpConnection* pHttpConnection)
|
||||
: m_pHandler(nullptr), m_pHttpConnection(pHttpConnection), m_disconnectFired(false)
|
||||
{
|
||||
InitializeSRWLock(&m_handlerLock);
|
||||
}
|
||||
|
||||
virtual
|
||||
~DisconnectHandler()
|
||||
{
|
||||
RemoveHandler();
|
||||
}
|
||||
|
||||
void
|
||||
NotifyDisconnect() override;
|
||||
|
||||
void
|
||||
CleanupStoredContext() noexcept override;
|
||||
|
||||
void
|
||||
SetHandler(std::unique_ptr<IREQUEST_HANDLER, IREQUEST_HANDLER_DELETER> handler);
|
||||
|
||||
void RemoveHandler() noexcept;
|
||||
|
||||
private:
|
||||
SRWLOCK m_handlerLock {};
|
||||
std::unique_ptr<IREQUEST_HANDLER, IREQUEST_HANDLER_DELETER> m_pHandler;
|
||||
IHttpConnection* m_pHttpConnection;
|
||||
bool m_disconnectFired;
|
||||
};
|
||||
|
||||
|
|
@ -0,0 +1,326 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
|
||||
#include "HandlerResolver.h"
|
||||
#include "exceptions.h"
|
||||
#include "SRWExclusiveLock.h"
|
||||
#include "applicationinfo.h"
|
||||
#include "EventLog.h"
|
||||
#include "hostfxr_utility.h"
|
||||
#include "GlobalVersionUtility.h"
|
||||
#include "HandleWrapper.h"
|
||||
#include "file_utility.h"
|
||||
#include "LoggingHelpers.h"
|
||||
#include "resources.h"
|
||||
#include "ConfigurationLoadException.h"
|
||||
#include "WebConfigConfigurationSource.h"
|
||||
#include "ModuleHelpers.h"
|
||||
#include "BaseOutputManager.h"
|
||||
#include "Environment.h"
|
||||
|
||||
const PCWSTR HandlerResolver::s_pwzAspnetcoreInProcessRequestHandlerName = L"aspnetcorev2_inprocess.dll";
|
||||
const PCWSTR HandlerResolver::s_pwzAspnetcoreOutOfProcessRequestHandlerName = L"aspnetcorev2_outofprocess.dll";
|
||||
|
||||
HandlerResolver::HandlerResolver(HMODULE hModule, const IHttpServer &pServer)
|
||||
: m_hModule(hModule),
|
||||
m_pServer(pServer),
|
||||
m_loadedApplicationHostingModel(HOSTING_UNKNOWN)
|
||||
{
|
||||
InitializeSRWLock(&m_requestHandlerLoadLock);
|
||||
}
|
||||
|
||||
HRESULT
|
||||
HandlerResolver::LoadRequestHandlerAssembly(const IHttpApplication &pApplication, const ShimOptions& pConfiguration, std::unique_ptr<ApplicationFactory>& pApplicationFactory)
|
||||
{
|
||||
HRESULT hr = S_OK;
|
||||
PCWSTR pstrHandlerDllName = nullptr;
|
||||
bool preventUnload = false;
|
||||
if (pConfiguration.QueryHostingModel() == APP_HOSTING_MODEL::HOSTING_IN_PROCESS)
|
||||
{
|
||||
preventUnload = false;
|
||||
pstrHandlerDllName = s_pwzAspnetcoreInProcessRequestHandlerName;
|
||||
}
|
||||
else
|
||||
{
|
||||
// OutOfProcess handler is not able to handle unload correctly
|
||||
// It has code running after application.Stop exits
|
||||
preventUnload = true;
|
||||
pstrHandlerDllName = s_pwzAspnetcoreOutOfProcessRequestHandlerName;
|
||||
}
|
||||
HandleWrapper<ModuleHandleTraits> hRequestHandlerDll;
|
||||
std::wstring location;
|
||||
std::wstring handlerDllPath;
|
||||
// Try to see if RH is already loaded, use GetModuleHandleEx to increment ref count
|
||||
if (!GetModuleHandleEx(0, pstrHandlerDllName, &hRequestHandlerDll))
|
||||
{
|
||||
if (pConfiguration.QueryHostingModel() == APP_HOSTING_MODEL::HOSTING_IN_PROCESS)
|
||||
{
|
||||
std::unique_ptr<HOSTFXR_OPTIONS> options;
|
||||
std::unique_ptr<BaseOutputManager> outputManager;
|
||||
|
||||
RETURN_IF_FAILED(HOSTFXR_OPTIONS::Create(
|
||||
L"",
|
||||
pConfiguration.QueryProcessPath(),
|
||||
pApplication.GetApplicationPhysicalPath(),
|
||||
pConfiguration.QueryArguments(),
|
||||
options));
|
||||
|
||||
location = options->GetDotnetExeLocation();
|
||||
|
||||
RETURN_IF_FAILED(LoggingHelpers::CreateLoggingProvider(
|
||||
pConfiguration.QueryStdoutLogEnabled(),
|
||||
!m_pServer.IsCommandLineLaunch(),
|
||||
pConfiguration.QueryStdoutLogFile().c_str(),
|
||||
pApplication.GetApplicationPhysicalPath(),
|
||||
outputManager));
|
||||
|
||||
|
||||
hr = FindNativeAssemblyFromHostfxr(*options.get(), pstrHandlerDllName, handlerDllPath, outputManager.get());
|
||||
|
||||
if (FAILED_LOG(hr))
|
||||
{
|
||||
auto output = outputManager->GetStdOutContent();
|
||||
|
||||
EventLog::Error(
|
||||
ASPNETCORE_EVENT_GENERAL_ERROR,
|
||||
ASPNETCORE_EVENT_INPROCESS_RH_ERROR_MSG,
|
||||
output.c_str());
|
||||
return hr;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (FAILED_LOG(hr = FindNativeAssemblyFromGlobalLocation(pConfiguration, pstrHandlerDllName, handlerDllPath)))
|
||||
{
|
||||
EventLog::Error(
|
||||
ASPNETCORE_EVENT_OUT_OF_PROCESS_RH_MISSING,
|
||||
ASPNETCORE_EVENT_OUT_OF_PROCESS_RH_MISSING_MSG,
|
||||
handlerDllPath.empty() ? s_pwzAspnetcoreOutOfProcessRequestHandlerName : handlerDllPath.c_str());
|
||||
|
||||
return hr;
|
||||
}
|
||||
}
|
||||
|
||||
LOG_INFOF(L"Loading request handler: '%ls'", handlerDllPath.c_str());
|
||||
|
||||
hRequestHandlerDll = LoadLibrary(handlerDllPath.c_str());
|
||||
RETURN_LAST_ERROR_IF_NULL(hRequestHandlerDll);
|
||||
if (preventUnload)
|
||||
{
|
||||
// Pin module in memory
|
||||
GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_PIN, handlerDllPath.c_str(), &hRequestHandlerDll);
|
||||
}
|
||||
}
|
||||
|
||||
auto pfnAspNetCoreCreateApplication = ModuleHelpers::GetKnownProcAddress<PFN_ASPNETCORE_CREATE_APPLICATION>(hRequestHandlerDll, "CreateApplication");
|
||||
RETURN_LAST_ERROR_IF_NULL(pfnAspNetCoreCreateApplication);
|
||||
|
||||
pApplicationFactory = std::make_unique<ApplicationFactory>(hRequestHandlerDll.release(), location, pfnAspNetCoreCreateApplication);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT
|
||||
HandlerResolver::GetApplicationFactory(const IHttpApplication &pApplication, std::unique_ptr<ApplicationFactory>& pApplicationFactory, const ShimOptions& options)
|
||||
{
|
||||
SRWExclusiveLock lock(m_requestHandlerLoadLock);
|
||||
if (m_loadedApplicationHostingModel != HOSTING_UNKNOWN)
|
||||
{
|
||||
// Mixed hosting models
|
||||
if (m_loadedApplicationHostingModel != options.QueryHostingModel())
|
||||
{
|
||||
EventLog::Error(
|
||||
ASPNETCORE_EVENT_MIXED_HOSTING_MODEL_ERROR,
|
||||
ASPNETCORE_EVENT_MIXED_HOSTING_MODEL_ERROR_MSG,
|
||||
pApplication.GetApplicationId(),
|
||||
options.QueryHostingModel());
|
||||
|
||||
return E_FAIL;
|
||||
}
|
||||
// Multiple in-process apps
|
||||
if (m_loadedApplicationHostingModel == HOSTING_IN_PROCESS && m_loadedApplicationId != pApplication.GetApplicationId())
|
||||
{
|
||||
EventLog::Error(
|
||||
ASPNETCORE_EVENT_DUPLICATED_INPROCESS_APP,
|
||||
ASPNETCORE_EVENT_DUPLICATED_INPROCESS_APP_MSG,
|
||||
pApplication.GetApplicationId());
|
||||
|
||||
return E_FAIL;
|
||||
}
|
||||
}
|
||||
|
||||
m_loadedApplicationHostingModel = options.QueryHostingModel();
|
||||
m_loadedApplicationId = pApplication.GetApplicationId();
|
||||
RETURN_IF_FAILED(LoadRequestHandlerAssembly(pApplication, options, pApplicationFactory));
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
void HandlerResolver::ResetHostingModel()
|
||||
{
|
||||
SRWExclusiveLock lock(m_requestHandlerLoadLock);
|
||||
|
||||
m_loadedApplicationHostingModel = APP_HOSTING_MODEL::HOSTING_UNKNOWN;
|
||||
m_loadedApplicationId.resize(0);
|
||||
}
|
||||
|
||||
HRESULT
|
||||
HandlerResolver::FindNativeAssemblyFromGlobalLocation(
|
||||
const ShimOptions& pConfiguration,
|
||||
PCWSTR pstrHandlerDllName,
|
||||
std::wstring& handlerDllPath
|
||||
)
|
||||
{
|
||||
try
|
||||
{
|
||||
auto handlerPath = Environment::GetEnvironmentVariableValue(L"ASPNETCORE_MODULE_OUTOFPROCESS_HANDLER");
|
||||
if (handlerPath.has_value() && std::filesystem::is_regular_file(handlerPath.value()))
|
||||
{
|
||||
handlerDllPath = handlerPath.value();
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
std::wstring modulePath = GlobalVersionUtility::GetModuleName(m_hModule);
|
||||
|
||||
modulePath = GlobalVersionUtility::RemoveFileNameFromFolderPath(modulePath);
|
||||
|
||||
handlerDllPath = GlobalVersionUtility::GetGlobalRequestHandlerPath(modulePath.c_str(),
|
||||
pConfiguration.QueryHandlerVersion().c_str(),
|
||||
pstrHandlerDllName
|
||||
);
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
EventLog::Info(
|
||||
ASPNETCORE_EVENT_OUT_OF_PROCESS_RH_MISSING,
|
||||
ASPNETCORE_EVENT_OUT_OF_PROCESS_RH_MISSING_MSG,
|
||||
pstrHandlerDllName);
|
||||
|
||||
return OBSERVE_CAUGHT_EXCEPTION();
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
//
|
||||
// Tries to find aspnetcorerh.dll from the application
|
||||
// Calls into hostfxr.dll to find it.
|
||||
// Will leave hostfxr.dll loaded as it will be used again to call hostfxr_main.
|
||||
//
|
||||
HRESULT
|
||||
HandlerResolver::FindNativeAssemblyFromHostfxr(
|
||||
const HOSTFXR_OPTIONS& hostfxrOptions,
|
||||
PCWSTR libraryName,
|
||||
std::wstring& handlerDllPath,
|
||||
BaseOutputManager* outputManager
|
||||
)
|
||||
{
|
||||
std::wstring struNativeSearchPaths;
|
||||
size_t intIndex = 0;
|
||||
size_t intPrevIndex = 0;
|
||||
DWORD dwBufferSize = s_initialGetNativeSearchDirectoriesBufferSize;
|
||||
DWORD dwRequiredBufferSize = 0;
|
||||
hostfxr_get_native_search_directories_fn pFnHostFxrSearchDirectories = nullptr;
|
||||
|
||||
RETURN_LAST_ERROR_IF_NULL(m_hHostFxrDll = LoadLibraryW(hostfxrOptions.GetHostFxrLocation().c_str()));
|
||||
|
||||
try
|
||||
{
|
||||
pFnHostFxrSearchDirectories = ModuleHelpers::GetKnownProcAddress<hostfxr_get_native_search_directories_fn>(m_hHostFxrDll, "hostfxr_get_native_search_directories");
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
EventLog::Error(
|
||||
ASPNETCORE_EVENT_GENERAL_ERROR,
|
||||
ASPNETCORE_EVENT_HOSTFXR_DLL_INVALID_VERSION_MSG,
|
||||
hostfxrOptions.GetHostFxrLocation().c_str()
|
||||
);
|
||||
return OBSERVE_CAUGHT_EXCEPTION();
|
||||
}
|
||||
|
||||
RETURN_LAST_ERROR_IF_NULL(pFnHostFxrSearchDirectories);
|
||||
struNativeSearchPaths.resize(dwBufferSize);
|
||||
|
||||
outputManager->TryStartRedirection();
|
||||
|
||||
while (TRUE)
|
||||
{
|
||||
DWORD hostfxrArgc;
|
||||
std::unique_ptr<PCWSTR[]> hostfxrArgv;
|
||||
|
||||
hostfxrOptions.GetArguments(hostfxrArgc, hostfxrArgv);
|
||||
const auto intHostFxrExitCode = pFnHostFxrSearchDirectories(
|
||||
hostfxrArgc,
|
||||
hostfxrArgv.get(),
|
||||
struNativeSearchPaths.data(),
|
||||
dwBufferSize,
|
||||
&dwRequiredBufferSize
|
||||
);
|
||||
|
||||
if (intHostFxrExitCode == 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
else if (dwRequiredBufferSize > dwBufferSize)
|
||||
{
|
||||
dwBufferSize = dwRequiredBufferSize + 1; // for null terminator
|
||||
|
||||
struNativeSearchPaths.resize(dwBufferSize);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Stop redirecting before logging to event log to avoid logging debug logs
|
||||
// twice.
|
||||
outputManager->TryStopRedirection();
|
||||
|
||||
// If hostfxr didn't set the required buffer size, something in the app is misconfigured
|
||||
// Ex: Framework not found.
|
||||
EventLog::Error(
|
||||
ASPNETCORE_EVENT_GENERAL_ERROR,
|
||||
ASPNETCORE_EVENT_HOSTFXR_FAILURE_MSG
|
||||
);
|
||||
|
||||
return E_UNEXPECTED;
|
||||
}
|
||||
}
|
||||
|
||||
outputManager->TryStopRedirection();
|
||||
|
||||
struNativeSearchPaths.resize(struNativeSearchPaths.find(L'\0'));
|
||||
|
||||
auto fFound = FALSE;
|
||||
|
||||
// The native search directories are semicolon delimited.
|
||||
// Split on semicolons, append aspnetcorerh.dll, and check if the file exists.
|
||||
while ((intIndex = struNativeSearchPaths.find(L';', intPrevIndex)) != std::wstring::npos)
|
||||
{
|
||||
auto path = struNativeSearchPaths.substr(intPrevIndex, intIndex - intPrevIndex);
|
||||
|
||||
if (!path.empty() && !(path[path.length() - 1] == L'\\'))
|
||||
{
|
||||
path.append(L"\\");
|
||||
}
|
||||
|
||||
path.append(libraryName);
|
||||
|
||||
if (std::filesystem::is_regular_file(path))
|
||||
{
|
||||
handlerDllPath = path;
|
||||
fFound = TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
intPrevIndex = intIndex + 1;
|
||||
}
|
||||
|
||||
if (!fFound)
|
||||
{
|
||||
EventLog::Error(
|
||||
ASPNETCORE_EVENT_GENERAL_ERROR,
|
||||
ASPNETCORE_EVENT_INPROCESS_RH_REFERENCE_MSG,
|
||||
handlerDllPath.empty() ? s_pwzAspnetcoreInProcessRequestHandlerName : handlerDllPath.c_str());
|
||||
return HRESULT_FROM_WIN32(ERROR_DLL_NOT_FOUND);
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include "ShimOptions.h"
|
||||
#include "hostfxroptions.h"
|
||||
#include "HandleWrapper.h"
|
||||
#include "ApplicationFactory.h"
|
||||
#include "BaseOutputManager.h"
|
||||
|
||||
class HandlerResolver
|
||||
{
|
||||
public:
|
||||
HandlerResolver(HMODULE hModule, const IHttpServer &pServer);
|
||||
HRESULT GetApplicationFactory(const IHttpApplication &pApplication, std::unique_ptr<ApplicationFactory>& pApplicationFactory, const ShimOptions& options);
|
||||
void ResetHostingModel();
|
||||
|
||||
private:
|
||||
HRESULT LoadRequestHandlerAssembly(const IHttpApplication &pApplication, const ShimOptions& pConfiguration, std::unique_ptr<ApplicationFactory>& pApplicationFactory);
|
||||
HRESULT FindNativeAssemblyFromGlobalLocation(const ShimOptions& pConfiguration, PCWSTR libraryName, std::wstring& handlerDllPath);
|
||||
HRESULT FindNativeAssemblyFromHostfxr(const HOSTFXR_OPTIONS& hostfxrOptions, PCWSTR libraryName, std::wstring& handlerDllPath, BaseOutputManager* outputManager);
|
||||
|
||||
HMODULE m_hModule;
|
||||
const IHttpServer &m_pServer;
|
||||
|
||||
SRWLOCK m_requestHandlerLoadLock {};
|
||||
std::wstring m_loadedApplicationId;
|
||||
APP_HOSTING_MODEL m_loadedApplicationHostingModel;
|
||||
HandleWrapper<ModuleHandleTraits> m_hHostFxrDll;
|
||||
|
||||
static const PCWSTR s_pwzAspnetcoreInProcessRequestHandlerName;
|
||||
static const PCWSTR s_pwzAspnetcoreOutOfProcessRequestHandlerName;
|
||||
static const DWORD s_initialGetNativeSearchDirectoriesBufferSize = MAX_PATH * 4;
|
||||
};
|
||||
|
||||
Binary file not shown.
|
|
@ -0,0 +1,84 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en-US" xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title> HTTP Error 500.0 - ANCM In-Process Handler Load Failure </title>
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Segoe UI', Tahoma, Arial, Helvetica, sans-serif;
|
||||
font-size: .813em;
|
||||
color: #222;
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h5 {
|
||||
/*font-family: 'Segoe UI',Tahoma,Arial,Helvetica,sans-serif;*/
|
||||
font-weight: 100;
|
||||
}
|
||||
|
||||
h1 {
|
||||
color: #44525e;
|
||||
margin: 15px 0 15px 0;
|
||||
}
|
||||
|
||||
h2 {
|
||||
margin: 10px 5px 0 0;
|
||||
}
|
||||
|
||||
h3 {
|
||||
color: #363636;
|
||||
margin: 5px 5px 0 0;
|
||||
}
|
||||
|
||||
code {
|
||||
font-family: Consolas, "Courier New", courier, monospace;
|
||||
}
|
||||
|
||||
body .titleerror {
|
||||
padding: 3px 3px 6px 3px;
|
||||
display: block;
|
||||
font-size: 1.5em;
|
||||
font-weight: 100;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #1ba1e2;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: #13709e;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
li {
|
||||
margin: 5px;
|
||||
}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1> HTTP Error 500.0 - ANCM In-Process Handler Load Failure </h1>
|
||||
|
||||
<h2> Common causes of this issue: </h2>
|
||||
|
||||
<ul>
|
||||
<li> The specified version of Microsoft.NetCore.App or Microsoft.AspNetCore.App was not found. </li>
|
||||
<li> The in process request handler, Microsoft.AspNetCore.Server.IIS, was not referenced in the application. </li>
|
||||
<li> ANCM could not find dotnet. </li>
|
||||
</ul>
|
||||
|
||||
<h2> Troubleshooting steps: </h2>
|
||||
|
||||
<ul>
|
||||
<li> Check the system event log for error messages </li>
|
||||
<li> Enable logging the application process' stdout messages </li>
|
||||
<li> Attach a debugger to the application process and inspect </li>
|
||||
</ul>
|
||||
|
||||
<h2>
|
||||
For more information visit:
|
||||
%s <a href="https://go.microsoft.com/fwlink/?LinkID=2028526"> <cite> https://go.microsoft.com/fwlink/?LinkID=2028526 </cite> </a>
|
||||
</h2>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,251 +0,0 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
|
||||
#pragma once
|
||||
#define API_BUFFER_TOO_SMALL 0x80008098
|
||||
|
||||
extern BOOL g_fRecycleProcessCalled;
|
||||
|
||||
typedef
|
||||
HRESULT
|
||||
(WINAPI * PFN_ASPNETCORE_CREATE_APPLICATION)(
|
||||
_In_ IHttpServer *pServer,
|
||||
_In_ ASPNETCORE_CONFIG *pConfig,
|
||||
_Out_ APPLICATION **pApplication
|
||||
);
|
||||
|
||||
typedef
|
||||
HRESULT
|
||||
(WINAPI * PFN_ASPNETCORE_CREATE_REQUEST_HANDLER)(
|
||||
_In_ IHttpContext *pHttpContext,
|
||||
_In_ HTTP_MODULE_ID *pModuleId,
|
||||
_In_ APPLICATION *pApplication,
|
||||
_Out_ REQUEST_HANDLER **pRequestHandler
|
||||
);
|
||||
//
|
||||
// The key used for hash-table lookups, consists of the port on which the http process is created.
|
||||
//
|
||||
class APPLICATION_INFO_KEY
|
||||
{
|
||||
public:
|
||||
|
||||
APPLICATION_INFO_KEY(
|
||||
VOID
|
||||
) : INLINE_STRU_INIT(m_struKey)
|
||||
{
|
||||
}
|
||||
|
||||
HRESULT
|
||||
Initialize(
|
||||
_In_ LPCWSTR pszKey
|
||||
)
|
||||
{
|
||||
return m_struKey.Copy(pszKey);
|
||||
}
|
||||
|
||||
BOOL
|
||||
GetIsEqual(
|
||||
const APPLICATION_INFO_KEY * key2
|
||||
) const
|
||||
{
|
||||
return m_struKey.Equals(key2->m_struKey);
|
||||
}
|
||||
|
||||
DWORD CalcKeyHash() const
|
||||
{
|
||||
return Hash(m_struKey.QueryStr());
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
INLINE_STRU(m_struKey, 1024);
|
||||
};
|
||||
|
||||
|
||||
class APPLICATION_INFO
|
||||
{
|
||||
public:
|
||||
|
||||
APPLICATION_INFO(IHttpServer *pServer) :
|
||||
m_pServer(pServer),
|
||||
m_cRefs(1), m_fAppOfflineFound(FALSE),
|
||||
m_pAppOfflineHtm(NULL), m_pFileWatcherEntry(NULL),
|
||||
m_pConfiguration(NULL),
|
||||
m_pfnAspNetCoreCreateApplication(NULL),
|
||||
m_pfnAspNetCoreCreateRequestHandler(NULL)
|
||||
{
|
||||
InitializeSRWLock(&m_srwLock);
|
||||
}
|
||||
|
||||
APPLICATION_INFO_KEY *
|
||||
QueryApplicationInfoKey()
|
||||
{
|
||||
return &m_applicationInfoKey;
|
||||
}
|
||||
|
||||
virtual
|
||||
~APPLICATION_INFO();
|
||||
|
||||
HRESULT
|
||||
Initialize(
|
||||
_In_ ASPNETCORE_CONFIG *pConfiguration,
|
||||
_In_ FILE_WATCHER *pFileWatcher
|
||||
);
|
||||
|
||||
VOID
|
||||
ReferenceApplicationInfo() const
|
||||
{
|
||||
InterlockedIncrement(&m_cRefs);
|
||||
}
|
||||
|
||||
VOID
|
||||
DereferenceApplicationInfo() const
|
||||
{
|
||||
if (InterlockedDecrement(&m_cRefs) == 0)
|
||||
{
|
||||
delete this;
|
||||
}
|
||||
}
|
||||
|
||||
APP_OFFLINE_HTM* QueryAppOfflineHtm()
|
||||
{
|
||||
return m_pAppOfflineHtm;
|
||||
}
|
||||
|
||||
BOOL
|
||||
AppOfflineFound()
|
||||
{
|
||||
return m_fAppOfflineFound;
|
||||
}
|
||||
|
||||
VOID
|
||||
UpdateAppOfflineFileHandle();
|
||||
|
||||
HRESULT
|
||||
StartMonitoringAppOffline();
|
||||
|
||||
ASPNETCORE_CONFIG*
|
||||
QueryConfig()
|
||||
{
|
||||
return m_pConfiguration;
|
||||
}
|
||||
|
||||
//
|
||||
// ExtractApplication will increase the reference counter of the application
|
||||
// Caller is responsible for dereference the application.
|
||||
// Otherwise memory leak
|
||||
//
|
||||
VOID
|
||||
ExtractApplication(APPLICATION** ppApplication)
|
||||
{
|
||||
AcquireSRWLockShared(&m_srwLock);
|
||||
if (m_pApplication != NULL)
|
||||
{
|
||||
m_pApplication->ReferenceApplication();
|
||||
}
|
||||
*ppApplication = m_pApplication;
|
||||
ReleaseSRWLockShared(&m_srwLock);
|
||||
}
|
||||
|
||||
VOID
|
||||
RecycleApplication();
|
||||
|
||||
VOID
|
||||
ShutDownApplication();
|
||||
|
||||
HRESULT
|
||||
EnsureApplicationCreated();
|
||||
|
||||
PFN_ASPNETCORE_CREATE_REQUEST_HANDLER
|
||||
QueryCreateRequestHandler()
|
||||
{
|
||||
return m_pfnAspNetCoreCreateRequestHandler;
|
||||
}
|
||||
|
||||
private:
|
||||
HRESULT FindRequestHandlerAssembly();
|
||||
HRESULT FindNativeAssemblyFromGlobalLocation(STRU* struFilename);
|
||||
HRESULT FindNativeAssemblyFromHostfxr(STRU* struFilename);
|
||||
|
||||
static VOID DoRecycleApplication(LPVOID lpParam);
|
||||
|
||||
mutable LONG m_cRefs;
|
||||
APPLICATION_INFO_KEY m_applicationInfoKey;
|
||||
BOOL m_fAppOfflineFound;
|
||||
APP_OFFLINE_HTM *m_pAppOfflineHtm;
|
||||
FILE_WATCHER_ENTRY *m_pFileWatcherEntry;
|
||||
ASPNETCORE_CONFIG *m_pConfiguration;
|
||||
APPLICATION *m_pApplication;
|
||||
SRWLOCK m_srwLock;
|
||||
IHttpServer *m_pServer;
|
||||
PFN_ASPNETCORE_CREATE_APPLICATION m_pfnAspNetCoreCreateApplication;
|
||||
PFN_ASPNETCORE_CREATE_REQUEST_HANDLER m_pfnAspNetCoreCreateRequestHandler;
|
||||
};
|
||||
|
||||
class APPLICATION_INFO_HASH :
|
||||
public HASH_TABLE<APPLICATION_INFO, APPLICATION_INFO_KEY *>
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
APPLICATION_INFO_HASH()
|
||||
{}
|
||||
|
||||
APPLICATION_INFO_KEY *
|
||||
ExtractKey(
|
||||
APPLICATION_INFO *pApplicationInfo
|
||||
)
|
||||
{
|
||||
return pApplicationInfo->QueryApplicationInfoKey();
|
||||
}
|
||||
|
||||
DWORD
|
||||
CalcKeyHash(
|
||||
APPLICATION_INFO_KEY *key
|
||||
)
|
||||
{
|
||||
return key->CalcKeyHash();
|
||||
}
|
||||
|
||||
BOOL
|
||||
EqualKeys(
|
||||
APPLICATION_INFO_KEY *key1,
|
||||
APPLICATION_INFO_KEY *key2
|
||||
)
|
||||
{
|
||||
return key1->GetIsEqual(key2);
|
||||
}
|
||||
|
||||
VOID
|
||||
ReferenceRecord(
|
||||
APPLICATION_INFO *pApplicationInfo
|
||||
)
|
||||
{
|
||||
pApplicationInfo->ReferenceApplicationInfo();
|
||||
}
|
||||
|
||||
VOID
|
||||
DereferenceRecord(
|
||||
APPLICATION_INFO *pApplicationInfo
|
||||
)
|
||||
{
|
||||
pApplicationInfo->DereferenceApplicationInfo();
|
||||
}
|
||||
|
||||
static
|
||||
VOID
|
||||
ReferenceCopyToTable(
|
||||
APPLICATION_INFO * pEntry,
|
||||
PVOID pvData
|
||||
)
|
||||
{
|
||||
APPLICATION_INFO_HASH *pHash = static_cast<APPLICATION_INFO_HASH *>(pvData);
|
||||
DBG_ASSERT(pHash);
|
||||
pHash->InsertRecord(pEntry);
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
APPLICATION_INFO_HASH(const APPLICATION_INFO_HASH &);
|
||||
void operator=(const APPLICATION_INFO_HASH &);
|
||||
};
|
||||
|
|
@ -1,154 +0,0 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
|
||||
#pragma once
|
||||
|
||||
#define DEFAULT_HASH_BUCKETS 17
|
||||
|
||||
//
|
||||
// This class will manage the lifecycle of all Asp.Net Core applciation
|
||||
// It should be global singleton.
|
||||
// Should always call GetInstance to get the object instance
|
||||
//
|
||||
|
||||
struct CONFIG_CHANGE_CONTEXT
|
||||
{
|
||||
PCWSTR pstrPath;
|
||||
MULTISZ MultiSz;
|
||||
};
|
||||
|
||||
class APPLICATION_MANAGER
|
||||
{
|
||||
public:
|
||||
|
||||
static
|
||||
APPLICATION_MANAGER*
|
||||
GetInstance(
|
||||
VOID
|
||||
)
|
||||
{
|
||||
if ( sm_pApplicationManager == NULL )
|
||||
{
|
||||
sm_pApplicationManager = new APPLICATION_MANAGER();
|
||||
}
|
||||
|
||||
return sm_pApplicationManager;
|
||||
}
|
||||
|
||||
static
|
||||
VOID
|
||||
Cleanup(
|
||||
VOID
|
||||
)
|
||||
{
|
||||
if(sm_pApplicationManager != NULL)
|
||||
{
|
||||
delete sm_pApplicationManager;
|
||||
sm_pApplicationManager = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static
|
||||
BOOL
|
||||
FindConfigChangedApplication(
|
||||
_In_ APPLICATION_INFO * pEntry,
|
||||
_In_ PVOID pvContext
|
||||
);
|
||||
|
||||
static
|
||||
VOID
|
||||
ShutdownApplication(
|
||||
_In_ APPLICATION_INFO * pEntry,
|
||||
_In_ PVOID pvContext
|
||||
);
|
||||
|
||||
HRESULT
|
||||
GetOrCreateApplicationInfo(
|
||||
_In_ IHttpServer* pServer,
|
||||
_In_ ASPNETCORE_CONFIG* pConfig,
|
||||
_Out_ APPLICATION_INFO ** ppApplicationInfo
|
||||
);
|
||||
|
||||
HRESULT
|
||||
RecycleApplicationFromManager(
|
||||
_In_ LPCWSTR pszApplicationId
|
||||
);
|
||||
|
||||
VOID
|
||||
ShutDown();
|
||||
|
||||
~APPLICATION_MANAGER()
|
||||
{
|
||||
if (m_pFileWatcher != NULL)
|
||||
{
|
||||
delete m_pFileWatcher;
|
||||
m_pFileWatcher = NULL;
|
||||
}
|
||||
|
||||
if(m_pApplicationInfoHash != NULL)
|
||||
{
|
||||
m_pApplicationInfoHash->Clear();
|
||||
delete m_pApplicationInfoHash;
|
||||
m_pApplicationInfoHash = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
FILE_WATCHER*
|
||||
GetFileWatcher()
|
||||
{
|
||||
return m_pFileWatcher;
|
||||
}
|
||||
|
||||
HRESULT Initialize()
|
||||
{
|
||||
HRESULT hr = S_OK;
|
||||
|
||||
if(m_pApplicationInfoHash == NULL)
|
||||
{
|
||||
m_pApplicationInfoHash = new APPLICATION_INFO_HASH();
|
||||
if(m_pApplicationInfoHash == NULL)
|
||||
{
|
||||
hr = E_OUTOFMEMORY;
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
hr = m_pApplicationInfoHash->Initialize(DEFAULT_HASH_BUCKETS);
|
||||
if(FAILED(hr))
|
||||
{
|
||||
goto Finished;
|
||||
}
|
||||
}
|
||||
|
||||
if( m_pFileWatcher == NULL )
|
||||
{
|
||||
m_pFileWatcher = new FILE_WATCHER;
|
||||
if(m_pFileWatcher == NULL)
|
||||
{
|
||||
hr = HRESULT_FROM_WIN32( ERROR_NOT_ENOUGH_MEMORY );
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
m_pFileWatcher->Create();
|
||||
}
|
||||
|
||||
Finished:
|
||||
return hr;
|
||||
}
|
||||
|
||||
private:
|
||||
//
|
||||
// we currently limit the size of m_pstrErrorInfo to 5000, be careful if you want to change its payload
|
||||
//
|
||||
APPLICATION_MANAGER() : m_pApplicationInfoHash(NULL),
|
||||
m_pFileWatcher(NULL),
|
||||
m_hostingModel(HOSTING_UNKNOWN)
|
||||
{
|
||||
InitializeSRWLock(&m_srwLock);
|
||||
}
|
||||
|
||||
FILE_WATCHER *m_pFileWatcher;
|
||||
APPLICATION_INFO_HASH *m_pApplicationInfoHash;
|
||||
static APPLICATION_MANAGER *sm_pApplicationManager;
|
||||
SRWLOCK m_srwLock;
|
||||
APP_HOSTING_MODEL m_hostingModel;
|
||||
};
|
||||
|
|
@ -1,101 +0,0 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
|
||||
#pragma once
|
||||
class APP_OFFLINE_HTM
|
||||
{
|
||||
public:
|
||||
APP_OFFLINE_HTM(LPCWSTR pszPath) : m_cRefs(1)
|
||||
{
|
||||
m_Path.Copy(pszPath);
|
||||
}
|
||||
|
||||
VOID
|
||||
ReferenceAppOfflineHtm() const
|
||||
{
|
||||
InterlockedIncrement(&m_cRefs);
|
||||
}
|
||||
|
||||
VOID
|
||||
DereferenceAppOfflineHtm() const
|
||||
{
|
||||
if (InterlockedDecrement(&m_cRefs) == 0)
|
||||
{
|
||||
delete this;
|
||||
}
|
||||
}
|
||||
|
||||
BOOL
|
||||
Load(
|
||||
VOID
|
||||
)
|
||||
{
|
||||
BOOL fResult = TRUE;
|
||||
LARGE_INTEGER li = { 0 };
|
||||
CHAR *pszBuff = NULL;
|
||||
HANDLE handle = INVALID_HANDLE_VALUE;
|
||||
|
||||
handle = CreateFile(m_Path.QueryStr(),
|
||||
GENERIC_READ,
|
||||
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
|
||||
NULL,
|
||||
OPEN_EXISTING,
|
||||
FILE_ATTRIBUTE_NORMAL,
|
||||
NULL);
|
||||
|
||||
if (handle == INVALID_HANDLE_VALUE)
|
||||
{
|
||||
if (HRESULT_FROM_WIN32(GetLastError()) == ERROR_FILE_NOT_FOUND)
|
||||
{
|
||||
fResult = FALSE;
|
||||
}
|
||||
|
||||
// This Load() member function is supposed be called only when the change notification event of file creation or file modification happens.
|
||||
// If file is currenlty locked exclusively by other processes, we might get INVALID_HANDLE_VALUE even though the file exists. In that case, we should return TRUE here.
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
if (!GetFileSizeEx(handle, &li))
|
||||
{
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
if (li.HighPart != 0)
|
||||
{
|
||||
// > 4gb file size not supported
|
||||
// todo: log a warning at event log
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
DWORD bytesRead = 0;
|
||||
|
||||
if (li.LowPart > 0)
|
||||
{
|
||||
pszBuff = new CHAR[li.LowPart + 1];
|
||||
|
||||
if (ReadFile(handle, pszBuff, li.LowPart, &bytesRead, NULL))
|
||||
{
|
||||
m_Contents.Copy(pszBuff, bytesRead);
|
||||
}
|
||||
}
|
||||
|
||||
Finished:
|
||||
if (handle != INVALID_HANDLE_VALUE)
|
||||
{
|
||||
CloseHandle(handle);
|
||||
handle = INVALID_HANDLE_VALUE;
|
||||
}
|
||||
|
||||
if (pszBuff != NULL)
|
||||
{
|
||||
delete[] pszBuff;
|
||||
pszBuff = NULL;
|
||||
}
|
||||
|
||||
return fResult;
|
||||
}
|
||||
|
||||
mutable LONG m_cRefs;
|
||||
STRA m_Contents;
|
||||
STRU m_Path;
|
||||
};
|
||||
|
|
@ -1,127 +0,0 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
|
||||
#pragma once
|
||||
|
||||
#define FILE_WATCHER_SHUTDOWN_KEY (ULONG_PTR)(-1)
|
||||
#define FILE_WATCHER_ENTRY_BUFFER_SIZE 4096
|
||||
#ifndef CONTAINING_RECORD
|
||||
//
|
||||
// Calculate the address of the base of the structure given its type, and an
|
||||
// address of a field within the structure.
|
||||
//
|
||||
|
||||
#define CONTAINING_RECORD(address, type, field) \
|
||||
((type *)((PCHAR)(address)-(ULONG_PTR)(&((type *)0)->field)))
|
||||
|
||||
#endif // !CONTAINING_RECORD
|
||||
#define FILE_NOTIFY_VALID_MASK 0x00000fff
|
||||
#define FILE_WATCHER_ENTRY_SIGNATURE ((DWORD) 'FWES')
|
||||
#define FILE_WATCHER_ENTRY_SIGNATURE_FREE ((DWORD) 'sewf')
|
||||
|
||||
class APPLICATION_INFO;
|
||||
|
||||
class FILE_WATCHER{
|
||||
public:
|
||||
|
||||
FILE_WATCHER();
|
||||
|
||||
~FILE_WATCHER();
|
||||
|
||||
HRESULT Create();
|
||||
|
||||
HANDLE
|
||||
QueryCompletionPort(
|
||||
VOID
|
||||
) const
|
||||
{
|
||||
return m_hCompletionPort;
|
||||
}
|
||||
|
||||
static
|
||||
DWORD
|
||||
WINAPI ChangeNotificationThread(LPVOID);
|
||||
|
||||
static
|
||||
void
|
||||
WINAPI FileWatcherCompletionRoutine
|
||||
(
|
||||
DWORD dwCompletionStatus,
|
||||
DWORD cbCompletion,
|
||||
OVERLAPPED * pOverlapped
|
||||
);
|
||||
|
||||
private:
|
||||
HANDLE m_hCompletionPort;
|
||||
HANDLE m_hChangeNotificationThread;
|
||||
volatile BOOL m_fThreadExit;
|
||||
};
|
||||
|
||||
class FILE_WATCHER_ENTRY
|
||||
{
|
||||
public:
|
||||
FILE_WATCHER_ENTRY(FILE_WATCHER * pFileMonitor);
|
||||
|
||||
OVERLAPPED _overlapped;
|
||||
|
||||
HRESULT
|
||||
Create(
|
||||
_In_ PCWSTR pszDirectoryToMonitor,
|
||||
_In_ PCWSTR pszFileNameToMonitor,
|
||||
_In_ APPLICATION_INFO* pApplicationInfo,
|
||||
_In_ HANDLE hImpersonationToken
|
||||
);
|
||||
|
||||
VOID
|
||||
ReferenceFileWatcherEntry() const
|
||||
{
|
||||
InterlockedIncrement(&_cRefs);
|
||||
}
|
||||
|
||||
VOID
|
||||
DereferenceFileWatcherEntry() const
|
||||
{
|
||||
if (InterlockedDecrement(&_cRefs) == 0)
|
||||
{
|
||||
delete this;
|
||||
}
|
||||
}
|
||||
|
||||
BOOL
|
||||
QueryIsValid() const
|
||||
{
|
||||
return _fIsValid;
|
||||
}
|
||||
|
||||
VOID
|
||||
MarkEntryInValid()
|
||||
{
|
||||
_fIsValid = FALSE;
|
||||
}
|
||||
|
||||
HRESULT Monitor();
|
||||
|
||||
VOID StopMonitor();
|
||||
|
||||
HRESULT
|
||||
HandleChangeCompletion(
|
||||
_In_ DWORD dwCompletionStatus,
|
||||
_In_ DWORD cbCompletion
|
||||
);
|
||||
|
||||
private:
|
||||
virtual ~FILE_WATCHER_ENTRY();
|
||||
|
||||
DWORD _dwSignature;
|
||||
BUFFER _buffDirectoryChanges;
|
||||
HANDLE _hImpersonationToken;
|
||||
HANDLE _hDirectory;
|
||||
FILE_WATCHER* _pFileMonitor;
|
||||
APPLICATION_INFO* _pApplicationInfo;
|
||||
STRU _strFileName;
|
||||
STRU _strDirectoryName;
|
||||
LONG _lStopMonitorCalled;
|
||||
mutable LONG _cRefs;
|
||||
BOOL _fIsValid;
|
||||
SRWLOCK _srwLock;
|
||||
};
|
||||
|
|
@ -1,49 +0,0 @@
|
|||
// Copyright (c) .NET Foundation and contributors. All rights reserved.
|
||||
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
||||
|
||||
#ifndef __FX_VER_H__
|
||||
#define __FX_VER_H__
|
||||
#include <string>
|
||||
|
||||
// Note: This is not SemVer (esp., in comparing pre-release part, fx_ver_t does not
|
||||
// compare multiple dot separated identifiers individually.) ex: 1.0.0-beta.2 vs. 1.0.0-beta.11
|
||||
struct fx_ver_t
|
||||
{
|
||||
fx_ver_t(int major, int minor, int patch);
|
||||
fx_ver_t(int major, int minor, int patch, const std::wstring& pre);
|
||||
fx_ver_t(int major, int minor, int patch, const std::wstring& pre, const std::wstring& build);
|
||||
|
||||
int get_major() const { return m_major; }
|
||||
int get_minor() const { return m_minor; }
|
||||
int get_patch() const { return m_patch; }
|
||||
|
||||
void set_major(int m) { m_major = m; }
|
||||
void set_minor(int m) { m_minor = m; }
|
||||
void set_patch(int p) { m_patch = p; }
|
||||
|
||||
bool is_prerelease() const { return !m_pre.empty(); }
|
||||
|
||||
std::wstring as_str() const;
|
||||
std::wstring prerelease_glob() const;
|
||||
std::wstring patch_glob() const;
|
||||
|
||||
bool operator ==(const fx_ver_t& b) const;
|
||||
bool operator !=(const fx_ver_t& b) const;
|
||||
bool operator <(const fx_ver_t& b) const;
|
||||
bool operator >(const fx_ver_t& b) const;
|
||||
bool operator <=(const fx_ver_t& b) const;
|
||||
bool operator >=(const fx_ver_t& b) const;
|
||||
|
||||
static bool parse(const std::wstring& ver, fx_ver_t* fx_ver, bool parse_only_production = false);
|
||||
|
||||
private:
|
||||
int m_major;
|
||||
int m_minor;
|
||||
int m_patch;
|
||||
std::wstring m_pre;
|
||||
std::wstring m_build;
|
||||
|
||||
static int compare(const fx_ver_t&a, const fx_ver_t& b);
|
||||
};
|
||||
|
||||
#endif // __FX_VER_H__
|
||||
|
|
@ -1,64 +0,0 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
|
||||
#pragma once
|
||||
|
||||
extern HTTP_MODULE_ID g_pModuleId;
|
||||
extern IHttpServer *g_pHttpServer;
|
||||
extern HMODULE g_hAspnetCoreRH;
|
||||
|
||||
class ASPNET_CORE_PROXY_MODULE : public CHttpModule
|
||||
{
|
||||
public:
|
||||
|
||||
ASPNET_CORE_PROXY_MODULE();
|
||||
|
||||
~ASPNET_CORE_PROXY_MODULE();
|
||||
|
||||
void * operator new(size_t size, IModuleAllocator * pPlacement)
|
||||
{
|
||||
return pPlacement->AllocateMemory(static_cast<DWORD>(size));
|
||||
}
|
||||
|
||||
VOID
|
||||
operator delete(
|
||||
void *
|
||||
)
|
||||
{}
|
||||
|
||||
__override
|
||||
REQUEST_NOTIFICATION_STATUS
|
||||
OnExecuteRequestHandler(
|
||||
IHttpContext * pHttpContext,
|
||||
IHttpEventProvider * pProvider
|
||||
);
|
||||
|
||||
__override
|
||||
REQUEST_NOTIFICATION_STATUS
|
||||
OnAsyncCompletion(
|
||||
IHttpContext * pHttpContext,
|
||||
DWORD dwNotification,
|
||||
BOOL fPostNotification,
|
||||
IHttpEventProvider * pProvider,
|
||||
IHttpCompletionInfo * pCompletionInfo
|
||||
);
|
||||
|
||||
private:
|
||||
|
||||
APPLICATION_INFO *m_pApplicationInfo;
|
||||
APPLICATION *m_pApplication;
|
||||
REQUEST_HANDLER *m_pHandler;
|
||||
};
|
||||
|
||||
class ASPNET_CORE_PROXY_MODULE_FACTORY : public IHttpModuleFactory
|
||||
{
|
||||
public:
|
||||
HRESULT
|
||||
GetHttpModule(
|
||||
CHttpModule ** ppModule,
|
||||
IModuleAllocator * pAllocator
|
||||
);
|
||||
|
||||
VOID
|
||||
Terminate();
|
||||
};
|
||||
|
|
@ -0,0 +1,81 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en-US" xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title> HTTP Error 500.0 - ANCM Out-Of-Process Handler Load Failure </title>
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Segoe UI', Tahoma, Arial, Helvetica, sans-serif;
|
||||
font-size: .813em;
|
||||
color: #222;
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h5 {
|
||||
/*font-family: 'Segoe UI',Tahoma,Arial,Helvetica,sans-serif;*/
|
||||
font-weight: 100;
|
||||
}
|
||||
|
||||
h1 {
|
||||
color: #44525e;
|
||||
margin: 15px 0 15px 0;
|
||||
}
|
||||
|
||||
h2 {
|
||||
margin: 10px 5px 0 0;
|
||||
}
|
||||
|
||||
h3 {
|
||||
color: #363636;
|
||||
margin: 5px 5px 0 0;
|
||||
}
|
||||
|
||||
code {
|
||||
font-family: Consolas, "Courier New", courier, monospace;
|
||||
}
|
||||
|
||||
body .titleerror {
|
||||
padding: 3px 3px 6px 3px;
|
||||
display: block;
|
||||
font-size: 1.5em;
|
||||
font-weight: 100;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #1ba1e2;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: #13709e;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
li {
|
||||
margin: 5px;
|
||||
}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1> HTTP Error 500.0 - ANCM Out-Of-Process Handler Load Failure </h1>
|
||||
|
||||
<h2> Common causes of this issue: </h2>
|
||||
<ul>
|
||||
<li>The out of process request handler, aspnetcorev2_outofprocess.dll, could not be found next to the aspnetcorev2.dll.</li>
|
||||
<li> Could not read configuration correctly. Check the application's associated web.config.</li>
|
||||
</ul>
|
||||
|
||||
<h2> Troubleshooting steps: </h2>
|
||||
<ul>
|
||||
<li> Check the system event log for error messages </li>
|
||||
<li> Enable logging the application process' stdout messages </li>
|
||||
<li> Attach a debugger to the application process and inspect </li>
|
||||
</ul>
|
||||
|
||||
<h2>
|
||||
For more information visit:
|
||||
%s <a href="https://go.microsoft.com/fwlink/?LinkID=2028526"> <cite> https://go.microsoft.com/fwlink/?LinkID=2028526 </cite> </a>
|
||||
</h2>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,61 @@
|
|||
// 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.
|
||||
|
||||
#include "PollingAppOfflineApplication.h"
|
||||
|
||||
#include <filesystem>
|
||||
#include "SRWExclusiveLock.h"
|
||||
#include "HandleWrapper.h"
|
||||
#include "exceptions.h"
|
||||
|
||||
HRESULT PollingAppOfflineApplication::TryCreateHandler(_In_ IHttpContext* pHttpContext, _Outptr_result_maybenull_ IREQUEST_HANDLER** pRequestHandler)
|
||||
{
|
||||
CheckAppOffline();
|
||||
return LOG_IF_FAILED(APPLICATION::TryCreateHandler(pHttpContext, pRequestHandler));
|
||||
}
|
||||
|
||||
void
|
||||
PollingAppOfflineApplication::CheckAppOffline()
|
||||
{
|
||||
if (m_fStopCalled)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
const auto ulCurrentTime = GetTickCount64();
|
||||
//
|
||||
// we only care about app offline presented. If not, it means the application has started
|
||||
// and is monitoring the app offline file
|
||||
// we cache the file exist check result for 200 ms
|
||||
//
|
||||
if (ulCurrentTime - m_ulLastCheckTime > c_appOfflineRefreshIntervalMS)
|
||||
{
|
||||
SRWExclusiveLock lock(m_statusLock);
|
||||
if (ulCurrentTime - m_ulLastCheckTime > c_appOfflineRefreshIntervalMS)
|
||||
{
|
||||
m_fAppOfflineFound = FileExists(m_appOfflineLocation);
|
||||
if(m_fAppOfflineFound)
|
||||
{
|
||||
LOG_IF_FAILED(OnAppOfflineFound());
|
||||
}
|
||||
m_ulLastCheckTime = ulCurrentTime;
|
||||
}
|
||||
}
|
||||
|
||||
if (m_fAppOfflineFound != (m_mode == StopWhenRemoved))
|
||||
{
|
||||
Stop(/* fServerInitiated */ false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
std::filesystem::path PollingAppOfflineApplication::GetAppOfflineLocation(const IHttpApplication& pApplication)
|
||||
{
|
||||
return std::filesystem::path(pApplication.GetApplicationPhysicalPath()) / "app_offline.htm";
|
||||
}
|
||||
|
||||
bool PollingAppOfflineApplication::FileExists(const std::filesystem::path& path) noexcept
|
||||
{
|
||||
std::error_code ec;
|
||||
return is_regular_file(path, ec) || ec.value() == ERROR_SHARING_VIOLATION;
|
||||
}
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
// 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.
|
||||
|
||||
#pragma once
|
||||
#include <filesystem>
|
||||
#include "application.h"
|
||||
|
||||
enum PollingAppOfflineApplicationMode
|
||||
{
|
||||
StopWhenAdded,
|
||||
StopWhenRemoved
|
||||
};
|
||||
|
||||
class PollingAppOfflineApplication: public APPLICATION
|
||||
{
|
||||
public:
|
||||
PollingAppOfflineApplication(const IHttpApplication& pApplication, PollingAppOfflineApplicationMode mode)
|
||||
: APPLICATION(pApplication),
|
||||
m_ulLastCheckTime(0),
|
||||
m_appOfflineLocation(GetAppOfflineLocation(pApplication)),
|
||||
m_fAppOfflineFound(false),
|
||||
m_mode(mode)
|
||||
{
|
||||
InitializeSRWLock(&m_statusLock);
|
||||
}
|
||||
|
||||
HRESULT
|
||||
TryCreateHandler(
|
||||
_In_ IHttpContext *pHttpContext,
|
||||
_Outptr_result_maybenull_ IREQUEST_HANDLER **pRequestHandler) override;
|
||||
|
||||
void CheckAppOffline();
|
||||
virtual HRESULT OnAppOfflineFound() = 0;
|
||||
void StopInternal(bool fServerInitiated) override { UNREFERENCED_PARAMETER(fServerInitiated); }
|
||||
|
||||
protected:
|
||||
std::filesystem::path m_appOfflineLocation;
|
||||
static std::filesystem::path GetAppOfflineLocation(const IHttpApplication& pApplication);
|
||||
static bool FileExists(const std::filesystem::path& path) noexcept;
|
||||
private:
|
||||
static const int c_appOfflineRefreshIntervalMS = 200;
|
||||
std::string m_strAppOfflineContent;
|
||||
ULONGLONG m_ulLastCheckTime;
|
||||
bool m_fAppOfflineFound;
|
||||
SRWLOCK m_statusLock {};
|
||||
PollingAppOfflineApplicationMode m_mode;
|
||||
};
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
|
||||
#pragma once
|
||||
#include "PollingAppOfflineApplication.h"
|
||||
#include "requesthandler.h"
|
||||
#include "ServerErrorHandler.h"
|
||||
|
||||
class ServerErrorApplication : public PollingAppOfflineApplication
|
||||
{
|
||||
public:
|
||||
ServerErrorApplication(const IHttpApplication& pApplication, HRESULT hr, HINSTANCE moduleInstance)
|
||||
: ServerErrorApplication(pApplication, hr, moduleInstance, true /* disableStartupPage*/, 0 /* page */)
|
||||
{
|
||||
}
|
||||
|
||||
ServerErrorApplication(const IHttpApplication& pApplication, HRESULT hr, HINSTANCE moduleInstance, bool disableStartupPage, int page)
|
||||
: m_HR(hr),
|
||||
m_disableStartupPage(disableStartupPage),
|
||||
m_page(page),
|
||||
m_moduleInstance(moduleInstance),
|
||||
PollingAppOfflineApplication(pApplication, PollingAppOfflineApplicationMode::StopWhenAdded)
|
||||
{
|
||||
}
|
||||
|
||||
~ServerErrorApplication() = default;
|
||||
|
||||
HRESULT CreateHandler(IHttpContext *pHttpContext, IREQUEST_HANDLER ** pRequestHandler) override
|
||||
{
|
||||
auto handler = std::make_unique<ServerErrorHandler>(*pHttpContext, 500ui16, 0ui16, "Internal Server Error", m_HR, m_moduleInstance, m_disableStartupPage, m_page);
|
||||
*pRequestHandler = handler.release();
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT OnAppOfflineFound() noexcept override { return S_OK; }
|
||||
private:
|
||||
HRESULT m_HR;
|
||||
bool m_disableStartupPage;
|
||||
int m_page;
|
||||
HINSTANCE m_moduleInstance;
|
||||
};
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
|
||||
#include "ShimOptions.h"
|
||||
|
||||
#include "StringHelpers.h"
|
||||
#include "ConfigurationLoadException.h"
|
||||
|
||||
#define CS_ASPNETCORE_HANDLER_VERSION L"handlerVersion"
|
||||
|
||||
ShimOptions::ShimOptions(const ConfigurationSource &configurationSource) :
|
||||
m_hostingModel(HOSTING_UNKNOWN),
|
||||
m_fStdoutLogEnabled(false)
|
||||
{
|
||||
auto const section = configurationSource.GetRequiredSection(CS_ASPNETCORE_SECTION);
|
||||
auto hostingModel = section->GetString(CS_ASPNETCORE_HOSTING_MODEL).value_or(L"");
|
||||
|
||||
if (hostingModel.empty() || equals_ignore_case(hostingModel, CS_ASPNETCORE_HOSTING_MODEL_OUTOFPROCESS))
|
||||
{
|
||||
m_hostingModel = HOSTING_OUT_PROCESS;
|
||||
}
|
||||
else if (equals_ignore_case(hostingModel, CS_ASPNETCORE_HOSTING_MODEL_INPROCESS))
|
||||
{
|
||||
m_hostingModel = HOSTING_IN_PROCESS;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw ConfigurationLoadException(format(
|
||||
L"Unknown hosting model '%s'. Please specify either hostingModel=\"inprocess\" "
|
||||
"or hostingModel=\"outofprocess\" in the web.config file.", hostingModel.c_str()));
|
||||
}
|
||||
|
||||
if (m_hostingModel == HOSTING_OUT_PROCESS)
|
||||
{
|
||||
const auto handlerSettings = section->GetKeyValuePairs(CS_ASPNETCORE_HANDLER_SETTINGS);
|
||||
m_strHandlerVersion = find_element(handlerSettings, CS_ASPNETCORE_HANDLER_VERSION).value_or(std::wstring());
|
||||
}
|
||||
|
||||
m_strProcessPath = section->GetRequiredString(CS_ASPNETCORE_PROCESS_EXE_PATH);
|
||||
m_strArguments = section->GetString(CS_ASPNETCORE_PROCESS_ARGUMENTS).value_or(CS_ASPNETCORE_PROCESS_ARGUMENTS_DEFAULT);
|
||||
m_fStdoutLogEnabled = section->GetRequiredBool(CS_ASPNETCORE_STDOUT_LOG_ENABLED);
|
||||
m_struStdoutLogFile = section->GetRequiredString(CS_ASPNETCORE_STDOUT_LOG_FILE);
|
||||
m_fDisableStartupPage = section->GetRequiredBool(CS_ASPNETCORE_DISABLE_START_UP_ERROR_PAGE);
|
||||
}
|
||||
|
|
@ -0,0 +1,72 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include "ConfigurationSource.h"
|
||||
#include "exceptions.h"
|
||||
|
||||
enum APP_HOSTING_MODEL
|
||||
{
|
||||
HOSTING_UNKNOWN = 0,
|
||||
HOSTING_IN_PROCESS,
|
||||
HOSTING_OUT_PROCESS
|
||||
};
|
||||
|
||||
class ShimOptions: NonCopyable
|
||||
{
|
||||
public:
|
||||
const std::wstring&
|
||||
QueryProcessPath() const noexcept
|
||||
{
|
||||
return m_strProcessPath;
|
||||
}
|
||||
|
||||
const std::wstring&
|
||||
QueryArguments() const noexcept
|
||||
{
|
||||
return m_strArguments;
|
||||
}
|
||||
|
||||
APP_HOSTING_MODEL
|
||||
QueryHostingModel() const noexcept
|
||||
{
|
||||
return m_hostingModel;
|
||||
}
|
||||
|
||||
const std::wstring&
|
||||
QueryHandlerVersion() const noexcept
|
||||
{
|
||||
return m_strHandlerVersion;
|
||||
}
|
||||
|
||||
BOOL
|
||||
QueryStdoutLogEnabled() const noexcept
|
||||
{
|
||||
return m_fStdoutLogEnabled;
|
||||
}
|
||||
|
||||
const std::wstring&
|
||||
QueryStdoutLogFile() const noexcept
|
||||
{
|
||||
return m_struStdoutLogFile;
|
||||
}
|
||||
|
||||
bool
|
||||
QueryDisableStartupPage() const noexcept
|
||||
{
|
||||
return m_fDisableStartupPage;
|
||||
}
|
||||
|
||||
ShimOptions(const ConfigurationSource &configurationSource);
|
||||
|
||||
private:
|
||||
std::wstring m_strArguments;
|
||||
std::wstring m_strProcessPath;
|
||||
APP_HOSTING_MODEL m_hostingModel;
|
||||
std::wstring m_strHandlerVersion;
|
||||
std::wstring m_struStdoutLogFile;
|
||||
bool m_fStdoutLogEnabled;
|
||||
bool m_fDisableStartupPage;
|
||||
};
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
LIBRARY aspnetcore
|
||||
LIBRARY aspnetcorev2
|
||||
|
||||
EXPORTS
|
||||
RegisterModule
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
/*
|
||||
* AspNetCore module trace events layout
|
||||
* Uncomment the following class to run mof2trace to generate header file
|
||||
* comment it back before checking it in */
|
||||
* comment it back before checking it in
|
||||
[Dynamic,
|
||||
Description("IIS: WWW Server"),
|
||||
Guid("{3a2a4e84-4c21-4981-ae10-3fda0d9b0f83}"),
|
||||
|
|
@ -186,12 +186,28 @@ class ANCMWinHttpCallBack:ANCM_Events
|
|||
};
|
||||
|
||||
[Dynamic,
|
||||
Description("Inprocess executing request failure") : amended,
|
||||
Description("Starting inprocess execute request") : amended,
|
||||
EventType(7),
|
||||
EventLevel(2),
|
||||
EventTypeName("ANCM_EXECUTE_REQUEST_FAIL") : amended
|
||||
EventLevel(4),
|
||||
EventTypeName("ANCM_INPROC_EXECUTE_REQUEST_START") : amended
|
||||
]
|
||||
class ANCMExecuteFailed:ANCM_Events
|
||||
class ANCMExecuteStart:ANCM_Events
|
||||
{
|
||||
[WmiDataId(1),
|
||||
Description("Context ID") : amended,
|
||||
extension("Guid"),
|
||||
ActivityID,
|
||||
read]
|
||||
object ContextId;
|
||||
};
|
||||
|
||||
[Dynamic,
|
||||
Description("Ending inprocess execute request") : amended,
|
||||
EventType(8),
|
||||
EventLevel(5),
|
||||
EventTypeName("ANCM_INPROC_EXECUTE_REQUEST_COMPLETION") : amended
|
||||
]
|
||||
class ANCMExecuteEnd:ANCM_Events
|
||||
{
|
||||
[WmiDataId(1),
|
||||
Description("Context ID") : amended,
|
||||
|
|
@ -200,9 +216,156 @@ class ANCMExecuteFailed:ANCM_Events
|
|||
read]
|
||||
object ContextId;
|
||||
[WmiDataId(2),
|
||||
Description("InternetStatus") : amended,
|
||||
format("x"),
|
||||
Description("Notification status") : amended,
|
||||
format("d"),
|
||||
read]
|
||||
uint32 ErrorCode;
|
||||
uint32 requestStatus;
|
||||
};
|
||||
|
||||
[Dynamic,
|
||||
Description("Starting inprocess async completion") : amended,
|
||||
EventType(9),
|
||||
EventLevel(5),
|
||||
EventTypeName("ANCM_INPROC_ASYNC_COMPLETION_START") : amended
|
||||
]
|
||||
class ANCMAsyncStart:ANCM_Events
|
||||
{
|
||||
[WmiDataId(1),
|
||||
Description("Context ID") : amended,
|
||||
extension("Guid"),
|
||||
ActivityID,
|
||||
read]
|
||||
object ContextId;
|
||||
};
|
||||
|
||||
[Dynamic,
|
||||
Description("Ending inprocess async completion") : amended,
|
||||
EventType(10),
|
||||
EventLevel(5),
|
||||
EventTypeName("ANCM_INPROC_ASYNC_COMPLETION_COMPLETION") : amended
|
||||
]
|
||||
class ANCMAsyncEnd:ANCM_Events
|
||||
{
|
||||
[WmiDataId(1),
|
||||
Description("Context ID") : amended,
|
||||
extension("Guid"),
|
||||
ActivityID,
|
||||
read]
|
||||
object ContextId;
|
||||
[WmiDataId(2),
|
||||
Description("Notification status") : amended,
|
||||
format("d"),
|
||||
read]
|
||||
uint32 requestStatus;
|
||||
};
|
||||
|
||||
[Dynamic,
|
||||
Description("Inprocess app shutdown") : amended,
|
||||
EventType(11),
|
||||
EventLevel(4),
|
||||
EventTypeName("ANCM_INPROC_REQUEST_SHUTDOWN") : amended
|
||||
]
|
||||
class ANCMRequestShutdown:ANCM_Events
|
||||
{
|
||||
[WmiDataId(1),
|
||||
Description("Context ID") : amended,
|
||||
extension("Guid"),
|
||||
ActivityID,
|
||||
read]
|
||||
object ContextId;
|
||||
};
|
||||
|
||||
[Dynamic,
|
||||
Description("Inprocess request disconnect") : amended,
|
||||
EventType(12),
|
||||
EventLevel(4),
|
||||
EventTypeName("ANCM_INPROC_REQUEST_DISCONNECT") : amended
|
||||
]
|
||||
class ANCMRequestDisconnect:ANCM_Events
|
||||
{
|
||||
[WmiDataId(1),
|
||||
Description("Context ID") : amended,
|
||||
extension("Guid"),
|
||||
ActivityID,
|
||||
read]
|
||||
object ContextId;
|
||||
};
|
||||
|
||||
[Dynamic,
|
||||
Description("Indicate managed request complete") : amended,
|
||||
EventType(13),
|
||||
EventLevel(4),
|
||||
EventTypeName("ANCM_INPROC_MANAGED_REQUEST_COMPLETION") : amended
|
||||
]
|
||||
class ANCMManagedRequestCompletion:ANCM_Events
|
||||
{
|
||||
[WmiDataId(1),
|
||||
Description("Context ID") : amended,
|
||||
extension("Guid"),
|
||||
ActivityID,
|
||||
read]
|
||||
object ContextId;
|
||||
};
|
||||
|
||||
[Dynamic,
|
||||
Description("Failed HRESULT") : amended,
|
||||
EventType(14),
|
||||
EventLevel(3),
|
||||
EventTypeName("ANCM_HRESULT_FAILED") : amended
|
||||
]
|
||||
class ANCMHRESULTFailed:ANCM_Events
|
||||
{
|
||||
[WmiDataId(1),
|
||||
Description("Context ID") : amended,
|
||||
extension("Guid"),
|
||||
ActivityID,
|
||||
read]
|
||||
object ContextId;
|
||||
[WmiDataId(2),
|
||||
Description("Failed source file location") : amended,
|
||||
StringTermination("NullTerminated"),
|
||||
read]
|
||||
string File;
|
||||
[WmiDataId(3),
|
||||
Description("Failed line number") : amended,
|
||||
format("d"),
|
||||
read]
|
||||
uint32 Line;
|
||||
[WmiDataId(4),
|
||||
Description("HResult") : amended,
|
||||
format("x"),
|
||||
read]
|
||||
uint32 HResult;
|
||||
};
|
||||
|
||||
[Dynamic,
|
||||
Description("Caught exception") : amended,
|
||||
EventType(15),
|
||||
EventLevel(3),
|
||||
EventTypeName("ANCM_EXCEPTION_CAUGHT") : amended
|
||||
]
|
||||
class ANCMExceptionCaughFailed:ANCM_Events
|
||||
{
|
||||
[WmiDataId(1),
|
||||
Description("Context ID") : amended,
|
||||
extension("Guid"),
|
||||
ActivityID,
|
||||
read]
|
||||
object ContextId;
|
||||
[WmiDataId(2),
|
||||
Description("Exception catch file location") : amended,
|
||||
StringTermination("NullTerminated"),
|
||||
read]
|
||||
string File;
|
||||
[WmiDataId(3),
|
||||
Description("Exception catch line number") : amended,
|
||||
format("d"),
|
||||
read]
|
||||
uint32 Line;
|
||||
[WmiDataId(2),
|
||||
Description("Exception description") : amended,
|
||||
StringTermination("NullTerminated"),
|
||||
read]
|
||||
string Description;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,182 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
|
||||
#include "applicationinfo.h"
|
||||
|
||||
#include "proxymodule.h"
|
||||
#include "hostfxr_utility.h"
|
||||
#include "debugutil.h"
|
||||
#include "resources.h"
|
||||
#include "SRWExclusiveLock.h"
|
||||
#include "exceptions.h"
|
||||
#include "EventLog.h"
|
||||
#include "ServerErrorApplication.h"
|
||||
#include "AppOfflineApplication.h"
|
||||
#include "WebConfigConfigurationSource.h"
|
||||
#include "ConfigurationLoadException.h"
|
||||
#include "resource.h"
|
||||
|
||||
extern HINSTANCE g_hServerModule;
|
||||
|
||||
HRESULT
|
||||
APPLICATION_INFO::CreateHandler(
|
||||
IHttpContext& pHttpContext,
|
||||
std::unique_ptr<IREQUEST_HANDLER, IREQUEST_HANDLER_DELETER>& pHandler
|
||||
)
|
||||
{
|
||||
HRESULT hr = S_OK;
|
||||
|
||||
{
|
||||
SRWSharedLock lock(m_applicationLock);
|
||||
|
||||
RETURN_IF_FAILED(hr = TryCreateHandler(pHttpContext, pHandler));
|
||||
|
||||
if (hr == S_OK)
|
||||
{
|
||||
return S_OK;
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
SRWExclusiveLock lock(m_applicationLock);
|
||||
|
||||
// check if other thread created application
|
||||
RETURN_IF_FAILED(hr = TryCreateHandler(pHttpContext, pHandler));
|
||||
|
||||
// In some cases (adding and removing app_offline quickly) application might start and stop immediately
|
||||
// so retry until we get valid handler or error
|
||||
while (hr != S_OK)
|
||||
{
|
||||
// At this point application is either null or shutdown and is returning S_FALSE
|
||||
|
||||
if (m_pApplication != nullptr)
|
||||
{
|
||||
LOG_INFO(L"Application went offline");
|
||||
|
||||
// Call to wait for application to complete stopping
|
||||
m_pApplication->Stop(/* fServerInitiated */ false);
|
||||
m_pApplication = nullptr;
|
||||
m_pApplicationFactory = nullptr;
|
||||
}
|
||||
|
||||
RETURN_IF_FAILED(CreateApplication(pHttpContext));
|
||||
|
||||
RETURN_IF_FAILED(hr = TryCreateHandler(pHttpContext, pHandler));
|
||||
}
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT
|
||||
APPLICATION_INFO::CreateApplication(IHttpContext& pHttpContext)
|
||||
{
|
||||
auto& pHttpApplication = *pHttpContext.GetApplication();
|
||||
if (AppOfflineApplication::ShouldBeStarted(pHttpApplication))
|
||||
{
|
||||
LOG_INFO(L"Detected app_offline file, creating polling application");
|
||||
m_pApplication = make_application<AppOfflineApplication>(pHttpApplication);
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
else
|
||||
{
|
||||
try
|
||||
{
|
||||
const WebConfigConfigurationSource configurationSource(m_pServer.GetAdminManager(), pHttpApplication);
|
||||
ShimOptions options(configurationSource);
|
||||
|
||||
const auto hr = TryCreateApplication(pHttpContext, options);
|
||||
|
||||
if (FAILED_LOG(hr))
|
||||
{
|
||||
// Log the failure and update application info to not try again
|
||||
EventLog::Error(
|
||||
ASPNETCORE_EVENT_ADD_APPLICATION_ERROR,
|
||||
ASPNETCORE_EVENT_ADD_APPLICATION_ERROR_MSG,
|
||||
pHttpApplication.GetApplicationId(),
|
||||
hr);
|
||||
|
||||
m_pApplication = make_application<ServerErrorApplication>(
|
||||
pHttpApplication,
|
||||
hr,
|
||||
g_hServerModule,
|
||||
options.QueryDisableStartupPage(),
|
||||
options.QueryHostingModel() == APP_HOSTING_MODEL::HOSTING_IN_PROCESS ? IN_PROCESS_SHIM_STATIC_HTML : OUT_OF_PROCESS_SHIM_STATIC_HTML);
|
||||
}
|
||||
return S_OK;
|
||||
}
|
||||
catch (ConfigurationLoadException &ex)
|
||||
{
|
||||
EventLog::Error(
|
||||
ASPNETCORE_CONFIGURATION_LOAD_ERROR,
|
||||
ASPNETCORE_CONFIGURATION_LOAD_ERROR_MSG,
|
||||
ex.get_message().c_str());
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
EventLog::Error(
|
||||
ASPNETCORE_CONFIGURATION_LOAD_ERROR,
|
||||
ASPNETCORE_CONFIGURATION_LOAD_ERROR_MSG,
|
||||
L"");
|
||||
}
|
||||
|
||||
m_pApplication = make_application<ServerErrorApplication>(
|
||||
pHttpApplication,
|
||||
E_FAIL,
|
||||
g_hServerModule);
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
}
|
||||
|
||||
HRESULT
|
||||
APPLICATION_INFO::TryCreateApplication(IHttpContext& pHttpContext, const ShimOptions& options)
|
||||
{
|
||||
RETURN_IF_FAILED(m_handlerResolver.GetApplicationFactory(*pHttpContext.GetApplication(), m_pApplicationFactory, options));
|
||||
LOG_INFO(L"Creating handler application");
|
||||
|
||||
IAPPLICATION * newApplication;
|
||||
RETURN_IF_FAILED(m_pApplicationFactory->Execute(
|
||||
&m_pServer,
|
||||
&pHttpContext,
|
||||
&newApplication));
|
||||
|
||||
m_pApplication.reset(newApplication);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT
|
||||
APPLICATION_INFO::TryCreateHandler(
|
||||
IHttpContext& pHttpContext,
|
||||
std::unique_ptr<IREQUEST_HANDLER, IREQUEST_HANDLER_DELETER>& pHandler)
|
||||
{
|
||||
if (m_pApplication != nullptr)
|
||||
{
|
||||
IREQUEST_HANDLER * newHandler;
|
||||
const auto result = m_pApplication->TryCreateHandler(&pHttpContext, &newHandler);
|
||||
RETURN_IF_FAILED(result);
|
||||
|
||||
if (result == S_OK)
|
||||
{
|
||||
pHandler.reset(newHandler);
|
||||
// another thread created the application
|
||||
return S_OK;
|
||||
}
|
||||
}
|
||||
return S_FALSE;
|
||||
}
|
||||
|
||||
VOID
|
||||
APPLICATION_INFO::ShutDownApplication(bool fServerInitiated)
|
||||
{
|
||||
SRWExclusiveLock lock(m_applicationLock);
|
||||
|
||||
if (m_pApplication)
|
||||
{
|
||||
LOG_INFOF(L"Stopping application '%ls'", QueryApplicationInfoKey().c_str());
|
||||
m_pApplication->Stop(fServerInitiated);
|
||||
m_pApplication = nullptr;
|
||||
m_pApplicationFactory = nullptr;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,92 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "hostfxroptions.h"
|
||||
#include "iapplication.h"
|
||||
#include "SRWSharedLock.h"
|
||||
#include "HandlerResolver.h"
|
||||
|
||||
#define API_BUFFER_TOO_SMALL 0x80008098
|
||||
|
||||
extern BOOL g_fRecycleProcessCalled;
|
||||
|
||||
class APPLICATION_INFO: NonCopyable
|
||||
{
|
||||
public:
|
||||
|
||||
APPLICATION_INFO(
|
||||
IHttpServer &pServer,
|
||||
IHttpApplication &pApplication,
|
||||
HandlerResolver &pHandlerResolver
|
||||
) :
|
||||
m_pServer(pServer),
|
||||
m_handlerResolver(pHandlerResolver),
|
||||
m_strConfigPath(pApplication.GetAppConfigPath()),
|
||||
m_strInfoKey(pApplication.GetApplicationId())
|
||||
{
|
||||
InitializeSRWLock(&m_applicationLock);
|
||||
}
|
||||
|
||||
~APPLICATION_INFO() = default;
|
||||
|
||||
const std::wstring&
|
||||
QueryApplicationInfoKey() noexcept
|
||||
{
|
||||
return m_strInfoKey;
|
||||
}
|
||||
|
||||
const std::wstring&
|
||||
QueryConfigPath() noexcept
|
||||
{
|
||||
return m_strConfigPath;
|
||||
}
|
||||
|
||||
VOID
|
||||
ShutDownApplication(bool fServerInitiated);
|
||||
|
||||
HRESULT
|
||||
CreateHandler(
|
||||
IHttpContext& pHttpContext,
|
||||
std::unique_ptr<IREQUEST_HANDLER, IREQUEST_HANDLER_DELETER>& pHandler);
|
||||
|
||||
bool ConfigurationPathApplies(const std::wstring& path)
|
||||
{
|
||||
// We need to check that the last character of the config path
|
||||
// is either a null terminator or a slash.
|
||||
// This checks the case where the config path was
|
||||
// MACHINE/WEBROOT/site and your site path is MACHINE/WEBROOT/siteTest
|
||||
auto const changed = m_strConfigPath._Starts_with(path);
|
||||
if (changed)
|
||||
{
|
||||
const auto lastChar = m_strConfigPath[m_strConfigPath.length()];
|
||||
return lastChar == L'\0' || lastChar == L'/';
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
HRESULT
|
||||
TryCreateHandler(
|
||||
IHttpContext& pHttpContext,
|
||||
std::unique_ptr<IREQUEST_HANDLER, IREQUEST_HANDLER_DELETER>& pHandler);
|
||||
|
||||
HRESULT
|
||||
CreateApplication(IHttpContext& pHttpContext);
|
||||
|
||||
HRESULT
|
||||
TryCreateApplication(IHttpContext& pHttpContext, const ShimOptions& options);
|
||||
|
||||
IHttpServer &m_pServer;
|
||||
HandlerResolver &m_handlerResolver;
|
||||
|
||||
std::wstring m_strConfigPath;
|
||||
std::wstring m_strInfoKey;
|
||||
SRWLOCK m_applicationLock {};
|
||||
|
||||
std::unique_ptr<ApplicationFactory> m_pApplicationFactory;
|
||||
std::unique_ptr<IAPPLICATION, IAPPLICATION_DELETER> m_pApplication;
|
||||
};
|
||||
|
||||
|
|
@ -0,0 +1,183 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
|
||||
#include "applicationmanager.h"
|
||||
|
||||
#include "proxymodule.h"
|
||||
#include "resources.h"
|
||||
#include "SRWExclusiveLock.h"
|
||||
#include "exceptions.h"
|
||||
#include "EventLog.h"
|
||||
|
||||
extern BOOL g_fInShutdown;
|
||||
|
||||
//
|
||||
// Retrieves the application info from the application manager
|
||||
// Will create the application info if it isn't initialized
|
||||
//
|
||||
HRESULT
|
||||
APPLICATION_MANAGER::GetOrCreateApplicationInfo(
|
||||
_In_ IHttpContext& pHttpContext,
|
||||
_Out_ std::shared_ptr<APPLICATION_INFO>& ppApplicationInfo
|
||||
)
|
||||
{
|
||||
auto &pApplication = *pHttpContext.GetApplication();
|
||||
|
||||
// The configuration path is unique for each application and is used for the
|
||||
// key in the applicationInfoHash.
|
||||
std::wstring pszApplicationId = pApplication.GetApplicationId();
|
||||
|
||||
{
|
||||
// When accessing the m_pApplicationInfoHash, we need to acquire the application manager
|
||||
// lock to avoid races on setting state.
|
||||
SRWSharedLock readLock(m_srwLock);
|
||||
|
||||
if (g_fInShutdown)
|
||||
{
|
||||
return HRESULT_FROM_WIN32(ERROR_SERVER_SHUTDOWN_IN_PROGRESS);
|
||||
}
|
||||
|
||||
const auto pair = m_pApplicationInfoHash.find(pszApplicationId);
|
||||
if (pair != m_pApplicationInfoHash.end())
|
||||
{
|
||||
ppApplicationInfo = pair->second;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
// It's important to release read lock here so exclusive lock
|
||||
// can be reacquired later as SRW lock doesn't allow upgrades
|
||||
}
|
||||
|
||||
// Take exclusive lock before creating the application
|
||||
SRWExclusiveLock writeLock(m_srwLock);
|
||||
|
||||
if (!m_fDebugInitialize)
|
||||
{
|
||||
DebugInitializeFromConfig(m_pHttpServer, pApplication);
|
||||
m_fDebugInitialize = TRUE;
|
||||
}
|
||||
|
||||
// Check if other thread created the application
|
||||
const auto pair = m_pApplicationInfoHash.find(pszApplicationId);
|
||||
if (pair != m_pApplicationInfoHash.end())
|
||||
{
|
||||
ppApplicationInfo = pair->second;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
ppApplicationInfo = std::make_shared<APPLICATION_INFO>(m_pHttpServer, pApplication, m_handlerResolver);
|
||||
m_pApplicationInfoHash.emplace(pszApplicationId, ppApplicationInfo);
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
//
|
||||
// Finds any applications affected by a configuration change and calls Recycle on them
|
||||
// InProcess: Triggers g_httpServer->RecycleProcess() and keep the application inside of the manager.
|
||||
// This will cause a shutdown event to occur through the global stop listening event.
|
||||
// OutOfProcess: Removes all applications in the application manager and calls Recycle, which will call Shutdown,
|
||||
// on each application.
|
||||
//
|
||||
HRESULT
|
||||
APPLICATION_MANAGER::RecycleApplicationFromManager(
|
||||
_In_ LPCWSTR pszApplicationId
|
||||
)
|
||||
{
|
||||
try
|
||||
{
|
||||
std::vector<std::shared_ptr<APPLICATION_INFO>> applicationsToRecycle;
|
||||
|
||||
if (g_fInShutdown)
|
||||
{
|
||||
// We are already shutting down, ignore this event as a global configuration change event
|
||||
// can occur after global stop listening for some reason.
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
{
|
||||
SRWExclusiveLock lock(m_srwLock);
|
||||
if (g_fInShutdown)
|
||||
{
|
||||
return S_OK;
|
||||
}
|
||||
const std::wstring configurationPath = pszApplicationId;
|
||||
|
||||
auto itr = m_pApplicationInfoHash.begin();
|
||||
while (itr != m_pApplicationInfoHash.end())
|
||||
{
|
||||
if (itr->second->ConfigurationPathApplies(configurationPath))
|
||||
{
|
||||
applicationsToRecycle.emplace_back(itr->second);
|
||||
itr = m_pApplicationInfoHash.erase(itr);
|
||||
}
|
||||
else
|
||||
{
|
||||
++itr;
|
||||
}
|
||||
}
|
||||
|
||||
// All applications were unloaded reset handler resolver validation logic
|
||||
if (m_pApplicationInfoHash.empty())
|
||||
{
|
||||
m_handlerResolver.ResetHostingModel();
|
||||
}
|
||||
}
|
||||
|
||||
// If we receive a request at this point.
|
||||
// OutOfProcess: we will create a new application with new configuration
|
||||
// InProcess: the request would have to be rejected, as we are about to call g_HttpServer->RecycleProcess
|
||||
// on the worker proocess
|
||||
|
||||
if (!applicationsToRecycle.empty())
|
||||
{
|
||||
for (auto& application : applicationsToRecycle)
|
||||
{
|
||||
try
|
||||
{
|
||||
application->ShutDownApplication(/* fServerInitiated */ false);
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
LOG_ERRORF(L"Failed to stop application '%ls'", application->QueryApplicationInfoKey().c_str());
|
||||
OBSERVE_CAUGHT_EXCEPTION();
|
||||
|
||||
// Failed to recycle an application. Log an event
|
||||
EventLog::Error(
|
||||
ASPNETCORE_EVENT_RECYCLE_APP_FAILURE,
|
||||
ASPNETCORE_EVENT_RECYCLE_FAILURE_CONFIGURATION_MSG,
|
||||
pszApplicationId);
|
||||
// Need to recycle the process as we cannot recycle the application
|
||||
if (!g_fRecycleProcessCalled)
|
||||
{
|
||||
g_fRecycleProcessCalled = TRUE;
|
||||
m_pHttpServer.RecycleProcess(L"AspNetCore Recycle Process on Demand Due Application Recycle Error");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
CATCH_RETURN();
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
//
|
||||
// Shutsdown all applications in the application hashtable
|
||||
// Only called by OnGlobalStopListening.
|
||||
//
|
||||
VOID
|
||||
APPLICATION_MANAGER::ShutDown()
|
||||
{
|
||||
// We are guaranteed to only have one outstanding OnGlobalStopListening event at a time
|
||||
// However, it is possible to receive multiple OnGlobalStopListening events
|
||||
// Protect against this by checking if we already shut down.
|
||||
g_fInShutdown = TRUE;
|
||||
|
||||
// During shutdown we lock until we delete the application
|
||||
SRWExclusiveLock lock(m_srwLock);
|
||||
for (auto &pair : m_pApplicationInfoHash)
|
||||
{
|
||||
pair.second->ShutDownApplication(/* fServerInitiated */ true);
|
||||
pair.second = nullptr;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "applicationinfo.h"
|
||||
#include "multisz.h"
|
||||
#include "exceptions.h"
|
||||
#include <unordered_map>
|
||||
|
||||
//
|
||||
// This class will manage the lifecycle of all Asp.Net Core applciation
|
||||
// It should be global singleton.
|
||||
// Should always call GetInstance to get the object instance
|
||||
//
|
||||
|
||||
|
||||
class APPLICATION_MANAGER
|
||||
{
|
||||
public:
|
||||
|
||||
HRESULT
|
||||
GetOrCreateApplicationInfo(
|
||||
_In_ IHttpContext& pHttpContext,
|
||||
_Out_ std::shared_ptr<APPLICATION_INFO>& ppApplicationInfo
|
||||
);
|
||||
|
||||
HRESULT
|
||||
RecycleApplicationFromManager(
|
||||
_In_ LPCWSTR pszApplicationId
|
||||
);
|
||||
|
||||
VOID
|
||||
ShutDown();
|
||||
|
||||
APPLICATION_MANAGER(HMODULE hModule, IHttpServer& pHttpServer) :
|
||||
m_pApplicationInfoHash(NULL),
|
||||
m_fDebugInitialize(FALSE),
|
||||
m_pHttpServer(pHttpServer),
|
||||
m_handlerResolver(hModule, pHttpServer)
|
||||
{
|
||||
InitializeSRWLock(&m_srwLock);
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
std::unordered_map<std::wstring, std::shared_ptr<APPLICATION_INFO>> m_pApplicationInfoHash;
|
||||
SRWLOCK m_srwLock {};
|
||||
BOOL m_fDebugInitialize;
|
||||
IHttpServer &m_pHttpServer;
|
||||
HandlerResolver m_handlerResolver;
|
||||
};
|
||||
|
|
@ -1,47 +0,0 @@
|
|||
<!--
|
||||
|
||||
IIS Asp.Net Core Extension Schema
|
||||
|
||||
** Please DO NOT edit this file yourself. **
|
||||
|
||||
If you want to add configuration sections to the schema, you may place
|
||||
them in .xml files similar to this one, in this directory. They will be
|
||||
picked up automatically on startup.
|
||||
|
||||
-->
|
||||
|
||||
<configSchema>
|
||||
<sectionSchema name="system.webServer/aspNetCore">
|
||||
<attribute name="processPath" type="string" expanded="true"/>
|
||||
<attribute name="arguments" type="string" expanded="true" defaultValue=""/>
|
||||
<attribute name="startupTimeLimit" type="uint" defaultValue="120" validationType="integerRange" validationParameter="0,3600"/>
|
||||
<!-- in seconds -->
|
||||
<attribute name="shutdownTimeLimit" type="uint" defaultValue="10" validationType="integerRange" validationParameter="0,600"/>
|
||||
<!-- in seconds -->
|
||||
<attribute name="rapidFailsPerMinute" type="uint" defaultValue="10" validationType="integerRange" validationParameter="0,100"/>
|
||||
<attribute name="requestTimeout" type="timeSpan" defaultValue="00:02:00" validationType="timeSpanRange" validationParameter="0,1296000,1"/>
|
||||
<attribute name="stdoutLogEnabled" type="bool" defaultValue="false" />
|
||||
<attribute name="stdoutLogFile" type="string" defaultValue=".\aspnetcore-stdout" expanded="true"/>
|
||||
<attribute name="processesPerApplication" type="uint" defaultValue="1" validationType="integerRange" validationParameter="1,100"/>
|
||||
<attribute name="forwardWindowsAuthToken" type="bool" defaultValue="true" />
|
||||
<attribute name="disableStartUpErrorPage" type="bool" defaultValue="false" />
|
||||
<attribute name="hostingModel" type="string" />
|
||||
<element name="recycleOnFileChange">
|
||||
<collection addElement="file" clearElement="clear">
|
||||
<attribute name="path" type="string" required="true" validationType="nonEmptyString" expanded="true"/>
|
||||
</collection>
|
||||
</element>
|
||||
<element name="environmentVariables">
|
||||
<collection addElement="environmentVariable" clearElement="clear" >
|
||||
<attribute name="name" type="string" required="true" validationType="nonEmptyString"/>
|
||||
<attribute name="value" type="string" required="true"/>
|
||||
</collection>
|
||||
</element>
|
||||
<element name="handlerSettings">
|
||||
<collection addElement="handlerSetting" clearElement="clear" >
|
||||
<attribute name="name" type="string" required="true" validationType="nonEmptyString"/>
|
||||
<attribute name="value" type="string" required="true"/>
|
||||
</collection>
|
||||
</element>
|
||||
</sectionSchema>
|
||||
</configSchema>
|
||||
|
|
@ -10,7 +10,7 @@
|
|||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
|
||||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||
|
||||
#define FileDescription "IIS AspNetCore Module. Commit: " CommitHash
|
||||
#define FileDescription "IIS ASP.NET Core Module V2. Commit: " CommitHash
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
|
|
@ -76,7 +76,7 @@ BEGIN
|
|||
BEGIN
|
||||
BLOCK "040904b0"
|
||||
BEGIN
|
||||
VALUE "CompanyName", "Microsoft Corporation"
|
||||
VALUE "CompanyName", "Microsoft"
|
||||
VALUE "FileDescription", FileDescription
|
||||
VALUE "FileVersion", FileVersionStr
|
||||
VALUE "InternalName", "aspnetcore"
|
||||
|
|
|
|||
|
|
@ -0,0 +1,165 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
|
||||
#include "applicationinfo.h"
|
||||
#include "applicationmanager.h"
|
||||
#include "proxymodule.h"
|
||||
#include "globalmodule.h"
|
||||
#include "acache.h"
|
||||
#include "debugutil.h"
|
||||
#include "resources.h"
|
||||
#include "exceptions.h"
|
||||
#include "EventLog.h"
|
||||
|
||||
DECLARE_DEBUG_PRINT_OBJECT("aspnetcorev2.dll");
|
||||
|
||||
HANDLE g_hEventLog = nullptr;
|
||||
BOOL g_fRecycleProcessCalled = FALSE;
|
||||
BOOL g_fInShutdown = FALSE;
|
||||
HINSTANCE g_hServerModule;
|
||||
|
||||
VOID
|
||||
StaticCleanup()
|
||||
{
|
||||
if (g_hEventLog != nullptr)
|
||||
{
|
||||
DeregisterEventSource(g_hEventLog);
|
||||
g_hEventLog = nullptr;
|
||||
}
|
||||
|
||||
DebugStop();
|
||||
ALLOC_CACHE_HANDLER::StaticTerminate();
|
||||
}
|
||||
|
||||
BOOL WINAPI DllMain(HMODULE hModule,
|
||||
DWORD ul_reason_for_call,
|
||||
LPVOID lpReserved
|
||||
)
|
||||
{
|
||||
UNREFERENCED_PARAMETER(lpReserved);
|
||||
|
||||
switch (ul_reason_for_call)
|
||||
{
|
||||
case DLL_PROCESS_ATTACH:
|
||||
|
||||
ALLOC_CACHE_HANDLER::StaticInitialize();
|
||||
g_hServerModule = hModule;
|
||||
DisableThreadLibraryCalls(hModule);
|
||||
DebugInitialize(hModule);
|
||||
break;
|
||||
case DLL_PROCESS_DETACH:
|
||||
|
||||
// IIS can cause dll detach to occur before we receive global notifications
|
||||
// For example, when we switch the bitness of the worker process,
|
||||
// this is a bug in IIS. To try to avoid AVs, we will set a global flag
|
||||
g_fInShutdown = TRUE;
|
||||
StaticCleanup();
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
HRESULT
|
||||
__stdcall
|
||||
RegisterModule(
|
||||
DWORD dwServerVersion,
|
||||
IHttpModuleRegistrationInfo * pModuleInfo,
|
||||
IHttpServer * pHttpServer
|
||||
) try
|
||||
/*++
|
||||
|
||||
Routine description:
|
||||
|
||||
Function called by IIS immediately after loading the module, used to let
|
||||
IIS know what notifications the module is interested in
|
||||
|
||||
Arguments:
|
||||
|
||||
dwServerVersion - IIS version the module is being loaded on
|
||||
pModuleInfo - info regarding this module
|
||||
pHttpServer - callback functions which can be used by the module at
|
||||
any point
|
||||
|
||||
Return value:
|
||||
|
||||
HRESULT
|
||||
|
||||
--*/
|
||||
{
|
||||
HKEY hKey {};
|
||||
BOOL fDisableANCM = FALSE;
|
||||
|
||||
UNREFERENCED_PARAMETER(dwServerVersion);
|
||||
|
||||
if (pHttpServer->IsCommandLineLaunch())
|
||||
{
|
||||
g_hEventLog = RegisterEventSource(nullptr, ASPNETCORE_IISEXPRESS_EVENT_PROVIDER);
|
||||
}
|
||||
else
|
||||
{
|
||||
g_hEventLog = RegisterEventSource(nullptr, ASPNETCORE_EVENT_PROVIDER);
|
||||
}
|
||||
|
||||
// check whether the feature is disabled due to security reason
|
||||
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,
|
||||
L"SOFTWARE\\Microsoft\\IIS Extensions\\IIS AspNetCore Module V2\\Parameters",
|
||||
0,
|
||||
KEY_READ,
|
||||
&hKey) == NO_ERROR)
|
||||
{
|
||||
DWORD dwType = 0;
|
||||
DWORD dwData = 0;
|
||||
DWORD cbData;
|
||||
|
||||
cbData = sizeof(dwData);
|
||||
if ((RegQueryValueEx(hKey,
|
||||
L"DisableANCM",
|
||||
nullptr,
|
||||
&dwType,
|
||||
(LPBYTE)&dwData,
|
||||
&cbData) == NO_ERROR) &&
|
||||
(dwType == REG_DWORD))
|
||||
{
|
||||
fDisableANCM = (dwData != 0);
|
||||
}
|
||||
|
||||
RegCloseKey(hKey);
|
||||
}
|
||||
|
||||
if (fDisableANCM)
|
||||
{
|
||||
// Logging
|
||||
EventLog::Warn(
|
||||
ASPNETCORE_EVENT_MODULE_DISABLED,
|
||||
ASPNETCORE_EVENT_MODULE_DISABLED_MSG);
|
||||
// this will return 500 error to client
|
||||
// as we did not register the module
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
//
|
||||
// Create the factory before any static initialization.
|
||||
// The ASPNET_CORE_PROXY_MODULE_FACTORY::Terminate method will clean any
|
||||
// static object initialized.
|
||||
//
|
||||
|
||||
auto applicationManager = std::make_shared<APPLICATION_MANAGER>(g_hServerModule, *pHttpServer);
|
||||
auto moduleFactory = std::make_unique<ASPNET_CORE_PROXY_MODULE_FACTORY>(pModuleInfo->GetId(), applicationManager);
|
||||
|
||||
RETURN_IF_FAILED(pModuleInfo->SetRequestNotifications(
|
||||
moduleFactory.release(),
|
||||
RQ_EXECUTE_REQUEST_HANDLER,
|
||||
0));
|
||||
;
|
||||
auto pGlobalModule = std::make_unique<ASPNET_CORE_GLOBAL_MODULE>(std::move(applicationManager));
|
||||
|
||||
RETURN_IF_FAILED(pModuleInfo->SetGlobalNotifications(
|
||||
pGlobalModule.release(),
|
||||
GL_CONFIGURATION_CHANGE | // Configuration change trigers IIS application stop
|
||||
GL_STOP_LISTENING)); // worker process stop or recycle
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
CATCH_RETURN()
|
||||
|
|
@ -1,9 +1,13 @@
|
|||
#include "precomp.hxx"
|
||||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
|
||||
ASPNET_CORE_GLOBAL_MODULE::ASPNET_CORE_GLOBAL_MODULE(
|
||||
APPLICATION_MANAGER* pApplicationManager)
|
||||
#include "globalmodule.h"
|
||||
|
||||
extern BOOL g_fInShutdown;
|
||||
|
||||
ASPNET_CORE_GLOBAL_MODULE::ASPNET_CORE_GLOBAL_MODULE(std::shared_ptr<APPLICATION_MANAGER> pApplicationManager) noexcept
|
||||
:m_pApplicationManager(std::move(pApplicationManager))
|
||||
{
|
||||
m_pApplicationManager = pApplicationManager;
|
||||
}
|
||||
|
||||
//
|
||||
|
|
@ -17,17 +21,16 @@ ASPNET_CORE_GLOBAL_MODULE::OnGlobalStopListening(
|
|||
{
|
||||
UNREFERENCED_PARAMETER(pProvider);
|
||||
|
||||
LOG_INFO(L"ASPNET_CORE_GLOBAL_MODULE::OnGlobalStopListening");
|
||||
|
||||
if (g_fInShutdown)
|
||||
{
|
||||
// Avoid receiving two shutudown notifications.
|
||||
return GL_NOTIFICATION_CONTINUE;
|
||||
}
|
||||
|
||||
DBG_ASSERT(m_pApplicationManager);
|
||||
// we should let application manager to shutdown all allication
|
||||
// and dereference it as some requests may still reference to application manager
|
||||
m_pApplicationManager->ShutDown();
|
||||
m_pApplicationManager = NULL;
|
||||
m_pApplicationManager = nullptr;
|
||||
|
||||
// Return processing to the pipeline.
|
||||
return GL_NOTIFICATION_CONTINUE;
|
||||
|
|
@ -49,14 +52,16 @@ ASPNET_CORE_GLOBAL_MODULE::OnGlobalConfigurationChange(
|
|||
// Retrieve the path that has changed.
|
||||
PCWSTR pwszChangePath = pProvider->GetChangePath();
|
||||
|
||||
LOG_INFOF(L"ASPNET_CORE_GLOBAL_MODULE::OnGlobalConfigurationChange '%ls'", pwszChangePath);
|
||||
|
||||
// Test for an error.
|
||||
if (NULL != pwszChangePath &&
|
||||
if (nullptr != pwszChangePath &&
|
||||
_wcsicmp(pwszChangePath, L"MACHINE") != 0 &&
|
||||
_wcsicmp(pwszChangePath, L"MACHINE/WEBROOT") != 0)
|
||||
{
|
||||
if (m_pApplicationManager != NULL)
|
||||
if (m_pApplicationManager)
|
||||
{
|
||||
m_pApplicationManager->RecycleApplicationFromManager(pwszChangePath);
|
||||
m_pApplicationManager->RecycleApplicationFromManager(pwszChangePath);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -3,21 +3,22 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
class ASPNET_CORE_GLOBAL_MODULE : public CGlobalModule
|
||||
#include "applicationmanager.h"
|
||||
|
||||
class ASPNET_CORE_GLOBAL_MODULE : NonCopyable, public CGlobalModule
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
ASPNET_CORE_GLOBAL_MODULE(
|
||||
APPLICATION_MANAGER* pApplicationManager
|
||||
);
|
||||
std::shared_ptr<APPLICATION_MANAGER> pApplicationManager
|
||||
) noexcept;
|
||||
|
||||
~ASPNET_CORE_GLOBAL_MODULE()
|
||||
{
|
||||
}
|
||||
virtual ~ASPNET_CORE_GLOBAL_MODULE() = default;
|
||||
|
||||
VOID Terminate()
|
||||
VOID Terminate() override
|
||||
{
|
||||
LOG_INFO(L"ASPNET_CORE_GLOBAL_MODULE::Terminate");
|
||||
// Remove the class from memory.
|
||||
delete this;
|
||||
}
|
||||
|
|
@ -25,13 +26,13 @@ public:
|
|||
GLOBAL_NOTIFICATION_STATUS
|
||||
OnGlobalStopListening(
|
||||
_In_ IGlobalStopListeningProvider * pProvider
|
||||
);
|
||||
) override;
|
||||
|
||||
GLOBAL_NOTIFICATION_STATUS
|
||||
OnGlobalConfigurationChange(
|
||||
_In_ IGlobalConfigurationChangeProvider * pProvider
|
||||
);
|
||||
) override;
|
||||
|
||||
private:
|
||||
APPLICATION_MANAGER * m_pApplicationManager;
|
||||
std::shared_ptr<APPLICATION_MANAGER> m_pApplicationManager;
|
||||
};
|
||||
|
|
@ -0,0 +1,213 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
|
||||
#include "proxymodule.h"
|
||||
|
||||
#include "applicationmanager.h"
|
||||
#include "applicationinfo.h"
|
||||
#include "exceptions.h"
|
||||
#include "DisconnectHandler.h"
|
||||
#include "SRWExclusiveLock.h"
|
||||
|
||||
extern BOOL g_fInShutdown;
|
||||
|
||||
__override
|
||||
|
||||
ASPNET_CORE_PROXY_MODULE_FACTORY::ASPNET_CORE_PROXY_MODULE_FACTORY(HTTP_MODULE_ID moduleId, std::shared_ptr<APPLICATION_MANAGER> applicationManager) noexcept
|
||||
: m_pApplicationManager(std::move(applicationManager)),
|
||||
m_moduleId(moduleId)
|
||||
{
|
||||
}
|
||||
|
||||
HRESULT
|
||||
ASPNET_CORE_PROXY_MODULE_FACTORY::GetHttpModule(
|
||||
CHttpModule ** ppModule,
|
||||
IModuleAllocator * pAllocator
|
||||
)
|
||||
{
|
||||
|
||||
#pragma warning( push )
|
||||
#pragma warning ( disable : 26409 ) // Disable "Avoid using new"
|
||||
*ppModule = new (pAllocator) ASPNET_CORE_PROXY_MODULE(m_moduleId, m_pApplicationManager);
|
||||
#pragma warning( push )
|
||||
if (*ppModule == nullptr)
|
||||
{
|
||||
return E_OUTOFMEMORY;
|
||||
}
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
__override
|
||||
VOID
|
||||
ASPNET_CORE_PROXY_MODULE_FACTORY::Terminate(
|
||||
VOID
|
||||
) noexcept
|
||||
/*++
|
||||
|
||||
Routine description:
|
||||
|
||||
Function called by IIS for global (non-request-specific) notifications
|
||||
|
||||
Arguments:
|
||||
|
||||
None.
|
||||
|
||||
Return value:
|
||||
|
||||
None
|
||||
|
||||
--*/
|
||||
{
|
||||
delete this;
|
||||
}
|
||||
|
||||
ASPNET_CORE_PROXY_MODULE::ASPNET_CORE_PROXY_MODULE(HTTP_MODULE_ID moduleId, std::shared_ptr<APPLICATION_MANAGER> applicationManager) noexcept
|
||||
: m_pApplicationManager(std::move(applicationManager)),
|
||||
m_pApplicationInfo(nullptr),
|
||||
m_pHandler(nullptr),
|
||||
m_moduleId(moduleId),
|
||||
m_pDisconnectHandler(nullptr)
|
||||
{
|
||||
InitializeSRWLock(&m_requestLock);
|
||||
}
|
||||
|
||||
ASPNET_CORE_PROXY_MODULE::~ASPNET_CORE_PROXY_MODULE()
|
||||
{
|
||||
RemoveDisconnectHandler();
|
||||
}
|
||||
|
||||
__override
|
||||
REQUEST_NOTIFICATION_STATUS
|
||||
ASPNET_CORE_PROXY_MODULE::OnExecuteRequestHandler(
|
||||
IHttpContext * pHttpContext,
|
||||
IHttpEventProvider *
|
||||
)
|
||||
{
|
||||
HRESULT hr = S_OK;
|
||||
REQUEST_NOTIFICATION_STATUS retVal = RQ_NOTIFICATION_CONTINUE;
|
||||
|
||||
TraceContextScope traceScope(pHttpContext->GetTraceContext());
|
||||
// We don't want OnAsyncCompletion to complete request before OnExecuteRequestHandler exits
|
||||
auto lock = SRWExclusiveLock(m_requestLock);
|
||||
|
||||
try
|
||||
{
|
||||
if (g_fInShutdown)
|
||||
{
|
||||
FINISHED(HRESULT_FROM_WIN32(ERROR_SERVER_SHUTDOWN_IN_PROGRESS));
|
||||
}
|
||||
|
||||
FINISHED_IF_FAILED(m_pApplicationManager->GetOrCreateApplicationInfo(
|
||||
*pHttpContext,
|
||||
m_pApplicationInfo));
|
||||
|
||||
FINISHED_IF_FAILED(m_pApplicationInfo->CreateHandler(*pHttpContext, m_pHandler));
|
||||
|
||||
SetupDisconnectHandler(pHttpContext);
|
||||
|
||||
retVal = m_pHandler->OnExecuteRequestHandler();
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
hr = OBSERVE_CAUGHT_EXCEPTION();
|
||||
}
|
||||
|
||||
Finished:
|
||||
if (FAILED(LOG_IF_FAILED(hr)))
|
||||
{
|
||||
retVal = RQ_NOTIFICATION_FINISH_REQUEST;
|
||||
if (hr == HRESULT_FROM_WIN32(ERROR_SERVER_SHUTDOWN_IN_PROGRESS))
|
||||
{
|
||||
pHttpContext->GetResponse()->SetStatus(503, "Service Unavailable", 0, hr);
|
||||
}
|
||||
else
|
||||
{
|
||||
pHttpContext->GetResponse()->SetStatus(500, "Internal Server Error", 0, hr);
|
||||
}
|
||||
}
|
||||
|
||||
return HandleNotificationStatus(retVal);
|
||||
}
|
||||
|
||||
__override
|
||||
REQUEST_NOTIFICATION_STATUS
|
||||
ASPNET_CORE_PROXY_MODULE::OnAsyncCompletion(
|
||||
IHttpContext * pHttpContext,
|
||||
DWORD,
|
||||
BOOL,
|
||||
IHttpEventProvider *,
|
||||
IHttpCompletionInfo * pCompletionInfo
|
||||
)
|
||||
{
|
||||
TraceContextScope traceScope(pHttpContext->GetTraceContext());
|
||||
// We don't want OnAsyncCompletion to complete request before OnExecuteRequestHandler exits
|
||||
auto lock = SRWExclusiveLock(m_requestLock);
|
||||
|
||||
try
|
||||
{
|
||||
return HandleNotificationStatus(m_pHandler->OnAsyncCompletion(
|
||||
pCompletionInfo->GetCompletionBytes(),
|
||||
pCompletionInfo->GetCompletionStatus()));
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
OBSERVE_CAUGHT_EXCEPTION();
|
||||
return HandleNotificationStatus(RQ_NOTIFICATION_FINISH_REQUEST);
|
||||
}
|
||||
}
|
||||
|
||||
REQUEST_NOTIFICATION_STATUS ASPNET_CORE_PROXY_MODULE::HandleNotificationStatus(REQUEST_NOTIFICATION_STATUS status) noexcept
|
||||
{
|
||||
if (status != RQ_NOTIFICATION_PENDING)
|
||||
{
|
||||
RemoveDisconnectHandler();
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
void ASPNET_CORE_PROXY_MODULE::SetupDisconnectHandler(IHttpContext * pHttpContext)
|
||||
{
|
||||
auto connection = pHttpContext
|
||||
->GetConnection();
|
||||
|
||||
// connection might be null in when applicationInitialization is running
|
||||
if (connection == nullptr)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
auto moduleContainer = connection->GetModuleContextContainer();
|
||||
|
||||
#pragma warning( push )
|
||||
#pragma warning ( disable : 26466 ) // Disable "Don't use static_cast downcasts". We build without RTTI support so dynamic_cast is not available
|
||||
auto pDisconnectHandler = static_cast<DisconnectHandler*>(moduleContainer->GetConnectionModuleContext(m_moduleId));
|
||||
#pragma warning( push )
|
||||
|
||||
if (pDisconnectHandler == nullptr)
|
||||
{
|
||||
auto newHandler = std::make_unique<DisconnectHandler>(pHttpContext->GetConnection());
|
||||
pDisconnectHandler = newHandler.get();
|
||||
// ModuleContextContainer takes ownership of disconnectHandler
|
||||
// we are trusting that it would not release it before deleting the context
|
||||
LOG_IF_FAILED(moduleContainer->SetConnectionModuleContext(static_cast<IHttpConnectionStoredContext*>(newHandler.release()), m_moduleId));
|
||||
}
|
||||
|
||||
// make code analysis happy
|
||||
if (pDisconnectHandler != nullptr)
|
||||
{
|
||||
pDisconnectHandler->SetHandler(::ReferenceRequestHandler(m_pHandler.get()));
|
||||
m_pDisconnectHandler = pDisconnectHandler;
|
||||
}
|
||||
}
|
||||
|
||||
void ASPNET_CORE_PROXY_MODULE::RemoveDisconnectHandler() noexcept
|
||||
{
|
||||
auto handler = m_pDisconnectHandler;
|
||||
m_pDisconnectHandler = nullptr;
|
||||
|
||||
if (handler != nullptr)
|
||||
{
|
||||
handler->RemoveHandler();
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,84 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
#include "applicationinfo.h"
|
||||
#include "irequesthandler.h"
|
||||
#include "applicationmanager.h"
|
||||
#include "DisconnectHandler.h"
|
||||
|
||||
extern HTTP_MODULE_ID g_pModuleId;
|
||||
|
||||
class ASPNET_CORE_PROXY_MODULE : NonCopyable, public CHttpModule
|
||||
{
|
||||
public:
|
||||
|
||||
ASPNET_CORE_PROXY_MODULE(HTTP_MODULE_ID moduleId, std::shared_ptr<APPLICATION_MANAGER> applicationManager) noexcept;
|
||||
|
||||
~ASPNET_CORE_PROXY_MODULE();
|
||||
|
||||
void * operator new(size_t size, IModuleAllocator * pPlacement)
|
||||
{
|
||||
return pPlacement->AllocateMemory(static_cast<DWORD>(size));
|
||||
}
|
||||
|
||||
VOID
|
||||
operator delete(
|
||||
void *
|
||||
)
|
||||
{}
|
||||
|
||||
__override
|
||||
REQUEST_NOTIFICATION_STATUS
|
||||
OnExecuteRequestHandler(
|
||||
IHttpContext * pHttpContext,
|
||||
IHttpEventProvider * pProvider
|
||||
) override;
|
||||
|
||||
__override
|
||||
REQUEST_NOTIFICATION_STATUS
|
||||
OnAsyncCompletion(
|
||||
IHttpContext * pHttpContext,
|
||||
DWORD dwNotification,
|
||||
BOOL fPostNotification,
|
||||
IHttpEventProvider * pProvider,
|
||||
IHttpCompletionInfo * pCompletionInfo
|
||||
) override;
|
||||
|
||||
|
||||
private:
|
||||
REQUEST_NOTIFICATION_STATUS
|
||||
HandleNotificationStatus(REQUEST_NOTIFICATION_STATUS status) noexcept;
|
||||
|
||||
void SetupDisconnectHandler(IHttpContext * pHttpContext);
|
||||
void RemoveDisconnectHandler() noexcept;
|
||||
|
||||
std::shared_ptr<APPLICATION_MANAGER> m_pApplicationManager;
|
||||
std::shared_ptr<APPLICATION_INFO> m_pApplicationInfo;
|
||||
std::unique_ptr<IREQUEST_HANDLER, IREQUEST_HANDLER_DELETER> m_pHandler;
|
||||
HTTP_MODULE_ID m_moduleId;
|
||||
DisconnectHandler * m_pDisconnectHandler;
|
||||
SRWLOCK m_requestLock {};
|
||||
};
|
||||
|
||||
class ASPNET_CORE_PROXY_MODULE_FACTORY : NonCopyable, public IHttpModuleFactory
|
||||
{
|
||||
public:
|
||||
ASPNET_CORE_PROXY_MODULE_FACTORY(HTTP_MODULE_ID moduleId, std::shared_ptr<APPLICATION_MANAGER> applicationManager) noexcept;
|
||||
virtual ~ASPNET_CORE_PROXY_MODULE_FACTORY() = default;
|
||||
|
||||
HRESULT
|
||||
GetHttpModule(
|
||||
CHttpModule ** ppModule,
|
||||
IModuleAllocator * pAllocator
|
||||
) override;
|
||||
|
||||
VOID
|
||||
Terminate() noexcept override;
|
||||
|
||||
private:
|
||||
std::shared_ptr<APPLICATION_MANAGER> m_pApplicationManager;
|
||||
HTTP_MODULE_ID m_moduleId;
|
||||
};
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
//{{NO_DEPENDENCIES}}
|
||||
// Microsoft Visual C++ generated include file.
|
||||
// Used by HtmlResponses.rc
|
||||
//
|
||||
#define IN_PROCESS_SHIM_STATIC_HTML 101
|
||||
#define OUT_OF_PROCESS_SHIM_STATIC_HTML 102
|
||||
#define UNKNOWN_HOSTING_STATIC_HTML 103
|
||||
|
||||
|
||||
// Next default values for new objects
|
||||
//
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||
#define _APS_NEXT_RESOURCE_VALUE 104
|
||||
#define _APS_NEXT_COMMAND_VALUE 40001
|
||||
#define _APS_NEXT_CONTROL_VALUE 1001
|
||||
#define _APS_NEXT_SYMED_VALUE 101
|
||||
#endif
|
||||
#endif
|
||||
|
|
@ -1,650 +0,0 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
|
||||
#include "precomp.hxx"
|
||||
|
||||
APPLICATION_INFO::~APPLICATION_INFO()
|
||||
{
|
||||
if (m_pAppOfflineHtm != NULL)
|
||||
{
|
||||
m_pAppOfflineHtm->DereferenceAppOfflineHtm();
|
||||
m_pAppOfflineHtm = NULL;
|
||||
}
|
||||
|
||||
if (m_pFileWatcherEntry != NULL)
|
||||
{
|
||||
// Mark the entry as invalid,
|
||||
// StopMonitor will close the file handle and trigger a FCN
|
||||
// the entry will delete itself when processing this FCN
|
||||
m_pFileWatcherEntry->MarkEntryInValid();
|
||||
m_pFileWatcherEntry->StopMonitor();
|
||||
m_pFileWatcherEntry->DereferenceFileWatcherEntry();
|
||||
m_pFileWatcherEntry = NULL;
|
||||
}
|
||||
|
||||
if (m_pApplication != NULL)
|
||||
{
|
||||
// shutdown the application
|
||||
m_pApplication->ShutDown();
|
||||
m_pApplication->DereferenceApplication();
|
||||
m_pApplication = NULL;
|
||||
}
|
||||
|
||||
// configuration should be dereferenced after application shutdown
|
||||
// since the former will use it during shutdown
|
||||
if (m_pConfiguration != NULL)
|
||||
{
|
||||
// Need to dereference the configuration instance
|
||||
m_pConfiguration->DereferenceConfiguration();
|
||||
m_pConfiguration = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
HRESULT
|
||||
APPLICATION_INFO::Initialize(
|
||||
_In_ ASPNETCORE_CONFIG *pConfiguration,
|
||||
_In_ FILE_WATCHER *pFileWatcher
|
||||
)
|
||||
{
|
||||
HRESULT hr = S_OK;
|
||||
|
||||
DBG_ASSERT(pConfiguration);
|
||||
DBG_ASSERT(pFileWatcher);
|
||||
|
||||
m_pConfiguration = pConfiguration;
|
||||
|
||||
// reference the configuration instance to prevent it will be not release
|
||||
// earlier in case of configuration change and shutdown
|
||||
m_pConfiguration->ReferenceConfiguration();
|
||||
|
||||
hr = m_applicationInfoKey.Initialize(pConfiguration->QueryConfigPath()->QueryStr());
|
||||
if (FAILED(hr))
|
||||
{
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
if (m_pFileWatcherEntry == NULL)
|
||||
{
|
||||
m_pFileWatcherEntry = new FILE_WATCHER_ENTRY(pFileWatcher);
|
||||
if (m_pFileWatcherEntry == NULL)
|
||||
{
|
||||
hr = E_OUTOFMEMORY;
|
||||
goto Finished;
|
||||
}
|
||||
}
|
||||
|
||||
UpdateAppOfflineFileHandle();
|
||||
|
||||
Finished:
|
||||
return hr;
|
||||
}
|
||||
|
||||
HRESULT
|
||||
APPLICATION_INFO::StartMonitoringAppOffline()
|
||||
{
|
||||
HRESULT hr = S_OK;
|
||||
if (m_pFileWatcherEntry != NULL)
|
||||
{
|
||||
hr = m_pFileWatcherEntry->Create(m_pConfiguration->QueryApplicationPhysicalPath()->QueryStr(), L"app_offline.htm", this, NULL);
|
||||
}
|
||||
return hr;
|
||||
}
|
||||
|
||||
//
|
||||
// Called by the file watcher when the app_offline.htm's file status has been changed.
|
||||
// If it finds it, we will call recycle on the application.
|
||||
//
|
||||
VOID
|
||||
APPLICATION_INFO::UpdateAppOfflineFileHandle()
|
||||
{
|
||||
STRU strFilePath;
|
||||
UTILITY::ConvertPathToFullPath(L".\\app_offline.htm",
|
||||
m_pConfiguration->QueryApplicationPhysicalPath()->QueryStr(),
|
||||
&strFilePath);
|
||||
APP_OFFLINE_HTM *pOldAppOfflineHtm = NULL;
|
||||
APP_OFFLINE_HTM *pNewAppOfflineHtm = NULL;
|
||||
|
||||
ReferenceApplicationInfo();
|
||||
|
||||
if (INVALID_FILE_ATTRIBUTES == GetFileAttributes(strFilePath.QueryStr()) &&
|
||||
GetLastError() == ERROR_FILE_NOT_FOUND)
|
||||
{
|
||||
// Check if app offline was originally present.
|
||||
// if it was, log that app_offline has been dropped.
|
||||
if (m_fAppOfflineFound)
|
||||
{
|
||||
STACK_STRU(strEventMsg, 256);
|
||||
if (SUCCEEDED(strEventMsg.SafeSnwprintf(
|
||||
ASPNETCORE_EVENT_RECYCLE_APPOFFLINE_REMOVED_MSG)))
|
||||
{
|
||||
UTILITY::LogEvent(g_hEventLog,
|
||||
EVENTLOG_INFORMATION_TYPE,
|
||||
ASPNETCORE_EVENT_RECYCLE_APPOFFLINE_REMOVED,
|
||||
strEventMsg.QueryStr());
|
||||
}
|
||||
}
|
||||
|
||||
m_fAppOfflineFound = FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
pNewAppOfflineHtm = new APP_OFFLINE_HTM(strFilePath.QueryStr());
|
||||
|
||||
if (pNewAppOfflineHtm != NULL)
|
||||
{
|
||||
if (pNewAppOfflineHtm->Load())
|
||||
{
|
||||
//
|
||||
// loaded the new app_offline.htm
|
||||
//
|
||||
pOldAppOfflineHtm = (APP_OFFLINE_HTM *)InterlockedExchangePointer((VOID**)&m_pAppOfflineHtm, pNewAppOfflineHtm);
|
||||
|
||||
if (pOldAppOfflineHtm != NULL)
|
||||
{
|
||||
pOldAppOfflineHtm->DereferenceAppOfflineHtm();
|
||||
pOldAppOfflineHtm = NULL;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// ignored the new app_offline file because the file does not exist.
|
||||
pNewAppOfflineHtm->DereferenceAppOfflineHtm();
|
||||
pNewAppOfflineHtm = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
m_fAppOfflineFound = TRUE;
|
||||
|
||||
// recycle the application
|
||||
if (m_pApplication != NULL)
|
||||
{
|
||||
STACK_STRU(strEventMsg, 256);
|
||||
if (SUCCEEDED(strEventMsg.SafeSnwprintf(
|
||||
ASPNETCORE_EVENT_RECYCLE_APPOFFLINE_MSG,
|
||||
m_pApplication->QueryConfig()->QueryApplicationPath()->QueryStr())))
|
||||
{
|
||||
UTILITY::LogEvent(g_hEventLog,
|
||||
EVENTLOG_INFORMATION_TYPE,
|
||||
ASPNETCORE_EVENT_RECYCLE_APPOFFLINE,
|
||||
strEventMsg.QueryStr());
|
||||
}
|
||||
|
||||
RecycleApplication();
|
||||
}
|
||||
}
|
||||
|
||||
DereferenceApplicationInfo();
|
||||
}
|
||||
|
||||
HRESULT
|
||||
APPLICATION_INFO::EnsureApplicationCreated()
|
||||
{
|
||||
HRESULT hr = S_OK;
|
||||
BOOL fLocked = FALSE;
|
||||
APPLICATION* pApplication = NULL;
|
||||
STACK_STRU(struFileName, 300); // >MAX_PATH
|
||||
STRU struHostFxrDllLocation;
|
||||
|
||||
if (m_pApplication != NULL)
|
||||
{
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
if (m_pApplication == NULL)
|
||||
{
|
||||
AcquireSRWLockExclusive(&m_srwLock);
|
||||
fLocked = TRUE;
|
||||
if (m_pApplication != NULL)
|
||||
{
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
//
|
||||
// in case of app offline, we don't want to create a new application now
|
||||
//
|
||||
if (!m_fAppOfflineFound)
|
||||
{
|
||||
|
||||
// Move the request handler check inside of the lock
|
||||
// such that only one request finds and loads it.
|
||||
// FindRequestHandlerAssembly obtains a global lock, but after releasing the lock,
|
||||
// there is a period where we could call
|
||||
|
||||
hr = FindRequestHandlerAssembly();
|
||||
if (FAILED(hr))
|
||||
{
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
if (m_pfnAspNetCoreCreateApplication == NULL)
|
||||
{
|
||||
hr = HRESULT_FROM_WIN32(ERROR_INVALID_FUNCTION);
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
hr = m_pfnAspNetCoreCreateApplication(m_pServer, m_pConfiguration, &pApplication);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
goto Finished;
|
||||
}
|
||||
m_pApplication = pApplication;
|
||||
}
|
||||
}
|
||||
|
||||
Finished:
|
||||
if (fLocked)
|
||||
{
|
||||
ReleaseSRWLockExclusive(&m_srwLock);
|
||||
}
|
||||
return hr;
|
||||
}
|
||||
|
||||
HRESULT
|
||||
APPLICATION_INFO::FindRequestHandlerAssembly()
|
||||
{
|
||||
HRESULT hr = S_OK;
|
||||
BOOL fLocked = FALSE;
|
||||
STACK_STRU(struFileName, 256);
|
||||
|
||||
if (g_fAspnetcoreRHLoadedError)
|
||||
{
|
||||
hr = E_APPLICATION_ACTIVATION_EXEC_FAILURE;
|
||||
goto Finished;
|
||||
}
|
||||
else if (!g_fAspnetcoreRHAssemblyLoaded)
|
||||
{
|
||||
AcquireSRWLockExclusive(&g_srwLock);
|
||||
fLocked = TRUE;
|
||||
if (g_fAspnetcoreRHLoadedError)
|
||||
{
|
||||
hr = E_APPLICATION_ACTIVATION_EXEC_FAILURE;
|
||||
goto Finished;
|
||||
}
|
||||
if (g_fAspnetcoreRHAssemblyLoaded)
|
||||
{
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
if (m_pConfiguration->QueryHostingModel() == APP_HOSTING_MODEL::HOSTING_IN_PROCESS)
|
||||
{
|
||||
if (FAILED(hr = FindNativeAssemblyFromHostfxr(&struFileName)))
|
||||
{
|
||||
STACK_STRU(strEventMsg, 256);
|
||||
if (SUCCEEDED(strEventMsg.SafeSnwprintf(
|
||||
ASPNETCORE_EVENT_INPROCESS_RH_MISSING_MSG)))
|
||||
{
|
||||
UTILITY::LogEvent(g_hEventLog,
|
||||
EVENTLOG_INFORMATION_TYPE,
|
||||
ASPNETCORE_EVENT_INPROCESS_RH_MISSING,
|
||||
strEventMsg.QueryStr());
|
||||
}
|
||||
|
||||
goto Finished;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (FAILED(hr = FindNativeAssemblyFromGlobalLocation(&struFileName)))
|
||||
{
|
||||
STACK_STRU(strEventMsg, 256);
|
||||
if (SUCCEEDED(strEventMsg.SafeSnwprintf(
|
||||
ASPNETCORE_EVENT_OUT_OF_PROCESS_RH_MISSING_MSG)))
|
||||
{
|
||||
UTILITY::LogEvent(g_hEventLog,
|
||||
EVENTLOG_INFORMATION_TYPE,
|
||||
ASPNETCORE_EVENT_OUT_OF_PROCESS_RH_MISSING,
|
||||
strEventMsg.QueryStr());
|
||||
}
|
||||
|
||||
goto Finished;
|
||||
}
|
||||
}
|
||||
|
||||
g_hAspnetCoreRH = LoadLibraryW(struFileName.QueryStr());
|
||||
if (g_hAspnetCoreRH == NULL)
|
||||
{
|
||||
hr = HRESULT_FROM_WIN32(GetLastError());
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
g_pfnAspNetCoreCreateApplication = (PFN_ASPNETCORE_CREATE_APPLICATION)
|
||||
GetProcAddress(g_hAspnetCoreRH, "CreateApplication");
|
||||
if (g_pfnAspNetCoreCreateApplication == NULL)
|
||||
{
|
||||
hr = HRESULT_FROM_WIN32(GetLastError());
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
g_pfnAspNetCoreCreateRequestHandler = (PFN_ASPNETCORE_CREATE_REQUEST_HANDLER)
|
||||
GetProcAddress(g_hAspnetCoreRH, "CreateRequestHandler");
|
||||
if (g_pfnAspNetCoreCreateRequestHandler == NULL)
|
||||
{
|
||||
hr = HRESULT_FROM_WIN32(GetLastError());
|
||||
goto Finished;
|
||||
}
|
||||
g_fAspnetcoreRHAssemblyLoaded = TRUE;
|
||||
}
|
||||
|
||||
Finished:
|
||||
//
|
||||
// Question: we remember the load failure so that we will not try again.
|
||||
// User needs to check whether the fuction pointer is NULL
|
||||
//
|
||||
m_pfnAspNetCoreCreateApplication = g_pfnAspNetCoreCreateApplication;
|
||||
m_pfnAspNetCoreCreateRequestHandler = g_pfnAspNetCoreCreateRequestHandler;
|
||||
if (!g_fAspnetcoreRHLoadedError && FAILED(hr))
|
||||
{
|
||||
g_fAspnetcoreRHLoadedError = TRUE;
|
||||
}
|
||||
|
||||
if (fLocked)
|
||||
{
|
||||
ReleaseSRWLockExclusive(&g_srwLock);
|
||||
}
|
||||
return hr;
|
||||
}
|
||||
|
||||
HRESULT
|
||||
APPLICATION_INFO::FindNativeAssemblyFromGlobalLocation(STRU* struFilename)
|
||||
{
|
||||
HRESULT hr = S_OK;
|
||||
DWORD dwSize = MAX_PATH;
|
||||
BOOL fDone = FALSE;
|
||||
DWORD dwPosition = 0;
|
||||
|
||||
// Though we could call LoadLibrary(L"aspnetcorerh.dll") relying the OS to solve
|
||||
// the path (the targeted dll is the same folder of w3wp.exe/iisexpress)
|
||||
// let's still load with full path to avoid security issue
|
||||
if (FAILED(hr = struFilename->Resize(dwSize + 20)))
|
||||
{
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
while (!fDone)
|
||||
{
|
||||
DWORD dwReturnedSize = GetModuleFileNameW(g_hModule, struFilename->QueryStr(), dwSize);
|
||||
if (dwReturnedSize == 0)
|
||||
{
|
||||
hr = HRESULT_FROM_WIN32(GetLastError());
|
||||
fDone = TRUE;
|
||||
goto Finished;
|
||||
}
|
||||
else if ((dwReturnedSize == dwSize) && (GetLastError() == ERROR_INSUFFICIENT_BUFFER))
|
||||
{
|
||||
dwSize *= 2; // smaller buffer. increase the buffer and retry
|
||||
if (FAILED(hr = struFilename->Resize(dwSize + 20))) // + 20 for aspnetcorerh.dll
|
||||
{
|
||||
goto Finished;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
fDone = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
if (FAILED(hr = struFilename->SyncWithBuffer()))
|
||||
{
|
||||
goto Finished;
|
||||
}
|
||||
dwPosition = struFilename->LastIndexOf(L'\\', 0);
|
||||
struFilename->QueryStr()[dwPosition] = L'\0';
|
||||
|
||||
if (FAILED(hr = struFilename->SyncWithBuffer()) ||
|
||||
FAILED(hr = struFilename->Append(L"\\")) ||
|
||||
FAILED(hr = struFilename->Append(g_pwzAspnetcoreRequestHandlerName)))
|
||||
{
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
Finished:
|
||||
return hr;
|
||||
}
|
||||
|
||||
//
|
||||
// Tries to find aspnetcorerh.dll from the application
|
||||
// Calls into hostfxr.dll to find it.
|
||||
// Will leave hostfxr.dll loaded as it will be used again to call hostfxr_main.
|
||||
//
|
||||
HRESULT
|
||||
APPLICATION_INFO::FindNativeAssemblyFromHostfxr(
|
||||
STRU* struFilename
|
||||
)
|
||||
{
|
||||
HRESULT hr = S_OK;
|
||||
STRU struApplicationFullPath;
|
||||
STRU struNativeSearchPaths;
|
||||
STRU struNativeDllLocation;
|
||||
HMODULE hmHostFxrDll = NULL;
|
||||
INT intHostFxrExitCode = 0;
|
||||
INT intIndex = -1;
|
||||
INT intPrevIndex = 0;
|
||||
BOOL fFound = FALSE;
|
||||
DWORD dwBufferSize = 1024 * 10;
|
||||
DWORD dwRequiredBufferSize = 0;
|
||||
|
||||
DBG_ASSERT(struFileName != NULL);
|
||||
|
||||
hmHostFxrDll = LoadLibraryW(m_pConfiguration->QueryHostFxrFullPath());
|
||||
|
||||
if (hmHostFxrDll == NULL)
|
||||
{
|
||||
// Could not load hostfxr
|
||||
hr = HRESULT_FROM_WIN32(GetLastError());
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
hostfxr_get_native_search_directories_fn pFnHostFxrSearchDirectories = (hostfxr_get_native_search_directories_fn)
|
||||
GetProcAddress(hmHostFxrDll, "hostfxr_get_native_search_directories");
|
||||
|
||||
if (pFnHostFxrSearchDirectories == NULL)
|
||||
{
|
||||
// Host fxr version is incorrect (need a higher version).
|
||||
// TODO log error
|
||||
hr = E_FAIL;
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
if (FAILED(hr = struNativeSearchPaths.Resize(dwBufferSize)))
|
||||
{
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
while (TRUE)
|
||||
{
|
||||
intHostFxrExitCode = pFnHostFxrSearchDirectories(
|
||||
m_pConfiguration->QueryHostFxrArgCount(),
|
||||
m_pConfiguration->QueryHostFxrArguments(),
|
||||
struNativeSearchPaths.QueryStr(),
|
||||
dwBufferSize,
|
||||
&dwRequiredBufferSize
|
||||
);
|
||||
|
||||
if (intHostFxrExitCode == 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
else if (dwRequiredBufferSize > dwBufferSize)
|
||||
{
|
||||
dwBufferSize = dwRequiredBufferSize + 1; // for null terminator
|
||||
|
||||
if (FAILED(hr = struNativeSearchPaths.Resize(dwBufferSize)))
|
||||
{
|
||||
goto Finished;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
hr = E_FAIL;
|
||||
// Log "Error finding native search directories from aspnetcore application.
|
||||
goto Finished;
|
||||
}
|
||||
}
|
||||
|
||||
if (FAILED(hr = struNativeSearchPaths.SyncWithBuffer()))
|
||||
{
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
fFound = FALSE;
|
||||
|
||||
// The native search directories are semicolon delimited.
|
||||
// Split on semicolons, append aspnetcorerh.dll, and check if the file exists.
|
||||
while ((intIndex = struNativeSearchPaths.IndexOf(L";", intPrevIndex)) != -1)
|
||||
{
|
||||
if (FAILED(hr = struNativeDllLocation.Copy(&struNativeSearchPaths.QueryStr()[intPrevIndex], intIndex - intPrevIndex)))
|
||||
{
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
if (!struNativeDllLocation.EndsWith(L"\\"))
|
||||
{
|
||||
if (FAILED(hr = struNativeDllLocation.Append(L"\\")))
|
||||
{
|
||||
goto Finished;
|
||||
}
|
||||
}
|
||||
|
||||
if (FAILED(hr = struNativeDllLocation.Append(g_pwzAspnetcoreRequestHandlerName)))
|
||||
{
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
if (UTILITY::CheckIfFileExists(struNativeDllLocation.QueryStr()))
|
||||
{
|
||||
if (FAILED(hr = struFilename->Copy(struNativeDllLocation)))
|
||||
{
|
||||
goto Finished;
|
||||
}
|
||||
fFound = TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
intPrevIndex = intIndex + 1;
|
||||
}
|
||||
|
||||
if (!fFound)
|
||||
{
|
||||
hr = E_FAIL;
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
Finished:
|
||||
if (FAILED(hr) && hmHostFxrDll != NULL)
|
||||
{
|
||||
FreeLibrary(hmHostFxrDll);
|
||||
}
|
||||
return hr;
|
||||
}
|
||||
|
||||
VOID
|
||||
APPLICATION_INFO::RecycleApplication()
|
||||
{
|
||||
APPLICATION* pApplication = NULL;
|
||||
HANDLE hThread = INVALID_HANDLE_VALUE;
|
||||
BOOL fLockAcquired = FALSE;
|
||||
|
||||
if (m_pApplication != NULL)
|
||||
{
|
||||
AcquireSRWLockExclusive(&m_srwLock);
|
||||
fLockAcquired = TRUE;
|
||||
if (m_pApplication != NULL)
|
||||
{
|
||||
pApplication = m_pApplication;
|
||||
if (pApplication->QueryConfig()->QueryHostingModel() == HOSTING_OUT_PROCESS)
|
||||
{
|
||||
//
|
||||
// For inprocess, need to set m_pApplication to NULL first to
|
||||
// avoid mapping new request to the recycled application.
|
||||
// Outofprocess application instance will be created for new request
|
||||
// For inprocess, as recycle will lead to shutdown later, leave m_pApplication
|
||||
// to not block incoming requests till worker process shutdown
|
||||
//
|
||||
m_pApplication = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
//
|
||||
// For inprocess, need hold the application till shutdown is called
|
||||
// Bump the reference counter as DoRecycleApplication will do dereference
|
||||
//
|
||||
pApplication->ReferenceApplication();
|
||||
}
|
||||
|
||||
hThread = CreateThread(
|
||||
NULL, // default security attributes
|
||||
0, // default stack size
|
||||
(LPTHREAD_START_ROUTINE)DoRecycleApplication,
|
||||
pApplication, // thread function arguments
|
||||
0, // default creation flags
|
||||
NULL); // receive thread identifier
|
||||
}
|
||||
|
||||
if (hThread == NULL)
|
||||
{
|
||||
if (!g_fRecycleProcessCalled)
|
||||
{
|
||||
g_fRecycleProcessCalled = TRUE;
|
||||
g_pHttpServer->RecycleProcess(L"On Demand by AspNetCore Module for recycle application failure");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Closing a thread handle does not terminate the associated thread or remove the thread object.
|
||||
CloseHandle(hThread);
|
||||
}
|
||||
|
||||
if (fLockAcquired)
|
||||
{
|
||||
ReleaseSRWLockExclusive(&m_srwLock);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
VOID
|
||||
APPLICATION_INFO::DoRecycleApplication(
|
||||
LPVOID lpParam)
|
||||
{
|
||||
APPLICATION* pApplication = static_cast<APPLICATION*>(lpParam);
|
||||
|
||||
// No lock required
|
||||
|
||||
if (pApplication != NULL)
|
||||
{
|
||||
// Recycle will call shutdown for out of process
|
||||
pApplication->Recycle();
|
||||
|
||||
// Decrement the ref count as we reference it in RecycleApplication.
|
||||
pApplication->DereferenceApplication();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
VOID
|
||||
APPLICATION_INFO::ShutDownApplication()
|
||||
{
|
||||
APPLICATION* pApplication = NULL;
|
||||
BOOL fLockAcquired = FALSE;
|
||||
|
||||
// pApplication can be NULL due to app_offline
|
||||
if (m_pApplication != NULL)
|
||||
{
|
||||
AcquireSRWLockExclusive(&m_srwLock);
|
||||
fLockAcquired = TRUE;
|
||||
if (m_pApplication != NULL)
|
||||
{
|
||||
pApplication = m_pApplication;
|
||||
|
||||
// Set m_pApplication to NULL first to prevent anyone from using it
|
||||
m_pApplication = NULL;
|
||||
pApplication->ShutDown();
|
||||
pApplication->DereferenceApplication();
|
||||
}
|
||||
|
||||
if (fLockAcquired)
|
||||
{
|
||||
ReleaseSRWLockExclusive(&m_srwLock);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,458 +0,0 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
|
||||
#include "precomp.hxx"
|
||||
|
||||
// The application manager is a singleton across ANCM.
|
||||
APPLICATION_MANAGER* APPLICATION_MANAGER::sm_pApplicationManager = NULL;
|
||||
|
||||
//
|
||||
// Retrieves the application info from the application manager
|
||||
// Will create the application info if it isn't initalized
|
||||
//
|
||||
HRESULT
|
||||
APPLICATION_MANAGER::GetOrCreateApplicationInfo(
|
||||
_In_ IHttpServer* pServer,
|
||||
_In_ ASPNETCORE_CONFIG* pConfig,
|
||||
_Out_ APPLICATION_INFO ** ppApplicationInfo
|
||||
)
|
||||
{
|
||||
HRESULT hr = S_OK;
|
||||
APPLICATION_INFO *pApplicationInfo = NULL;
|
||||
APPLICATION_INFO_KEY key;
|
||||
BOOL fExclusiveLock = FALSE;
|
||||
BOOL fMixedHostingModelError = FALSE;
|
||||
BOOL fDuplicatedInProcessApp = FALSE;
|
||||
PCWSTR pszApplicationId = NULL;
|
||||
STACK_STRU ( strEventMsg, 256 );
|
||||
|
||||
DBG_ASSERT(pServer);
|
||||
DBG_ASSERT(pConfig);
|
||||
DBG_ASSERT(ppApplicationInfo);
|
||||
|
||||
*ppApplicationInfo = NULL;
|
||||
|
||||
// The configuration path is unique for each application and is used for the
|
||||
// key in the applicationInfoHash.
|
||||
pszApplicationId = pConfig->QueryConfigPath()->QueryStr();
|
||||
hr = key.Initialize(pszApplicationId);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
// When accessing the m_pApplicationInfoHash, we need to acquire the application manager
|
||||
// lock to avoid races on setting state.
|
||||
AcquireSRWLockShared(&m_srwLock);
|
||||
if (g_fInShutdown)
|
||||
{
|
||||
ReleaseSRWLockShared(&m_srwLock);
|
||||
hr = HRESULT_FROM_WIN32(ERROR_SERVER_SHUTDOWN_IN_PROGRESS);
|
||||
goto Finished;
|
||||
}
|
||||
m_pApplicationInfoHash->FindKey(&key, ppApplicationInfo);
|
||||
ReleaseSRWLockShared(&m_srwLock);
|
||||
|
||||
if (*ppApplicationInfo == NULL)
|
||||
{
|
||||
// Check which hosting model we want to support
|
||||
switch (pConfig->QueryHostingModel())
|
||||
{
|
||||
case HOSTING_IN_PROCESS:
|
||||
if (m_pApplicationInfoHash->Count() > 0)
|
||||
{
|
||||
// Only one inprocess app is allowed per IIS worker process
|
||||
fDuplicatedInProcessApp = TRUE;
|
||||
hr = HRESULT_FROM_WIN32(ERROR_APP_INIT_FAILURE);
|
||||
goto Finished;
|
||||
}
|
||||
break;
|
||||
|
||||
case HOSTING_OUT_PROCESS:
|
||||
break;
|
||||
|
||||
default:
|
||||
hr = E_UNEXPECTED;
|
||||
goto Finished;
|
||||
}
|
||||
pApplicationInfo = new APPLICATION_INFO(pServer);
|
||||
if (pApplicationInfo == NULL)
|
||||
{
|
||||
hr = E_OUTOFMEMORY;
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
AcquireSRWLockExclusive(&m_srwLock);
|
||||
fExclusiveLock = TRUE;
|
||||
if (g_fInShutdown)
|
||||
{
|
||||
// Already in shuting down. No need to create the application
|
||||
hr = HRESULT_FROM_WIN32(ERROR_SERVER_SHUTDOWN_IN_PROGRESS);
|
||||
goto Finished;
|
||||
}
|
||||
m_pApplicationInfoHash->FindKey(&key, ppApplicationInfo);
|
||||
|
||||
if (*ppApplicationInfo != NULL)
|
||||
{
|
||||
// someone else created the application
|
||||
delete pApplicationInfo;
|
||||
pApplicationInfo = NULL;
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
// hosting model check. We do not allow mixed scenario for now
|
||||
// could be changed in the future
|
||||
if (m_hostingModel != HOSTING_UNKNOWN)
|
||||
{
|
||||
if (m_hostingModel != pConfig->QueryHostingModel())
|
||||
{
|
||||
// hosting model does not match, error out
|
||||
fMixedHostingModelError = TRUE;
|
||||
hr = HRESULT_FROM_WIN32(ERROR_APP_INIT_FAILURE);
|
||||
goto Finished;
|
||||
}
|
||||
}
|
||||
|
||||
hr = pApplicationInfo->Initialize(pConfig, m_pFileWatcher);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
hr = m_pApplicationInfoHash->InsertRecord( pApplicationInfo );
|
||||
if (FAILED(hr))
|
||||
{
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
//
|
||||
// first application will decide which hosting model allowed by this process
|
||||
//
|
||||
if (m_hostingModel == HOSTING_UNKNOWN)
|
||||
{
|
||||
m_hostingModel = pConfig->QueryHostingModel();
|
||||
}
|
||||
|
||||
*ppApplicationInfo = pApplicationInfo;
|
||||
pApplicationInfo->StartMonitoringAppOffline();
|
||||
|
||||
// Release the locko after starting to monitor for app offline to avoid races with it being dropped.
|
||||
ReleaseSRWLockExclusive(&m_srwLock);
|
||||
|
||||
fExclusiveLock = FALSE;
|
||||
pApplicationInfo = NULL;
|
||||
}
|
||||
|
||||
Finished:
|
||||
|
||||
if (fExclusiveLock)
|
||||
{
|
||||
ReleaseSRWLockExclusive(&m_srwLock);
|
||||
}
|
||||
|
||||
if (pApplicationInfo != NULL)
|
||||
{
|
||||
pApplicationInfo->DereferenceApplicationInfo();
|
||||
pApplicationInfo = NULL;
|
||||
}
|
||||
|
||||
if (FAILED(hr))
|
||||
{
|
||||
if (fDuplicatedInProcessApp)
|
||||
{
|
||||
if (SUCCEEDED(strEventMsg.SafeSnwprintf(
|
||||
ASPNETCORE_EVENT_DUPLICATED_INPROCESS_APP_MSG,
|
||||
pszApplicationId)))
|
||||
{
|
||||
UTILITY::LogEvent(g_hEventLog,
|
||||
EVENTLOG_ERROR_TYPE,
|
||||
ASPNETCORE_EVENT_DUPLICATED_INPROCESS_APP,
|
||||
strEventMsg.QueryStr());
|
||||
}
|
||||
}
|
||||
else if (fMixedHostingModelError)
|
||||
{
|
||||
if (SUCCEEDED(strEventMsg.SafeSnwprintf(
|
||||
ASPNETCORE_EVENT_MIXED_HOSTING_MODEL_ERROR_MSG,
|
||||
pszApplicationId,
|
||||
pConfig->QueryHostingModel())))
|
||||
{
|
||||
UTILITY::LogEvent(g_hEventLog,
|
||||
EVENTLOG_ERROR_TYPE,
|
||||
ASPNETCORE_EVENT_MIXED_HOSTING_MODEL_ERROR,
|
||||
strEventMsg.QueryStr());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (SUCCEEDED(strEventMsg.SafeSnwprintf(
|
||||
ASPNETCORE_EVENT_ADD_APPLICATION_ERROR_MSG,
|
||||
pszApplicationId,
|
||||
hr)))
|
||||
{
|
||||
UTILITY::LogEvent(g_hEventLog,
|
||||
EVENTLOG_ERROR_TYPE,
|
||||
ASPNETCORE_EVENT_ADD_APPLICATION_ERROR,
|
||||
strEventMsg.QueryStr());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// If the application's configuration was changed,
|
||||
// append the configuration path to the config change context.
|
||||
//
|
||||
BOOL
|
||||
APPLICATION_MANAGER::FindConfigChangedApplication(
|
||||
_In_ APPLICATION_INFO * pEntry,
|
||||
_In_ PVOID pvContext)
|
||||
{
|
||||
DBG_ASSERT(pEntry);
|
||||
DBG_ASSERT(pvContext);
|
||||
|
||||
// Config Change context contains the original config path that changed
|
||||
// and a multiStr containing
|
||||
CONFIG_CHANGE_CONTEXT* pContext = static_cast<CONFIG_CHANGE_CONTEXT*>(pvContext);
|
||||
STRU* pstruConfigPath = pEntry->QueryConfig()->QueryConfigPath();
|
||||
|
||||
// check if the application path contains our app/subapp by seeing if the config path
|
||||
// starts with the notification path.
|
||||
BOOL fChanged = pstruConfigPath->StartsWith(pContext->pstrPath, true);
|
||||
if (fChanged)
|
||||
{
|
||||
DWORD dwLen = (DWORD)wcslen(pContext->pstrPath);
|
||||
WCHAR wChar = pstruConfigPath->QueryStr()[dwLen];
|
||||
|
||||
// We need to check that the last character of the config path
|
||||
// is either a null terminator or a slash.
|
||||
// This checks the case where the config path was
|
||||
// MACHINE/WEBROOT/site and your site path is MACHINE/WEBROOT/siteTest
|
||||
if (wChar != L'\0' && wChar != L'/')
|
||||
{
|
||||
// not current app or sub app
|
||||
fChanged = FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
pContext->MultiSz.Append(*pstruConfigPath);
|
||||
}
|
||||
}
|
||||
return fChanged;
|
||||
}
|
||||
|
||||
//
|
||||
// Finds any applications affected by a configuration change and calls Recycle on them
|
||||
// InProcess: Triggers g_httpServer->RecycleProcess() and keep the application inside of the manager.
|
||||
// This will cause a shutdown event to occur through the global stop listening event.
|
||||
// OutOfProcess: Removes all applications in the application manager and calls Recycle, which will call Shutdown,
|
||||
// on each application.
|
||||
//
|
||||
HRESULT
|
||||
APPLICATION_MANAGER::RecycleApplicationFromManager(
|
||||
_In_ LPCWSTR pszApplicationId
|
||||
)
|
||||
{
|
||||
HRESULT hr = S_OK;
|
||||
APPLICATION_INFO_KEY key;
|
||||
DWORD dwPreviousCounter = 0;
|
||||
APPLICATION_INFO_HASH* table = NULL;
|
||||
CONFIG_CHANGE_CONTEXT context;
|
||||
BOOL fKeepTable = FALSE;
|
||||
|
||||
if (g_fInShutdown)
|
||||
{
|
||||
// We are already shutting down, ignore this event as a global configuration change event
|
||||
// can occur after global stop listening for some reason.
|
||||
return hr;
|
||||
}
|
||||
|
||||
AcquireSRWLockExclusive(&m_srwLock);
|
||||
if (g_fInShutdown)
|
||||
{
|
||||
ReleaseSRWLockExclusive(&m_srwLock);
|
||||
return hr;
|
||||
}
|
||||
|
||||
hr = key.Initialize(pszApplicationId);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
goto Finished;
|
||||
}
|
||||
// Make a shallow copy of existing hashtable as we may need to remove nodes
|
||||
// This will be used for finding differences in which applications are affected by a config change.
|
||||
table = new APPLICATION_INFO_HASH();
|
||||
|
||||
if (table == NULL)
|
||||
{
|
||||
hr = E_OUTOFMEMORY;
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
// few application expected, small bucket size for hash table
|
||||
if (FAILED(hr = table->Initialize(17 /*prime*/)))
|
||||
{
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
context.pstrPath = pszApplicationId;
|
||||
|
||||
// Keep track of the preview count of applications to know whether there are applications to delete
|
||||
dwPreviousCounter = m_pApplicationInfoHash->Count();
|
||||
|
||||
// We don't want to hold the application manager lock for long time as it will block all incoming requests
|
||||
// Don't call application shutdown inside the lock
|
||||
m_pApplicationInfoHash->Apply(APPLICATION_INFO_HASH::ReferenceCopyToTable, static_cast<PVOID>(table));
|
||||
DBG_ASSERT(dwPreviousCounter == table->Count());
|
||||
|
||||
// Removed the applications which are impacted by the configurtion change
|
||||
m_pApplicationInfoHash->DeleteIf(FindConfigChangedApplication, (PVOID)&context);
|
||||
|
||||
if (dwPreviousCounter != m_pApplicationInfoHash->Count())
|
||||
{
|
||||
if (m_hostingModel == HOSTING_IN_PROCESS)
|
||||
{
|
||||
// When we are inprocess, we need to keep the application the
|
||||
// application manager that is being deleted. This is because we will always need to recycle the worker
|
||||
// process and any requests that hit this worker process must be rejected (while out of process can
|
||||
// start a new dotnet process). We will immediately call Recycle after this call.
|
||||
DBG_ASSERT(m_pApplicationInfoHash->Count() == 0);
|
||||
delete m_pApplicationInfoHash;
|
||||
|
||||
// We don't want to delete the table as m_pApplicationInfoHash = table
|
||||
fKeepTable = TRUE;
|
||||
m_pApplicationInfoHash = table;
|
||||
}
|
||||
}
|
||||
|
||||
if (m_pApplicationInfoHash->Count() == 0)
|
||||
{
|
||||
m_hostingModel = HOSTING_UNKNOWN;
|
||||
}
|
||||
|
||||
ReleaseSRWLockExclusive(&m_srwLock);
|
||||
|
||||
// If we receive a request at this point.
|
||||
// OutOfProcess: we will create a new application with new configuration
|
||||
// InProcess: the request would have to be rejected, as we are about to call g_HttpServer->RecycleProcess
|
||||
// on the worker proocess
|
||||
if (!context.MultiSz.IsEmpty())
|
||||
{
|
||||
PCWSTR path = context.MultiSz.First();
|
||||
// Iterate through each of the paths that were shut down,
|
||||
// calling RecycleApplication on each of them.
|
||||
while (path != NULL)
|
||||
{
|
||||
APPLICATION_INFO* pRecord;
|
||||
|
||||
// Application got recycled. Log an event
|
||||
STACK_STRU(strEventMsg, 256);
|
||||
if (SUCCEEDED(strEventMsg.SafeSnwprintf(
|
||||
ASPNETCORE_EVENT_RECYCLE_CONFIGURATION_MSG,
|
||||
path)))
|
||||
{
|
||||
UTILITY::LogEvent(g_hEventLog,
|
||||
EVENTLOG_INFORMATION_TYPE,
|
||||
ASPNETCORE_EVENT_RECYCLE_CONFIGURATION,
|
||||
strEventMsg.QueryStr());
|
||||
}
|
||||
|
||||
hr = key.Initialize(path);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
table->FindKey(&key, &pRecord);
|
||||
DBG_ASSERT(pRecord != NULL);
|
||||
|
||||
// RecycleApplication is called on a separate thread.
|
||||
pRecord->RecycleApplication();
|
||||
pRecord->DereferenceApplicationInfo();
|
||||
path = context.MultiSz.Next(path);
|
||||
}
|
||||
}
|
||||
|
||||
Finished:
|
||||
if (table != NULL && !fKeepTable)
|
||||
{
|
||||
table->Clear();
|
||||
delete table;
|
||||
}
|
||||
|
||||
if (FAILED(hr))
|
||||
{
|
||||
// Failed to recycle an application. Log an event
|
||||
STACK_STRU(strEventMsg, 256);
|
||||
if (SUCCEEDED(strEventMsg.SafeSnwprintf(
|
||||
ASPNETCORE_EVENT_RECYCLE_FAILURE_CONFIGURATION_MSG,
|
||||
pszApplicationId)))
|
||||
{
|
||||
UTILITY::LogEvent(g_hEventLog,
|
||||
EVENTLOG_ERROR_TYPE,
|
||||
ASPNETCORE_EVENT_RECYCLE_APP_FAILURE,
|
||||
strEventMsg.QueryStr());
|
||||
}
|
||||
// Need to recycle the process as we cannot recycle the application
|
||||
if (!g_fRecycleProcessCalled)
|
||||
{
|
||||
g_fRecycleProcessCalled = TRUE;
|
||||
g_pHttpServer->RecycleProcess(L"AspNetCore Recycle Process on Demand Due Application Recycle Error");
|
||||
}
|
||||
}
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
||||
//
|
||||
// Shutsdown all applications in the application hashtable
|
||||
// Only called by OnGlobalStopListening.
|
||||
//
|
||||
VOID
|
||||
APPLICATION_MANAGER::ShutDown()
|
||||
{
|
||||
// We are guaranteed to only have one outstanding OnGlobalStopListening event at a time
|
||||
// However, it is possible to receive multiple OnGlobalStopListening events
|
||||
// Protect against this by checking if we already shut down.
|
||||
g_fInShutdown = TRUE;
|
||||
if (m_pApplicationInfoHash != NULL)
|
||||
{
|
||||
if (m_pFileWatcher != NULL)
|
||||
{
|
||||
delete m_pFileWatcher;
|
||||
m_pFileWatcher = NULL;
|
||||
}
|
||||
|
||||
DBG_ASSERT(m_pApplicationInfoHash);
|
||||
// During shutdown we lock until we delete the application
|
||||
AcquireSRWLockExclusive(&m_srwLock);
|
||||
|
||||
// Call shutdown on each application in the application manager
|
||||
m_pApplicationInfoHash->Apply(ShutdownApplication, NULL);
|
||||
m_pApplicationInfoHash->Clear();
|
||||
delete m_pApplicationInfoHash;
|
||||
m_pApplicationInfoHash = NULL;
|
||||
|
||||
ReleaseSRWLockExclusive(&m_srwLock);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Calls shutdown on each application. ApplicationManager's lock is held for duration of
|
||||
// each shutdown call, guaranteeing another application cannot be created.
|
||||
//
|
||||
// static
|
||||
VOID
|
||||
APPLICATION_MANAGER::ShutdownApplication(
|
||||
_In_ APPLICATION_INFO * pEntry,
|
||||
_In_ PVOID pvContext
|
||||
)
|
||||
{
|
||||
UNREFERENCED_PARAMETER(pvContext);
|
||||
DBG_ASSERT(pEntry != NULL);
|
||||
|
||||
pEntry->ShutDownApplication();
|
||||
}
|
||||
|
|
@ -1,254 +0,0 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
|
||||
#include "precomp.hxx"
|
||||
#include <IPHlpApi.h>
|
||||
|
||||
HTTP_MODULE_ID g_pModuleId = NULL;
|
||||
IHttpServer * g_pHttpServer = NULL;
|
||||
HANDLE g_hEventLog = NULL;
|
||||
BOOL g_fRecycleProcessCalled = FALSE;
|
||||
PCWSTR g_pszModuleName = NULL;
|
||||
HINSTANCE g_hModule;
|
||||
HMODULE g_hAspnetCoreRH = NULL;
|
||||
BOOL g_fAspnetcoreRHAssemblyLoaded = FALSE;
|
||||
BOOL g_fAspnetcoreRHLoadedError = FALSE;
|
||||
BOOL g_fInShutdown = FALSE;
|
||||
DWORD g_dwAspNetCoreDebugFlags = 0;
|
||||
DWORD g_dwActiveServerProcesses = 0;
|
||||
SRWLOCK g_srwLock;
|
||||
DWORD g_dwDebugFlags = 0;
|
||||
PCSTR g_szDebugLabel = "ASPNET_CORE_MODULE";
|
||||
PCWSTR g_pwzAspnetcoreRequestHandlerName = L"aspnetcorerh.dll";
|
||||
PFN_ASPNETCORE_CREATE_APPLICATION g_pfnAspNetCoreCreateApplication;
|
||||
PFN_ASPNETCORE_CREATE_REQUEST_HANDLER g_pfnAspNetCoreCreateRequestHandler;
|
||||
|
||||
VOID
|
||||
StaticCleanup()
|
||||
{
|
||||
APPLICATION_MANAGER::Cleanup();
|
||||
if (g_hEventLog != NULL)
|
||||
{
|
||||
DeregisterEventSource(g_hEventLog);
|
||||
g_hEventLog = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
BOOL WINAPI DllMain(HMODULE hModule,
|
||||
DWORD ul_reason_for_call,
|
||||
LPVOID lpReserved
|
||||
)
|
||||
{
|
||||
UNREFERENCED_PARAMETER(lpReserved);
|
||||
|
||||
switch (ul_reason_for_call)
|
||||
{
|
||||
case DLL_PROCESS_ATTACH:
|
||||
g_hModule = hModule;
|
||||
DisableThreadLibraryCalls(hModule);
|
||||
break;
|
||||
case DLL_PROCESS_DETACH:
|
||||
// IIS can cause dll detach to occur before we receive global notifications
|
||||
// For example, when we switch the bitness of the worker process,
|
||||
// this is a bug in IIS. To try to avoid AVs, we will set a global flag
|
||||
g_fInShutdown = TRUE;
|
||||
StaticCleanup();
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
HRESULT
|
||||
__stdcall
|
||||
RegisterModule(
|
||||
DWORD dwServerVersion,
|
||||
IHttpModuleRegistrationInfo * pModuleInfo,
|
||||
IHttpServer * pHttpServer
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine description:
|
||||
|
||||
Function called by IIS immediately after loading the module, used to let
|
||||
IIS know what notifications the module is interested in
|
||||
|
||||
Arguments:
|
||||
|
||||
dwServerVersion - IIS version the module is being loaded on
|
||||
pModuleInfo - info regarding this module
|
||||
pHttpServer - callback functions which can be used by the module at
|
||||
any point
|
||||
|
||||
Return value:
|
||||
|
||||
HRESULT
|
||||
|
||||
--*/
|
||||
{
|
||||
HRESULT hr = S_OK;
|
||||
HKEY hKey;
|
||||
BOOL fDisableANCM = FALSE;
|
||||
ASPNET_CORE_PROXY_MODULE_FACTORY * pFactory = NULL;
|
||||
ASPNET_CORE_GLOBAL_MODULE * pGlobalModule = NULL;
|
||||
APPLICATION_MANAGER * pApplicationManager = NULL;
|
||||
|
||||
UNREFERENCED_PARAMETER(dwServerVersion);
|
||||
|
||||
#ifdef DEBUG
|
||||
CREATE_DEBUG_PRINT_OBJECT("Asp.Net Core Module");
|
||||
g_dwDebugFlags = DEBUG_FLAGS_ANY;
|
||||
#endif // DEBUG
|
||||
|
||||
CREATE_DEBUG_PRINT_OBJECT;
|
||||
|
||||
//LoadGlobalConfiguration();
|
||||
|
||||
InitializeSRWLock(&g_srwLock);
|
||||
|
||||
g_pModuleId = pModuleInfo->GetId();
|
||||
g_pszModuleName = pModuleInfo->GetName();
|
||||
g_pHttpServer = pHttpServer;
|
||||
|
||||
if (g_pHttpServer->IsCommandLineLaunch())
|
||||
{
|
||||
g_hEventLog = RegisterEventSource(NULL, ASPNETCORE_IISEXPRESS_EVENT_PROVIDER);
|
||||
}
|
||||
else
|
||||
{
|
||||
g_hEventLog = RegisterEventSource(NULL, ASPNETCORE_EVENT_PROVIDER);
|
||||
}
|
||||
|
||||
// check whether the feature is disabled due to security reason
|
||||
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,
|
||||
L"SOFTWARE\\Microsoft\\IIS Extensions\\IIS AspNetCore Module\\Parameters",
|
||||
0,
|
||||
KEY_READ,
|
||||
&hKey) == NO_ERROR)
|
||||
{
|
||||
DWORD dwType;
|
||||
DWORD dwData;
|
||||
DWORD cbData;
|
||||
|
||||
cbData = sizeof(dwData);
|
||||
if ((RegQueryValueEx(hKey,
|
||||
L"DisableANCM",
|
||||
NULL,
|
||||
&dwType,
|
||||
(LPBYTE)&dwData,
|
||||
&cbData) == NO_ERROR) &&
|
||||
(dwType == REG_DWORD))
|
||||
{
|
||||
fDisableANCM = (dwData != 0);
|
||||
}
|
||||
|
||||
cbData = sizeof(dwData);
|
||||
if ((RegQueryValueEx(hKey,
|
||||
L"DebugFlags",
|
||||
NULL,
|
||||
&dwType,
|
||||
(LPBYTE)&dwData,
|
||||
&cbData) == NO_ERROR) &&
|
||||
(dwType == REG_DWORD))
|
||||
{
|
||||
g_dwAspNetCoreDebugFlags = dwData;
|
||||
}
|
||||
|
||||
RegCloseKey(hKey);
|
||||
}
|
||||
|
||||
if (fDisableANCM)
|
||||
{
|
||||
// Logging
|
||||
STACK_STRU(strEventMsg, 256);
|
||||
if (SUCCEEDED(strEventMsg.SafeSnwprintf(
|
||||
ASPNETCORE_EVENT_MODULE_DISABLED_MSG)))
|
||||
{
|
||||
UTILITY::LogEvent(g_hEventLog,
|
||||
EVENTLOG_WARNING_TYPE,
|
||||
ASPNETCORE_EVENT_MODULE_DISABLED,
|
||||
strEventMsg.QueryStr());
|
||||
}
|
||||
// this will return 500 error to client
|
||||
// as we did not register the module
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
//
|
||||
// Create the factory before any static initialization.
|
||||
// The ASPNET_CORE_PROXY_MODULE_FACTORY::Terminate method will clean any
|
||||
// static object initialized.
|
||||
//
|
||||
pFactory = new ASPNET_CORE_PROXY_MODULE_FACTORY;
|
||||
|
||||
if (pFactory == NULL)
|
||||
{
|
||||
hr = E_OUTOFMEMORY;
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
hr = pModuleInfo->SetRequestNotifications(
|
||||
pFactory,
|
||||
RQ_EXECUTE_REQUEST_HANDLER,
|
||||
0);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
pFactory = NULL;
|
||||
pApplicationManager = APPLICATION_MANAGER::GetInstance();
|
||||
if(pApplicationManager == NULL)
|
||||
{
|
||||
hr = E_OUTOFMEMORY;
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
hr = pApplicationManager->Initialize();
|
||||
if(FAILED(hr))
|
||||
{
|
||||
goto Finished;
|
||||
}
|
||||
pGlobalModule = NULL;
|
||||
|
||||
pGlobalModule = new ASPNET_CORE_GLOBAL_MODULE(pApplicationManager);
|
||||
if (pGlobalModule == NULL)
|
||||
{
|
||||
hr = E_OUTOFMEMORY;
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
hr = pModuleInfo->SetGlobalNotifications(
|
||||
pGlobalModule,
|
||||
GL_CONFIGURATION_CHANGE | // Configuration change trigers IIS application stop
|
||||
GL_STOP_LISTENING); // worker process stop or recycle
|
||||
|
||||
if (FAILED(hr))
|
||||
{
|
||||
goto Finished;
|
||||
}
|
||||
pGlobalModule = NULL;
|
||||
|
||||
hr = ALLOC_CACHE_HANDLER::StaticInitialize();
|
||||
if (FAILED(hr))
|
||||
{
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
Finished:
|
||||
if (pGlobalModule != NULL)
|
||||
{
|
||||
delete pGlobalModule;
|
||||
pGlobalModule = NULL;
|
||||
}
|
||||
|
||||
if (pFactory != NULL)
|
||||
{
|
||||
pFactory->Terminate();
|
||||
pFactory = NULL;
|
||||
}
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
||||
|
|
@ -1,497 +0,0 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
|
||||
#include "precomp.hxx"
|
||||
|
||||
FILE_WATCHER::FILE_WATCHER() :
|
||||
m_hCompletionPort(NULL),
|
||||
m_hChangeNotificationThread(NULL),
|
||||
m_fThreadExit(FALSE)
|
||||
{
|
||||
}
|
||||
|
||||
FILE_WATCHER::~FILE_WATCHER()
|
||||
{
|
||||
if (m_hChangeNotificationThread != NULL)
|
||||
{
|
||||
DWORD dwRetryCounter = 20; // totally wait for 1s
|
||||
DWORD dwExitCode = STILL_ACTIVE;
|
||||
|
||||
// signal the file watch thread to exit
|
||||
PostQueuedCompletionStatus(m_hCompletionPort, 0, FILE_WATCHER_SHUTDOWN_KEY, NULL);
|
||||
while (!m_fThreadExit && dwRetryCounter > 0)
|
||||
{
|
||||
if (GetExitCodeThread(m_hChangeNotificationThread, &dwExitCode))
|
||||
{
|
||||
if (dwExitCode == STILL_ACTIVE)
|
||||
{
|
||||
// the file watcher thread will set m_fThreadExit before exit
|
||||
WaitForSingleObject(m_hChangeNotificationThread, 50);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// fail to get thread status
|
||||
// call terminitethread
|
||||
TerminateThread(m_hChangeNotificationThread, 1);
|
||||
m_fThreadExit = TRUE;
|
||||
}
|
||||
dwRetryCounter--;
|
||||
}
|
||||
|
||||
if (!m_fThreadExit)
|
||||
{
|
||||
TerminateThread(m_hChangeNotificationThread, 1);
|
||||
}
|
||||
|
||||
CloseHandle(m_hChangeNotificationThread);
|
||||
m_hChangeNotificationThread = NULL;
|
||||
}
|
||||
|
||||
if (NULL != m_hCompletionPort)
|
||||
{
|
||||
CloseHandle(m_hCompletionPort);
|
||||
m_hCompletionPort = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
HRESULT
|
||||
FILE_WATCHER::Create(
|
||||
VOID
|
||||
)
|
||||
{
|
||||
HRESULT hr = S_OK;
|
||||
|
||||
m_hCompletionPort = CreateIoCompletionPort(INVALID_HANDLE_VALUE,
|
||||
NULL,
|
||||
0,
|
||||
0);
|
||||
|
||||
if (m_hCompletionPort == NULL)
|
||||
{
|
||||
hr = HRESULT_FROM_WIN32(GetLastError());
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
m_hChangeNotificationThread = CreateThread(NULL,
|
||||
0,
|
||||
ChangeNotificationThread,
|
||||
this,
|
||||
0,
|
||||
NULL);
|
||||
|
||||
if (m_hChangeNotificationThread == NULL)
|
||||
{
|
||||
hr = HRESULT_FROM_WIN32(GetLastError());
|
||||
|
||||
CloseHandle(m_hCompletionPort);
|
||||
m_hCompletionPort = NULL;
|
||||
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
Finished:
|
||||
return hr;
|
||||
}
|
||||
|
||||
DWORD
|
||||
WINAPI
|
||||
FILE_WATCHER::ChangeNotificationThread(
|
||||
LPVOID pvArg
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
IO completion thread
|
||||
|
||||
Arguments:
|
||||
|
||||
None
|
||||
|
||||
Return Value:
|
||||
|
||||
Win32 error
|
||||
|
||||
--*/
|
||||
{
|
||||
FILE_WATCHER * pFileMonitor;
|
||||
BOOL fSuccess = FALSE;
|
||||
DWORD cbCompletion = 0;
|
||||
OVERLAPPED * pOverlapped = NULL;
|
||||
DWORD dwErrorStatus;
|
||||
ULONG_PTR completionKey;
|
||||
|
||||
pFileMonitor = (FILE_WATCHER*)pvArg;
|
||||
DBG_ASSERT(pFileMonitor != NULL);
|
||||
|
||||
while (TRUE)
|
||||
{
|
||||
fSuccess = GetQueuedCompletionStatus(
|
||||
pFileMonitor->m_hCompletionPort,
|
||||
&cbCompletion,
|
||||
&completionKey,
|
||||
&pOverlapped,
|
||||
INFINITE);
|
||||
|
||||
DBG_ASSERT(fSuccess);
|
||||
dwErrorStatus = fSuccess ? ERROR_SUCCESS : GetLastError();
|
||||
|
||||
if (completionKey == FILE_WATCHER_SHUTDOWN_KEY)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
DBG_ASSERT(pOverlapped != NULL);
|
||||
if (pOverlapped != NULL)
|
||||
{
|
||||
FileWatcherCompletionRoutine(
|
||||
dwErrorStatus,
|
||||
cbCompletion,
|
||||
pOverlapped);
|
||||
}
|
||||
pOverlapped = NULL;
|
||||
cbCompletion = 0;
|
||||
}
|
||||
|
||||
pFileMonitor->m_fThreadExit = TRUE;
|
||||
ExitThread(0);
|
||||
}
|
||||
|
||||
VOID
|
||||
WINAPI
|
||||
FILE_WATCHER::FileWatcherCompletionRoutine(
|
||||
DWORD dwCompletionStatus,
|
||||
DWORD cbCompletion,
|
||||
OVERLAPPED * pOverlapped
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
Called when ReadDirectoryChangesW() completes
|
||||
|
||||
Arguments:
|
||||
|
||||
dwCompletionStatus - Error of completion
|
||||
cbCompletion - Bytes of completion
|
||||
pOverlapped - State of completion
|
||||
|
||||
Return Value:
|
||||
|
||||
None
|
||||
|
||||
--*/
|
||||
{
|
||||
FILE_WATCHER_ENTRY * pMonitorEntry;
|
||||
pMonitorEntry = CONTAINING_RECORD(pOverlapped, FILE_WATCHER_ENTRY, _overlapped);
|
||||
|
||||
DBG_ASSERT(pMonitorEntry != NULL);
|
||||
|
||||
pMonitorEntry->HandleChangeCompletion(dwCompletionStatus, cbCompletion);
|
||||
|
||||
if (pMonitorEntry->QueryIsValid())
|
||||
{
|
||||
//
|
||||
// Continue monitoring
|
||||
//
|
||||
pMonitorEntry->Monitor();
|
||||
}
|
||||
//
|
||||
// Deference the counter not matter whether the monitor is valid
|
||||
// Valid: Monitor increases the counter, need to reduce one
|
||||
// InValid: Reduce the counter to free the entry
|
||||
//
|
||||
pMonitorEntry->DereferenceFileWatcherEntry();
|
||||
|
||||
}
|
||||
|
||||
|
||||
FILE_WATCHER_ENTRY::FILE_WATCHER_ENTRY(FILE_WATCHER * pFileMonitor) :
|
||||
_pFileMonitor(pFileMonitor),
|
||||
_hDirectory(INVALID_HANDLE_VALUE),
|
||||
_hImpersonationToken(NULL),
|
||||
_pApplicationInfo(NULL),
|
||||
_lStopMonitorCalled(0),
|
||||
_cRefs(1),
|
||||
_fIsValid(TRUE)
|
||||
{
|
||||
_dwSignature = FILE_WATCHER_ENTRY_SIGNATURE;
|
||||
InitializeSRWLock(&_srwLock);
|
||||
}
|
||||
|
||||
FILE_WATCHER_ENTRY::~FILE_WATCHER_ENTRY()
|
||||
{
|
||||
_dwSignature = FILE_WATCHER_ENTRY_SIGNATURE_FREE;
|
||||
|
||||
if (_hDirectory != INVALID_HANDLE_VALUE)
|
||||
{
|
||||
CloseHandle(_hDirectory);
|
||||
_hDirectory = INVALID_HANDLE_VALUE;
|
||||
}
|
||||
|
||||
if (_hImpersonationToken != NULL)
|
||||
{
|
||||
CloseHandle(_hImpersonationToken);
|
||||
_hImpersonationToken = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
#pragma warning(disable:4100)
|
||||
|
||||
HRESULT
|
||||
FILE_WATCHER_ENTRY::HandleChangeCompletion(
|
||||
_In_ DWORD dwCompletionStatus,
|
||||
_In_ DWORD cbCompletion
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
Handle change notification (see if any of associated config files
|
||||
need to be flushed)
|
||||
|
||||
Arguments:
|
||||
|
||||
dwCompletionStatus - Completion status
|
||||
cbCompletion - Bytes of completion
|
||||
|
||||
Return Value:
|
||||
|
||||
HRESULT
|
||||
|
||||
--*/
|
||||
{
|
||||
HRESULT hr = S_OK;
|
||||
FILE_NOTIFY_INFORMATION * pNotificationInfo;
|
||||
BOOL fFileChanged = FALSE;
|
||||
|
||||
AcquireSRWLockExclusive(&_srwLock);
|
||||
if (!_fIsValid)
|
||||
{
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
// When directory handle is closed then HandleChangeCompletion
|
||||
// happens with cbCompletion = 0 and dwCompletionStatus = 0
|
||||
// From documentation it is not clear if that combination
|
||||
// of return values is specific to closing handles or whether
|
||||
// it could also mean an error condition. Hence we will maintain
|
||||
// explicit flag that will help us determine if entry
|
||||
// is being shutdown (StopMonitor() called)
|
||||
//
|
||||
if (_lStopMonitorCalled)
|
||||
{
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
//
|
||||
// There could be a FCN overflow
|
||||
// Let assume the file got changed instead of checking files
|
||||
// Othersie we have to cache the file info
|
||||
//
|
||||
if (cbCompletion == 0)
|
||||
{
|
||||
fFileChanged = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
pNotificationInfo = (FILE_NOTIFY_INFORMATION*)_buffDirectoryChanges.QueryPtr();
|
||||
DBG_ASSERT(pNotificationInfo != NULL);
|
||||
|
||||
while (pNotificationInfo != NULL)
|
||||
{
|
||||
//
|
||||
// check whether the monitored file got changed
|
||||
//
|
||||
if (_wcsnicmp(pNotificationInfo->FileName,
|
||||
_strFileName.QueryStr(),
|
||||
pNotificationInfo->FileNameLength / sizeof(WCHAR)) == 0)
|
||||
{
|
||||
fFileChanged = TRUE;
|
||||
break;
|
||||
}
|
||||
//
|
||||
// Advance to next notification
|
||||
//
|
||||
if (pNotificationInfo->NextEntryOffset == 0)
|
||||
{
|
||||
pNotificationInfo = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
pNotificationInfo = (FILE_NOTIFY_INFORMATION*)
|
||||
((PBYTE)pNotificationInfo +
|
||||
pNotificationInfo->NextEntryOffset);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (fFileChanged)
|
||||
{
|
||||
//
|
||||
// so far we only monitoring app_offline
|
||||
//
|
||||
_pApplicationInfo->UpdateAppOfflineFileHandle();
|
||||
}
|
||||
|
||||
Finished:
|
||||
ReleaseSRWLockExclusive(&_srwLock);
|
||||
return hr;
|
||||
}
|
||||
|
||||
#pragma warning( error : 4100 )
|
||||
|
||||
HRESULT
|
||||
FILE_WATCHER_ENTRY::Monitor(VOID)
|
||||
{
|
||||
HRESULT hr = S_OK;
|
||||
DWORD cbRead;
|
||||
|
||||
AcquireSRWLockExclusive(&_srwLock);
|
||||
ReferenceFileWatcherEntry();
|
||||
ZeroMemory(&_overlapped, sizeof(_overlapped));
|
||||
|
||||
if (!ReadDirectoryChangesW(_hDirectory,
|
||||
_buffDirectoryChanges.QueryPtr(),
|
||||
_buffDirectoryChanges.QuerySize(),
|
||||
FALSE, // Watching sub dirs. Set to False now as only monitoring app_offline
|
||||
FILE_NOTIFY_VALID_MASK & ~FILE_NOTIFY_CHANGE_LAST_ACCESS,
|
||||
&cbRead,
|
||||
&_overlapped,
|
||||
NULL))
|
||||
{
|
||||
hr = HRESULT_FROM_WIN32(GetLastError());
|
||||
DereferenceFileWatcherEntry();
|
||||
}
|
||||
|
||||
ReleaseSRWLockExclusive(&_srwLock);
|
||||
return hr;
|
||||
}
|
||||
|
||||
VOID
|
||||
FILE_WATCHER_ENTRY::StopMonitor(VOID)
|
||||
{
|
||||
//
|
||||
// Flag that monitoring is being stopped so that
|
||||
// we know that HandleChangeCompletion() call
|
||||
// can be ignored
|
||||
//
|
||||
InterlockedExchange(&_lStopMonitorCalled, 1);
|
||||
|
||||
if (_hDirectory != INVALID_HANDLE_VALUE)
|
||||
{
|
||||
AcquireSRWLockExclusive(&_srwLock);
|
||||
if (_hDirectory != INVALID_HANDLE_VALUE)
|
||||
{
|
||||
CloseHandle(_hDirectory);
|
||||
_hDirectory = INVALID_HANDLE_VALUE;
|
||||
DereferenceFileWatcherEntry();
|
||||
}
|
||||
ReleaseSRWLockExclusive(&_srwLock);
|
||||
}
|
||||
}
|
||||
|
||||
HRESULT
|
||||
FILE_WATCHER_ENTRY::Create(
|
||||
_In_ PCWSTR pszDirectoryToMonitor,
|
||||
_In_ PCWSTR pszFileNameToMonitor,
|
||||
_In_ APPLICATION_INFO* pApplicationInfo,
|
||||
_In_ HANDLE hImpersonationToken
|
||||
)
|
||||
{
|
||||
HRESULT hr = S_OK;
|
||||
BOOL fRet = FALSE;
|
||||
|
||||
if (pszDirectoryToMonitor == NULL ||
|
||||
pszFileNameToMonitor == NULL ||
|
||||
pApplicationInfo == NULL)
|
||||
{
|
||||
DBG_ASSERT(FALSE);
|
||||
hr = HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER);
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
//
|
||||
//remember the application
|
||||
//
|
||||
_pApplicationInfo = pApplicationInfo;
|
||||
|
||||
if (FAILED(hr = _strFileName.Copy(pszFileNameToMonitor)))
|
||||
{
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
if (FAILED(hr = _strDirectoryName.Copy(pszDirectoryToMonitor)))
|
||||
{
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
//
|
||||
// Resize change buffer to something "reasonable"
|
||||
//
|
||||
if (!_buffDirectoryChanges.Resize(FILE_WATCHER_ENTRY_BUFFER_SIZE))
|
||||
{
|
||||
hr = HRESULT_FROM_WIN32(ERROR_NOT_ENOUGH_MEMORY);
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
if (hImpersonationToken != NULL)
|
||||
{
|
||||
fRet = DuplicateHandle(GetCurrentProcess(),
|
||||
hImpersonationToken,
|
||||
GetCurrentProcess(),
|
||||
&_hImpersonationToken,
|
||||
0,
|
||||
FALSE,
|
||||
DUPLICATE_SAME_ACCESS);
|
||||
|
||||
if (!fRet)
|
||||
{
|
||||
hr = HRESULT_FROM_WIN32(GetLastError());
|
||||
goto Finished;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (_hImpersonationToken != NULL)
|
||||
{
|
||||
CloseHandle(_hImpersonationToken);
|
||||
_hImpersonationToken = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
_hDirectory = CreateFileW(
|
||||
_strDirectoryName.QueryStr(),
|
||||
FILE_LIST_DIRECTORY,
|
||||
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
|
||||
NULL,
|
||||
OPEN_EXISTING,
|
||||
FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OVERLAPPED,
|
||||
NULL);
|
||||
|
||||
if (_hDirectory == INVALID_HANDLE_VALUE)
|
||||
{
|
||||
hr = HRESULT_FROM_WIN32(GetLastError());
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
if (CreateIoCompletionPort(
|
||||
_hDirectory,
|
||||
_pFileMonitor->QueryCompletionPort(),
|
||||
NULL,
|
||||
0) == NULL)
|
||||
{
|
||||
hr = HRESULT_FROM_WIN32(GetLastError());
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
//
|
||||
// Start monitoring
|
||||
//
|
||||
hr = Monitor();
|
||||
|
||||
Finished:
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
|
@ -1,159 +0,0 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
|
||||
#pragma once
|
||||
#pragma warning( disable : 4091)
|
||||
|
||||
//
|
||||
// System related headers
|
||||
//
|
||||
#define _WINSOCKAPI_
|
||||
|
||||
#define NTDDI_VERSION 0x06010000
|
||||
#define WINVER 0x0601
|
||||
#define _WIN32_WINNT 0x0601
|
||||
|
||||
#include <windows.h>
|
||||
#include <atlbase.h>
|
||||
#include <pdh.h>
|
||||
|
||||
//#include <ntassert.h>
|
||||
#include <Shlobj.h>
|
||||
#include <httpserv.h>
|
||||
|
||||
// This should remove our issue of compiling for win7 without header files.
|
||||
// We force the Windows 8 version check logic in iiswebsocket.h to succeed even though we're compiling for Windows 7.
|
||||
// Then, we set the version defines back to Windows 7 to for the remainder of the compilation.
|
||||
#undef NTDDI_VERSION
|
||||
#undef WINVER
|
||||
#undef _WIN32_WINNT
|
||||
#define NTDDI_VERSION 0x06020000
|
||||
#define WINVER 0x0602
|
||||
#define _WIN32_WINNT 0x0602
|
||||
#include <iiswebsocket.h>
|
||||
#undef NTDDI_VERSION
|
||||
#undef WINVER
|
||||
#undef _WIN32_WINNT
|
||||
|
||||
#define NTDDI_VERSION 0x06010000
|
||||
#define WINVER 0x0601
|
||||
#define _WIN32_WINNT 0x0601
|
||||
|
||||
#include <httptrace.h>
|
||||
#include <winhttp.h>
|
||||
|
||||
#include <cstdlib>
|
||||
#include <vector>
|
||||
#include <wchar.h>
|
||||
|
||||
//
|
||||
// Option available starting Windows 8.
|
||||
// 111 is the value in SDK on May 15, 2012.
|
||||
//
|
||||
#ifndef WINHTTP_OPTION_ASSURED_NON_BLOCKING_CALLBACKS
|
||||
#define WINHTTP_OPTION_ASSURED_NON_BLOCKING_CALLBACKS 111
|
||||
#endif
|
||||
|
||||
#ifdef max
|
||||
#undef max
|
||||
template<typename T> inline T max(T a, T b)
|
||||
{
|
||||
return a > b ? a : b;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef min
|
||||
#undef min
|
||||
template<typename T> inline T min(T a, T b)
|
||||
{
|
||||
return a < b ? a : b;
|
||||
}
|
||||
#endif
|
||||
|
||||
inline bool IsSpace(char ch)
|
||||
{
|
||||
switch(ch)
|
||||
{
|
||||
case 32: // ' '
|
||||
case 9: // '\t'
|
||||
case 10: // '\n'
|
||||
case 13: // '\r'
|
||||
case 11: // '\v'
|
||||
case 12: // '\f'
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
#include <hashfn.h>
|
||||
#include <hashtable.h>
|
||||
#include "stringa.h"
|
||||
#include "stringu.h"
|
||||
#include "dbgutil.h"
|
||||
#include "ahutil.h"
|
||||
#include "multisz.h"
|
||||
#include "multisza.h"
|
||||
#include "base64.h"
|
||||
#include <listentry.h>
|
||||
#include <datetime.h>
|
||||
#include <reftrace.h>
|
||||
#include <acache.h>
|
||||
#include <time.h>
|
||||
|
||||
#include "..\..\CommonLib\environmentvariablehash.h"
|
||||
#include "..\..\CommonLib\aspnetcoreconfig.h"
|
||||
#include "..\..\CommonLib\hostfxr_utility.h"
|
||||
#include "..\..\CommonLib\application.h"
|
||||
#include "..\..\CommonLib\utility.h"
|
||||
#include "..\..\CommonLib\debugutil.h"
|
||||
#include "..\..\CommonLib\requesthandler.h"
|
||||
#include "..\..\CommonLib\resources.h"
|
||||
#include "..\..\CommonLib\aspnetcore_msg.h"
|
||||
//#include "aspnetcore_event.h"
|
||||
#include "appoffline.h"
|
||||
#include "filewatcher.h"
|
||||
#include "applicationinfo.h"
|
||||
#include "applicationmanager.h"
|
||||
#include "globalmodule.h"
|
||||
#include "proxymodule.h"
|
||||
#include "applicationinfo.h"
|
||||
|
||||
|
||||
FORCEINLINE
|
||||
DWORD
|
||||
WIN32_FROM_HRESULT(
|
||||
HRESULT hr
|
||||
)
|
||||
{
|
||||
if ((FAILED(hr)) &&
|
||||
(HRESULT_FACILITY(hr) == FACILITY_WIN32))
|
||||
{
|
||||
return HRESULT_CODE(hr);
|
||||
}
|
||||
return hr;
|
||||
}
|
||||
|
||||
FORCEINLINE
|
||||
HRESULT
|
||||
HRESULT_FROM_GETLASTERROR()
|
||||
{
|
||||
return ( GetLastError() != NO_ERROR )
|
||||
? HRESULT_FROM_WIN32( GetLastError() )
|
||||
: E_FAIL;
|
||||
}
|
||||
|
||||
extern PVOID g_pModuleId;
|
||||
extern BOOL g_fAspnetcoreRHAssemblyLoaded;
|
||||
extern BOOL g_fAspnetcoreRHLoadedError;
|
||||
extern BOOL g_fInShutdown;
|
||||
extern BOOL g_fEnableReferenceCountTracing;
|
||||
extern DWORD g_dwActiveServerProcesses;
|
||||
extern HINSTANCE g_hModule;
|
||||
extern HMODULE g_hAspnetCoreRH;
|
||||
extern SRWLOCK g_srwLock;
|
||||
extern PCWSTR g_pwzAspnetcoreRequestHandlerName;
|
||||
extern HANDLE g_hEventLog;
|
||||
extern PFN_ASPNETCORE_CREATE_APPLICATION g_pfnAspNetCoreCreateApplication;
|
||||
extern PFN_ASPNETCORE_CREATE_REQUEST_HANDLER g_pfnAspNetCoreCreateRequestHandler;
|
||||
#pragma warning( error : 4091)
|
||||
|
|
@ -1,211 +0,0 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
|
||||
#include "precomp.hxx"
|
||||
|
||||
__override
|
||||
HRESULT
|
||||
ASPNET_CORE_PROXY_MODULE_FACTORY::GetHttpModule(
|
||||
CHttpModule ** ppModule,
|
||||
IModuleAllocator * pAllocator
|
||||
)
|
||||
{
|
||||
ASPNET_CORE_PROXY_MODULE *pModule = new (pAllocator) ASPNET_CORE_PROXY_MODULE();
|
||||
if (pModule == NULL)
|
||||
{
|
||||
return E_OUTOFMEMORY;
|
||||
}
|
||||
|
||||
*ppModule = pModule;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
__override
|
||||
VOID
|
||||
ASPNET_CORE_PROXY_MODULE_FACTORY::Terminate(
|
||||
VOID
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine description:
|
||||
|
||||
Function called by IIS for global (non-request-specific) notifications
|
||||
|
||||
Arguments:
|
||||
|
||||
None.
|
||||
|
||||
Return value:
|
||||
|
||||
None
|
||||
|
||||
--*/
|
||||
{
|
||||
/* FORWARDING_HANDLER::StaticTerminate();
|
||||
|
||||
WEBSOCKET_HANDLER::StaticTerminate();*/
|
||||
|
||||
ALLOC_CACHE_HANDLER::StaticTerminate();
|
||||
|
||||
delete this;
|
||||
}
|
||||
|
||||
ASPNET_CORE_PROXY_MODULE::ASPNET_CORE_PROXY_MODULE(
|
||||
) : m_pApplicationInfo(NULL), m_pHandler(NULL)
|
||||
{
|
||||
}
|
||||
|
||||
ASPNET_CORE_PROXY_MODULE::~ASPNET_CORE_PROXY_MODULE()
|
||||
{
|
||||
if (m_pApplicationInfo != NULL)
|
||||
{
|
||||
m_pApplicationInfo->DereferenceApplicationInfo();
|
||||
m_pApplicationInfo = NULL;
|
||||
}
|
||||
|
||||
if (m_pHandler != NULL)
|
||||
{
|
||||
m_pHandler->DereferenceRequestHandler();
|
||||
m_pHandler = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
__override
|
||||
REQUEST_NOTIFICATION_STATUS
|
||||
ASPNET_CORE_PROXY_MODULE::OnExecuteRequestHandler(
|
||||
IHttpContext * pHttpContext,
|
||||
IHttpEventProvider *
|
||||
)
|
||||
{
|
||||
HRESULT hr = S_OK;
|
||||
ASPNETCORE_CONFIG *pConfig = NULL;
|
||||
APPLICATION_MANAGER *pApplicationManager = NULL;
|
||||
REQUEST_NOTIFICATION_STATUS retVal = RQ_NOTIFICATION_CONTINUE;
|
||||
APPLICATION* pApplication = NULL;
|
||||
STACK_STRU(struFileName, 256);
|
||||
if (g_fInShutdown)
|
||||
{
|
||||
hr = HRESULT_FROM_WIN32(ERROR_SERVER_SHUTDOWN_IN_PROGRESS);
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
hr = ASPNETCORE_CONFIG::GetConfig(g_pHttpServer, g_pModuleId, pHttpContext, g_hEventLog, &pConfig);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
pApplicationManager = APPLICATION_MANAGER::GetInstance();
|
||||
if (pApplicationManager == NULL)
|
||||
{
|
||||
hr = E_OUTOFMEMORY;
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
hr = pApplicationManager->GetOrCreateApplicationInfo(
|
||||
g_pHttpServer,
|
||||
pConfig,
|
||||
&m_pApplicationInfo);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
// app_offline check to avoid loading aspnetcorerh.dll unnecessarily
|
||||
if (m_pApplicationInfo->AppOfflineFound())
|
||||
{
|
||||
// servicing app_offline
|
||||
HTTP_DATA_CHUNK DataChunk;
|
||||
IHttpResponse *pResponse = NULL;
|
||||
APP_OFFLINE_HTM *pAppOfflineHtm = NULL;
|
||||
|
||||
pResponse = pHttpContext->GetResponse();
|
||||
pAppOfflineHtm = m_pApplicationInfo->QueryAppOfflineHtm();
|
||||
DBG_ASSERT(pAppOfflineHtm);
|
||||
DBG_ASSERT(pResponse);
|
||||
|
||||
// Ignore failure hresults as nothing we can do
|
||||
// Set fTrySkipCustomErrors to true as we want client see the offline content
|
||||
pResponse->SetStatus(503, "Service Unavailable", 0, hr, NULL, TRUE);
|
||||
pResponse->SetHeader("Content-Type",
|
||||
"text/html",
|
||||
(USHORT)strlen("text/html"),
|
||||
FALSE
|
||||
);
|
||||
|
||||
DataChunk.DataChunkType = HttpDataChunkFromMemory;
|
||||
DataChunk.FromMemory.pBuffer = (PVOID)pAppOfflineHtm->m_Contents.QueryStr();
|
||||
DataChunk.FromMemory.BufferLength = pAppOfflineHtm->m_Contents.QueryCB();
|
||||
pResponse->WriteEntityChunkByReference(&DataChunk);
|
||||
|
||||
retVal = RQ_NOTIFICATION_FINISH_REQUEST;
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
// make sure assmebly is loaded and application is created
|
||||
hr = m_pApplicationInfo->EnsureApplicationCreated();
|
||||
if (FAILED(hr))
|
||||
{
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
m_pApplicationInfo->ExtractApplication(&pApplication);
|
||||
|
||||
// make sure application is in running state
|
||||
// cannot recreate the application as we cannot reload clr for inprocess
|
||||
if (pApplication != NULL &&
|
||||
pApplication->QueryStatus() != APPLICATION_STATUS::RUNNING &&
|
||||
pApplication->QueryStatus() != APPLICATION_STATUS::STARTING)
|
||||
{
|
||||
hr = HRESULT_FROM_WIN32(ERROR_SERVER_DISABLED);
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
// Create RequestHandler and process the request
|
||||
hr = m_pApplicationInfo->QueryCreateRequestHandler()(pHttpContext,
|
||||
(HTTP_MODULE_ID*) &g_pModuleId,
|
||||
pApplication,
|
||||
&m_pHandler);
|
||||
|
||||
if (FAILED(hr))
|
||||
{
|
||||
goto Finished;
|
||||
}
|
||||
|
||||
retVal = m_pHandler->OnExecuteRequestHandler();
|
||||
|
||||
Finished:
|
||||
if (FAILED(hr))
|
||||
{
|
||||
retVal = RQ_NOTIFICATION_FINISH_REQUEST;
|
||||
if (hr == HRESULT_FROM_WIN32(ERROR_SERVER_SHUTDOWN_IN_PROGRESS))
|
||||
{
|
||||
pHttpContext->GetResponse()->SetStatus(503, "Service Unavailable", 0, hr);
|
||||
}
|
||||
else
|
||||
{
|
||||
pHttpContext->GetResponse()->SetStatus(500, "Internal Server Error", 0, hr);
|
||||
}
|
||||
}
|
||||
|
||||
if (pApplication != NULL)
|
||||
{
|
||||
pApplication->DereferenceApplication();
|
||||
}
|
||||
return retVal;
|
||||
}
|
||||
|
||||
__override
|
||||
REQUEST_NOTIFICATION_STATUS
|
||||
ASPNET_CORE_PROXY_MODULE::OnAsyncCompletion(
|
||||
IHttpContext *,
|
||||
DWORD,
|
||||
BOOL,
|
||||
IHttpEventProvider *,
|
||||
IHttpCompletionInfo * pCompletionInfo
|
||||
)
|
||||
{
|
||||
return m_pHandler->OnAsyncCompletion(
|
||||
pCompletionInfo->GetCompletionBytes(),
|
||||
pCompletionInfo->GetCompletionStatus());
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
|
||||
// Do not remove this file. It is used for precompiled header generation
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
|
||||
#pragma once
|
||||
#pragma warning( disable : 4091)
|
||||
|
||||
//
|
||||
// System related headers
|
||||
//
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
|
||||
#define NTDDI_VERSION NTDDI_WIN7
|
||||
#define WINVER _WIN32_WINNT_WIN7
|
||||
#define _WIN32_WINNT 0x0601
|
||||
|
||||
#include <Windows.h>
|
||||
#include <atlbase.h>
|
||||
#include <httpserv.h>
|
||||
#include <ntassert.h>
|
||||
#include "stringu.h"
|
||||
#include "stringa.h"
|
||||
|
||||
#pragma warning( error : 4091)
|
||||
|
|
@ -0,0 +1,68 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
|
||||
#pragma once
|
||||
#include "IOutputManager.h"
|
||||
#include "StdWrapper.h"
|
||||
#include "EventLog.h"
|
||||
#include "exceptions.h"
|
||||
#include "StringHelpers.h"
|
||||
#include "debugutil.h"
|
||||
|
||||
class BaseOutputManager :
|
||||
public IOutputManager
|
||||
{
|
||||
public:
|
||||
BaseOutputManager() : BaseOutputManager(/* fEnableNativeLogging */ true) {}
|
||||
BaseOutputManager(bool enableNativeLogging) :
|
||||
m_disposed(false),
|
||||
stdoutWrapper(nullptr),
|
||||
stderrWrapper(nullptr),
|
||||
m_enableNativeRedirection(enableNativeLogging)
|
||||
{
|
||||
InitializeSRWLock(&m_srwLock);
|
||||
}
|
||||
~BaseOutputManager() {}
|
||||
|
||||
void
|
||||
TryStartRedirection()
|
||||
{
|
||||
const auto startLambda = [&]() { this->Start(); };
|
||||
TryOperation(startLambda, L"Could not start stdout redirection in %s. Exception message: %s.");
|
||||
}
|
||||
|
||||
void
|
||||
TryStopRedirection()
|
||||
{
|
||||
const auto stopLambda = [&]() { this->Stop(); };
|
||||
TryOperation(stopLambda, L"Could not stop stdout redirection in %s. Exception message: %s.");
|
||||
}
|
||||
|
||||
protected:
|
||||
std::wstring m_stdOutContent;
|
||||
bool m_disposed;
|
||||
bool m_enableNativeRedirection;
|
||||
SRWLOCK m_srwLock{};
|
||||
std::unique_ptr<StdWrapper> stdoutWrapper;
|
||||
std::unique_ptr<StdWrapper> stderrWrapper;
|
||||
|
||||
template<typename Functor>
|
||||
void
|
||||
TryOperation(Functor func,
|
||||
std::wstring exceptionMessage)
|
||||
{
|
||||
try
|
||||
{
|
||||
func();
|
||||
}
|
||||
catch (std::runtime_error& exception)
|
||||
{
|
||||
EventLog::Warn(ASPNETCORE_EVENT_GENERAL_WARNING, exceptionMessage.c_str(), GetModuleName().c_str(), to_wide_string(exception.what(), GetConsoleOutputCP()).c_str());
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
OBSERVE_CAUGHT_EXCEPTION();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -72,16 +72,20 @@
|
|||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
<OutDir>$(MSBuildProjectDirectory)\bin\$(Configuration)\$(Platform)\</OutDir>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
<OutDir>$(MSBuildProjectDirectory)\bin\$(Configuration)\$(Platform)\</OutDir>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<OutDir>$(MSBuildProjectDirectory)\bin\$(Configuration)\$(Platform)\</OutDir>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<IncludePath>C:\AspNetCoreModule\src\IISLib;$(IncludePath)</IncludePath>
|
||||
<OutDir>$(MSBuildProjectDirectory)\bin\$(Configuration)\$(Platform)\</OutDir>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
|
|
@ -91,10 +95,16 @@
|
|||
<Optimization>Disabled</Optimization>
|
||||
<SDLCheck>false</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PrecompiledHeaderOutputFile>$(IntDir)$(TargetName).pch</PrecompiledHeaderOutputFile>
|
||||
<PrecompiledHeaderFile>stdafx.h</PrecompiledHeaderFile>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||
<ShowIncludes>false</ShowIncludes>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
<AdditionalIncludeDirectories>..\iislib;</AdditionalIncludeDirectories>
|
||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||
<ForcedIncludeFiles>stdafx.h</ForcedIncludeFiles>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
|
|
@ -109,11 +119,17 @@
|
|||
<Optimization>Disabled</Optimization>
|
||||
<SDLCheck>false</SDLCheck>
|
||||
<PreprocessorDefinitions>_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PrecompiledHeaderOutputFile>$(IntDir)$(TargetName).pch</PrecompiledHeaderOutputFile>
|
||||
<PrecompiledHeaderFile>stdafx.h</PrecompiledHeaderFile>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
<MinimalRebuild>false</MinimalRebuild>
|
||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||
<ShowIncludes>false</ShowIncludes>
|
||||
<AdditionalIncludeDirectories>..\iislib;</AdditionalIncludeDirectories>
|
||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||
<ForcedIncludeFiles>stdafx.h</ForcedIncludeFiles>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
|
|
@ -130,13 +146,20 @@
|
|||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>false</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PrecompiledHeaderOutputFile>$(IntDir)$(TargetName).pch</PrecompiledHeaderOutputFile>
|
||||
<PrecompiledHeaderFile>stdafx.h</PrecompiledHeaderFile>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
<ShowIncludes>false</ShowIncludes>
|
||||
<AdditionalIncludeDirectories>..\iislib;</AdditionalIncludeDirectories>
|
||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||
<ForcedIncludeFiles>stdafx.h</ForcedIncludeFiles>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<AdditionalOptions>/NODEFAULTLIB:libucrt.lib /DEFAULTLIB:ucrt.lib %(AdditionalOptions)</AdditionalOptions>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
|
|
@ -151,17 +174,22 @@
|
|||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>false</SDLCheck>
|
||||
<PreprocessorDefinitions>NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PrecompiledHeaderOutputFile>$(IntDir)$(TargetName).pch</PrecompiledHeaderOutputFile>
|
||||
<PrecompiledHeaderFile>stdafx.h</PrecompiledHeaderFile>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<AdditionalIncludeDirectories>
|
||||
</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>..\iislib;</AdditionalIncludeDirectories>
|
||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||
<AdditionalUsingDirectories>
|
||||
</AdditionalUsingDirectories>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
<ShowIncludes>false</ShowIncludes>
|
||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||
<ForcedIncludeFiles>stdafx.h</ForcedIncludeFiles>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<AdditionalOptions>/NODEFAULTLIB:libucrt.lib /DEFAULTLIB:ucrt.lib %(AdditionalOptions)</AdditionalOptions>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
|
|
@ -171,32 +199,71 @@
|
|||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="application.h" />
|
||||
<ClInclude Include="aspnetcoreconfig.h" />
|
||||
<ClInclude Include="debugutil.h" />
|
||||
<ClInclude Include="disconnectcontext.h" />
|
||||
<ClInclude Include="environmentvariablehash.h" />
|
||||
<ClInclude Include="baseoutputmanager.h" />
|
||||
<ClInclude Include="ConfigurationSection.h" />
|
||||
<ClInclude Include="ConfigurationSource.h" />
|
||||
<ClInclude Include="config_utility.h" />
|
||||
<ClInclude Include="Environment.h" />
|
||||
<ClInclude Include="EventLog.h" />
|
||||
<ClInclude Include="EventTracing.h" />
|
||||
<ClInclude Include="exceptions.h" />
|
||||
<ClInclude Include="file_utility.h" />
|
||||
<ClInclude Include="FileOutputManager.h" />
|
||||
<ClInclude Include="GlobalVersionUtility.h" />
|
||||
<ClInclude Include="fx_ver.h" />
|
||||
<ClInclude Include="HandleWrapper.h" />
|
||||
<ClInclude Include="hostfxroptions.h" />
|
||||
<ClInclude Include="hostfxr_utility.h" />
|
||||
<ClInclude Include="iapplication.h" />
|
||||
<ClInclude Include="debugutil.h" />
|
||||
<ClInclude Include="InvalidOperationException.h" />
|
||||
<ClInclude Include="IOutputManager.h" />
|
||||
<ClInclude Include="irequesthandler.h" />
|
||||
<ClInclude Include="LoggingHelpers.h" />
|
||||
<ClInclude Include="ModuleHelpers.h" />
|
||||
<ClInclude Include="NonCopyable.h" />
|
||||
<ClInclude Include="NullOutputManager.h" />
|
||||
<ClInclude Include="PipeOutputManager.h" />
|
||||
<ClInclude Include="requesthandler.h" />
|
||||
<ClInclude Include="resources.h" />
|
||||
<ClInclude Include="SRWLockWrapper.h" />
|
||||
<ClInclude Include="ServerErrorApplication.h" />
|
||||
<ClInclude Include="ServerErrorHandler.h" />
|
||||
<ClInclude Include="SRWExclusiveLock.h" />
|
||||
<ClInclude Include="SRWSharedLock.h" />
|
||||
<ClInclude Include="stdafx.h" />
|
||||
<ClInclude Include="utility.h" />
|
||||
<ClInclude Include="StdWrapper.h" />
|
||||
<ClInclude Include="StringHelpers.h" />
|
||||
<ClInclude Include="sttimer.h" />
|
||||
<ClInclude Include="WebConfigConfigurationSection.h" />
|
||||
<ClInclude Include="WebConfigConfigurationSource.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="application.cpp" />
|
||||
<ClCompile Include="aspnetcoreconfig.cxx" />
|
||||
<ClCompile Include="fx_ver.cxx" />
|
||||
<ClCompile Include="ConfigurationSection.cpp" />
|
||||
<ClCompile Include="ConfigurationSource.cpp" />
|
||||
<ClCompile Include="debugutil.cpp" />
|
||||
<ClCompile Include="Environment.cpp" />
|
||||
<ClCompile Include="EventLog.cpp" />
|
||||
<ClCompile Include="file_utility.cpp" />
|
||||
<ClCompile Include="FileOutputManager.cpp" />
|
||||
<ClCompile Include="fx_ver.cpp" />
|
||||
<ClCompile Include="GlobalVersionUtility.cpp" />
|
||||
<ClCompile Include="HandleWrapper.cpp" />
|
||||
<ClCompile Include="hostfxr_utility.cpp" />
|
||||
<ClCompile Include="requesthandler.cxx" />
|
||||
<ClCompile Include="SRWLockWrapper.cpp" />
|
||||
<ClCompile Include="hostfxroptions.cpp" />
|
||||
<ClCompile Include="LoggingHelpers.cpp" />
|
||||
<ClCompile Include="PipeOutputManager.cpp" />
|
||||
<ClCompile Include="StdWrapper.cpp" />
|
||||
<ClCompile Include="SRWExclusiveLock.cpp" />
|
||||
<ClCompile Include="SRWSharedLock.cpp" />
|
||||
<ClCompile Include="stdafx.cpp">
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
|
||||
</ClCompile>
|
||||
<ClCompile Include="utility.cxx" />
|
||||
<ClCompile Include="StringHelpers.cpp" />
|
||||
<ClCompile Include="WebConfigConfigurationSection.cpp" />
|
||||
<ClCompile Include="WebConfigConfigurationSource.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\IISLib\IISLib.vcxproj">
|
||||
|
|
|
|||
|
|
@ -0,0 +1,20 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
|
||||
class ConfigurationLoadException: public std::runtime_error
|
||||
{
|
||||
public:
|
||||
ConfigurationLoadException(std::wstring msg)
|
||||
: runtime_error("Configuration load exception has occured"), message(std::move(msg))
|
||||
{
|
||||
}
|
||||
|
||||
std::wstring get_message() const { return message; }
|
||||
|
||||
private:
|
||||
std::wstring message;
|
||||
};
|
||||
|
|
@ -0,0 +1,67 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
|
||||
#include "ConfigurationSection.h"
|
||||
|
||||
#include "StringHelpers.h"
|
||||
#include "ConfigurationLoadException.h"
|
||||
|
||||
std::wstring ConfigurationSection::GetRequiredString(const std::wstring& name) const
|
||||
{
|
||||
auto result = GetString(name);
|
||||
if (!result.has_value() || result.value().empty())
|
||||
{
|
||||
ThrowRequiredException(name);
|
||||
}
|
||||
return result.value();
|
||||
}
|
||||
|
||||
bool ConfigurationSection::GetRequiredBool(const std::wstring& name) const
|
||||
{
|
||||
auto result = GetBool(name);
|
||||
if (!result.has_value())
|
||||
{
|
||||
ThrowRequiredException(name);
|
||||
}
|
||||
return result.value();
|
||||
}
|
||||
|
||||
DWORD ConfigurationSection::GetRequiredLong(const std::wstring& name) const
|
||||
{
|
||||
auto result = GetLong(name);
|
||||
if (!result.has_value())
|
||||
{
|
||||
ThrowRequiredException(name);
|
||||
}
|
||||
return result.value();
|
||||
}
|
||||
|
||||
DWORD ConfigurationSection::GetRequiredTimespan(const std::wstring& name) const
|
||||
{
|
||||
auto result = GetTimespan(name);
|
||||
if (!result.has_value())
|
||||
{
|
||||
ThrowRequiredException(name);
|
||||
}
|
||||
return result.value();
|
||||
}
|
||||
|
||||
void ConfigurationSection::ThrowRequiredException(const std::wstring& name)
|
||||
{
|
||||
throw ConfigurationLoadException(format(L"Attribute '%s' is required.", name.c_str()));
|
||||
}
|
||||
|
||||
std::optional<std::wstring> find_element(const std::vector<std::pair<std::wstring, std::wstring>>& pairs, const std::wstring& name)
|
||||
{
|
||||
const auto iter = std::find_if(
|
||||
pairs.begin(),
|
||||
pairs.end(),
|
||||
[&](const std::pair<std::wstring, std::wstring>& pair) { return equals_ignore_case(pair.first, name); });
|
||||
|
||||
if (iter == pairs.end())
|
||||
{
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
return std::make_optional(iter->second);
|
||||
}
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include <optional>
|
||||
#include <vector>
|
||||
|
||||
#include "NonCopyable.h"
|
||||
|
||||
#define CS_ASPNETCORE_COLLECTION_ITEM_NAME L"name"
|
||||
#define CS_ASPNETCORE_COLLECTION_ITEM_VALUE L"value"
|
||||
#define CS_ASPNETCORE_ENVIRONMENT_VARIABLES L"environmentVariables"
|
||||
#define CS_ASPNETCORE_STDOUT_LOG_FILE L"stdoutLogFile"
|
||||
#define CS_ASPNETCORE_STDOUT_LOG_ENABLED L"stdoutLogEnabled"
|
||||
#define CS_ASPNETCORE_PROCESS_EXE_PATH L"processPath"
|
||||
#define CS_ASPNETCORE_PROCESS_ARGUMENTS L"arguments"
|
||||
#define CS_ASPNETCORE_PROCESS_ARGUMENTS_DEFAULT L""
|
||||
#define CS_ASPNETCORE_PROCESS_STARTUP_TIME_LIMIT L"startupTimeLimit"
|
||||
#define CS_ASPNETCORE_PROCESS_SHUTDOWN_TIME_LIMIT L"shutdownTimeLimit"
|
||||
#define CS_ASPNETCORE_HOSTING_MODEL_OUTOFPROCESS L"outofprocess"
|
||||
#define CS_ASPNETCORE_HOSTING_MODEL_INPROCESS L"inprocess"
|
||||
#define CS_ASPNETCORE_HOSTING_MODEL L"hostingModel"
|
||||
#define CS_ASPNETCORE_HANDLER_SETTINGS L"handlerSettings"
|
||||
#define CS_ASPNETCORE_DISABLE_START_UP_ERROR_PAGE L"disableStartUpErrorPage"
|
||||
#define CS_ENABLED L"enabled"
|
||||
|
||||
class ConfigurationSection: NonCopyable
|
||||
{
|
||||
public:
|
||||
ConfigurationSection() = default;
|
||||
virtual ~ConfigurationSection() = default;
|
||||
virtual std::optional<std::wstring> GetString(const std::wstring& name) const = 0;
|
||||
virtual std::optional<bool> GetBool(const std::wstring& name) const = 0;
|
||||
virtual std::optional<DWORD> GetLong(const std::wstring& name) const = 0;
|
||||
virtual std::optional<DWORD> GetTimespan(const std::wstring& name) const = 0;
|
||||
|
||||
std::wstring GetRequiredString(const std::wstring& name) const;
|
||||
bool GetRequiredBool(const std::wstring& name) const;
|
||||
DWORD GetRequiredLong(const std::wstring& name) const;
|
||||
DWORD GetRequiredTimespan(const std::wstring& name) const;
|
||||
|
||||
virtual std::vector<std::pair<std::wstring, std::wstring>> GetKeyValuePairs(const std::wstring& name) const = 0;
|
||||
|
||||
protected:
|
||||
static void ThrowRequiredException(const std::wstring& name);
|
||||
};
|
||||
|
||||
std::optional<std::wstring> find_element(const std::vector<std::pair<std::wstring, std::wstring>>& pairs, const std::wstring& name);
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
|
||||
#include "ConfigurationSource.h"
|
||||
|
||||
#include "StringHelpers.h"
|
||||
#include "ConfigurationLoadException.h"
|
||||
|
||||
std::shared_ptr<ConfigurationSection> ConfigurationSource::GetRequiredSection(const std::wstring& name) const
|
||||
{
|
||||
auto section = GetSection(name);
|
||||
if (!section)
|
||||
{
|
||||
throw ConfigurationLoadException(format(L"Unable to get required configuration section '%s'. Possible reason is web.config authoring error.", name.c_str()));
|
||||
}
|
||||
return section;
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include "NonCopyable.h"
|
||||
#include "ConfigurationSection.h"
|
||||
|
||||
#define CS_ASPNETCORE_SECTION L"system.webServer/aspNetCore"
|
||||
#define CS_WINDOWS_AUTHENTICATION_SECTION L"system.webServer/security/authentication/windowsAuthentication"
|
||||
#define CS_BASIC_AUTHENTICATION_SECTION L"system.webServer/security/authentication/basicAuthentication"
|
||||
#define CS_ANONYMOUS_AUTHENTICATION_SECTION L"system.webServer/security/authentication/anonymousAuthentication"
|
||||
|
||||
class ConfigurationSource: NonCopyable
|
||||
{
|
||||
public:
|
||||
ConfigurationSource() = default;
|
||||
virtual ~ConfigurationSource() = default;
|
||||
virtual std::shared_ptr<ConfigurationSection> GetSection(const std::wstring& name) const = 0;
|
||||
std::shared_ptr<ConfigurationSection> GetRequiredSection(const std::wstring& name) const;
|
||||
};
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue