Merging release/2.2 into master
This commit is contained in:
commit
e342dac19e
|
|
@ -111,6 +111,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RequestHandlerLib", "src\As
|
||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IIS.FunctionalTests", "test\IIS.FunctionalTests\IIS.FunctionalTests.csproj", "{D182103F-8405-4647-B158-C36F598657EF}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IIS.FunctionalTests", "test\IIS.FunctionalTests\IIS.FunctionalTests.csproj", "{D182103F-8405-4647-B158-C36F598657EF}"
|
||||||
EndProject
|
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
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
|
@ -367,6 +369,18 @@ Global
|
||||||
{D182103F-8405-4647-B158-C36F598657EF}.Release|x64.Build.0 = 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.ActiveCfg = Release|Any CPU
|
||||||
{D182103F-8405-4647-B158-C36F598657EF}.Release|x86.Build.0 = 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
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|
@ -396,6 +410,7 @@ Global
|
||||||
{CAC1267B-8778-4257-AAC6-CAF481723B01} = {EF30B533-D715-421A-92B7-92FEF460AC9C}
|
{CAC1267B-8778-4257-AAC6-CAF481723B01} = {EF30B533-D715-421A-92B7-92FEF460AC9C}
|
||||||
{1533E271-F61B-441B-8B74-59FB61DF0552} = {06CA2C2B-83B0-4D83-905A-E0C74790009E}
|
{1533E271-F61B-441B-8B74-59FB61DF0552} = {06CA2C2B-83B0-4D83-905A-E0C74790009E}
|
||||||
{D182103F-8405-4647-B158-C36F598657EF} = {EF30B533-D715-421A-92B7-92FEF460AC9C}
|
{D182103F-8405-4647-B158-C36F598657EF} = {EF30B533-D715-421A-92B7-92FEF460AC9C}
|
||||||
|
{34135ED7-313D-4E68-860C-D6B51AA28523} = {04B1EDB6-E967-4D25-89B9-E6F8304038CD}
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
SolutionGuid = {DB4F868D-E1AE-4FD7-9333-69FA15B268C5}
|
SolutionGuid = {DB4F868D-E1AE-4FD7-9333-69FA15B268C5}
|
||||||
|
|
|
||||||
|
|
@ -118,6 +118,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RequestHandlerLib", "src\As
|
||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IIS.FunctionalTests", "test\IIS.FunctionalTests\IIS.FunctionalTests.csproj", "{1F0C8D9B-F47B-41F3-9FC9-6954B6DC7712}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IIS.FunctionalTests", "test\IIS.FunctionalTests\IIS.FunctionalTests.csproj", "{1F0C8D9B-F47B-41F3-9FC9-6954B6DC7712}"
|
||||||
EndProject
|
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
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
|
@ -394,6 +396,18 @@ Global
|
||||||
{1F0C8D9B-F47B-41F3-9FC9-6954B6DC7712}.Release|x64.Build.0 = 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.ActiveCfg = Release|Any CPU
|
||||||
{1F0C8D9B-F47B-41F3-9FC9-6954B6DC7712}.Release|x86.Build.0 = 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}.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
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|
@ -426,6 +440,7 @@ Global
|
||||||
{CAC1267B-8778-4257-AAC6-CAF481723B01} = {EF30B533-D715-421A-92B7-92FEF460AC9C}
|
{CAC1267B-8778-4257-AAC6-CAF481723B01} = {EF30B533-D715-421A-92B7-92FEF460AC9C}
|
||||||
{1533E271-F61B-441B-8B74-59FB61DF0552} = {06CA2C2B-83B0-4D83-905A-E0C74790009E}
|
{1533E271-F61B-441B-8B74-59FB61DF0552} = {06CA2C2B-83B0-4D83-905A-E0C74790009E}
|
||||||
{1F0C8D9B-F47B-41F3-9FC9-6954B6DC7712} = {EF30B533-D715-421A-92B7-92FEF460AC9C}
|
{1F0C8D9B-F47B-41F3-9FC9-6954B6DC7712} = {EF30B533-D715-421A-92B7-92FEF460AC9C}
|
||||||
|
{CE4FB142-91FB-4B34-BC96-A31120EF4009} = {04B1EDB6-E967-4D25-89B9-E6F8304038CD}
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
SolutionGuid = {DB4F868D-E1AE-4FD7-9333-69FA15B268C5}
|
SolutionGuid = {DB4F868D-E1AE-4FD7-9333-69FA15B268C5}
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,6 @@
|
||||||
<MicrosoftBuildFrameworkPackageVersion>15.6.82</MicrosoftBuildFrameworkPackageVersion>
|
<MicrosoftBuildFrameworkPackageVersion>15.6.82</MicrosoftBuildFrameworkPackageVersion>
|
||||||
<MicrosoftBuildUtilitiesCorePackageVersion>15.6.82</MicrosoftBuildUtilitiesCorePackageVersion>
|
<MicrosoftBuildUtilitiesCorePackageVersion>15.6.82</MicrosoftBuildUtilitiesCorePackageVersion>
|
||||||
<MicrosoftExtensionsBuffersMemoryPoolSourcesPackageVersion>3.0.0-alpha1-10044</MicrosoftExtensionsBuffersMemoryPoolSourcesPackageVersion>
|
<MicrosoftExtensionsBuffersMemoryPoolSourcesPackageVersion>3.0.0-alpha1-10044</MicrosoftExtensionsBuffersMemoryPoolSourcesPackageVersion>
|
||||||
<MicrosoftExtensionsBuffersSourcesPackageVersion>3.0.0-alpha1-10044</MicrosoftExtensionsBuffersSourcesPackageVersion>
|
|
||||||
<MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>3.0.0-alpha1-10044</MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>
|
<MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>3.0.0-alpha1-10044</MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>
|
||||||
<MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>3.0.0-alpha1-10044</MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>
|
<MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>3.0.0-alpha1-10044</MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>
|
||||||
<MicrosoftExtensionsConfigurationJsonPackageVersion>3.0.0-alpha1-10044</MicrosoftExtensionsConfigurationJsonPackageVersion>
|
<MicrosoftExtensionsConfigurationJsonPackageVersion>3.0.0-alpha1-10044</MicrosoftExtensionsConfigurationJsonPackageVersion>
|
||||||
|
|
@ -32,9 +31,8 @@
|
||||||
<MicrosoftExtensionsLoggingPackageVersion>3.0.0-alpha1-10044</MicrosoftExtensionsLoggingPackageVersion>
|
<MicrosoftExtensionsLoggingPackageVersion>3.0.0-alpha1-10044</MicrosoftExtensionsLoggingPackageVersion>
|
||||||
<MicrosoftExtensionsLoggingTestingPackageVersion>3.0.0-alpha1-10044</MicrosoftExtensionsLoggingTestingPackageVersion>
|
<MicrosoftExtensionsLoggingTestingPackageVersion>3.0.0-alpha1-10044</MicrosoftExtensionsLoggingTestingPackageVersion>
|
||||||
<MicrosoftExtensionsOptionsPackageVersion>3.0.0-alpha1-10044</MicrosoftExtensionsOptionsPackageVersion>
|
<MicrosoftExtensionsOptionsPackageVersion>3.0.0-alpha1-10044</MicrosoftExtensionsOptionsPackageVersion>
|
||||||
<MicrosoftExtensionsSecurityHelperSourcesPackageVersion>3.0.0-alpha1-10044</MicrosoftExtensionsSecurityHelperSourcesPackageVersion>
|
<MicrosoftNETCoreApp20PackageVersion>2.0.7</MicrosoftNETCoreApp20PackageVersion>
|
||||||
<MicrosoftNETCoreApp20PackageVersion>2.0.0</MicrosoftNETCoreApp20PackageVersion>
|
<MicrosoftNETCoreApp21PackageVersion>2.1.1</MicrosoftNETCoreApp21PackageVersion>
|
||||||
<MicrosoftNETCoreApp21PackageVersion>2.1.0</MicrosoftNETCoreApp21PackageVersion>
|
|
||||||
<MicrosoftNETCoreApp22PackageVersion>2.2.0-preview1-26618-02</MicrosoftNETCoreApp22PackageVersion>
|
<MicrosoftNETCoreApp22PackageVersion>2.2.0-preview1-26618-02</MicrosoftNETCoreApp22PackageVersion>
|
||||||
<MicrosoftNetHttpHeadersPackageVersion>3.0.0-alpha1-10044</MicrosoftNetHttpHeadersPackageVersion>
|
<MicrosoftNetHttpHeadersPackageVersion>3.0.0-alpha1-10044</MicrosoftNetHttpHeadersPackageVersion>
|
||||||
<MicrosoftNETTestSdkPackageVersion>15.6.1</MicrosoftNETTestSdkPackageVersion>
|
<MicrosoftNETTestSdkPackageVersion>15.6.1</MicrosoftNETTestSdkPackageVersion>
|
||||||
|
|
|
||||||
|
|
@ -79,7 +79,7 @@
|
||||||
<WarningLevel>Level4</WarningLevel>
|
<WarningLevel>Level4</WarningLevel>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;ASPNETCOREMODULE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;ASPNETCOREMODULE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PrecompiledHeaderFile>precomp.hxx</PrecompiledHeaderFile>
|
<PrecompiledHeaderFile>stdafx.h</PrecompiledHeaderFile>
|
||||||
<PrecompiledHeaderOutputFile>$(IntDir)$(TargetName).pch</PrecompiledHeaderOutputFile>
|
<PrecompiledHeaderOutputFile>$(IntDir)$(TargetName).pch</PrecompiledHeaderOutputFile>
|
||||||
<AdditionalIncludeDirectories>..\IISLib;.\Inc;..\CommonLib</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>..\IISLib;.\Inc;..\CommonLib</AdditionalIncludeDirectories>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
|
@ -97,7 +97,7 @@
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||||
<ForcedIncludeFiles>precomp.hxx</ForcedIncludeFiles>
|
<ForcedIncludeFiles>stdafx.h</ForcedIncludeFiles>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Windows</SubSystem>
|
<SubSystem>Windows</SubSystem>
|
||||||
|
|
@ -115,7 +115,7 @@
|
||||||
<WarningLevel>Level4</WarningLevel>
|
<WarningLevel>Level4</WarningLevel>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;ASPNETCOREMODULE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;ASPNETCOREMODULE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PrecompiledHeaderFile>precomp.hxx</PrecompiledHeaderFile>
|
<PrecompiledHeaderFile>stdafx.h</PrecompiledHeaderFile>
|
||||||
<PrecompiledHeaderOutputFile>$(IntDir)$(TargetName).pch</PrecompiledHeaderOutputFile>
|
<PrecompiledHeaderOutputFile>$(IntDir)$(TargetName).pch</PrecompiledHeaderOutputFile>
|
||||||
<AdditionalIncludeDirectories>..\IISLib;.\Inc;..\CommonLib</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>..\IISLib;.\Inc;..\CommonLib</AdditionalIncludeDirectories>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
|
@ -133,7 +133,7 @@
|
||||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||||
<ForcedIncludeFiles>precomp.hxx</ForcedIncludeFiles>
|
<ForcedIncludeFiles>stdafx.h</ForcedIncludeFiles>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Windows</SubSystem>
|
<SubSystem>Windows</SubSystem>
|
||||||
|
|
@ -155,7 +155,7 @@
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;ASPNETCOREMODULE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;ASPNETCOREMODULE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>..\IISLib;.\Inc;..\CommonLib</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>..\IISLib;.\Inc;..\CommonLib</AdditionalIncludeDirectories>
|
||||||
<PrecompiledHeaderFile>precomp.hxx</PrecompiledHeaderFile>
|
<PrecompiledHeaderFile>stdafx.h</PrecompiledHeaderFile>
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
<TreatWarningAsError>true</TreatWarningAsError>
|
<TreatWarningAsError>true</TreatWarningAsError>
|
||||||
<SDLCheck>true</SDLCheck>
|
<SDLCheck>true</SDLCheck>
|
||||||
|
|
@ -170,7 +170,7 @@
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||||
<ForcedIncludeFiles>precomp.hxx</ForcedIncludeFiles>
|
<ForcedIncludeFiles>stdafx.h</ForcedIncludeFiles>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Windows</SubSystem>
|
<SubSystem>Windows</SubSystem>
|
||||||
|
|
@ -193,7 +193,7 @@
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;ASPNETCOREMODULE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;ASPNETCOREMODULE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PrecompiledHeaderFile>precomp.hxx</PrecompiledHeaderFile>
|
<PrecompiledHeaderFile>stdafx.h</PrecompiledHeaderFile>
|
||||||
<AdditionalIncludeDirectories>..\IISLib;.\Inc;..\CommonLib</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>..\IISLib;.\Inc;..\CommonLib</AdditionalIncludeDirectories>
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
<TreatWarningAsError>true</TreatWarningAsError>
|
<TreatWarningAsError>true</TreatWarningAsError>
|
||||||
|
|
@ -209,7 +209,7 @@
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||||
<ForcedIncludeFiles>precomp.hxx</ForcedIncludeFiles>
|
<ForcedIncludeFiles>stdafx.h</ForcedIncludeFiles>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Windows</SubSystem>
|
<SubSystem>Windows</SubSystem>
|
||||||
|
|
@ -225,26 +225,26 @@
|
||||||
</ResourceCompile>
|
</ResourceCompile>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="Inc\applicationinfo.h" />
|
<ClInclude Include="applicationinfo.h" />
|
||||||
<ClInclude Include="Inc\aspnetcore_shim_config.h" />
|
<ClInclude Include="aspnetcore_shim_config.h" />
|
||||||
<ClInclude Include="inc\globalmodule.h" />
|
<ClInclude Include="globalmodule.h" />
|
||||||
<ClInclude Include="Inc\applicationmanager.h" />
|
<ClInclude Include="applicationmanager.h" />
|
||||||
<ClInclude Include="Inc\proxymodule.h" />
|
<ClInclude Include="proxymodule.h" />
|
||||||
<ClInclude Include="Inc\precomp.hxx" />
|
<ClInclude Include="stdafx.h" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="Src\applicationinfo.cpp" />
|
<ClCompile Include="applicationinfo.cpp" />
|
||||||
<ClCompile Include="Src\applicationmanager.cxx" />
|
<ClCompile Include="applicationmanager.cpp" />
|
||||||
<ClCompile Include="src\aspnetcore_shim_config.cpp" />
|
<ClCompile Include="aspnetcore_shim_config.cpp" />
|
||||||
<ClCompile Include="Src\dllmain.cpp" />
|
<ClCompile Include="dllmain.cpp" />
|
||||||
<ClCompile Include="src\globalmodule.cpp" />
|
<ClCompile Include="globalmodule.cpp" />
|
||||||
<ClCompile Include="src\precomp.cpp">
|
<ClCompile Include="stdafx.cpp">
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="Src\proxymodule.cxx" />
|
<ClCompile Include="proxymodule.cpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\CommonLib\CommonLib.vcxproj">
|
<ProjectReference Include="..\CommonLib\CommonLib.vcxproj">
|
||||||
|
|
|
||||||
|
|
@ -38,6 +38,15 @@ APPLICATION_MANAGER::GetOrCreateApplicationInfo(
|
||||||
|
|
||||||
*ppApplicationInfo = NULL;
|
*ppApplicationInfo = NULL;
|
||||||
|
|
||||||
|
if (!m_fDebugInitialize)
|
||||||
|
{
|
||||||
|
SRWExclusiveLock lock(m_srwLock);
|
||||||
|
if (!m_fDebugInitialize)
|
||||||
|
{
|
||||||
|
DebugInitializeFromConfig(*pServer, *pHttpContext->GetApplication());
|
||||||
|
m_fDebugInitialize = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
// The configuration path is unique for each application and is used for the
|
// The configuration path is unique for each application and is used for the
|
||||||
// key in the applicationInfoHash.
|
// key in the applicationInfoHash.
|
||||||
pszApplicationId = pHttpContext->GetApplication()->GetApplicationId();
|
pszApplicationId = pHttpContext->GetApplication()->GetApplicationId();
|
||||||
|
|
@ -111,7 +111,8 @@ private:
|
||||||
// we currently limit the size of m_pstrErrorInfo to 5000, be careful if you want to change its payload
|
// we currently limit the size of m_pstrErrorInfo to 5000, be careful if you want to change its payload
|
||||||
//
|
//
|
||||||
APPLICATION_MANAGER() : m_pApplicationInfoHash(NULL),
|
APPLICATION_MANAGER() : m_pApplicationInfoHash(NULL),
|
||||||
m_hostingModel(HOSTING_UNKNOWN)
|
m_hostingModel(HOSTING_UNKNOWN),
|
||||||
|
m_fDebugInitialize(FALSE)
|
||||||
{
|
{
|
||||||
InitializeSRWLock(&m_srwLock);
|
InitializeSRWLock(&m_srwLock);
|
||||||
}
|
}
|
||||||
|
|
@ -120,4 +121,5 @@ private:
|
||||||
static APPLICATION_MANAGER *sm_pApplicationManager;
|
static APPLICATION_MANAGER *sm_pApplicationManager;
|
||||||
SRWLOCK m_srwLock;
|
SRWLOCK m_srwLock;
|
||||||
APP_HOSTING_MODEL m_hostingModel;
|
APP_HOSTING_MODEL m_hostingModel;
|
||||||
|
BOOL m_fDebugInitialize;
|
||||||
};
|
};
|
||||||
|
|
@ -58,7 +58,7 @@ ASPNETCORE_SHIM_CONFIG::Populate(
|
||||||
|
|
||||||
if (m_hostingModel == HOSTING_OUT_PROCESS)
|
if (m_hostingModel == HOSTING_OUT_PROCESS)
|
||||||
{
|
{
|
||||||
RETURN_IF_FAILED(ConfigUtility::FindHandlerVersion(pAspNetCoreElement, &m_struHandlerVersion));
|
RETURN_IF_FAILED(ConfigUtility::FindHandlerVersion(pAspNetCoreElement, m_struHandlerVersion));
|
||||||
}
|
}
|
||||||
|
|
||||||
return S_OK;
|
return S_OK;
|
||||||
|
|
@ -25,6 +25,7 @@ BOOL g_fAspnetcoreRHLoadedError = FALSE;
|
||||||
BOOL g_fInShutdown = FALSE;
|
BOOL g_fInShutdown = FALSE;
|
||||||
DWORD g_dwActiveServerProcesses = 0;
|
DWORD g_dwActiveServerProcesses = 0;
|
||||||
SRWLOCK g_srwLock;
|
SRWLOCK g_srwLock;
|
||||||
|
|
||||||
PFN_ASPNETCORE_CREATE_APPLICATION g_pfnAspNetCoreCreateApplication;
|
PFN_ASPNETCORE_CREATE_APPLICATION g_pfnAspNetCoreCreateApplication;
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
|
|
@ -217,7 +217,7 @@
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="debugutil.cpp" />
|
<ClCompile Include="debugutil.cpp" />
|
||||||
<ClCompile Include="Environment.cpp" />
|
<ClCompile Include="Environment.cpp" />
|
||||||
<ClCompile Include="fx_ver.cxx" />
|
<ClCompile Include="fx_ver.cpp" />
|
||||||
<ClCompile Include="GlobalVersionUtility.cpp" />
|
<ClCompile Include="GlobalVersionUtility.cpp" />
|
||||||
<ClCompile Include="HandleWrapper.cpp" />
|
<ClCompile Include="HandleWrapper.cpp" />
|
||||||
<ClCompile Include="hostfxr_utility.cpp" />
|
<ClCompile Include="hostfxr_utility.cpp" />
|
||||||
|
|
@ -231,7 +231,7 @@
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="utility.cxx" />
|
<ClCompile Include="utility.cpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\IISLib\IISLib.vcxproj">
|
<ProjectReference Include="..\IISLib\IISLib.vcxproj">
|
||||||
|
|
|
||||||
|
|
@ -218,6 +218,12 @@ Language=English
|
||||||
%1
|
%1
|
||||||
.
|
.
|
||||||
|
|
||||||
|
Messageid=1032
|
||||||
|
SymbolicName=ASPNETCORE_EVENT_INPROCESS_START_SUCCESS
|
||||||
|
Language=English
|
||||||
|
%1
|
||||||
|
.
|
||||||
|
|
||||||
;
|
;
|
||||||
;#endif // _ASPNETCORE_MODULE_MSG_H_
|
;#endif // _ASPNETCORE_MODULE_MSG_H_
|
||||||
;
|
;
|
||||||
|
|
|
||||||
|
|
@ -7,24 +7,49 @@
|
||||||
#include "ahutil.h"
|
#include "ahutil.h"
|
||||||
#include "stringu.h"
|
#include "stringu.h"
|
||||||
#include "exceptions.h"
|
#include "exceptions.h"
|
||||||
|
#include "atlbase.h"
|
||||||
|
|
||||||
class ConfigUtility
|
class ConfigUtility
|
||||||
{
|
{
|
||||||
#define CS_ASPNETCORE_HANDLER_SETTINGS L"handlerSettings"
|
#define CS_ASPNETCORE_HANDLER_SETTINGS L"handlerSettings"
|
||||||
#define CS_ASPNETCORE_HANDLER_VERSION L"handlerVersion"
|
#define CS_ASPNETCORE_HANDLER_VERSION L"handlerVersion"
|
||||||
|
#define CS_ASPNETCORE_DEBUG_FILE L"debugFile"
|
||||||
|
#define CS_ASPNETCORE_DEBUG_LEVEL L"debugLevel"
|
||||||
#define CS_ASPNETCORE_HANDLER_SETTINGS_NAME L"name"
|
#define CS_ASPNETCORE_HANDLER_SETTINGS_NAME L"name"
|
||||||
#define CS_ASPNETCORE_HANDLER_SETTINGS_VALUE L"value"
|
#define CS_ASPNETCORE_HANDLER_SETTINGS_VALUE L"value"
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static
|
static
|
||||||
HRESULT
|
HRESULT
|
||||||
FindHandlerVersion(IAppHostElement* pElement, STRU* strHandlerVersionValue)
|
FindHandlerVersion(IAppHostElement* pElement, STRU& strHandlerVersionValue)
|
||||||
|
{
|
||||||
|
return FindKeyValuePair(pElement, CS_ASPNETCORE_HANDLER_VERSION, strHandlerVersionValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
HRESULT
|
||||||
|
FindDebugFile(IAppHostElement* pElement, STRU& strDebugFile)
|
||||||
|
{
|
||||||
|
return FindKeyValuePair(pElement, CS_ASPNETCORE_DEBUG_FILE, strDebugFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
HRESULT
|
||||||
|
FindDebugLevel(IAppHostElement* pElement, STRU& strDebugFile)
|
||||||
|
{
|
||||||
|
return FindKeyValuePair(pElement, CS_ASPNETCORE_DEBUG_LEVEL, strDebugFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
static
|
||||||
|
HRESULT
|
||||||
|
FindKeyValuePair(IAppHostElement* pElement, PCWSTR key, STRU& strHandlerVersionValue)
|
||||||
{
|
{
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
CComPtr<IAppHostElement> pHandlerSettings = nullptr;
|
CComPtr<IAppHostElement> pHandlerSettings = nullptr;
|
||||||
CComPtr<IAppHostElementCollection> pHandlerSettingsCollection = nullptr;
|
CComPtr<IAppHostElementCollection> pHandlerSettingsCollection = nullptr;
|
||||||
CComPtr<IAppHostElement> pHandlerVar = nullptr;
|
CComPtr<IAppHostElement> pHandlerVar = nullptr;
|
||||||
ENUM_INDEX index {};
|
ENUM_INDEX index{};
|
||||||
STRU strHandlerName;
|
STRU strHandlerName;
|
||||||
STRU strHandlerValue;
|
STRU strHandlerValue;
|
||||||
|
|
||||||
|
|
@ -43,9 +68,9 @@ public:
|
||||||
RETURN_IF_FAILED(GetElementStringProperty(pHandlerVar, CS_ASPNETCORE_HANDLER_SETTINGS_NAME, &strHandlerName));
|
RETURN_IF_FAILED(GetElementStringProperty(pHandlerVar, CS_ASPNETCORE_HANDLER_SETTINGS_NAME, &strHandlerName));
|
||||||
RETURN_IF_FAILED(GetElementStringProperty(pHandlerVar, CS_ASPNETCORE_HANDLER_SETTINGS_VALUE, &strHandlerValue));
|
RETURN_IF_FAILED(GetElementStringProperty(pHandlerVar, CS_ASPNETCORE_HANDLER_SETTINGS_VALUE, &strHandlerValue));
|
||||||
|
|
||||||
if (strHandlerName.Equals(CS_ASPNETCORE_HANDLER_VERSION, TRUE))
|
if (strHandlerName.Equals(key, TRUE))
|
||||||
{
|
{
|
||||||
RETURN_IF_FAILED(strHandlerVersionValue->Copy(strHandlerValue));
|
RETURN_IF_FAILED(strHandlerVersionValue.Copy(strHandlerValue));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,9 +10,12 @@
|
||||||
#include "dbgutil.h"
|
#include "dbgutil.h"
|
||||||
#include "Environment.h"
|
#include "Environment.h"
|
||||||
#include "SRWExclusiveLock.h"
|
#include "SRWExclusiveLock.h"
|
||||||
|
#include "exceptions.h"
|
||||||
|
#include "atlbase.h"
|
||||||
|
#include "config_utility.h"
|
||||||
|
|
||||||
inline HANDLE g_hStandardOutput;
|
inline HANDLE g_hStandardOutput = INVALID_HANDLE_VALUE;
|
||||||
inline HANDLE g_logFile;
|
inline HANDLE g_logFile = INVALID_HANDLE_VALUE;
|
||||||
inline SRWLOCK g_logFileLock;
|
inline SRWLOCK g_logFileLock;
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
|
|
@ -21,6 +24,8 @@ DebugInitialize()
|
||||||
g_hStandardOutput = GetStdHandle(STD_OUTPUT_HANDLE);
|
g_hStandardOutput = GetStdHandle(STD_OUTPUT_HANDLE);
|
||||||
|
|
||||||
HKEY hKey;
|
HKEY hKey;
|
||||||
|
InitializeSRWLock(&g_logFileLock);
|
||||||
|
|
||||||
|
|
||||||
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,
|
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,
|
||||||
L"SOFTWARE\\Microsoft\\IIS Extensions\\IIS AspNetCore Module V2\\Parameters",
|
L"SOFTWARE\\Microsoft\\IIS Extensions\\IIS AspNetCore Module V2\\Parameters",
|
||||||
|
|
@ -47,18 +52,9 @@ DebugInitialize()
|
||||||
RegCloseKey(hKey);
|
RegCloseKey(hKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
// We expect single digit value and a null char
|
|
||||||
const size_t environmentVariableValueSize = 2;
|
|
||||||
std::wstring environmentVariableValue(environmentVariableValueSize, '\0');
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
const auto value = std::stoi(Environment::GetEnvironmentVariableValue(L"ASPNETCORE_MODULE_DEBUG").value_or(L"0"));
|
SetDebugFlags(Environment::GetEnvironmentVariableValue(L"ASPNETCORE_MODULE_DEBUG").value_or(L"0"));
|
||||||
|
|
||||||
if (value >= 1) DEBUG_FLAGS_VAR |= ASPNETCORE_DEBUG_FLAG_ERROR;
|
|
||||||
if (value >= 2) DEBUG_FLAGS_VAR |= ASPNETCORE_DEBUG_FLAG_WARNING;
|
|
||||||
if (value >= 3) DEBUG_FLAGS_VAR |= ASPNETCORE_DEBUG_FLAG_INFO;
|
|
||||||
if (value >= 4) DEBUG_FLAGS_VAR |= ASPNETCORE_DEBUG_FLAG_CONSOLE;
|
|
||||||
}
|
}
|
||||||
catch (...)
|
catch (...)
|
||||||
{
|
{
|
||||||
|
|
@ -69,9 +65,73 @@ DebugInitialize()
|
||||||
{
|
{
|
||||||
const auto debugOutputFile = Environment::GetEnvironmentVariableValue(L"ASPNETCORE_MODULE_DEBUG_FILE");
|
const auto debugOutputFile = Environment::GetEnvironmentVariableValue(L"ASPNETCORE_MODULE_DEBUG_FILE");
|
||||||
|
|
||||||
if (debugOutputFile.has_value())
|
CreateDebugLogFile(debugOutputFile.value_or(L""));
|
||||||
|
}
|
||||||
|
catch (...)
|
||||||
|
{
|
||||||
|
// ignore
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT
|
||||||
|
DebugInitializeFromConfig(IHttpServer& pHttpServer, IHttpApplication& pHttpApplication)
|
||||||
|
{
|
||||||
|
CComPtr<IAppHostElement> pAspNetCoreElement;
|
||||||
|
|
||||||
|
const CComBSTR bstrAspNetCoreSection = L"system.webServer/aspNetCore";
|
||||||
|
CComBSTR bstrConfigPath = pHttpApplication.GetAppConfigPath();
|
||||||
|
|
||||||
|
RETURN_IF_FAILED(pHttpServer.GetAdminManager()->GetAdminSection(bstrAspNetCoreSection,
|
||||||
|
bstrConfigPath,
|
||||||
|
&pAspNetCoreElement));
|
||||||
|
|
||||||
|
STRU debugFile;
|
||||||
|
RETURN_IF_FAILED(ConfigUtility::FindDebugFile(pAspNetCoreElement, debugFile));
|
||||||
|
|
||||||
|
STRU debugValue;
|
||||||
|
RETURN_IF_FAILED(ConfigUtility::FindDebugLevel(pAspNetCoreElement, debugValue));
|
||||||
|
|
||||||
|
SetDebugFlags(debugFile.QueryStr());
|
||||||
|
|
||||||
|
CreateDebugLogFile(debugFile.QueryStr());
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetDebugFlags(const std::wstring &debugValue)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (!debugValue.empty())
|
||||||
{
|
{
|
||||||
g_logFile = CreateFileW(debugOutputFile.value().c_str(),
|
const auto value = std::stoi(debugValue.c_str());
|
||||||
|
|
||||||
|
if (value >= 1) DEBUG_FLAGS_VAR |= ASPNETCORE_DEBUG_FLAG_ERROR;
|
||||||
|
if (value >= 2) DEBUG_FLAGS_VAR |= ASPNETCORE_DEBUG_FLAG_WARNING;
|
||||||
|
if (value >= 3) DEBUG_FLAGS_VAR |= ASPNETCORE_DEBUG_FLAG_INFO;
|
||||||
|
if (value >= 4) DEBUG_FLAGS_VAR |= ASPNETCORE_DEBUG_FLAG_CONSOLE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (...)
|
||||||
|
{
|
||||||
|
// ignore
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CreateDebugLogFile(const std::wstring &debugOutputFile)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (!debugOutputFile.empty())
|
||||||
|
{
|
||||||
|
if (g_logFile != INVALID_HANDLE_VALUE)
|
||||||
|
{
|
||||||
|
WLOG_INFOF(L"Switching debug log files to %s", debugOutputFile.c_str());
|
||||||
|
CloseHandle(g_logFile);
|
||||||
|
DEBUG_FLAGS_VAR &= ~ASPNETCORE_DEBUG_FLAG_FILE;
|
||||||
|
|
||||||
|
}
|
||||||
|
g_logFile = CreateFileW(debugOutputFile.c_str(),
|
||||||
(GENERIC_READ | GENERIC_WRITE),
|
(GENERIC_READ | GENERIC_WRITE),
|
||||||
(FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE),
|
(FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE),
|
||||||
nullptr,
|
nullptr,
|
||||||
|
|
@ -81,11 +141,9 @@ DebugInitialize()
|
||||||
);
|
);
|
||||||
if (g_logFile != INVALID_HANDLE_VALUE)
|
if (g_logFile != INVALID_HANDLE_VALUE)
|
||||||
{
|
{
|
||||||
InitializeSRWLock(&g_logFileLock);
|
|
||||||
DEBUG_FLAGS_VAR |= ASPNETCORE_DEBUG_FLAG_FILE;
|
DEBUG_FLAGS_VAR |= ASPNETCORE_DEBUG_FLAG_FILE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (...)
|
catch (...)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,8 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "stdafx.h"
|
||||||
|
#include "stringu.h"
|
||||||
#include <Windows.h>
|
#include <Windows.h>
|
||||||
#include "dbgutil.h"
|
#include "dbgutil.h"
|
||||||
|
|
||||||
|
|
@ -27,6 +29,14 @@
|
||||||
VOID
|
VOID
|
||||||
DebugInitialize();
|
DebugInitialize();
|
||||||
|
|
||||||
|
VOID
|
||||||
|
CreateDebugLogFile(const std::wstring &debugOutputFile);
|
||||||
|
|
||||||
|
HRESULT
|
||||||
|
DebugInitializeFromConfig(IHttpServer& pHttpServer, IHttpApplication& pHttpApplication);
|
||||||
|
|
||||||
|
void SetDebugFlags(const std::wstring &value);
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
DebugStop();
|
DebugStop();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -51,3 +51,4 @@
|
||||||
#define ASPNETCORE_EVENT_INVALID_PROCESS_PATH_MSG L"Invalid or unknown processPath provided in web.config: processPath = %s, ErrorCode = '0x%x'."
|
#define ASPNETCORE_EVENT_INVALID_PROCESS_PATH_MSG L"Invalid or unknown processPath provided in web.config: processPath = %s, ErrorCode = '0x%x'."
|
||||||
#define ASPNETCORE_EVENT_INPROCESS_RH_MISSING_MSG L"Could not find the assembly '%s' for in-process application. Please confirm the Microsoft.AspNetCore.Server.IIS package is referenced in your application."
|
#define ASPNETCORE_EVENT_INPROCESS_RH_MISSING_MSG L"Could not find the assembly '%s' for in-process application. Please confirm the Microsoft.AspNetCore.Server.IIS package is referenced in your application."
|
||||||
#define ASPNETCORE_EVENT_OUT_OF_PROCESS_RH_MISSING_MSG L"Could not find the assembly '%s' for out-of-process application. Please confirm the assembly is installed correctly for IIS or IISExpress."
|
#define ASPNETCORE_EVENT_OUT_OF_PROCESS_RH_MISSING_MSG L"Could not find the assembly '%s' for out-of-process application. Please confirm the assembly is installed correctly for IIS or IISExpress."
|
||||||
|
#define ASPNETCORE_EVENT_INPROCESS_START_SUCCESS_MSG L"Application '%s' started the coreclr in-process successfully."
|
||||||
|
|
|
||||||
|
|
@ -187,7 +187,7 @@
|
||||||
<ClInclude Include="treehash.h" />
|
<ClInclude Include="treehash.h" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="acache.cxx" />
|
<ClCompile Include="acache.cpp" />
|
||||||
<ClCompile Include="ahutil.cpp" />
|
<ClCompile Include="ahutil.cpp" />
|
||||||
<ClCompile Include="base64.cpp" />
|
<ClCompile Include="base64.cpp" />
|
||||||
<ClCompile Include="multisz.cpp" />
|
<ClCompile Include="multisz.cpp" />
|
||||||
|
|
@ -196,7 +196,7 @@
|
||||||
<ClCompile Include="stringa.cpp" />
|
<ClCompile Include="stringa.cpp" />
|
||||||
<ClCompile Include="stringu.cpp" />
|
<ClCompile Include="stringu.cpp" />
|
||||||
<ClCompile Include="tracelog.c" />
|
<ClCompile Include="tracelog.c" />
|
||||||
<ClCompile Include="util.cxx" />
|
<ClCompile Include="util.cpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
|
|
||||||
|
|
@ -87,7 +87,7 @@
|
||||||
<WarningLevel>Level4</WarningLevel>
|
<WarningLevel>Level4</WarningLevel>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;REQUESTHANDLER_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;_DEBUG;REQUESTHANDLER_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PrecompiledHeaderFile>precomp.hxx</PrecompiledHeaderFile>
|
<PrecompiledHeaderFile>stdafx.h</PrecompiledHeaderFile>
|
||||||
<PrecompiledHeaderOutputFile>$(IntDir)$(TargetName).pch</PrecompiledHeaderOutputFile>
|
<PrecompiledHeaderOutputFile>$(IntDir)$(TargetName).pch</PrecompiledHeaderOutputFile>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
|
|
@ -104,7 +104,7 @@
|
||||||
<CompileAs>CompileAsCpp</CompileAs>
|
<CompileAs>CompileAsCpp</CompileAs>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||||
<ForcedIncludeFiles>precomp.hxx</ForcedIncludeFiles>
|
<ForcedIncludeFiles>stdafx.h</ForcedIncludeFiles>
|
||||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
|
|
@ -121,7 +121,7 @@
|
||||||
<WarningLevel>Level4</WarningLevel>
|
<WarningLevel>Level4</WarningLevel>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;REQUESTHANDLER_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;_DEBUG;REQUESTHANDLER_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PrecompiledHeaderFile>precomp.hxx</PrecompiledHeaderFile>
|
<PrecompiledHeaderFile>stdafx.h</PrecompiledHeaderFile>
|
||||||
<PrecompiledHeaderOutputFile>$(IntDir)$(TargetName).pch</PrecompiledHeaderOutputFile>
|
<PrecompiledHeaderOutputFile>$(IntDir)$(TargetName).pch</PrecompiledHeaderOutputFile>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
|
|
@ -138,7 +138,7 @@
|
||||||
<CompileAs>CompileAsCpp</CompileAs>
|
<CompileAs>CompileAsCpp</CompileAs>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||||
<ForcedIncludeFiles>precomp.hxx</ForcedIncludeFiles>
|
<ForcedIncludeFiles>stdafx.h</ForcedIncludeFiles>
|
||||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
|
|
@ -157,7 +157,7 @@
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;REQUESTHANDLER_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;REQUESTHANDLER_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PrecompiledHeaderFile>precomp.hxx</PrecompiledHeaderFile>
|
<PrecompiledHeaderFile>stdafx.h</PrecompiledHeaderFile>
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
<AdditionalIncludeDirectories>..\IISLib;..\CommonLib;.\Inc;..\RequestHandlerLib</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>..\IISLib;..\CommonLib;.\Inc;..\RequestHandlerLib</AdditionalIncludeDirectories>
|
||||||
<TreatWarningAsError>true</TreatWarningAsError>
|
<TreatWarningAsError>true</TreatWarningAsError>
|
||||||
|
|
@ -172,7 +172,7 @@
|
||||||
<CompileAs>CompileAsCpp</CompileAs>
|
<CompileAs>CompileAsCpp</CompileAs>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||||
<ForcedIncludeFiles>precomp.hxx</ForcedIncludeFiles>
|
<ForcedIncludeFiles>stdafx.h</ForcedIncludeFiles>
|
||||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
|
|
@ -193,7 +193,7 @@
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>NDEBUG;REQUESTHANDLER_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>NDEBUG;REQUESTHANDLER_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PrecompiledHeaderFile>precomp.hxx</PrecompiledHeaderFile>
|
<PrecompiledHeaderFile>stdafx.h</PrecompiledHeaderFile>
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
<AdditionalIncludeDirectories>..\IISLib;..\CommonLib;.\Inc;..\RequestHandlerLib</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>..\IISLib;..\CommonLib;.\Inc;..\RequestHandlerLib</AdditionalIncludeDirectories>
|
||||||
<TreatWarningAsError>true</TreatWarningAsError>
|
<TreatWarningAsError>true</TreatWarningAsError>
|
||||||
|
|
@ -208,7 +208,7 @@
|
||||||
<CompileAs>CompileAsCpp</CompileAs>
|
<CompileAs>CompileAsCpp</CompileAs>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||||
<ForcedIncludeFiles>precomp.hxx</ForcedIncludeFiles>
|
<ForcedIncludeFiles>stdafx.h</ForcedIncludeFiles>
|
||||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
|
|
@ -226,17 +226,17 @@
|
||||||
<ClInclude Include="inprocessapplication.h" />
|
<ClInclude Include="inprocessapplication.h" />
|
||||||
<ClInclude Include="InProcessApplicationBase.h" />
|
<ClInclude Include="InProcessApplicationBase.h" />
|
||||||
<ClInclude Include="inprocesshandler.h" />
|
<ClInclude Include="inprocesshandler.h" />
|
||||||
<ClInclude Include="precomp.hxx" />
|
<ClInclude Include="stdafx.h" />
|
||||||
<ClInclude Include="StartupExceptionApplication.h" />
|
<ClInclude Include="StartupExceptionApplication.h" />
|
||||||
<ClInclude Include="StartupExceptionHandler.h" />
|
<ClInclude Include="StartupExceptionHandler.h" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="dllmain.cxx" />
|
<ClCompile Include="dllmain.cpp" />
|
||||||
<ClCompile Include="inprocessapplication.cpp" />
|
<ClCompile Include="inprocessapplication.cpp" />
|
||||||
<ClCompile Include="InProcessApplicationBase.cpp" />
|
<ClCompile Include="InProcessApplicationBase.cpp" />
|
||||||
<ClCompile Include="inprocesshandler.cpp" />
|
<ClCompile Include="inprocesshandler.cpp" />
|
||||||
<ClCompile Include="managedexports.cxx" />
|
<ClCompile Include="managedexports.cpp" />
|
||||||
<ClCompile Include="precomp.cpp">
|
<ClCompile Include="stdafx.cpp">
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,8 @@ HANDLE g_hEventLog = NULL;
|
||||||
|
|
||||||
HRESULT
|
HRESULT
|
||||||
InitializeGlobalConfiguration(
|
InitializeGlobalConfiguration(
|
||||||
IHttpServer * pServer
|
IHttpServer * pServer,
|
||||||
|
IHttpApplication* pHttpApplication
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
if (!g_fGlobalInitialize)
|
if (!g_fGlobalInitialize)
|
||||||
|
|
@ -48,6 +49,8 @@ InitializeGlobalConfiguration(
|
||||||
}
|
}
|
||||||
|
|
||||||
DebugInitialize();
|
DebugInitialize();
|
||||||
|
DebugInitializeFromConfig(*pServer, *pHttpApplication);
|
||||||
|
|
||||||
g_fGlobalInitialize = TRUE;
|
g_fGlobalInitialize = TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -87,10 +90,9 @@ CreateApplication(
|
||||||
_Out_ IAPPLICATION **ppApplication
|
_Out_ IAPPLICATION **ppApplication
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
RETURN_IF_FAILED(InitializeGlobalConfiguration(pServer));
|
RETURN_IF_FAILED(InitializeGlobalConfiguration(pServer, pHttpApplication));
|
||||||
|
|
||||||
REQUESTHANDLER_CONFIG *pConfig = nullptr;
|
REQUESTHANDLER_CONFIG *pConfig = nullptr;
|
||||||
RETURN_IF_FAILED(REQUESTHANDLER_CONFIG::CreateRequestHandlerConfig(pServer, pHttpApplication, &pConfig));
|
RETURN_IF_FAILED(REQUESTHANDLER_CONFIG::CreateRequestHandlerConfig(pServer, pHttpApplication, &pConfig));
|
||||||
|
|
@ -221,6 +221,11 @@ IN_PROCESS_APPLICATION::SetCallbackHandles(
|
||||||
m_pLoggerProvider->NotifyStartupComplete();
|
m_pLoggerProvider->NotifyStartupComplete();
|
||||||
// Can't check the std err handle as it isn't a critical error
|
// Can't check the std err handle as it isn't a critical error
|
||||||
// Initialization complete
|
// Initialization complete
|
||||||
|
UTILITY::LogEventF(g_hEventLog,
|
||||||
|
EVENTLOG_INFORMATION_TYPE,
|
||||||
|
ASPNETCORE_EVENT_INPROCESS_START_SUCCESS,
|
||||||
|
ASPNETCORE_EVENT_INPROCESS_START_SUCCESS_MSG,
|
||||||
|
m_pConfig->QueryApplicationPhysicalPath()->QueryStr());
|
||||||
SetEvent(m_pInitalizeEvent);
|
SetEvent(m_pInitalizeEvent);
|
||||||
m_fInitialized = TRUE;
|
m_fInitialized = TRUE;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -83,11 +83,11 @@
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
<WarningLevel>Level4</WarningLevel>
|
<WarningLevel>Level4</WarningLevel>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;REQUESTHANDLER_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;_DEBUG;REQUESTHANDLER_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PrecompiledHeaderFile>precomp.hxx</PrecompiledHeaderFile>
|
<PrecompiledHeaderFile>stdafx.h</PrecompiledHeaderFile>
|
||||||
<PrecompiledHeaderOutputFile>$(IntDir)$(TargetName).pch</PrecompiledHeaderOutputFile>
|
<PrecompiledHeaderOutputFile>$(IntDir)$(TargetName).pch</PrecompiledHeaderOutputFile>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
|
|
@ -105,6 +105,7 @@
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||||
|
<ForcedIncludeFiles>stdafx.h</ForcedIncludeFiles>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Windows</SubSystem>
|
<SubSystem>Windows</SubSystem>
|
||||||
|
|
@ -116,11 +117,11 @@
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
<WarningLevel>Level4</WarningLevel>
|
<WarningLevel>Level4</WarningLevel>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;REQUESTHANDLER_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;_DEBUG;REQUESTHANDLER_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PrecompiledHeaderFile>precomp.hxx</PrecompiledHeaderFile>
|
<PrecompiledHeaderFile>stdafx.h</PrecompiledHeaderFile>
|
||||||
<PrecompiledHeaderOutputFile>$(IntDir)$(TargetName).pch</PrecompiledHeaderOutputFile>
|
<PrecompiledHeaderOutputFile>$(IntDir)$(TargetName).pch</PrecompiledHeaderOutputFile>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
|
|
@ -138,6 +139,7 @@
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||||
|
<ForcedIncludeFiles>stdafx.h</ForcedIncludeFiles>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Windows</SubSystem>
|
<SubSystem>Windows</SubSystem>
|
||||||
|
|
@ -150,12 +152,12 @@
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<WarningLevel>Level4</WarningLevel>
|
<WarningLevel>Level4</WarningLevel>
|
||||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
<Optimization>MaxSpeed</Optimization>
|
<Optimization>MaxSpeed</Optimization>
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;REQUESTHANDLER_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;REQUESTHANDLER_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PrecompiledHeaderFile>precomp.hxx</PrecompiledHeaderFile>
|
<PrecompiledHeaderFile>stdafx.h</PrecompiledHeaderFile>
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
<AdditionalIncludeDirectories>..\IISLib;..\CommonLib;.\Inc;..\RequestHandlerLib</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>..\IISLib;..\CommonLib;.\Inc;..\RequestHandlerLib</AdditionalIncludeDirectories>
|
||||||
<TreatWarningAsError>true</TreatWarningAsError>
|
<TreatWarningAsError>true</TreatWarningAsError>
|
||||||
|
|
@ -171,6 +173,7 @@
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||||
|
<ForcedIncludeFiles>stdafx.h</ForcedIncludeFiles>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Windows</SubSystem>
|
<SubSystem>Windows</SubSystem>
|
||||||
|
|
@ -185,12 +188,12 @@
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<WarningLevel>Level4</WarningLevel>
|
<WarningLevel>Level4</WarningLevel>
|
||||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
<Optimization>MaxSpeed</Optimization>
|
<Optimization>MaxSpeed</Optimization>
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>NDEBUG;REQUESTHANDLER_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>NDEBUG;REQUESTHANDLER_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PrecompiledHeaderFile>precomp.hxx</PrecompiledHeaderFile>
|
<PrecompiledHeaderFile>stdafx.h</PrecompiledHeaderFile>
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
<AdditionalIncludeDirectories>..\IISLib;..\CommonLib;.\Inc;..\RequestHandlerLib</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>..\IISLib;..\CommonLib;.\Inc;..\RequestHandlerLib</AdditionalIncludeDirectories>
|
||||||
<TreatWarningAsError>true</TreatWarningAsError>
|
<TreatWarningAsError>true</TreatWarningAsError>
|
||||||
|
|
@ -206,6 +209,7 @@
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||||
|
<ForcedIncludeFiles>stdafx.h</ForcedIncludeFiles>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Windows</SubSystem>
|
<SubSystem>Windows</SubSystem>
|
||||||
|
|
@ -221,28 +225,34 @@
|
||||||
<ClInclude Include="aspnetcore_event.h" />
|
<ClInclude Include="aspnetcore_event.h" />
|
||||||
<ClInclude Include="disconnectcontext.h" />
|
<ClInclude Include="disconnectcontext.h" />
|
||||||
<ClInclude Include="environmentvariablehelpers.h" />
|
<ClInclude Include="environmentvariablehelpers.h" />
|
||||||
<ClInclude Include="outofprocess\forwarderconnection.h" />
|
<ClInclude Include="forwarderconnection.h" />
|
||||||
<ClInclude Include="outofprocess\processmanager.h" />
|
<ClInclude Include="processmanager.h" />
|
||||||
<ClInclude Include="outofprocess\protocolconfig.h" />
|
<ClInclude Include="protocolconfig.h" />
|
||||||
<ClInclude Include="outofprocess\responseheaderhash.h" />
|
<ClInclude Include="responseheaderhash.h" />
|
||||||
<ClInclude Include="outofprocess\serverprocess.h" />
|
<ClInclude Include="serverprocess.h" />
|
||||||
<ClInclude Include="outofprocess\websockethandler.h" />
|
<ClInclude Include="stdafx.h" />
|
||||||
<ClInclude Include="outofprocess\winhttphelper.h" />
|
<ClInclude Include="websockethandler.h" />
|
||||||
<ClInclude Include="precomp.hxx" />
|
<ClInclude Include="winhttphelper.h" />
|
||||||
<ClInclude Include=".\outofprocess\forwardinghandler.h" />
|
<ClInclude Include="forwardinghandler.h" />
|
||||||
<ClInclude Include=".\outofprocess\outprocessapplication.h" />
|
<ClInclude Include="outprocessapplication.h" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="dllmain.cxx" />
|
<ClCompile Include="dllmain.cpp" />
|
||||||
<ClCompile Include=".\outofprocess\forwardinghandler.cpp" />
|
<ClCompile Include="forwardinghandler.cpp" />
|
||||||
<ClCompile Include=".\outofprocess\outprocessapplication.cpp" />
|
<ClCompile Include="outprocessapplication.cpp" />
|
||||||
<ClCompile Include="outofprocess\forwarderconnection.cxx" />
|
<ClCompile Include="forwarderconnection.cpp" />
|
||||||
<ClCompile Include="outofprocess\processmanager.cxx" />
|
<ClCompile Include="processmanager.cpp" />
|
||||||
<ClCompile Include="outofprocess\protocolconfig.cxx" />
|
<ClCompile Include="protocolconfig.cpp" />
|
||||||
<ClCompile Include="outofprocess\responseheaderhash.cxx" />
|
<ClCompile Include="responseheaderhash.cpp" />
|
||||||
<ClCompile Include="outofprocess\serverprocess.cxx" />
|
<ClCompile Include="serverprocess.cpp" />
|
||||||
<ClCompile Include="outofprocess\websockethandler.cxx" />
|
<ClCompile Include="stdafx.cpp">
|
||||||
<ClCompile Include="outofprocess\winhttphelper.cxx" />
|
<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="websockethandler.cpp" />
|
||||||
|
<ClCompile Include="winhttphelper.cpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\CommonLib\CommonLib.vcxproj">
|
<ProjectReference Include="..\CommonLib\CommonLib.vcxproj">
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
// dllmain.cpp : Defines the entry point for the DLL application.
|
// dllmain.cpp : Defines the entry point for the DLL application.
|
||||||
#include "precomp.hxx"
|
|
||||||
#include <IPHlpApi.h>
|
#include <IPHlpApi.h>
|
||||||
#include <VersionHelpers.h>
|
#include <VersionHelpers.h>
|
||||||
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
// Copyright (c) .NET Foundation. All rights reserved.
|
// Copyright (c) .NET Foundation. All rights reserved.
|
||||||
// Licensed under the MIT License. See License.txt in the project root for license information.
|
// Licensed under the MIT License. See License.txt in the project root for license information.
|
||||||
|
|
||||||
#include "..\precomp.hxx"
|
#include "forwarderconnection.h"
|
||||||
|
|
||||||
FORWARDER_CONNECTION::FORWARDER_CONNECTION(
|
FORWARDER_CONNECTION::FORWARDER_CONNECTION(
|
||||||
VOID
|
VOID
|
||||||
|
|
@ -49,4 +49,4 @@ FORWARDER_CONNECTION::Initialize(
|
||||||
Finished:
|
Finished:
|
||||||
|
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
@ -1,4 +1,7 @@
|
||||||
#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.
|
||||||
|
|
||||||
|
#include "forwardinghandler.h"
|
||||||
|
|
||||||
// Just to be aware of the FORWARDING_HANDLER object size.
|
// Just to be aware of the FORWARDING_HANDLER object size.
|
||||||
C_ASSERT(sizeof(FORWARDING_HANDLER) <= 632);
|
C_ASSERT(sizeof(FORWARDING_HANDLER) <= 632);
|
||||||
|
|
@ -1,4 +1,8 @@
|
||||||
#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.
|
||||||
|
|
||||||
|
#include "outprocessapplication.h"
|
||||||
|
|
||||||
#include "SRWExclusiveLock.h"
|
#include "SRWExclusiveLock.h"
|
||||||
|
|
||||||
OUT_OF_PROCESS_APPLICATION::OUT_OF_PROCESS_APPLICATION(
|
OUT_OF_PROCESS_APPLICATION::OUT_OF_PROCESS_APPLICATION(
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
// Copyright (c) .NET Foundation. All rights reserved.
|
// Copyright (c) .NET Foundation. All rights reserved.
|
||||||
// Licensed under the MIT License. See License.txt in the project root for license information.
|
// Licensed under the MIT License. See License.txt in the project root for license information.
|
||||||
|
|
||||||
#include "..\precomp.hxx"
|
#include "processmanager.h"
|
||||||
|
|
||||||
volatile BOOL PROCESS_MANAGER::sm_fWSAStartupDone = FALSE;
|
volatile BOOL PROCESS_MANAGER::sm_fWSAStartupDone = FALSE;
|
||||||
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
// Copyright (c) .NET Foundation. All rights reserved.
|
// Copyright (c) .NET Foundation. All rights reserved.
|
||||||
// Licensed under the MIT License. See License.txt in the project root for license information.
|
// Licensed under the MIT License. See License.txt in the project root for license information.
|
||||||
|
|
||||||
#include "..\precomp.hxx"
|
#include "protocolconfig.h"
|
||||||
|
|
||||||
HRESULT
|
HRESULT
|
||||||
PROTOCOL_CONFIG::Initialize()
|
PROTOCOL_CONFIG::Initialize()
|
||||||
|
|
@ -45,4 +45,4 @@ PROTOCOL_CONFIG::OverrideConfig(
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
m_msTimeout = pAspNetCoreConfig->QueryRequestTimeoutInMS();
|
m_msTimeout = pAspNetCoreConfig->QueryRequestTimeoutInMS();
|
||||||
}
|
}
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
// Copyright (c) .NET Foundation. All rights reserved.
|
// Copyright (c) .NET Foundation. All rights reserved.
|
||||||
// Licensed under the MIT License. See License.txt in the project root for license information.
|
// Licensed under the MIT License. See License.txt in the project root for license information.
|
||||||
|
|
||||||
#include "..\precomp.hxx"
|
#include "responseheaderhash.h"
|
||||||
|
|
||||||
HEADER_RECORD RESPONSE_HEADER_HASH::sm_rgHeaders[] =
|
HEADER_RECORD RESPONSE_HEADER_HASH::sm_rgHeaders[] =
|
||||||
{
|
{
|
||||||
|
|
@ -1,7 +1,8 @@
|
||||||
// Copyright (c) .NET Foundation. All rights reserved.
|
// Copyright (c) .NET Foundation. All rights reserved.
|
||||||
// Licensed under the MIT License. See License.txt in the project root for license information.
|
// Licensed under the MIT License. See License.txt in the project root for license information.
|
||||||
|
|
||||||
#include "..\precomp.hxx"
|
#include "serverprocess.h"
|
||||||
|
|
||||||
#include <IPHlpApi.h>
|
#include <IPHlpApi.h>
|
||||||
//#include <share.h>
|
//#include <share.h>
|
||||||
|
|
||||||
|
|
@ -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
|
||||||
|
|
@ -64,15 +64,15 @@
|
||||||
#include "requesthandler_config.h"
|
#include "requesthandler_config.h"
|
||||||
|
|
||||||
#include "sttimer.h"
|
#include "sttimer.h"
|
||||||
#include ".\outofprocess\websockethandler.h"
|
#include "websockethandler.h"
|
||||||
#include ".\outofprocess\responseheaderhash.h"
|
#include "responseheaderhash.h"
|
||||||
#include ".\outofprocess\protocolconfig.h"
|
#include "protocolconfig.h"
|
||||||
#include ".\outofprocess\forwarderconnection.h"
|
#include "forwarderconnection.h"
|
||||||
#include ".\outofprocess\serverprocess.h"
|
#include "serverprocess.h"
|
||||||
#include ".\outofprocess\processmanager.h"
|
#include "processmanager.h"
|
||||||
#include ".\outofprocess\forwardinghandler.h"
|
#include "forwardinghandler.h"
|
||||||
#include ".\outofprocess\outprocessapplication.h"
|
#include "outprocessapplication.h"
|
||||||
#include ".\outofprocess\winhttphelper.h"
|
#include "winhttphelper.h"
|
||||||
|
|
||||||
#include "environmentvariablehelpers.h"
|
#include "environmentvariablehelpers.h"
|
||||||
|
|
||||||
|
|
@ -27,7 +27,7 @@ This prevents the need for data buffering at the Asp.Net Core Module level.
|
||||||
|
|
||||||
--*/
|
--*/
|
||||||
|
|
||||||
#include "..\precomp.hxx"
|
#include "websockethandler.h"
|
||||||
|
|
||||||
SRWLOCK WEBSOCKET_HANDLER::sm_RequestsListLock;
|
SRWLOCK WEBSOCKET_HANDLER::sm_RequestsListLock;
|
||||||
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
// Copyright (c) .NET Foundation. All rights reserved.
|
// Copyright (c) .NET Foundation. All rights reserved.
|
||||||
// Licensed under the MIT License. See License.txt in the project root for license information.
|
// Licensed under the MIT License. See License.txt in the project root for license information.
|
||||||
|
|
||||||
#include "..\precomp.hxx"
|
#include "winhttphelper.h"
|
||||||
|
|
||||||
PFN_WINHTTP_WEBSOCKET_COMPLETE_UPGRADE
|
PFN_WINHTTP_WEBSOCKET_COMPLETE_UPGRADE
|
||||||
WINHTTP_HELPER::sm_pfnWinHttpWebSocketCompleteUpgrade;
|
WINHTTP_HELPER::sm_pfnWinHttpWebSocketCompleteUpgrade;
|
||||||
|
|
@ -3,8 +3,6 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "precomp.hxx"
|
|
||||||
|
|
||||||
class ENVIRONMENT_VAR_HELPERS
|
class ENVIRONMENT_VAR_HELPERS
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,9 @@
|
||||||
#include "requesthandler_config.h"
|
#include "requesthandler_config.h"
|
||||||
#include "debugutil.h"
|
#include "debugutil.h"
|
||||||
#include "environmentvariablehash.h"
|
#include "environmentvariablehash.h"
|
||||||
|
#include "exceptions.h"
|
||||||
|
#include "config_utility.h"
|
||||||
|
|
||||||
|
|
||||||
REQUESTHANDLER_CONFIG::~REQUESTHANDLER_CONFIG()
|
REQUESTHANDLER_CONFIG::~REQUESTHANDLER_CONFIG()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,6 @@
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.AspNetCore.HttpSys.Sources" PrivateAssets="All" Version="$(MicrosoftAspNetCoreHttpSysSourcesPackageVersion)" />
|
<PackageReference Include="Microsoft.AspNetCore.HttpSys.Sources" PrivateAssets="All" Version="$(MicrosoftAspNetCoreHttpSysSourcesPackageVersion)" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Buffers.Sources" Version="$(MicrosoftExtensionsBuffersSourcesPackageVersion)" PrivateAssets="All" />
|
|
||||||
<PackageReference Include="Microsoft.Extensions.Buffers.MemoryPool.Sources" Version="$(MicrosoftExtensionsBuffersMemoryPoolSourcesPackageVersion)" PrivateAssets="All" />
|
<PackageReference Include="Microsoft.Extensions.Buffers.MemoryPool.Sources" Version="$(MicrosoftExtensionsBuffersMemoryPoolSourcesPackageVersion)" PrivateAssets="All" />
|
||||||
|
|
||||||
<PackageReference Include="System.IO.Pipelines" Version="$(SystemIOPipelinesPackageVersion)" />
|
<PackageReference Include="System.IO.Pipelines" Version="$(SystemIOPipelinesPackageVersion)" />
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,11 @@
|
||||||
Capability that enables Visual Studio support for hosting Asp.Net Core applications in the IIS process
|
Capability that enables Visual Studio support for hosting Asp.Net Core applications in the IIS process
|
||||||
-->
|
-->
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectCapability Include="AspNetInProcessHosting" />
|
<ProjectCapability Include="AspNetCoreInProcessHosting" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<AspNetCoreModuleVersion Condition=" '$(AspNetCoreModuleVersion)' == '' ">V2</AspNetCoreModuleVersion>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@
|
||||||
<PackageReference Include="Microsoft.AspNetCore.HttpOverrides" Version="$(MicrosoftAspNetCoreHttpOverridesPackageVersion)" />
|
<PackageReference Include="Microsoft.AspNetCore.HttpOverrides" Version="$(MicrosoftAspNetCoreHttpOverridesPackageVersion)" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="$(MicrosoftExtensionsLoggingAbstractionsPackageVersion)" />
|
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="$(MicrosoftExtensionsLoggingAbstractionsPackageVersion)" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Options" Version="$(MicrosoftExtensionsOptionsPackageVersion)" />
|
<PackageReference Include="Microsoft.Extensions.Options" Version="$(MicrosoftExtensionsOptionsPackageVersion)" />
|
||||||
<PackageReference Include="Microsoft.Extensions.SecurityHelper.Sources" PrivateAssets="All" Version="$(MicrosoftExtensionsSecurityHelperSourcesPackageVersion)" />
|
<Content Include="$(PackageId).targets" PackagePath="build/$(TargetFramework)/" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
<Project>
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<AspNetCoreModuleVersion Condition=" '$(AspNetCoreModuleVersion)' == '' ">V2</AspNetCoreModuleVersion>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
|
|
@ -0,0 +1,44 @@
|
||||||
|
// 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 Microsoft.AspNetCore.Server.IntegrationTesting.IIS;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNetCore.Server.IntegrationTesting
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Factory to create an appropriate deployer based on <see cref="DeploymentParameters"/>.
|
||||||
|
/// </summary>
|
||||||
|
public class IISApplicationDeployerFactory
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Creates a deployer instance based on settings in <see cref="DeploymentParameters"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="deploymentParameters"></param>
|
||||||
|
/// <param name="loggerFactory"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static ApplicationDeployer Create(DeploymentParameters deploymentParameters, ILoggerFactory loggerFactory)
|
||||||
|
{
|
||||||
|
if (deploymentParameters == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(deploymentParameters));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (loggerFactory == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(loggerFactory));
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (deploymentParameters.ServerType)
|
||||||
|
{
|
||||||
|
case ServerType.IISExpress:
|
||||||
|
return new IIS.IISExpressDeployer(deploymentParameters, loggerFactory);
|
||||||
|
case ServerType.IIS:
|
||||||
|
return new IISDeployer(deploymentParameters, loggerFactory);
|
||||||
|
default:
|
||||||
|
return ApplicationDeployerFactory.Create(deploymentParameters, loggerFactory);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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.IO;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNetCore.Server.IntegrationTesting
|
||||||
|
{
|
||||||
|
// Copied from hosting
|
||||||
|
// TODO: make public while removing IISExpressDeployer
|
||||||
|
public static class DotNetCommands
|
||||||
|
{
|
||||||
|
private const string _dotnetFolderName = ".dotnet";
|
||||||
|
|
||||||
|
internal static string DotNetHome { get; } = GetDotNetHome();
|
||||||
|
|
||||||
|
// Compare to https://github.com/aspnet/BuildTools/blob/314c98e4533217a841ff9767bb38e144eb6c93e4/tools/KoreBuild.Console/Commands/CommandContext.cs#L76
|
||||||
|
private static string GetDotNetHome()
|
||||||
|
{
|
||||||
|
var dotnetHome = Environment.GetEnvironmentVariable("DOTNET_HOME");
|
||||||
|
var userProfile = Environment.GetEnvironmentVariable("USERPROFILE");
|
||||||
|
var home = Environment.GetEnvironmentVariable("HOME");
|
||||||
|
|
||||||
|
var result = Path.Combine(Directory.GetCurrentDirectory(), _dotnetFolderName);
|
||||||
|
if (!string.IsNullOrEmpty(dotnetHome))
|
||||||
|
{
|
||||||
|
result = dotnetHome;
|
||||||
|
}
|
||||||
|
else if (!string.IsNullOrEmpty(userProfile))
|
||||||
|
{
|
||||||
|
result = Path.Combine(userProfile, _dotnetFolderName);
|
||||||
|
}
|
||||||
|
else if (!string.IsNullOrEmpty(home))
|
||||||
|
{
|
||||||
|
result = home;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
internal static string GetDotNetInstallDir(RuntimeArchitecture arch)
|
||||||
|
{
|
||||||
|
var dotnetDir = DotNetHome;
|
||||||
|
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
|
||||||
|
{
|
||||||
|
dotnetDir = Path.Combine(dotnetDir, arch.ToString());
|
||||||
|
}
|
||||||
|
|
||||||
|
return dotnetDir;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string GetDotNetExecutable(RuntimeArchitecture arch)
|
||||||
|
{
|
||||||
|
var dotnetDir = GetDotNetInstallDir(arch);
|
||||||
|
|
||||||
|
var dotnetFile = "dotnet";
|
||||||
|
|
||||||
|
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
|
||||||
|
{
|
||||||
|
dotnetFile += ".exe";
|
||||||
|
}
|
||||||
|
|
||||||
|
return Path.Combine(dotnetDir, dotnetFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal static bool IsRunningX86OnX64(RuntimeArchitecture arch)
|
||||||
|
{
|
||||||
|
return (RuntimeInformation.OSArchitecture == Architecture.X64 || RuntimeInformation.OSArchitecture == Architecture.Arm64)
|
||||||
|
&& arch == RuntimeArchitecture.x86;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -8,7 +8,6 @@ using System.Linq;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Xml.Linq;
|
using System.Xml.Linq;
|
||||||
using Microsoft.Extensions.CommandLineUtils;
|
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Microsoft.Web.Administration;
|
using Microsoft.Web.Administration;
|
||||||
|
|
||||||
|
|
@ -72,7 +71,7 @@ namespace Microsoft.AspNetCore.Server.IntegrationTesting
|
||||||
|
|
||||||
if (_deploymentParameters.ApplicationType == ApplicationType.Portable)
|
if (_deploymentParameters.ApplicationType == ApplicationType.Portable)
|
||||||
{
|
{
|
||||||
ModifyAspNetCoreSectionInWebConfig("processPath", DotNetMuxer.MuxerPathOrDefault());
|
ModifyAspNetCoreSectionInWebConfig("processPath", DotNetCommands.GetDotNetExecutable(_deploymentParameters.RuntimeArchitecture));
|
||||||
}
|
}
|
||||||
|
|
||||||
_serverManager.CommitChanges();
|
_serverManager.CommitChanges();
|
||||||
|
|
@ -199,9 +198,20 @@ namespace Microsoft.AspNetCore.Server.IntegrationTesting
|
||||||
e => _logger.LogWarning($"Failed to delete file : {e.Message}"));
|
e => _logger.LogWarning($"Failed to delete file : {e.Message}"));
|
||||||
}
|
}
|
||||||
|
|
||||||
RetryFileOperation(
|
if (File.Exists(_apphostConfigBackupPath))
|
||||||
() => File.Move(_apphostConfigBackupPath, _apphostConfigPath),
|
{
|
||||||
e => _logger.LogError($"Failed to backup apphost.config: {e.Message}"));
|
RetryFileOperation(
|
||||||
|
() => File.Move(_apphostConfigBackupPath, _apphostConfigPath),
|
||||||
|
e => _logger.LogError($"Failed to backup apphost.config: {e.Message}"));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Test failed to create backup config file, put a default one from IIS.config there instead.
|
||||||
|
// An apphost.config file is required to be replaced because we use it for removing the app pool.
|
||||||
|
RetryFileOperation(
|
||||||
|
() => File.WriteAllText(_apphostConfigPath, File.ReadAllText("IIS.config")),
|
||||||
|
e => _logger.LogWarning($"Failed to copy IIS.config to apphost.config: {e.Message}"));
|
||||||
|
}
|
||||||
|
|
||||||
_logger.LogInformation($"Restored {_apphostConfigPath}.");
|
_logger.LogInformation($"Restored {_apphostConfigPath}.");
|
||||||
}
|
}
|
||||||
|
|
@ -221,6 +231,7 @@ namespace Microsoft.AspNetCore.Server.IntegrationTesting
|
||||||
var pool = _serverManager.ApplicationPools.Add(AppPoolName);
|
var pool = _serverManager.ApplicationPools.Add(AppPoolName);
|
||||||
pool.ProcessModel.IdentityType = ProcessModelIdentityType.LocalSystem;
|
pool.ProcessModel.IdentityType = ProcessModelIdentityType.LocalSystem;
|
||||||
pool.ManagedRuntimeVersion = string.Empty;
|
pool.ManagedRuntimeVersion = string.Empty;
|
||||||
|
pool.StartMode = StartMode.AlwaysRunning;
|
||||||
|
|
||||||
AddEnvironmentVariables(contentRoot, pool);
|
AddEnvironmentVariables(contentRoot, pool);
|
||||||
|
|
||||||
|
|
@ -244,7 +255,6 @@ namespace Microsoft.AspNetCore.Server.IntegrationTesting
|
||||||
{
|
{
|
||||||
AddEnvironmentVariableToAppPool(envCollection, tuple.Key, tuple.Value);
|
AddEnvironmentVariableToAppPool(envCollection, tuple.Key, tuple.Value);
|
||||||
}
|
}
|
||||||
AddEnvironmentVariableToAppPool(envCollection, "ASPNETCORE_MODULE_DEBUG_FILE", $"{WebSiteName}.txt");
|
|
||||||
}
|
}
|
||||||
catch (COMException comException)
|
catch (COMException comException)
|
||||||
{
|
{
|
||||||
|
|
@ -1,15 +1,15 @@
|
||||||
// Copyright (c) .NET Foundation. All rights reserved.
|
// 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.
|
// 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.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Xml.Linq;
|
using System.Xml.Linq;
|
||||||
|
using Microsoft.AspNetCore.Server.IntegrationTesting.Common;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Server.IntegrationTesting
|
namespace Microsoft.AspNetCore.Server.IntegrationTesting.IIS
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Deployer for IIS.
|
/// Deployer for IIS.
|
||||||
|
|
@ -56,16 +56,17 @@ namespace Microsoft.AspNetCore.Server.IntegrationTesting
|
||||||
|
|
||||||
_application = new IISApplication(DeploymentParameters, Logger);
|
_application = new IISApplication(DeploymentParameters, Logger);
|
||||||
|
|
||||||
// For now, only support using published output
|
// For now, only support using published output
|
||||||
DeploymentParameters.PublishApplicationBeforeDeployment = true;
|
DeploymentParameters.PublishApplicationBeforeDeployment = true;
|
||||||
|
|
||||||
if (DeploymentParameters.PublishApplicationBeforeDeployment)
|
if (DeploymentParameters.PublishApplicationBeforeDeployment)
|
||||||
{
|
{
|
||||||
DotnetPublish();
|
DotnetPublish();
|
||||||
contentRoot = DeploymentParameters.PublishedApplicationRootPath;
|
contentRoot = DeploymentParameters.PublishedApplicationRootPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
var uri = TestIISUriHelper.BuildTestUri(ServerType.IIS, DeploymentParameters.ApplicationBaseUriHint);
|
WebConfigHelpers.AddDebugLogToWebConfig(contentRoot, Path.Combine(contentRoot, $"{_application.WebSiteName}.txt"));
|
||||||
|
|
||||||
|
var uri = TestUriHelper.BuildTestUri(ServerType.IIS, DeploymentParameters.ApplicationBaseUriHint);
|
||||||
// To prevent modifying the IIS setup concurrently.
|
// To prevent modifying the IIS setup concurrently.
|
||||||
await _application.StartIIS(uri, contentRoot);
|
await _application.StartIIS(uri, contentRoot);
|
||||||
|
|
||||||
|
|
@ -0,0 +1,436 @@
|
||||||
|
// Copyright (c) .NET Foundation. All rights reserved.
|
||||||
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Globalization;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Xml.Linq;
|
||||||
|
using Microsoft.AspNetCore.Server.IntegrationTesting.Common;
|
||||||
|
using Microsoft.AspNetCore.Testing;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNetCore.Server.IntegrationTesting.IIS
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Deployment helper for IISExpress.
|
||||||
|
/// </summary>
|
||||||
|
public class IISExpressDeployer : ApplicationDeployer
|
||||||
|
{
|
||||||
|
private const string IISExpressRunningMessage = "IIS Express is running.";
|
||||||
|
private const string FailedToInitializeBindingsMessage = "Failed to initialize site bindings";
|
||||||
|
private const string UnableToStartIISExpressMessage = "Unable to start iisexpress.";
|
||||||
|
private const int MaximumAttempts = 5;
|
||||||
|
|
||||||
|
private static readonly Regex UrlDetectorRegex = new Regex(@"^\s*Successfully registered URL ""(?<url>[^""]+)"" for site.*$");
|
||||||
|
|
||||||
|
private Process _hostProcess;
|
||||||
|
|
||||||
|
public IISExpressDeployer(DeploymentParameters deploymentParameters, ILoggerFactory loggerFactory)
|
||||||
|
: base(deploymentParameters, loggerFactory)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override async Task<DeploymentResult> DeployAsync()
|
||||||
|
{
|
||||||
|
using (Logger.BeginScope("Deployment"))
|
||||||
|
{
|
||||||
|
// Start timer
|
||||||
|
StartTimer();
|
||||||
|
|
||||||
|
// For an unpublished application the dllroot points pre-built dlls like projectdir/bin/debug/net461/
|
||||||
|
// and contentRoot points to the project directory so you get things like static assets.
|
||||||
|
// For a published app both point to the publish directory.
|
||||||
|
var dllRoot = CheckIfPublishIsRequired();
|
||||||
|
var contentRoot = string.Empty;
|
||||||
|
if (DeploymentParameters.PublishApplicationBeforeDeployment)
|
||||||
|
{
|
||||||
|
DotnetPublish();
|
||||||
|
contentRoot = DeploymentParameters.PublishedApplicationRootPath;
|
||||||
|
dllRoot = contentRoot;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Core+Standalone always publishes. This must be Clr+Standalone or Core+Portable.
|
||||||
|
// Update processPath and arguments for our current scenario
|
||||||
|
contentRoot = DeploymentParameters.ApplicationPath;
|
||||||
|
|
||||||
|
var executableExtension = DeploymentParameters.ApplicationType == ApplicationType.Portable ? ".dll" : ".exe";
|
||||||
|
var entryPoint = Path.Combine(dllRoot, DeploymentParameters.ApplicationName + executableExtension);
|
||||||
|
|
||||||
|
var executableName = string.Empty;
|
||||||
|
var executableArgs = string.Empty;
|
||||||
|
|
||||||
|
if (DeploymentParameters.RuntimeFlavor == RuntimeFlavor.CoreClr && DeploymentParameters.ApplicationType == ApplicationType.Portable)
|
||||||
|
{
|
||||||
|
executableName = GetDotNetExeForArchitecture();
|
||||||
|
executableArgs = entryPoint;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
executableName = entryPoint;
|
||||||
|
}
|
||||||
|
|
||||||
|
Logger.LogInformation("Executing: {exe} {args}", executableName, executableArgs);
|
||||||
|
DeploymentParameters.EnvironmentVariables["LAUNCHER_PATH"] = executableName;
|
||||||
|
DeploymentParameters.EnvironmentVariables["LAUNCHER_ARGS"] = executableArgs;
|
||||||
|
|
||||||
|
// CurrentDirectory will point to bin/{config}/{tfm}, but the config and static files aren't copied, point to the app base instead.
|
||||||
|
Logger.LogInformation("ContentRoot: {path}", DeploymentParameters.ApplicationPath);
|
||||||
|
DeploymentParameters.EnvironmentVariables["ASPNETCORE_CONTENTROOT"] = DeploymentParameters.ApplicationPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
var testUri = TestUriHelper.BuildTestUri(ServerType.IISExpress, DeploymentParameters.ApplicationBaseUriHint);
|
||||||
|
|
||||||
|
// Launch the host process.
|
||||||
|
var (actualUri, hostExitToken) = await StartIISExpressAsync(testUri, contentRoot, dllRoot);
|
||||||
|
|
||||||
|
Logger.LogInformation("Application ready at URL: {appUrl}", actualUri);
|
||||||
|
|
||||||
|
// Right now this works only for urls like http://localhost:5001/. Does not work for http://localhost:5001/subpath.
|
||||||
|
return new DeploymentResult(
|
||||||
|
LoggerFactory,
|
||||||
|
DeploymentParameters,
|
||||||
|
applicationBaseUri: actualUri.ToString(),
|
||||||
|
contentRoot: contentRoot,
|
||||||
|
hostShutdownToken: hostExitToken);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private string CheckIfPublishIsRequired()
|
||||||
|
{
|
||||||
|
var targetFramework = DeploymentParameters.TargetFramework;
|
||||||
|
|
||||||
|
// IISIntegration uses this layout
|
||||||
|
var dllRoot = Path.Combine(DeploymentParameters.ApplicationPath, "bin", DeploymentParameters.RuntimeArchitecture.ToString(),
|
||||||
|
DeploymentParameters.Configuration, targetFramework);
|
||||||
|
|
||||||
|
if (!Directory.Exists(dllRoot))
|
||||||
|
{
|
||||||
|
// Most repos use this layout
|
||||||
|
dllRoot = Path.Combine(DeploymentParameters.ApplicationPath, "bin", DeploymentParameters.Configuration, targetFramework);
|
||||||
|
|
||||||
|
if (!Directory.Exists(dllRoot))
|
||||||
|
{
|
||||||
|
// The bits we need weren't pre-compiled, compile on publish
|
||||||
|
DeploymentParameters.PublishApplicationBeforeDeployment = true;
|
||||||
|
}
|
||||||
|
else if (DeploymentParameters.RuntimeFlavor == RuntimeFlavor.Clr
|
||||||
|
&& DeploymentParameters.RuntimeArchitecture == RuntimeArchitecture.x86)
|
||||||
|
{
|
||||||
|
// x64 is the default. Publish to rebuild for the right bitness
|
||||||
|
DeploymentParameters.PublishApplicationBeforeDeployment = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (DeploymentParameters.RuntimeFlavor == RuntimeFlavor.CoreClr
|
||||||
|
&& DeploymentParameters.ApplicationType == ApplicationType.Standalone)
|
||||||
|
{
|
||||||
|
// Publish is always required to get the correct standalone files in the output directory
|
||||||
|
DeploymentParameters.PublishApplicationBeforeDeployment = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return dllRoot;
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task<(Uri url, CancellationToken hostExitToken)> StartIISExpressAsync(Uri uri, string contentRoot, string dllRoot)
|
||||||
|
{
|
||||||
|
using (Logger.BeginScope("StartIISExpress"))
|
||||||
|
{
|
||||||
|
var port = uri.Port;
|
||||||
|
if (port == 0)
|
||||||
|
{
|
||||||
|
port = (uri.Scheme == "https") ? TestPortHelper.GetNextSSLPort() : TestPortHelper.GetNextPort();
|
||||||
|
}
|
||||||
|
|
||||||
|
Logger.LogInformation("Attempting to start IIS Express on port: {port}", port);
|
||||||
|
PrepareConfig(contentRoot, dllRoot, port);
|
||||||
|
|
||||||
|
var parameters = string.IsNullOrEmpty(DeploymentParameters.ServerConfigLocation) ?
|
||||||
|
string.Format("/port:{0} /path:\"{1}\" /trace:error /systray:false", uri.Port, contentRoot) :
|
||||||
|
string.Format("/site:{0} /config:{1} /trace:error /systray:false", DeploymentParameters.SiteName, DeploymentParameters.ServerConfigLocation);
|
||||||
|
|
||||||
|
var iisExpressPath = GetIISExpressPath();
|
||||||
|
|
||||||
|
for (var attempt = 0; attempt < MaximumAttempts; attempt++)
|
||||||
|
{
|
||||||
|
Logger.LogInformation("Executing command : {iisExpress} {parameters}", iisExpressPath, parameters);
|
||||||
|
|
||||||
|
var startInfo = new ProcessStartInfo
|
||||||
|
{
|
||||||
|
FileName = iisExpressPath,
|
||||||
|
Arguments = parameters,
|
||||||
|
UseShellExecute = false,
|
||||||
|
CreateNoWindow = true,
|
||||||
|
RedirectStandardError = true,
|
||||||
|
RedirectStandardOutput = true
|
||||||
|
};
|
||||||
|
|
||||||
|
AddEnvironmentVariablesToProcess(startInfo, DeploymentParameters.EnvironmentVariables);
|
||||||
|
|
||||||
|
Uri url = null;
|
||||||
|
var started = new TaskCompletionSource<bool>();
|
||||||
|
|
||||||
|
var process = new Process() { StartInfo = startInfo };
|
||||||
|
process.OutputDataReceived += (sender, dataArgs) =>
|
||||||
|
{
|
||||||
|
if (string.Equals(dataArgs.Data, UnableToStartIISExpressMessage))
|
||||||
|
{
|
||||||
|
// We completely failed to start and we don't really know why
|
||||||
|
started.TrySetException(new InvalidOperationException("Failed to start IIS Express"));
|
||||||
|
}
|
||||||
|
else if (string.Equals(dataArgs.Data, FailedToInitializeBindingsMessage))
|
||||||
|
{
|
||||||
|
started.TrySetResult(false);
|
||||||
|
}
|
||||||
|
else if (string.Equals(dataArgs.Data, IISExpressRunningMessage))
|
||||||
|
{
|
||||||
|
started.TrySetResult(true);
|
||||||
|
}
|
||||||
|
else if (!string.IsNullOrEmpty(dataArgs.Data))
|
||||||
|
{
|
||||||
|
var m = UrlDetectorRegex.Match(dataArgs.Data);
|
||||||
|
if (m.Success)
|
||||||
|
{
|
||||||
|
url = new Uri(m.Groups["url"].Value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
process.EnableRaisingEvents = true;
|
||||||
|
var hostExitTokenSource = new CancellationTokenSource();
|
||||||
|
process.Exited += (sender, e) =>
|
||||||
|
{
|
||||||
|
Logger.LogInformation("iisexpress Process {pid} shut down", process.Id);
|
||||||
|
|
||||||
|
// If TrySetResult was called above, this will just silently fail to set the new state, which is what we want
|
||||||
|
started.TrySetException(new Exception($"Command exited unexpectedly with exit code: {process.ExitCode}"));
|
||||||
|
|
||||||
|
TriggerHostShutdown(hostExitTokenSource);
|
||||||
|
};
|
||||||
|
process.StartAndCaptureOutAndErrToLogger("iisexpress", Logger);
|
||||||
|
Logger.LogInformation("iisexpress Process {pid} started", process.Id);
|
||||||
|
|
||||||
|
if (process.HasExited)
|
||||||
|
{
|
||||||
|
Logger.LogError("Host process {processName} {pid} exited with code {exitCode} or failed to start.", startInfo.FileName, process.Id, process.ExitCode);
|
||||||
|
throw new Exception("Failed to start host");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Wait for the app to start
|
||||||
|
// The timeout here is large, because we don't know how long the test could need
|
||||||
|
// We cover a lot of error cases above, but I want to make sure we eventually give up and don't hang the build
|
||||||
|
// just in case we missed one -anurse
|
||||||
|
if (!await started.Task.TimeoutAfter(TimeSpan.FromMinutes(10)))
|
||||||
|
{
|
||||||
|
Logger.LogInformation("iisexpress Process {pid} failed to bind to port {port}, trying again", process.Id, port);
|
||||||
|
|
||||||
|
// Wait for the process to exit and try again
|
||||||
|
process.WaitForExit(30 * 1000);
|
||||||
|
await Task.Delay(1000); // Wait a second to make sure the socket is completely cleaned up
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_hostProcess = process;
|
||||||
|
Logger.LogInformation("Started iisexpress successfully. Process Id : {processId}, Port: {port}", _hostProcess.Id, port);
|
||||||
|
return (url: url, hostExitToken: hostExitTokenSource.Token);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var message = $"Failed to initialize IIS Express after {MaximumAttempts} attempts to select a port";
|
||||||
|
Logger.LogError(message);
|
||||||
|
throw new TimeoutException(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void PrepareConfig(string contentRoot, string dllRoot, int port)
|
||||||
|
{
|
||||||
|
// Config is required. If not present then fall back to one we carry with us.
|
||||||
|
if (string.IsNullOrEmpty(DeploymentParameters.ServerConfigTemplateContent))
|
||||||
|
{
|
||||||
|
using (var stream = GetType().Assembly.GetManifestResourceStream("Microsoft.AspNetCore.Server.IntegrationTesting.IIS.Http.config"))
|
||||||
|
using (var reader = new StreamReader(stream))
|
||||||
|
{
|
||||||
|
DeploymentParameters.ServerConfigTemplateContent = reader.ReadToEnd();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var serverConfig = DeploymentParameters.ServerConfigTemplateContent;
|
||||||
|
|
||||||
|
// Pass on the applicationhost.config to iis express. With this don't need to pass in the /path /port switches as they are in the applicationHost.config
|
||||||
|
// We take a copy of the original specified applicationHost.Config to prevent modifying the one in the repo.
|
||||||
|
serverConfig = ModifyANCMPathInConfig(replaceFlag: "[ANCMPath]", dllName: "aspnetcore.dll", serverConfig, dllRoot);
|
||||||
|
serverConfig = ModifyANCMPathInConfig(replaceFlag: "[ANCMV2Path]", dllName: "aspnetcorev2.dll", serverConfig, dllRoot);
|
||||||
|
|
||||||
|
serverConfig = ReplacePlaceholder(serverConfig, "[PORT]", port.ToString(CultureInfo.InvariantCulture));
|
||||||
|
serverConfig = ReplacePlaceholder(serverConfig, "[ApplicationPhysicalPath]", contentRoot);
|
||||||
|
|
||||||
|
if (DeploymentParameters.PublishApplicationBeforeDeployment)
|
||||||
|
{
|
||||||
|
// For published apps, prefer the content in the web.config, but update it.
|
||||||
|
ModifyAspNetCoreSectionInWebConfig(key: "hostingModel",
|
||||||
|
value: DeploymentParameters.HostingModel == HostingModel.InProcess ? "inprocess" : "");
|
||||||
|
ModifyHandlerSectionInWebConfig(key: "modules", value: DeploymentParameters.AncmVersion.ToString());
|
||||||
|
ModifyDotNetExePathInWebConfig();
|
||||||
|
serverConfig = RemoveRedundantElements(serverConfig);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// The elements normally in the web.config are in the applicationhost.config for unpublished apps.
|
||||||
|
serverConfig = ReplacePlaceholder(serverConfig, "[HostingModel]", DeploymentParameters.HostingModel.ToString());
|
||||||
|
serverConfig = ReplacePlaceholder(serverConfig, "[AspNetCoreModule]", DeploymentParameters.AncmVersion.ToString());
|
||||||
|
}
|
||||||
|
|
||||||
|
DeploymentParameters.ServerConfigLocation = Path.GetTempFileName();
|
||||||
|
Logger.LogDebug("Saving Config to {configPath}", DeploymentParameters.ServerConfigLocation);
|
||||||
|
|
||||||
|
File.WriteAllText(DeploymentParameters.ServerConfigLocation, serverConfig);
|
||||||
|
}
|
||||||
|
|
||||||
|
private string ReplacePlaceholder(string content, string field, string value)
|
||||||
|
{
|
||||||
|
if (content.Contains(field))
|
||||||
|
{
|
||||||
|
content = content.Replace(field, value);
|
||||||
|
Logger.LogDebug("Writing {field} '{value}' to config", field, value);
|
||||||
|
}
|
||||||
|
return content;
|
||||||
|
}
|
||||||
|
|
||||||
|
private string ModifyANCMPathInConfig(string replaceFlag, string dllName, string serverConfig, string dllRoot)
|
||||||
|
{
|
||||||
|
if (serverConfig.Contains(replaceFlag))
|
||||||
|
{
|
||||||
|
var arch = DeploymentParameters.RuntimeArchitecture == RuntimeArchitecture.x64 ? $@"x64\{dllName}" : $@"x86\{dllName}";
|
||||||
|
var ancmFile = Path.Combine(dllRoot, arch);
|
||||||
|
if (!File.Exists(Environment.ExpandEnvironmentVariables(ancmFile)))
|
||||||
|
{
|
||||||
|
ancmFile = Path.Combine(dllRoot, dllName);
|
||||||
|
if (!File.Exists(Environment.ExpandEnvironmentVariables(ancmFile)))
|
||||||
|
{
|
||||||
|
throw new FileNotFoundException("AspNetCoreModule could not be found.", ancmFile);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Logger.LogDebug($"Writing '{replaceFlag}' '{ancmFile}' to config");
|
||||||
|
return serverConfig.Replace(replaceFlag, ancmFile);
|
||||||
|
}
|
||||||
|
return serverConfig;
|
||||||
|
}
|
||||||
|
|
||||||
|
private string GetIISExpressPath()
|
||||||
|
{
|
||||||
|
var programFiles = "Program Files";
|
||||||
|
if (DotNetCommands.IsRunningX86OnX64(DeploymentParameters.RuntimeArchitecture))
|
||||||
|
{
|
||||||
|
programFiles = "Program Files (x86)";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get path to program files
|
||||||
|
var iisExpressPath = Path.Combine(Environment.GetEnvironmentVariable("SystemDrive") + "\\", programFiles, "IIS Express", "iisexpress.exe");
|
||||||
|
|
||||||
|
if (!File.Exists(iisExpressPath))
|
||||||
|
{
|
||||||
|
throw new Exception("Unable to find IISExpress on the machine: " + iisExpressPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
return iisExpressPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Dispose()
|
||||||
|
{
|
||||||
|
using (Logger.BeginScope("Dispose"))
|
||||||
|
{
|
||||||
|
ShutDownIfAnyHostProcess(_hostProcess);
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(DeploymentParameters.ServerConfigLocation)
|
||||||
|
&& File.Exists(DeploymentParameters.ServerConfigLocation))
|
||||||
|
{
|
||||||
|
// Delete the temp applicationHostConfig that we created.
|
||||||
|
Logger.LogDebug("Deleting applicationHost.config file from {configLocation}", DeploymentParameters.ServerConfigLocation);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
File.Delete(DeploymentParameters.ServerConfigLocation);
|
||||||
|
}
|
||||||
|
catch (Exception exception)
|
||||||
|
{
|
||||||
|
// Ignore delete failures - just write a log.
|
||||||
|
Logger.LogWarning("Failed to delete '{config}'. Exception : {exception}", DeploymentParameters.ServerConfigLocation, exception.Message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (DeploymentParameters.PublishApplicationBeforeDeployment)
|
||||||
|
{
|
||||||
|
CleanPublishedOutput();
|
||||||
|
}
|
||||||
|
|
||||||
|
InvokeUserApplicationCleanup();
|
||||||
|
|
||||||
|
StopTimer();
|
||||||
|
}
|
||||||
|
|
||||||
|
// If by this point, the host process is still running (somehow), throw an error.
|
||||||
|
// A test failure is better than a silent hang and unknown failure later on
|
||||||
|
if (_hostProcess != null && !_hostProcess.HasExited)
|
||||||
|
{
|
||||||
|
throw new Exception($"iisexpress Process {_hostProcess.Id} failed to shutdown");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ModifyDotNetExePathInWebConfig()
|
||||||
|
{
|
||||||
|
// We assume the x64 dotnet.exe is on the path so we need to provide an absolute path for x86 scenarios.
|
||||||
|
// Only do it for scenarios that rely on dotnet.exe (Core, portable, etc.).
|
||||||
|
if (DeploymentParameters.RuntimeFlavor == RuntimeFlavor.CoreClr
|
||||||
|
&& DeploymentParameters.ApplicationType == ApplicationType.Portable
|
||||||
|
&& DotNetCommands.IsRunningX86OnX64(DeploymentParameters.RuntimeArchitecture))
|
||||||
|
{
|
||||||
|
var executableName = DotNetCommands.GetDotNetExecutable(DeploymentParameters.RuntimeArchitecture);
|
||||||
|
if (!File.Exists(executableName))
|
||||||
|
{
|
||||||
|
throw new Exception($"Unable to find '{executableName}'.'");
|
||||||
|
}
|
||||||
|
ModifyAspNetCoreSectionInWebConfig("processPath", executableName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Transforms the web.config file to set attributes like hostingModel="inprocess" element
|
||||||
|
private void ModifyAspNetCoreSectionInWebConfig(string key, string value)
|
||||||
|
{
|
||||||
|
var webConfigFile = Path.Combine(DeploymentParameters.PublishedApplicationRootPath, "web.config");
|
||||||
|
var config = XDocument.Load(webConfigFile);
|
||||||
|
var element = config.Descendants("aspNetCore").FirstOrDefault();
|
||||||
|
element.SetAttributeValue(key, value);
|
||||||
|
config.Save(webConfigFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ModifyHandlerSectionInWebConfig(string key, string value)
|
||||||
|
{
|
||||||
|
var webConfigFile = Path.Combine(DeploymentParameters.PublishedApplicationRootPath, "web.config");
|
||||||
|
var config = XDocument.Load(webConfigFile);
|
||||||
|
var element = config.Descendants("handlers").FirstOrDefault().Descendants("add").FirstOrDefault();
|
||||||
|
element.SetAttributeValue(key, value);
|
||||||
|
config.Save(webConfigFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
// These elements are duplicated in the web.config if you publish. Remove them from the host.config.
|
||||||
|
private string RemoveRedundantElements(string serverConfig)
|
||||||
|
{
|
||||||
|
var hostConfig = XDocument.Parse(serverConfig);
|
||||||
|
|
||||||
|
var coreElement = hostConfig.Descendants("aspNetCore").FirstOrDefault();
|
||||||
|
coreElement?.Remove();
|
||||||
|
|
||||||
|
var handlersElement = hostConfig.Descendants("handlers").First();
|
||||||
|
var handlerElement = handlersElement.Descendants("add")
|
||||||
|
.Where(x => x.Attribute("name").Value == "aspNetCore").FirstOrDefault();
|
||||||
|
handlerElement?.Remove();
|
||||||
|
|
||||||
|
return hostConfig.ToString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>netstandard2.0</TargetFramework>
|
||||||
|
<PackageId>Microsoft.AspNetCore.Server.IntegrationTesting.IIS</PackageId>
|
||||||
|
<Description>Provides support for integration testing using IIS based servers.</Description>
|
||||||
|
<NoWarn>$(NoWarn);CS1591</NoWarn>
|
||||||
|
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
||||||
|
<PackageTags>aspnetcore;iis</PackageTags>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<EmbeddedResource Include="Http.config" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Microsoft.AspNetCore.Server.IntegrationTesting" PrivateAssets="None" Version="$(MicrosoftAspNetCoreServerIntegrationTestingPackageVersion)" />
|
||||||
|
<PackageReference Include="Microsoft.Web.Administration" Version="$(MicrosoftWebAdministrationPackageVersion)" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
|
|
@ -2,26 +2,20 @@
|
||||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Net;
|
|
||||||
using System.Net.Sockets;
|
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Server.IntegrationTesting
|
namespace Microsoft.AspNetCore.Server.IntegrationTesting.Common
|
||||||
{
|
{
|
||||||
// Copied from Hosting for now https://github.com/aspnet/Hosting/blob/970bc8a30d66dd6894f8f662e5fdab9e68d57777/src/Microsoft.AspNetCore.Server.IntegrationTesting/Common/TestUriHelper.cs
|
internal static class TestUriHelper
|
||||||
internal static class TestIISUriHelper
|
|
||||||
{
|
{
|
||||||
internal static Uri BuildTestUri(ServerType serverType)
|
|
||||||
{
|
|
||||||
return BuildTestUri(serverType, hint: null);
|
|
||||||
}
|
|
||||||
|
|
||||||
internal static Uri BuildTestUri(ServerType serverType, string hint)
|
internal static Uri BuildTestUri(ServerType serverType, string hint)
|
||||||
{
|
{
|
||||||
// Assume status messages are enabled for Kestrel and disabled for all other servers.
|
// Assume status messages are enabled for Kestrel and disabled for all other servers.
|
||||||
return BuildTestUri(serverType, hint, statusMessagesEnabled: serverType == ServerType.Kestrel);
|
var statusMessagesEnabled = (serverType == ServerType.Kestrel);
|
||||||
|
|
||||||
|
return BuildTestUri(serverType, Uri.UriSchemeHttp, hint, statusMessagesEnabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static Uri BuildTestUri(ServerType serverType, string hint, bool statusMessagesEnabled)
|
internal static Uri BuildTestUri(ServerType serverType, string scheme, string hint, bool statusMessagesEnabled)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(hint))
|
if (string.IsNullOrEmpty(hint))
|
||||||
{
|
{
|
||||||
|
|
@ -32,7 +26,7 @@ namespace Microsoft.AspNetCore.Server.IntegrationTesting
|
||||||
// once and never released. Binding to dynamic port "0" on "localhost" (both IPv4 and IPv6) is not
|
// once and never released. Binding to dynamic port "0" on "localhost" (both IPv4 and IPv6) is not
|
||||||
// supported, so the port is only bound on "127.0.0.1" (IPv4). If a test explicitly requires IPv6,
|
// supported, so the port is only bound on "127.0.0.1" (IPv4). If a test explicitly requires IPv6,
|
||||||
// it should provide a hint URL with "localhost" (IPv4 and IPv6) or "[::1]" (IPv6-only).
|
// it should provide a hint URL with "localhost" (IPv4 and IPv6) or "[::1]" (IPv6-only).
|
||||||
return new UriBuilder("http", "127.0.0.1", 0).Uri;
|
return new UriBuilder(scheme, "127.0.0.1", 0).Uri;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -40,7 +34,7 @@ namespace Microsoft.AspNetCore.Server.IntegrationTesting
|
||||||
// from which to scrape the assigned port, so the less reliable GetNextPort() must be used. The
|
// from which to scrape the assigned port, so the less reliable GetNextPort() must be used. The
|
||||||
// port is bound on "localhost" (both IPv4 and IPv6), since this is supported when using a specific
|
// port is bound on "localhost" (both IPv4 and IPv6), since this is supported when using a specific
|
||||||
// (non-zero) port.
|
// (non-zero) port.
|
||||||
return new UriBuilder("http", "localhost", GetNextPort()).Uri;
|
return new UriBuilder(scheme, "localhost", TestPortHelper.GetNextPort()).Uri;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
@ -51,7 +45,7 @@ namespace Microsoft.AspNetCore.Server.IntegrationTesting
|
||||||
// Only a few tests use this codepath, so it's fine to use the less reliable GetNextPort() for simplicity.
|
// Only a few tests use this codepath, so it's fine to use the less reliable GetNextPort() for simplicity.
|
||||||
// The tests using this codepath will be reviewed to see if they can be changed to directly bind to dynamic
|
// The tests using this codepath will be reviewed to see if they can be changed to directly bind to dynamic
|
||||||
// port "0" on "127.0.0.1" and scrape the assigned port from the status message (the default codepath).
|
// port "0" on "127.0.0.1" and scrape the assigned port from the status message (the default codepath).
|
||||||
return new UriBuilder(uriHint) { Port = GetNextPort() }.Uri;
|
return new UriBuilder(uriHint) { Port = TestPortHelper.GetNextPort() }.Uri;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -60,25 +54,5 @@ namespace Microsoft.AspNetCore.Server.IntegrationTesting
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copied from https://github.com/aspnet/KestrelHttpServer/blob/47f1db20e063c2da75d9d89653fad4eafe24446c/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/AddressRegistrationTests.cs#L508
|
|
||||||
//
|
|
||||||
// This method is an attempt to safely get a free port from the OS. Most of the time,
|
|
||||||
// when binding to dynamic port "0" the OS increments the assigned port, so it's safe
|
|
||||||
// to re-use the assigned port in another process. However, occasionally the OS will reuse
|
|
||||||
// a recently assigned port instead of incrementing, which causes flaky tests with AddressInUse
|
|
||||||
// exceptions. This method should only be used when the application itself cannot use
|
|
||||||
// dynamic port "0" (e.g. IISExpress). Most functional tests using raw Kestrel
|
|
||||||
// (with status messages enabled) should directly bind to dynamic port "0" and scrape
|
|
||||||
// the assigned port from the status message, which should be 100% reliable since the port
|
|
||||||
// is bound once and never released.
|
|
||||||
internal static int GetNextPort()
|
|
||||||
{
|
|
||||||
using (var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
|
|
||||||
{
|
|
||||||
socket.Bind(new IPEndPoint(IPAddress.Loopback, 0));
|
|
||||||
return ((IPEndPoint)socket.LocalEndPoint).Port;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -0,0 +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.Linq;
|
||||||
|
using System.Xml.Linq;
|
||||||
|
using Microsoft.AspNetCore.Server.IntegrationTesting;
|
||||||
|
using Microsoft.AspNetCore.Testing;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNetCore.Server.IntegrationTesting.IIS
|
||||||
|
{
|
||||||
|
public class WebConfigHelpers
|
||||||
|
{
|
||||||
|
public static void AddDebugLogToWebConfig(string contentRoot, string filename)
|
||||||
|
{
|
||||||
|
var path = Path.Combine(contentRoot, "web.config");
|
||||||
|
var webconfig = XDocument.Load(path);
|
||||||
|
var xElement = webconfig.Descendants("aspNetCore").Single();
|
||||||
|
|
||||||
|
var element = xElement.Descendants("handlerSettings").SingleOrDefault();
|
||||||
|
if (element == null)
|
||||||
|
{
|
||||||
|
element = new XElement("handlerSettings");
|
||||||
|
xElement.Add(element);
|
||||||
|
}
|
||||||
|
|
||||||
|
CreateOrSetElement(element, "debugLevel", "4");
|
||||||
|
|
||||||
|
CreateOrSetElement(element, "debugFile", Path.Combine(contentRoot, filename));
|
||||||
|
|
||||||
|
webconfig.Save(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void CreateOrSetElement(XElement rootElement, string name, string value)
|
||||||
|
{
|
||||||
|
if (rootElement.Descendants()
|
||||||
|
.Attributes()
|
||||||
|
.Where(attribute => attribute.Value == name)
|
||||||
|
.Any())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var element = new XElement("handlerSetting");
|
||||||
|
element.SetAttributeValue("name", name);
|
||||||
|
element.SetAttributeValue("value", value);
|
||||||
|
rootElement.Add(element);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
using System;
|
||||||
|
using System.Net;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNetCore.Server.IIS.FunctionalTests.Utilities;
|
||||||
|
using Microsoft.AspNetCore.Testing.xunit;
|
||||||
|
using Xunit;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests
|
||||||
|
{
|
||||||
|
public class EventLogTests : IISFunctionalTestBase
|
||||||
|
{
|
||||||
|
[ConditionalFact]
|
||||||
|
public async Task CheckStartupEventLogMessage()
|
||||||
|
{
|
||||||
|
var deploymentParameters = Helpers.GetBaseDeploymentParameters(publish: true);
|
||||||
|
var deploymentResult = await DeployAsync(deploymentParameters);
|
||||||
|
await Helpers.AssertStarts(deploymentResult, "/HelloWorld");
|
||||||
|
|
||||||
|
StopServer();
|
||||||
|
|
||||||
|
EventLogHelpers.VerifyEventLogEvent(TestSink, "Application '.+' started the coreclr in-process successfully.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -7,6 +7,7 @@ using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Microsoft.AspNetCore.Server.IIS.FunctionalTests.Utilities;
|
using Microsoft.AspNetCore.Server.IIS.FunctionalTests.Utilities;
|
||||||
using Microsoft.AspNetCore.Server.IntegrationTesting;
|
using Microsoft.AspNetCore.Server.IntegrationTesting;
|
||||||
|
using Microsoft.AspNetCore.Server.IntegrationTesting.IIS;
|
||||||
using Microsoft.AspNetCore.Testing.xunit;
|
using Microsoft.AspNetCore.Testing.xunit;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
@ -91,5 +92,36 @@ namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[ConditionalFact]
|
||||||
|
[SkipIIS]
|
||||||
|
public async Task StartupMessagesLogFileSwitchedWhenLogFilePresentInWebConfig()
|
||||||
|
{
|
||||||
|
var firstTempFile = Path.GetTempFileName();
|
||||||
|
var secondTempFile = Path.GetTempFileName();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var deploymentParameters = Helpers.GetBaseDeploymentParameters(publish: true);
|
||||||
|
deploymentParameters.EnvironmentVariables["ASPNETCORE_MODULE_DEBUG_FILE"] = firstTempFile;
|
||||||
|
|
||||||
|
var deploymentResult = await DeployAsync(deploymentParameters);
|
||||||
|
WebConfigHelpers.AddDebugLogToWebConfig(deploymentParameters.PublishedApplicationRootPath, secondTempFile);
|
||||||
|
|
||||||
|
var response = await deploymentResult.RetryingHttpClient.GetAsync("/");
|
||||||
|
|
||||||
|
StopServer();
|
||||||
|
var logContents = File.ReadAllText(firstTempFile);
|
||||||
|
Assert.Contains("Switching debug log files to", logContents);
|
||||||
|
|
||||||
|
var secondLogContents = File.ReadAllText(secondTempFile);
|
||||||
|
Assert.Contains("[aspnetcorev2.dll]", logContents);
|
||||||
|
Assert.Contains("[aspnetcorev2_inprocess.dll]", logContents);
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
File.Delete(firstTempFile);
|
||||||
|
File.Delete(secondTempFile);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -10,16 +10,18 @@ using Xunit;
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests
|
namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests
|
||||||
{
|
{
|
||||||
|
|
||||||
public class StartupExceptionTests : IISFunctionalTestBase
|
public class StartupExceptionTests : IISFunctionalTestBase
|
||||||
{
|
{
|
||||||
// TODO FileNotFound here.
|
|
||||||
[ConditionalTheory]
|
[ConditionalTheory]
|
||||||
[InlineData("CheckLogFile")]
|
[InlineData("CheckLogFile")]
|
||||||
[InlineData("CheckErrLogFile")]
|
[InlineData("CheckErrLogFile")]
|
||||||
public async Task CheckStdoutWithRandomNumber(string path)
|
public async Task CheckStdoutWithRandomNumber(string path)
|
||||||
{
|
{
|
||||||
var deploymentParameters = Helpers.GetBaseDeploymentParameters("StartupExceptionWebsite");
|
// Forcing publish for now to have parity between IIS and IISExpress
|
||||||
|
// Reason is because by default for IISExpress, we expect there to not be a web.config file.
|
||||||
|
// However, for IIS, we need a web.config file because the default on generated on publish
|
||||||
|
// doesn't include V2. We can remove the publish flag once IIS supports non-publish running
|
||||||
|
var deploymentParameters = Helpers.GetBaseDeploymentParameters("StartupExceptionWebsite", publish: true);
|
||||||
deploymentParameters.EnvironmentVariables["ASPNETCORE_INPROCESS_STARTUP_VALUE"] = path;
|
deploymentParameters.EnvironmentVariables["ASPNETCORE_INPROCESS_STARTUP_VALUE"] = path;
|
||||||
var randomNumberString = new Random(Guid.NewGuid().GetHashCode()).Next(10000000).ToString();
|
var randomNumberString = new Random(Guid.NewGuid().GetHashCode()).Next(10000000).ToString();
|
||||||
deploymentParameters.EnvironmentVariables["ASPNETCORE_INPROCESS_RANDOM_VALUE"] = randomNumberString;
|
deploymentParameters.EnvironmentVariables["ASPNETCORE_INPROCESS_RANDOM_VALUE"] = randomNumberString;
|
||||||
|
|
@ -42,9 +44,7 @@ namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests
|
||||||
[InlineData("CheckOversizedStdOutWrites")]
|
[InlineData("CheckOversizedStdOutWrites")]
|
||||||
public async Task CheckStdoutWithLargeWrites(string path)
|
public async Task CheckStdoutWithLargeWrites(string path)
|
||||||
{
|
{
|
||||||
// Need a web.config
|
var deploymentParameters = Helpers.GetBaseDeploymentParameters("StartupExceptionWebsite", publish: true);
|
||||||
// Also publish issues.
|
|
||||||
var deploymentParameters = Helpers.GetBaseDeploymentParameters("StartupExceptionWebsite");
|
|
||||||
deploymentParameters.EnvironmentVariables["ASPNETCORE_INPROCESS_STARTUP_VALUE"] = path;
|
deploymentParameters.EnvironmentVariables["ASPNETCORE_INPROCESS_STARTUP_VALUE"] = path;
|
||||||
|
|
||||||
var deploymentResult = await DeployAsync(deploymentParameters);
|
var deploymentResult = await DeployAsync(deploymentParameters);
|
||||||
|
|
@ -61,7 +61,7 @@ namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests
|
||||||
[ConditionalFact]
|
[ConditionalFact]
|
||||||
public async Task Gets500_30_ErrorPage()
|
public async Task Gets500_30_ErrorPage()
|
||||||
{
|
{
|
||||||
var deploymentParameters = Helpers.GetBaseDeploymentParameters("StartupExceptionWebsite");
|
var deploymentParameters = Helpers.GetBaseDeploymentParameters("StartupExceptionWebsite", publish: true);
|
||||||
|
|
||||||
var deploymentResult = await DeployAsync(deploymentParameters);
|
var deploymentResult = await DeployAsync(deploymentParameters);
|
||||||
|
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
// Copyright (c) .NET Foundation. All rights reserved.
|
||||||
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
using Microsoft.Extensions.Logging.Testing;
|
||||||
|
using Xunit;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests
|
||||||
|
{
|
||||||
|
public class EventLogHelpers
|
||||||
|
{
|
||||||
|
public static void VerifyEventLogEvent(ITestSink testSink, string expectedRegexMatchString)
|
||||||
|
{
|
||||||
|
var eventLogRegex = new Regex($"Event Log: {expectedRegexMatchString}");
|
||||||
|
Assert.Contains(testSink.Writes, context => eventLogRegex.IsMatch(context.Message));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -25,17 +25,13 @@ namespace Microsoft.AspNetCore.Server.IntegrationTesting
|
||||||
parameters.EnvironmentVariables[DebugEnvironmentVariable] = "4";
|
parameters.EnvironmentVariables[DebugEnvironmentVariable] = "4";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (parameters.ServerType == ServerType.IIS)
|
if (parameters.ServerType == ServerType.IISExpress)
|
||||||
{
|
|
||||||
// Currently hosting throws if the Servertype = IIS.
|
|
||||||
_deployer = new IISDeployer(parameters, LoggerFactory);
|
|
||||||
}
|
|
||||||
else if (parameters.ServerType == ServerType.IISExpress)
|
|
||||||
{
|
{
|
||||||
parameters.ServerConfigTemplateContent = parameters.ServerConfigTemplateContent ?? File.ReadAllText("IISExpress.config");
|
parameters.ServerConfigTemplateContent = parameters.ServerConfigTemplateContent ?? File.ReadAllText("IISExpress.config");
|
||||||
_deployer = new IISExpressDeployer(parameters, LoggerFactory);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_deployer = IISApplicationDeployerFactory.Create(parameters, LoggerFactory);
|
||||||
|
|
||||||
var result = await _deployer.DeployAsync();
|
var result = await _deployer.DeployAsync();
|
||||||
|
|
||||||
return new IISDeploymentResult(result, Logger);
|
return new IISDeploymentResult(result, Logger);
|
||||||
|
|
|
||||||
|
|
@ -4,9 +4,11 @@
|
||||||
using System;
|
using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
using System.Xml.Linq;
|
using System.Xml.Linq;
|
||||||
using Microsoft.AspNetCore.Server.IntegrationTesting;
|
using Microsoft.AspNetCore.Server.IntegrationTesting;
|
||||||
using Microsoft.AspNetCore.Testing;
|
using Microsoft.AspNetCore.Testing;
|
||||||
|
using Xunit;
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests
|
namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests
|
||||||
{
|
{
|
||||||
|
|
@ -60,7 +62,7 @@ namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests
|
||||||
site = hostingModel == HostingModel.InProcess ? "InProcessWebSite" : "OutOfProcessWebSite";
|
site = hostingModel == HostingModel.InProcess ? "InProcessWebSite" : "OutOfProcessWebSite";
|
||||||
}
|
}
|
||||||
|
|
||||||
return new DeploymentParameters(Helpers.GetTestWebSitePath(site), DeployerSelector.ServerType, RuntimeFlavor.CoreClr, RuntimeArchitecture.x64)
|
return new DeploymentParameters(GetTestWebSitePath(site), DeployerSelector.ServerType, RuntimeFlavor.CoreClr, RuntimeArchitecture.x64)
|
||||||
{
|
{
|
||||||
TargetFramework = Tfm.NetCoreApp22,
|
TargetFramework = Tfm.NetCoreApp22,
|
||||||
ApplicationType = ApplicationType.Portable,
|
ApplicationType = ApplicationType.Portable,
|
||||||
|
|
@ -72,5 +74,14 @@ namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests
|
||||||
|
|
||||||
private static string GetWebConfigFile(IISDeploymentResult deploymentResult)
|
private static string GetWebConfigFile(IISDeploymentResult deploymentResult)
|
||||||
=> Path.Combine(deploymentResult.DeploymentResult.ContentRoot, "web.config");
|
=> Path.Combine(deploymentResult.DeploymentResult.ContentRoot, "web.config");
|
||||||
|
|
||||||
|
public static async Task AssertStarts(IISDeploymentResult deploymentResult, string path = "/HelloWorld")
|
||||||
|
{
|
||||||
|
var response = await deploymentResult.RetryingHttpClient.GetAsync(path);
|
||||||
|
|
||||||
|
var responseText = await response.Content.ReadAsStringAsync();
|
||||||
|
|
||||||
|
Assert.Equal("Hello World", responseText);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,12 +3,10 @@
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
|
||||||
using System.Net.Http;
|
using System.Net.Http;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using Microsoft.AspNetCore.Server.IntegrationTesting;
|
using Microsoft.AspNetCore.Server.IntegrationTesting;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Microsoft.Extensions.Logging.Abstractions;
|
|
||||||
using Microsoft.Extensions.Logging.Testing;
|
using Microsoft.Extensions.Logging.Testing;
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests
|
namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests
|
||||||
|
|
@ -36,15 +34,8 @@ namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests
|
||||||
_forwardingProvider = new ForwardingProvider();
|
_forwardingProvider = new ForwardingProvider();
|
||||||
var loggerFactory = logging.CreateLoggerFactory(null, nameof(IISTestSiteFixture));
|
var loggerFactory = logging.CreateLoggerFactory(null, nameof(IISTestSiteFixture));
|
||||||
loggerFactory.AddProvider(_forwardingProvider);
|
loggerFactory.AddProvider(_forwardingProvider);
|
||||||
if (deploymentParameters.ServerType == ServerType.IIS)
|
|
||||||
{
|
_deployer = IISApplicationDeployerFactory.Create(deploymentParameters, loggerFactory);
|
||||||
// Currently hosting throws if the Servertype = IIS.
|
|
||||||
_deployer = new IISDeployer(deploymentParameters, loggerFactory);
|
|
||||||
}
|
|
||||||
else if (deploymentParameters.ServerType == ServerType.IISExpress)
|
|
||||||
{
|
|
||||||
_deployer = new IISExpressDeployer(deploymentParameters, loggerFactory);
|
|
||||||
}
|
|
||||||
|
|
||||||
DeploymentResult = _deployer.DeployAsync().Result;
|
DeploymentResult = _deployer.DeployAsync().Result;
|
||||||
Client = DeploymentResult.HttpClient;
|
Client = DeploymentResult.HttpClient;
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
// 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 Microsoft.AspNetCore.Server.IntegrationTesting;
|
||||||
|
using Microsoft.AspNetCore.Testing.xunit;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests
|
||||||
|
{
|
||||||
|
[AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Method)]
|
||||||
|
public sealed class SkipIISAttribute : Attribute, ITestCondition
|
||||||
|
{
|
||||||
|
public bool IsMet => DeployerSelector.ServerType == ServerType.IIS;
|
||||||
|
|
||||||
|
public string SkipReason => "Cannot run test on full IIS.";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -101,7 +101,8 @@
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
<AdditionalLibraryDirectories>..\..\src\AspNetCoreModuleV2\InProcessRequestHandler\$(Configuration)\;</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>..\..\src\AspNetCoreModuleV2\InProcessRequestHandler\$(Configuration)\;</AdditionalLibraryDirectories>
|
||||||
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;inprocessapplication.obj;inprocesshandler.obj;ahadmin.lib;Rpcrt4.lib;inprocessapplicationbase.obj;precomp.obj;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;inprocessapplication.obj;inprocesshandler.obj;ahadmin.lib;Rpcrt4.lib;inprocessapplicationbase.obj;stdafx.obj;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
<LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
|
||||||
</Link>
|
</Link>
|
||||||
<Lib>
|
<Lib>
|
||||||
<AdditionalDependencies>
|
<AdditionalDependencies>
|
||||||
|
|
@ -127,7 +128,8 @@
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
<AdditionalLibraryDirectories>..\..\src\AspNetCoreModuleV2\InProcessRequestHandler\x64\$(Configuration)\;</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>..\..\src\AspNetCoreModuleV2\InProcessRequestHandler\x64\$(Configuration)\;</AdditionalLibraryDirectories>
|
||||||
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;inprocessapplication.obj;inprocesshandler.obj;ahadmin.lib;Rpcrt4.lib;inprocessapplicationbase.obj;precomp.obj;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;inprocessapplication.obj;inprocesshandler.obj;ahadmin.lib;Rpcrt4.lib;inprocessapplicationbase.obj;stdafx.obj;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
<LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
|
||||||
</Link>
|
</Link>
|
||||||
<Lib>
|
<Lib>
|
||||||
<AdditionalDependencies>
|
<AdditionalDependencies>
|
||||||
|
|
@ -153,7 +155,8 @@
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
<AdditionalLibraryDirectories>..\..\src\AspNetCoreModuleV2\InProcessRequestHandler\$(Configuration)\;</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>..\..\src\AspNetCoreModuleV2\InProcessRequestHandler\$(Configuration)\;</AdditionalLibraryDirectories>
|
||||||
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;inprocessapplication.obj;inprocesshandler.obj;ahadmin.lib;Rpcrt4.lib;inprocessapplicationbase.obj;precomp.obj;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;inprocessapplication.obj;inprocesshandler.obj;ahadmin.lib;Rpcrt4.lib;inprocessapplicationbase.obj;stdafx.obj;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
<LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
|
||||||
</Link>
|
</Link>
|
||||||
<Lib>
|
<Lib>
|
||||||
<AdditionalDependencies>
|
<AdditionalDependencies>
|
||||||
|
|
@ -179,7 +182,8 @@
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
<AdditionalLibraryDirectories>..\..\src\AspNetCoreModuleV2\InProcessRequestHandler\x64\$(Configuration)\;</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>..\..\src\AspNetCoreModuleV2\InProcessRequestHandler\x64\$(Configuration)\;</AdditionalLibraryDirectories>
|
||||||
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;inprocessapplication.obj;inprocesshandler.obj;ahadmin.lib;Rpcrt4.lib;inprocessapplicationbase.obj;precomp.obj;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;inprocessapplication.obj;inprocesshandler.obj;ahadmin.lib;Rpcrt4.lib;inprocessapplicationbase.obj;stdafx.obj;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
<LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
|
||||||
</Link>
|
</Link>
|
||||||
<Lib>
|
<Lib>
|
||||||
<AdditionalDependencies>
|
<AdditionalDependencies>
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ namespace ConfigUtilityTests
|
||||||
class ConfigUtilityTest : public Test
|
class ConfigUtilityTest : public Test
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
void Test(std::wstring key, std::wstring value, std::wstring expected)
|
void TestHandlerVersion(std::wstring key, std::wstring value, std::wstring expected, HRESULT(*func)(IAppHostElement*, STRU&))
|
||||||
{
|
{
|
||||||
IAppHostElement* retElement = NULL;
|
IAppHostElement* retElement = NULL;
|
||||||
|
|
||||||
|
|
@ -40,7 +40,7 @@ namespace ConfigUtilityTests
|
||||||
.WillOnce(DoAll(testing::SetArgPointee<0>(SysAllocString(key.c_str())), testing::Return(S_OK)))
|
.WillOnce(DoAll(testing::SetArgPointee<0>(SysAllocString(key.c_str())), testing::Return(S_OK)))
|
||||||
.WillOnce(DoAll(testing::SetArgPointee<0>(SysAllocString(value.c_str())), testing::Return(S_OK)));
|
.WillOnce(DoAll(testing::SetArgPointee<0>(SysAllocString(value.c_str())), testing::Return(S_OK)));
|
||||||
|
|
||||||
HRESULT hr = ConfigUtility::FindHandlerVersion(element.get(), &handlerVersion);
|
HRESULT hr = func(element.get(), handlerVersion);
|
||||||
|
|
||||||
EXPECT_EQ(hr, S_OK);
|
EXPECT_EQ(hr, S_OK);
|
||||||
EXPECT_STREQ(handlerVersion.QueryStr(), expected.c_str());
|
EXPECT_STREQ(handlerVersion.QueryStr(), expected.c_str());
|
||||||
|
|
@ -49,12 +49,29 @@ namespace ConfigUtilityTests
|
||||||
|
|
||||||
TEST_F(ConfigUtilityTest, CheckHandlerVersionKeysAndValues)
|
TEST_F(ConfigUtilityTest, CheckHandlerVersionKeysAndValues)
|
||||||
{
|
{
|
||||||
Test(L"handlerVersion", L"value", L"value");
|
auto func = ConfigUtility::FindHandlerVersion;
|
||||||
Test(L"handlerversion", L"value", L"value");
|
TestHandlerVersion(L"handlerVersion", L"value", L"value", func);
|
||||||
Test(L"HandlerversioN", L"value", L"value");
|
TestHandlerVersion(L"handlerversion", L"value", L"value", func);
|
||||||
Test(L"randomvalue", L"value", L"");
|
TestHandlerVersion(L"HandlerversioN", L"value", L"value", func);
|
||||||
Test(L"", L"value", L"");
|
TestHandlerVersion(L"randomvalue", L"value", L"", func);
|
||||||
Test(L"", L"", L"");
|
TestHandlerVersion(L"", L"value", L"", func);
|
||||||
|
TestHandlerVersion(L"", L"", L"", func);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(ConfigUtilityTest, CheckDebugLogFile)
|
||||||
|
{
|
||||||
|
auto func = ConfigUtility::FindDebugFile;
|
||||||
|
|
||||||
|
TestHandlerVersion(L"debugFile", L"value", L"value", func);
|
||||||
|
TestHandlerVersion(L"debugFILE", L"value", L"value", func);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(ConfigUtilityTest, CheckDebugLevel)
|
||||||
|
{
|
||||||
|
auto func = ConfigUtility::FindDebugLevel;
|
||||||
|
|
||||||
|
TestHandlerVersion(L"debugLevel", L"value", L"value", func);
|
||||||
|
TestHandlerVersion(L"debugLEVEL", L"value", L"value", func);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(ConfigUtilityTestSingle, MultipleElements)
|
TEST(ConfigUtilityTestSingle, MultipleElements)
|
||||||
|
|
@ -84,7 +101,7 @@ namespace ConfigUtilityTests
|
||||||
.WillOnce(DoAll(testing::SetArgPointee<0>(SysAllocString(L"handlerVersion")), testing::Return(S_OK)))
|
.WillOnce(DoAll(testing::SetArgPointee<0>(SysAllocString(L"handlerVersion")), testing::Return(S_OK)))
|
||||||
.WillOnce(DoAll(testing::SetArgPointee<0>(SysAllocString(L"value2")), testing::Return(S_OK)));
|
.WillOnce(DoAll(testing::SetArgPointee<0>(SysAllocString(L"value2")), testing::Return(S_OK)));
|
||||||
|
|
||||||
HRESULT hr = ConfigUtility::FindHandlerVersion(element.get(), &handlerVersion);
|
HRESULT hr = ConfigUtility::FindHandlerVersion(element.get(), handlerVersion);
|
||||||
|
|
||||||
EXPECT_EQ(hr, S_OK);
|
EXPECT_EQ(hr, S_OK);
|
||||||
EXPECT_STREQ(handlerVersion.QueryStr(), L"value2");
|
EXPECT_STREQ(handlerVersion.QueryStr(), L"value2");
|
||||||
|
|
@ -98,7 +115,7 @@ namespace ConfigUtilityTests
|
||||||
ON_CALL(*element, GetElementByName(_, _))
|
ON_CALL(*element, GetElementByName(_, _))
|
||||||
.WillByDefault(DoAll(testing::SetArgPointee<1>(nullptr), testing::Return(HRESULT_FROM_WIN32( ERROR_INVALID_INDEX ))));
|
.WillByDefault(DoAll(testing::SetArgPointee<1>(nullptr), testing::Return(HRESULT_FROM_WIN32( ERROR_INVALID_INDEX ))));
|
||||||
|
|
||||||
HRESULT hr = ConfigUtility::FindHandlerVersion(element.get(), &handlerVersion);
|
HRESULT hr = ConfigUtility::FindHandlerVersion(element.get(), handlerVersion);
|
||||||
|
|
||||||
EXPECT_EQ(hr, S_OK);
|
EXPECT_EQ(hr, S_OK);
|
||||||
EXPECT_STREQ(handlerVersion.QueryStr(), L"");
|
EXPECT_STREQ(handlerVersion.QueryStr(), L"");
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\..\src\Microsoft.AspNetCore.Server.IIS\Microsoft.AspNetCore.Server.IIS.csproj" />
|
<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.IISIntegration\Microsoft.AspNetCore.Server.IISIntegration.csproj" />
|
||||||
|
<ProjectReference Include="..\..\src\Microsoft.AspNetCore.Server.IntegrationTesting.IIS\Microsoft.AspNetCore.Server.IntegrationTesting.IIS.csproj" />
|
||||||
<ProjectReference Include="..\WebSites\**\*.csproj">
|
<ProjectReference Include="..\WebSites\**\*.csproj">
|
||||||
<ReferenceOutputAssembly>False</ReferenceOutputAssembly>
|
<ReferenceOutputAssembly>False</ReferenceOutputAssembly>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
|
|
@ -32,10 +33,8 @@
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Server.IntegrationTesting" Version="$(MicrosoftAspNetCoreServerIntegrationTestingPackageVersion)" />
|
<PackageReference Include="Microsoft.AspNetCore.Server.IntegrationTesting" Version="$(MicrosoftAspNetCoreServerIntegrationTestingPackageVersion)" />
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Hosting" Version="$(MicrosoftAspNetCoreHostingPackageVersion)" />
|
<PackageReference Include="Microsoft.AspNetCore.Hosting" Version="$(MicrosoftAspNetCoreHostingPackageVersion)" />
|
||||||
<PackageReference Include="Microsoft.Extensions.CommandLineUtils.Sources" Version="$(MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion)" />
|
|
||||||
<PackageReference Include="Microsoft.Extensions.Logging" Version="$(MicrosoftExtensionsLoggingPackageVersion)" />
|
<PackageReference Include="Microsoft.Extensions.Logging" Version="$(MicrosoftExtensionsLoggingPackageVersion)" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Logging.Testing" Version="$(MicrosoftExtensionsLoggingTestingPackageVersion)" />
|
<PackageReference Include="Microsoft.Extensions.Logging.Testing" Version="$(MicrosoftExtensionsLoggingTestingPackageVersion)" />
|
||||||
<PackageReference Include="Microsoft.Web.Administration" Version="$(MicrosoftWebAdministrationPackageVersion)" />
|
|
||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="$(MicrosoftNETTestSdkPackageVersion)" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="$(MicrosoftNETTestSdkPackageVersion)" />
|
||||||
<PackageReference Include="System.Diagnostics.EventLog" Version="$(SystemDiagnosticsEventLogPackageVersion)" />
|
<PackageReference Include="System.Diagnostics.EventLog" Version="$(SystemDiagnosticsEventLogPackageVersion)" />
|
||||||
<PackageReference Include="System.Net.WebSockets.WebSocketProtocol" Version="$(SystemNetWebSocketsWebSocketProtocolPackageVersion)" />
|
<PackageReference Include="System.Net.WebSockets.WebSocketProtocol" Version="$(SystemNetWebSocketsWebSocketProtocolPackageVersion)" />
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\..\src\Microsoft.AspNetCore.Server.IIS\Microsoft.AspNetCore.Server.IIS.csproj" />
|
<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.IISIntegration\Microsoft.AspNetCore.Server.IISIntegration.csproj" />
|
||||||
|
<ProjectReference Include="..\..\src\Microsoft.AspNetCore.Server.IntegrationTesting.IIS\Microsoft.AspNetCore.Server.IntegrationTesting.IIS.csproj" />
|
||||||
<ProjectReference Include="..\WebSites\**\*.csproj">
|
<ProjectReference Include="..\WebSites\**\*.csproj">
|
||||||
<ReferenceOutputAssembly>False</ReferenceOutputAssembly>
|
<ReferenceOutputAssembly>False</ReferenceOutputAssembly>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
|
|
@ -31,10 +32,8 @@
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Server.IntegrationTesting" Version="$(MicrosoftAspNetCoreServerIntegrationTestingPackageVersion)" />
|
<PackageReference Include="Microsoft.AspNetCore.Server.IntegrationTesting" Version="$(MicrosoftAspNetCoreServerIntegrationTestingPackageVersion)" />
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Hosting" Version="$(MicrosoftAspNetCoreHostingPackageVersion)" />
|
<PackageReference Include="Microsoft.AspNetCore.Hosting" Version="$(MicrosoftAspNetCoreHostingPackageVersion)" />
|
||||||
<PackageReference Include="Microsoft.Extensions.CommandLineUtils.Sources" Version="$(MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion)" />
|
|
||||||
<PackageReference Include="Microsoft.Extensions.Logging" Version="$(MicrosoftExtensionsLoggingPackageVersion)" />
|
<PackageReference Include="Microsoft.Extensions.Logging" Version="$(MicrosoftExtensionsLoggingPackageVersion)" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Logging.Testing" Version="$(MicrosoftExtensionsLoggingTestingPackageVersion)" />
|
<PackageReference Include="Microsoft.Extensions.Logging.Testing" Version="$(MicrosoftExtensionsLoggingTestingPackageVersion)" />
|
||||||
<PackageReference Include="Microsoft.Web.Administration" Version="$(MicrosoftWebAdministrationPackageVersion)" />
|
|
||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="$(MicrosoftNETTestSdkPackageVersion)" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="$(MicrosoftNETTestSdkPackageVersion)" />
|
||||||
<PackageReference Include="System.Diagnostics.EventLog" Version="$(SystemDiagnosticsEventLogPackageVersion)" />
|
<PackageReference Include="System.Diagnostics.EventLog" Version="$(SystemDiagnosticsEventLogPackageVersion)" />
|
||||||
<PackageReference Include="System.Net.WebSockets.WebSocketProtocol" Version="$(SystemNetWebSocketsWebSocketProtocolPackageVersion)" />
|
<PackageReference Include="System.Net.WebSockets.WebSocketProtocol" Version="$(SystemNetWebSocketsWebSocketProtocolPackageVersion)" />
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,6 @@ using System.Threading.Tasks;
|
||||||
using Microsoft.AspNetCore.Server.IIS.FunctionalTests.Utilities;
|
using Microsoft.AspNetCore.Server.IIS.FunctionalTests.Utilities;
|
||||||
using Microsoft.AspNetCore.Server.IntegrationTesting;
|
using Microsoft.AspNetCore.Server.IntegrationTesting;
|
||||||
using Microsoft.AspNetCore.Testing.xunit;
|
using Microsoft.AspNetCore.Testing.xunit;
|
||||||
using Microsoft.Extensions.CommandLineUtils;
|
|
||||||
using Xunit;
|
using Xunit;
|
||||||
using Xunit.Abstractions;
|
using Xunit.Abstractions;
|
||||||
|
|
||||||
|
|
@ -17,7 +16,7 @@ namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests
|
||||||
{
|
{
|
||||||
public class StartupTests : IISFunctionalTestBase
|
public class StartupTests : IISFunctionalTestBase
|
||||||
{
|
{
|
||||||
private readonly string _dotnetLocation = DotNetMuxer.MuxerPathOrDefault();
|
private readonly string _dotnetLocation = DotNetCommands.GetDotNetExecutable(RuntimeArchitecture.x64);
|
||||||
|
|
||||||
public StartupTests(ITestOutputHelper output) : base(output)
|
public StartupTests(ITestOutputHelper output) : base(output)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<configuration>
|
||||||
|
<system.webServer>
|
||||||
|
<handlers>
|
||||||
|
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
|
||||||
|
</handlers>
|
||||||
|
<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false" hostingModel="inprocess">
|
||||||
|
</aspNetCore>
|
||||||
|
</system.webServer>
|
||||||
|
</configuration>
|
||||||
Loading…
Reference in New Issue