Merge branch 'master' into merge/release/3.0-preview4-to-master
This commit is contained in:
commit
4977a4d196
|
|
@ -303,15 +303,10 @@ jobs:
|
||||||
displayName: Install SQL Server 2016 Express LocalDB
|
displayName: Install SQL Server 2016 Express LocalDB
|
||||||
- powershell: "& ./src/Servers/IIS/tools/UpdateIISExpressCertificate.ps1; & ./src/Servers/IIS/tools/update_schema.ps1"
|
- powershell: "& ./src/Servers/IIS/tools/UpdateIISExpressCertificate.ps1; & ./src/Servers/IIS/tools/update_schema.ps1"
|
||||||
displayName: Setup IISExpress test certificates and schema
|
displayName: Setup IISExpress test certificates and schema
|
||||||
- powershell: "& ./.azure/pipelines/tools/SetupTestEnvironment.ps1 Setup signalrclienttests.exe"
|
|
||||||
displayName: Start AppVerifier
|
|
||||||
afterBuild:
|
afterBuild:
|
||||||
- powershell: "& ./build.ps1 -CI -NoBuild -Test /p:RunFlakyTests=true"
|
- powershell: "& ./build.ps1 -CI -NoBuild -Test /p:RunFlakyTests=true"
|
||||||
displayName: Run Flaky Tests
|
displayName: Run Flaky Tests
|
||||||
continueOnError: true
|
continueOnError: true
|
||||||
- powershell: "& ./.azure/pipelines/tools/SetupTestEnvironment.ps1 Shutdown signalrclienttests.exe"
|
|
||||||
displayName: Stop AppVerifier
|
|
||||||
condition: always()
|
|
||||||
artifacts:
|
artifacts:
|
||||||
- name: Windows_Test_Logs
|
- name: Windows_Test_Logs
|
||||||
path: artifacts/logs/
|
path: artifacts/logs/
|
||||||
|
|
|
||||||
|
|
@ -189,13 +189,21 @@ jobs:
|
||||||
buildConfiguration: $(BuildConfiguration)
|
buildConfiguration: $(BuildConfiguration)
|
||||||
buildPlatform: $(AgentOsName)
|
buildPlatform: $(AgentOsName)
|
||||||
- task: PublishTestResults@2
|
- task: PublishTestResults@2
|
||||||
displayName: Publish junit test results
|
displayName: Publish js test results
|
||||||
condition: always()
|
condition: always()
|
||||||
inputs:
|
inputs:
|
||||||
testRunner: junit
|
testRunner: junit
|
||||||
testResultsFiles: '**/artifacts/logs/**/*.junit.xml'
|
testResultsFiles: '**/artifacts/logs/**/*.junit.xml'
|
||||||
buildConfiguration: $(BuildConfiguration)
|
buildConfiguration: $(BuildConfiguration)
|
||||||
buildPlatform: $(AgentOsName)
|
buildPlatform: $(AgentOsName)
|
||||||
|
- task: PublishTestResults@2
|
||||||
|
displayName: Publish Java test results
|
||||||
|
condition: always()
|
||||||
|
inputs:
|
||||||
|
testRunner: junit
|
||||||
|
testResultsFiles: '**/TEST-com.microsoft.signalr*.xml'
|
||||||
|
buildConfiguration: $(BuildConfiguration)
|
||||||
|
buildPlatform: $(AgentOsName)
|
||||||
- ${{ each artifact in parameters.artifacts }}:
|
- ${{ each artifact in parameters.artifacts }}:
|
||||||
- task: PublishBuildArtifacts@1
|
- task: PublishBuildArtifacts@1
|
||||||
displayName: Upload artifacts from ${{ artifact.path }}
|
displayName: Upload artifacts from ${{ artifact.path }}
|
||||||
|
|
|
||||||
|
|
@ -14,11 +14,4 @@ jobs:
|
||||||
agentOs: Windows
|
agentOs: Windows
|
||||||
jobName: SignalRDailyTests
|
jobName: SignalRDailyTests
|
||||||
jobDisplayName: "SignalR Daily Tests"
|
jobDisplayName: "SignalR Daily Tests"
|
||||||
beforeBuild:
|
|
||||||
- powershell: "& ./.azure/pipelines/tools/SetupTestEnvironment.ps1 Setup signalrclienttests.exe"
|
|
||||||
displayName: Start AppVerifier
|
|
||||||
afterBuild:
|
|
||||||
- powershell: "& ./.azure/pipelines/tools/SetupTestEnvironment.ps1 Shutdown signalrclienttests.exe"
|
|
||||||
displayName: Stop AppVerifier
|
|
||||||
condition: always()
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,18 @@
|
||||||
# Users referenced in this file will automatically be requested as reviewers for PRs that modify the given paths.
|
# Users referenced in this file will automatically be requested as reviewers for PRs that modify the given paths.
|
||||||
# See https://help.github.com/articles/about-code-owners/
|
# See https://help.github.com/articles/about-code-owners/
|
||||||
|
|
||||||
/.azure/ @dougbu
|
/.azure/ @aspnet/build
|
||||||
/.config/ @dougbu
|
/.config/ @aspnet/build
|
||||||
/build/ @dougbu
|
/build/ @aspnet/build
|
||||||
/eng/ @dougbu
|
/eng/ @aspnet/build
|
||||||
/src/Components/ @SteveSandersonMS
|
/src/Components/ @SteveSandersonMS
|
||||||
/src/DefaultBuilder/ @tratcher @anurse
|
/src/DefaultBuilder/ @tratcher @anurse
|
||||||
/src/Hosting/ @tratcher @anurse
|
/src/Hosting/ @tratcher @anurse
|
||||||
/src/Http/ @tratcher @jkotalik @anurse
|
/src/Http/ @tratcher @jkotalik @anurse
|
||||||
/src/Middleware/ @tratcher @anurse
|
/src/Middleware/ @tratcher @anurse
|
||||||
/src/ProjectTemplates/ @ryanbrandenburg
|
/src/ProjectTemplates/ @ryanbrandenburg
|
||||||
/src/Security/ @tratcher @anurse
|
/src/Security/ @tratcher @anurse
|
||||||
/src/Servers/ @tratcher @jkotalik @anurse
|
/src/Servers/ @tratcher @jkotalik @anurse
|
||||||
/src/Middleware/Rewrite @jkotalik @anurse
|
/src/Middleware/Rewrite @jkotalik @anurse
|
||||||
/src/Middleware/HttpsPolicy @jkotalik @anurse
|
/src/Middleware/HttpsPolicy @jkotalik @anurse
|
||||||
/src/SignalR/ @mikaelm12 @BrennanConroy @halter73 @anurse
|
/src/SignalR/ @mikaelm12 @BrennanConroy @halter73 @anurse
|
||||||
|
|
|
||||||
|
|
@ -98,6 +98,35 @@
|
||||||
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
<!-- Copied from https://github.com/dotnet/arcade/blob/9d0fd805448082c8d55e2434607b481bca70a146/src/Microsoft.DotNet.Arcade.Sdk/tools/RepositoryInfo.targets#L12-L38 -->
|
||||||
|
<Target Name="_TranslateAzureDevOpsUrlToGitHubUrl"
|
||||||
|
DependsOnTargets="$(SourceControlManagerUrlTranslationTargets)"
|
||||||
|
BeforeTargets="SourceControlManagerPublishTranslatedUrls">
|
||||||
|
|
||||||
|
<!-- The convention for names of Azure DevOps repositories mirrored from GitHub is "{GitHub org name}-{GitHub repository name}" -->
|
||||||
|
<PropertyGroup>
|
||||||
|
<!-- There are quite a few git repo forms:
|
||||||
|
https://dnceng@dev.azure.com/dnceng/internal/_git/dotnet-arcade-services
|
||||||
|
https://dev.azure.com/dnceng/internal/_git/dotnet-arcade-services
|
||||||
|
https://dnceng.visualstudio.com/internal/_git/dotnet-arcade-services
|
||||||
|
dnceng@vs-ssh.visualstudio.com:v3/dnceng/internal/dotnet-arcade-services
|
||||||
|
git@ssh.dev.azure.com:v3/dnceng/internal/dotnet-arcade-services
|
||||||
|
-->
|
||||||
|
<_Pattern>(https://dnceng%40dev\.azure\.com/dnceng/internal/_git|https://dev\.azure\.com/dnceng/internal/_git|https://dnceng\.visualstudio\.com/internal/_git|dnceng%40vs-ssh\.visualstudio\.com:v3/dnceng/internal|git%40ssh\.dev\.azure\.com:v3/dnceng/internal)/([^/-]+)-(.+)</_Pattern>
|
||||||
|
<_Replacement>https://github.com/$2/$3</_Replacement>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<ScmRepositoryUrl>$([System.Text.RegularExpressions.Regex]::Replace($(ScmRepositoryUrl), $(_Pattern), $(_Replacement)))</ScmRepositoryUrl>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<SourceRoot Update="@(SourceRoot)">
|
||||||
|
<ScmRepositoryUrl>$([System.Text.RegularExpressions.Regex]::Replace(%(SourceRoot.ScmRepositoryUrl), $(_Pattern), $(_Replacement)))</ScmRepositoryUrl>
|
||||||
|
</SourceRoot>
|
||||||
|
</ItemGroup>
|
||||||
|
</Target>
|
||||||
|
|
||||||
<Import Project="eng\Workarounds.targets" />
|
<Import Project="eng\Workarounds.targets" />
|
||||||
<Import Project="eng\targets\ResolveIisReferences.targets" Condition=" '$(MSBuildProjectExtension)' != '.vcxproj' " />
|
<Import Project="eng\targets\ResolveIisReferences.targets" Condition=" '$(MSBuildProjectExtension)' != '.vcxproj' " />
|
||||||
<Import Project="eng\targets\Cpp.Common.targets" Condition="'$(MSBuildProjectExtension)' == '.vcxproj'" />
|
<Import Project="eng\targets\Cpp.Common.targets" Condition="'$(MSBuildProjectExtension)' == '.vcxproj'" />
|
||||||
|
|
|
||||||
|
|
@ -54,8 +54,6 @@
|
||||||
$(RepositoryRoot)src\Tools\dotnet-watch\test\TestProjects\**\*.csproj;
|
$(RepositoryRoot)src\Tools\dotnet-watch\test\TestProjects\**\*.csproj;
|
||||||
$(RepositoryRoot)src\Razor\Razor.Design\test\testassets\**\*.*proj;
|
$(RepositoryRoot)src\Razor\Razor.Design\test\testassets\**\*.*proj;
|
||||||
$(RepositoryRoot)src\submodules\**\*.*proj;
|
$(RepositoryRoot)src\submodules\**\*.*proj;
|
||||||
$(RepositoryRoot)src\SignalR\clients\cpp\samples\**\*.*proj;
|
|
||||||
$(RepositoryRoot)src\SignalR\clients\cpp\test\signalrclient-testhost\**\*.*proj;
|
|
||||||
$(RepositoryRoot)src\Installers\**\*.*proj;
|
$(RepositoryRoot)src\Installers\**\*.*proj;
|
||||||
$(RepositoryRoot)src\SignalR\clients\ts\**\node_modules\**\*.*proj;
|
$(RepositoryRoot)src\SignalR\clients\ts\**\node_modules\**\*.*proj;
|
||||||
$(RepositoryRoot)src\Components\Blazor\Templates\src\content\**\*.*proj;
|
$(RepositoryRoot)src\Components\Blazor\Templates\src\content\**\*.*proj;
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@
|
||||||
https://dotnet.myget.org/F/aspnetcore-tools/api/v3/index.json;
|
https://dotnet.myget.org/F/aspnetcore-tools/api/v3/index.json;
|
||||||
https://dotnet.myget.org/F/blazor-dev/api/v3/index.json;
|
https://dotnet.myget.org/F/blazor-dev/api/v3/index.json;
|
||||||
https://dotnet.myget.org/F/dotnet-core/api/v3/index.json;
|
https://dotnet.myget.org/F/dotnet-core/api/v3/index.json;
|
||||||
|
https://dotnet.myget.org/F/nuget-build/api/v3/index.json;
|
||||||
https://dotnet.myget.org/F/roslyn-tools/api/v3/index.json;
|
https://dotnet.myget.org/F/roslyn-tools/api/v3/index.json;
|
||||||
https://dotnet.myget.org/F/roslyn/api/v3/index.json;
|
https://dotnet.myget.org/F/roslyn/api/v3/index.json;
|
||||||
https://vside.myget.org/F/devcore/api/v3/index.json;
|
https://vside.myget.org/F/devcore/api/v3/index.json;
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Remove="Internal.AspNetCore.Sdk" />
|
<PackageReference Remove="Internal.AspNetCore.Sdk" />
|
||||||
<PackageReference Include="NuGet.Build.Tasks" Version="4.9.3" />
|
<PackageReference Include="NuGet.Build.Tasks" Version="5.1.0-rtm.5921" />
|
||||||
<PackageReference Include="Microsoft.Extensions.DependencyModel" Version="2.1.0" />
|
<PackageReference Include="Microsoft.Extensions.DependencyModel" Version="2.1.0" />
|
||||||
<PackageReference Include="Yarn.MSBuild" Version="1.13.0" />
|
<PackageReference Include="Yarn.MSBuild" Version="1.13.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
Build Errors
|
||||||
|
------------
|
||||||
|
|
||||||
|
This document is for common build errors and how to resolve them.
|
||||||
|
|
||||||
|
### Warning BUILD001
|
||||||
|
|
||||||
|
> warning BUILD001: Package references changed since the last release...
|
||||||
|
|
||||||
|
This warning indicates a breaking change might have been made to a package or assembly due to the removal of a reference which was used
|
||||||
|
in a previous release of this assembly. See <./ReferenceResolution.md> for how to suppress.
|
||||||
|
|
||||||
|
### Error BUILD002
|
||||||
|
|
||||||
|
> error BUILD002: Package references changed since the last release...
|
||||||
|
|
||||||
|
Similar to BUILD001, but this error is not suppressable. This error only appears in servicing builds, which should not change references between assemblies or packages.
|
||||||
|
|
@ -19,9 +19,8 @@ Building ASP.NET Core on Windows requires:
|
||||||
PS> ./eng/scripts/InstallVisualStudio.ps1
|
PS> ./eng/scripts/InstallVisualStudio.ps1
|
||||||
```
|
```
|
||||||
* Git. <https://git-scm.org>
|
* Git. <https://git-scm.org>
|
||||||
* (Optional) some optional components, like the SignalR Java client, may require
|
* NodeJS. LTS version of 10.14.2 or newer <https://nodejs.org>
|
||||||
* NodeJS. LTS version of 10.14.2 or newer recommended <https://nodejs.org>
|
* Java Development Kit (JDK) v8 with Java Runtime Environment (JRE) v8. See https://www.oracle.com/technetwork/java/javase/downloads/index.html
|
||||||
* Java Development Kit (JDK) v8 with Java Runtime Environment (JRE) v8. See https://www.oracle.com/technetwork/java/javase/downloads/index.html
|
|
||||||
|
|
||||||
### macOS/Linux
|
### macOS/Linux
|
||||||
|
|
||||||
|
|
@ -31,11 +30,10 @@ Building ASP.NET Core on macOS or Linux requires:
|
||||||
* If using Linux, you need a machine with all .NET Core Linux prerequisites: <https://docs.microsoft.com/en-us/dotnet/core/linux-prerequisites>
|
* If using Linux, you need a machine with all .NET Core Linux prerequisites: <https://docs.microsoft.com/en-us/dotnet/core/linux-prerequisites>
|
||||||
* At least 10 GB of disk space and a good internet connection (our build scripts download a lot of tools and dependencies)
|
* At least 10 GB of disk space and a good internet connection (our build scripts download a lot of tools and dependencies)
|
||||||
* Git <https://git-scm.org>
|
* Git <https://git-scm.org>
|
||||||
* (Optional) some optional components, like the SignalR Java client, may require
|
* NodeJS. LTS version of 10.14.2 or newer <https://nodejs.org>
|
||||||
* NodeJS. LTS version of 10.14.2 or newer recommended <https://nodejs.org>
|
* Java Development Kit 10 or newer. Either:
|
||||||
* Java Development Kit 10 or newer. Either:
|
* OpenJDK <http://jdk.java.net/10/>
|
||||||
* OpenJDK <http://jdk.java.net/10/>
|
* Oracle's JDK <https://www.oracle.com/technetwork/java/javase/downloads/index.html>
|
||||||
* Oracle's JDK <https://www.oracle.com/technetwork/java/javase/downloads/index.html>
|
|
||||||
|
|
||||||
## Clone the source code
|
## Clone the source code
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,10 @@ If you want to download the latest daily build and use it in a project, then you
|
||||||
<packageSources>
|
<packageSources>
|
||||||
<clear />
|
<clear />
|
||||||
<add key="dotnet-core" value="https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json" />
|
<add key="dotnet-core" value="https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json" />
|
||||||
|
<add key="extensions" value="https://dotnetfeed.blob.core.windows.net/aspnet-extensions/index.json" />
|
||||||
|
<add key="entityframeworkcore" value="https://dotnetfeed.blob.core.windows.net/aspnet-entityframeworkcore/index.json" />
|
||||||
|
<add key="aspnetcore-tooling" value="https://dotnetfeed.blob.core.windows.net/aspnet-aspnetcore-tooling/index.json" />
|
||||||
|
<add key="aspnetcore" value="https://dotnetfeed.blob.core.windows.net/aspnet-aspnetcore/index.json" />
|
||||||
<add key="NuGet.org" value="https://api.nuget.org/v3/index.json" />
|
<add key="NuGet.org" value="https://api.nuget.org/v3/index.json" />
|
||||||
</packageSources>
|
</packageSources>
|
||||||
</configuration>
|
</configuration>
|
||||||
|
|
@ -23,3 +27,10 @@ If you want to download the latest daily build and use it in a project, then you
|
||||||
|
|
||||||
Some features, such as new target frameworks, may require prerelease tooling builds for Visual Studio.
|
Some features, such as new target frameworks, may require prerelease tooling builds for Visual Studio.
|
||||||
These are available in the [Visual Studio Preview](https://www.visualstudio.com/vs/preview/).
|
These are available in the [Visual Studio Preview](https://www.visualstudio.com/vs/preview/).
|
||||||
|
|
||||||
|
#### To debug daily builds using Visual Studio
|
||||||
|
|
||||||
|
* *Enable Source Link support* in Visual Studio should be enabled.
|
||||||
|
* *Enable source server support* in Visual should be enabled.
|
||||||
|
* *Enable Just My Code* should be disabled
|
||||||
|
* Add https://dotnet.myget.org/F/aspnetcore-dev/symbols to the list of symbol servers in the Visual Studio Debugging options
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@ The requirements that led to this system are:
|
||||||
* Name the .csproj file to match the assembly name.
|
* Name the .csproj file to match the assembly name.
|
||||||
* Run `build.cmd /t:GenerateProjectList` when adding new projects
|
* Run `build.cmd /t:GenerateProjectList` when adding new projects
|
||||||
* Use [eng/tools/BaseLineGenerator/](/eng/tools/BaselineGenerator/README.md) if you need to update baselines.
|
* Use [eng/tools/BaseLineGenerator/](/eng/tools/BaselineGenerator/README.md) if you need to update baselines.
|
||||||
|
* If you need to make a breaking change to dependencies, you may need to add `<SuppressBaselineReference>`.
|
||||||
|
|
||||||
## Important files
|
## Important files
|
||||||
|
|
||||||
|
|
@ -67,3 +68,16 @@ Steps for adding a new package dependency to an existing project. Let's say I'm
|
||||||
|
|
||||||
If you don't know the commit hash of the source code used to produce "0.0.1-beta-1", you can use `000000` as a placeholder for `Sha`
|
If you don't know the commit hash of the source code used to produce "0.0.1-beta-1", you can use `000000` as a placeholder for `Sha`
|
||||||
as its value is unimportant and will be updated the next time the bot runs.
|
as its value is unimportant and will be updated the next time the bot runs.
|
||||||
|
|
||||||
|
## Example: make a breaking change to references
|
||||||
|
|
||||||
|
If Microsoft.AspNetCore.Banana in 2.1 had a reference to `Microsoft.AspNetCore.Orange`, but in 3.0 this reference is changing to `Microsoft.AspNetCore.BetterThanOrange`, you would need to make these changes to the .csproj file
|
||||||
|
|
||||||
|
```diff
|
||||||
|
<!-- in Microsoft.AspNetCore.Banana.csproj -->
|
||||||
|
<ItemGroup>
|
||||||
|
- <Reference Include="Microsoft.AspNetCore.Orange" /> <!-- the old dependency -->
|
||||||
|
+ <Reference Include="Microsoft.AspNetCore.BetterThanOrange" /> <!-- the new dependency -->
|
||||||
|
+ <SuppressBaselineReference Include="Microsoft.AspNetCore.Orange" /> <!-- suppress as a known breaking change -->
|
||||||
|
</ItemGroup>
|
||||||
|
```
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
<Project>
|
<Project>
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
|
<MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
|
||||||
<AspNetCoreBaselineVersion>2.2.3</AspNetCoreBaselineVersion>
|
<AspNetCoreBaselineVersion>2.2.4</AspNetCoreBaselineVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<!-- Package: dotnet-dev-certs-->
|
<!-- Package: dotnet-dev-certs-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'dotnet-dev-certs' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'dotnet-dev-certs' ">
|
||||||
|
|
@ -81,7 +81,7 @@
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<!-- Package: Microsoft.AspNetCore.AspNetCoreModuleV2-->
|
<!-- Package: Microsoft.AspNetCore.AspNetCoreModuleV2-->
|
||||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.AspNetCoreModuleV2' ">
|
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.AspNetCoreModuleV2' ">
|
||||||
<BaselinePackageVersion>2.2.2</BaselinePackageVersion>
|
<BaselinePackageVersion>2.2.4</BaselinePackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.AspNetCoreModuleV2' AND '$(TargetFramework)' == 'netcoreapp2.2' " />
|
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.AspNetCoreModuleV2' AND '$(TargetFramework)' == 'netcoreapp2.2' " />
|
||||||
<!-- Package: Microsoft.AspNetCore.Authentication.Abstractions-->
|
<!-- Package: Microsoft.AspNetCore.Authentication.Abstractions-->
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ This file contains a list of all the packages and their versions which were rele
|
||||||
build of ASP.NET Core 2.2.x. Update this list when preparing for a new patch.
|
build of ASP.NET Core 2.2.x. Update this list when preparing for a new patch.
|
||||||
|
|
||||||
-->
|
-->
|
||||||
<Baseline Version="2.2.3">
|
<Baseline Version="2.2.4">
|
||||||
<Package Id="dotnet-dev-certs" Version="2.2.0" />
|
<Package Id="dotnet-dev-certs" Version="2.2.0" />
|
||||||
<Package Id="dotnet-sql-cache" Version="2.2.0" />
|
<Package Id="dotnet-sql-cache" Version="2.2.0" />
|
||||||
<Package Id="dotnet-user-secrets" Version="2.2.0" />
|
<Package Id="dotnet-user-secrets" Version="2.2.0" />
|
||||||
|
|
@ -13,7 +13,7 @@ build of ASP.NET Core 2.2.x. Update this list when preparing for a new patch.
|
||||||
<Package Id="Microsoft.AspNetCore.ApiAuthorization.IdentityServer" Version="2.2.0-preview-35687" />
|
<Package Id="Microsoft.AspNetCore.ApiAuthorization.IdentityServer" Version="2.2.0-preview-35687" />
|
||||||
<Package Id="Microsoft.AspNetCore.ApplicationInsights.HostingStartup" Version="2.2.0" />
|
<Package Id="Microsoft.AspNetCore.ApplicationInsights.HostingStartup" Version="2.2.0" />
|
||||||
<Package Id="Microsoft.AspNetCore.AspNetCoreModule" Version="2.2.1" />
|
<Package Id="Microsoft.AspNetCore.AspNetCoreModule" Version="2.2.1" />
|
||||||
<Package Id="Microsoft.AspNetCore.AspNetCoreModuleV2" Version="2.2.2" />
|
<Package Id="Microsoft.AspNetCore.AspNetCoreModuleV2" Version="2.2.4" />
|
||||||
<Package Id="Microsoft.AspNetCore.Authentication.Abstractions" Version="2.2.0" />
|
<Package Id="Microsoft.AspNetCore.Authentication.Abstractions" Version="2.2.0" />
|
||||||
<Package Id="Microsoft.AspNetCore.Authentication.AzureAD.UI" Version="2.2.0" />
|
<Package Id="Microsoft.AspNetCore.Authentication.AzureAD.UI" Version="2.2.0" />
|
||||||
<Package Id="Microsoft.AspNetCore.Authentication.AzureADB2C.UI" Version="2.2.0" />
|
<Package Id="Microsoft.AspNetCore.Authentication.AzureADB2C.UI" Version="2.2.0" />
|
||||||
|
|
|
||||||
|
|
@ -36,6 +36,15 @@ Later on, this will be checked using this condition:
|
||||||
<PropertyGroup Condition=" '$(VersionPrefix)' == '2.2.4' ">
|
<PropertyGroup Condition=" '$(VersionPrefix)' == '2.2.4' ">
|
||||||
<PackagesInPatch>
|
<PackagesInPatch>
|
||||||
@aspnet/signalr;
|
@aspnet/signalr;
|
||||||
|
Microsoft.AspNetCore.AspNetCoreModuleV2;
|
||||||
</PackagesInPatch>
|
</PackagesInPatch>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(VersionPrefix)' == '2.2.5' ">
|
||||||
|
<PackagesInPatch>
|
||||||
|
Microsoft.AspNetCore.AspNetCoreModule;
|
||||||
|
Microsoft.AspNetCore.AspNetCoreModuleV2;
|
||||||
|
java:signalr;
|
||||||
|
</PackagesInPatch>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|
|
||||||
|
|
@ -119,6 +119,7 @@
|
||||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Http.Connections.Client" ProjectPath="$(RepositoryRoot)src\SignalR\clients\csharp\Http.Connections.Client\src\Microsoft.AspNetCore.Http.Connections.Client.csproj" RefProjectPath="$(RepositoryRoot)src\SignalR\clients\csharp\Http.Connections.Client\ref\Microsoft.AspNetCore.Http.Connections.Client.csproj" />
|
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Http.Connections.Client" ProjectPath="$(RepositoryRoot)src\SignalR\clients\csharp\Http.Connections.Client\src\Microsoft.AspNetCore.Http.Connections.Client.csproj" RefProjectPath="$(RepositoryRoot)src\SignalR\clients\csharp\Http.Connections.Client\ref\Microsoft.AspNetCore.Http.Connections.Client.csproj" />
|
||||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Http.Connections.Common" ProjectPath="$(RepositoryRoot)src\SignalR\common\Http.Connections.Common\src\Microsoft.AspNetCore.Http.Connections.Common.csproj" RefProjectPath="$(RepositoryRoot)src\SignalR\common\Http.Connections.Common\ref\Microsoft.AspNetCore.Http.Connections.Common.csproj" />
|
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Http.Connections.Common" ProjectPath="$(RepositoryRoot)src\SignalR\common\Http.Connections.Common\src\Microsoft.AspNetCore.Http.Connections.Common.csproj" RefProjectPath="$(RepositoryRoot)src\SignalR\common\Http.Connections.Common\ref\Microsoft.AspNetCore.Http.Connections.Common.csproj" />
|
||||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Http.Connections" ProjectPath="$(RepositoryRoot)src\SignalR\common\Http.Connections\src\Microsoft.AspNetCore.Http.Connections.csproj" RefProjectPath="$(RepositoryRoot)src\SignalR\common\Http.Connections\ref\Microsoft.AspNetCore.Http.Connections.csproj" />
|
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Http.Connections" ProjectPath="$(RepositoryRoot)src\SignalR\common\Http.Connections\src\Microsoft.AspNetCore.Http.Connections.csproj" RefProjectPath="$(RepositoryRoot)src\SignalR\common\Http.Connections\ref\Microsoft.AspNetCore.Http.Connections.csproj" />
|
||||||
|
<ProjectReferenceProvider Include="Microsoft.AspNetCore.SignalR.Protocols.Json" ProjectPath="$(RepositoryRoot)src\SignalR\common\Protocols.Json\src\Microsoft.AspNetCore.SignalR.Protocols.Json.csproj" RefProjectPath="$(RepositoryRoot)src\SignalR\common\Protocols.Json\ref\Microsoft.AspNetCore.SignalR.Protocols.Json.csproj" />
|
||||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.SignalR.Protocols.MessagePack" ProjectPath="$(RepositoryRoot)src\SignalR\common\Protocols.MessagePack\src\Microsoft.AspNetCore.SignalR.Protocols.MessagePack.csproj" RefProjectPath="$(RepositoryRoot)src\SignalR\common\Protocols.MessagePack\ref\Microsoft.AspNetCore.SignalR.Protocols.MessagePack.csproj" />
|
<ProjectReferenceProvider Include="Microsoft.AspNetCore.SignalR.Protocols.MessagePack" ProjectPath="$(RepositoryRoot)src\SignalR\common\Protocols.MessagePack\src\Microsoft.AspNetCore.SignalR.Protocols.MessagePack.csproj" RefProjectPath="$(RepositoryRoot)src\SignalR\common\Protocols.MessagePack\ref\Microsoft.AspNetCore.SignalR.Protocols.MessagePack.csproj" />
|
||||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson" ProjectPath="$(RepositoryRoot)src\SignalR\common\Protocols.NewtonsoftJson\src\Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson.csproj" RefProjectPath="$(RepositoryRoot)src\SignalR\common\Protocols.NewtonsoftJson\ref\Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson.csproj" />
|
<ProjectReferenceProvider Include="Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson" ProjectPath="$(RepositoryRoot)src\SignalR\common\Protocols.NewtonsoftJson\src\Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson.csproj" RefProjectPath="$(RepositoryRoot)src\SignalR\common\Protocols.NewtonsoftJson\ref\Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson.csproj" />
|
||||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.SignalR.Common" ProjectPath="$(RepositoryRoot)src\SignalR\common\SignalR.Common\src\Microsoft.AspNetCore.SignalR.Common.csproj" RefProjectPath="$(RepositoryRoot)src\SignalR\common\SignalR.Common\ref\Microsoft.AspNetCore.SignalR.Common.csproj" />
|
<ProjectReferenceProvider Include="Microsoft.AspNetCore.SignalR.Common" ProjectPath="$(RepositoryRoot)src\SignalR\common\SignalR.Common\src\Microsoft.AspNetCore.SignalR.Common.csproj" RefProjectPath="$(RepositoryRoot)src\SignalR\common\SignalR.Common\ref\Microsoft.AspNetCore.SignalR.Common.csproj" />
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@
|
||||||
<AspNetCoreAppReferenceAndPackage Include="Microsoft.AspNetCore.Http.Features" />
|
<AspNetCoreAppReferenceAndPackage Include="Microsoft.AspNetCore.Http.Features" />
|
||||||
<AspNetCoreAppReferenceAndPackage Include="Microsoft.AspNetCore.Connections.Abstractions" />
|
<AspNetCoreAppReferenceAndPackage Include="Microsoft.AspNetCore.Connections.Abstractions" />
|
||||||
<AspNetCoreAppReferenceAndPackage Include="Microsoft.AspNetCore.Http.Connections.Common" />
|
<AspNetCoreAppReferenceAndPackage Include="Microsoft.AspNetCore.Http.Connections.Common" />
|
||||||
|
<AspNetCoreAppReferenceAndPackage Include="Microsoft.AspNetCore.SignalR.Protocols.Json" />
|
||||||
<AspNetCoreAppReferenceAndPackage Include="Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson" />
|
<AspNetCoreAppReferenceAndPackage Include="Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson" />
|
||||||
<AspNetCoreAppReferenceAndPackage Include="Microsoft.AspNetCore.SignalR.Common" />
|
<AspNetCoreAppReferenceAndPackage Include="Microsoft.AspNetCore.SignalR.Common" />
|
||||||
<AspNetCoreAppReferenceAndPackage Include="Microsoft.AspNetCore.Components.Browser" />
|
<AspNetCoreAppReferenceAndPackage Include="Microsoft.AspNetCore.Components.Browser" />
|
||||||
|
|
|
||||||
|
|
@ -9,384 +9,384 @@
|
||||||
-->
|
-->
|
||||||
<Dependencies>
|
<Dependencies>
|
||||||
<ProductDependencies>
|
<ProductDependencies>
|
||||||
<Dependency Name="Microsoft.AspNetCore.Razor.Language" Version="3.0.0-preview4.19216.2">
|
<Dependency Name="Microsoft.AspNetCore.Razor.Language" Version="3.0.0-preview5.19214.1">
|
||||||
<Uri>https://github.com/aspnet/AspNetCore-Tooling</Uri>
|
<Uri>https://github.com/aspnet/AspNetCore-Tooling</Uri>
|
||||||
<Sha>5ec5b0c8894e758ef2a41fd534746500bbcf00ad</Sha>
|
<Sha>d4ef2a1d4a68428e29a86cafc24837a45aef7e0d</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.AspNetCore.Mvc.Razor.Extensions" Version="3.0.0-preview4.19216.2">
|
<Dependency Name="Microsoft.AspNetCore.Mvc.Razor.Extensions" Version="3.0.0-preview5.19214.1">
|
||||||
<Uri>https://github.com/aspnet/AspNetCore-Tooling</Uri>
|
<Uri>https://github.com/aspnet/AspNetCore-Tooling</Uri>
|
||||||
<Sha>5ec5b0c8894e758ef2a41fd534746500bbcf00ad</Sha>
|
<Sha>d4ef2a1d4a68428e29a86cafc24837a45aef7e0d</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.CodeAnalysis.Razor" Version="3.0.0-preview4.19216.2">
|
<Dependency Name="Microsoft.CodeAnalysis.Razor" Version="3.0.0-preview5.19214.1">
|
||||||
<Uri>https://github.com/aspnet/AspNetCore-Tooling</Uri>
|
<Uri>https://github.com/aspnet/AspNetCore-Tooling</Uri>
|
||||||
<Sha>5ec5b0c8894e758ef2a41fd534746500bbcf00ad</Sha>
|
<Sha>d4ef2a1d4a68428e29a86cafc24837a45aef7e0d</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.NET.Sdk.Razor" Version="3.0.0-preview4.19216.2">
|
<Dependency Name="Microsoft.NET.Sdk.Razor" Version="3.0.0-preview5.19214.1">
|
||||||
<Uri>https://github.com/aspnet/AspNetCore-Tooling</Uri>
|
<Uri>https://github.com/aspnet/AspNetCore-Tooling</Uri>
|
||||||
<Sha>5ec5b0c8894e758ef2a41fd534746500bbcf00ad</Sha>
|
<Sha>d4ef2a1d4a68428e29a86cafc24837a45aef7e0d</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="dotnet-ef" Version="3.0.0-preview4.19216.3">
|
<Dependency Name="dotnet-ef" Version="3.0.0-preview5.19213.2">
|
||||||
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
|
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
|
||||||
<Sha>a4d2bafcdfaf0ed6b451056b7d9d75f53ee8c4df</Sha>
|
<Sha>b191c93d850ff31445534eb5cd6184599f40bbb4</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.EntityFrameworkCore.InMemory" Version="3.0.0-preview4.19216.3">
|
<Dependency Name="Microsoft.EntityFrameworkCore.InMemory" Version="3.0.0-preview5.19213.2">
|
||||||
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
|
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
|
||||||
<Sha>a4d2bafcdfaf0ed6b451056b7d9d75f53ee8c4df</Sha>
|
<Sha>b191c93d850ff31445534eb5cd6184599f40bbb4</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.EntityFrameworkCore.Relational" Version="3.0.0-preview4.19216.3">
|
<Dependency Name="Microsoft.EntityFrameworkCore.Relational" Version="3.0.0-preview5.19213.2">
|
||||||
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
|
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
|
||||||
<Sha>a4d2bafcdfaf0ed6b451056b7d9d75f53ee8c4df</Sha>
|
<Sha>b191c93d850ff31445534eb5cd6184599f40bbb4</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.EntityFrameworkCore.Sqlite" Version="3.0.0-preview4.19216.3">
|
<Dependency Name="Microsoft.EntityFrameworkCore.Sqlite" Version="3.0.0-preview5.19213.2">
|
||||||
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
|
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
|
||||||
<Sha>a4d2bafcdfaf0ed6b451056b7d9d75f53ee8c4df</Sha>
|
<Sha>b191c93d850ff31445534eb5cd6184599f40bbb4</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.EntityFrameworkCore.SqlServer" Version="3.0.0-preview4.19216.3">
|
<Dependency Name="Microsoft.EntityFrameworkCore.SqlServer" Version="3.0.0-preview5.19213.2">
|
||||||
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
|
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
|
||||||
<Sha>a4d2bafcdfaf0ed6b451056b7d9d75f53ee8c4df</Sha>
|
<Sha>b191c93d850ff31445534eb5cd6184599f40bbb4</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.EntityFrameworkCore.Tools" Version="3.0.0-preview4.19216.3">
|
<Dependency Name="Microsoft.EntityFrameworkCore.Tools" Version="3.0.0-preview5.19213.2">
|
||||||
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
|
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
|
||||||
<Sha>a4d2bafcdfaf0ed6b451056b7d9d75f53ee8c4df</Sha>
|
<Sha>b191c93d850ff31445534eb5cd6184599f40bbb4</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.EntityFrameworkCore" Version="3.0.0-preview4.19216.3">
|
<Dependency Name="Microsoft.EntityFrameworkCore" Version="3.0.0-preview5.19213.2">
|
||||||
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
|
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
|
||||||
<Sha>a4d2bafcdfaf0ed6b451056b7d9d75f53ee8c4df</Sha>
|
<Sha>b191c93d850ff31445534eb5cd6184599f40bbb4</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.AspNetCore.Analyzer.Testing" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.AspNetCore.Analyzer.Testing" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.AspNetCore.BenchmarkRunner.Sources" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.AspNetCore.BenchmarkRunner.Sources" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.ActivatorUtilities.Sources" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.ActivatorUtilities.Sources" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Caching.Abstractions" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Caching.Abstractions" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Caching.Memory" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Caching.Memory" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Caching.SqlServer" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Caching.SqlServer" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Caching.StackExchangeRedis" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Caching.StackExchangeRedis" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.CommandLineUtils.Sources" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.CommandLineUtils.Sources" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Configuration.Abstractions" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Configuration.Abstractions" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Configuration.AzureKeyVault" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Configuration.AzureKeyVault" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Configuration.Binder" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Configuration.Binder" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Configuration.CommandLine" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Configuration.CommandLine" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Configuration.FileExtensions" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Configuration.FileExtensions" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Configuration.Ini" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Configuration.Ini" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Configuration.Json" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Configuration.Json" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Configuration.KeyPerFile" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Configuration.KeyPerFile" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Configuration.UserSecrets" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Configuration.UserSecrets" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Configuration.Xml" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Configuration.Xml" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Configuration" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Configuration" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.DependencyInjection.Abstractions" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.DependencyInjection.Abstractions" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.DependencyInjection" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.DependencyInjection" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.DiagnosticAdapter" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.DiagnosticAdapter" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Diagnostics.HealthChecks" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Diagnostics.HealthChecks" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.FileProviders.Abstractions" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.FileProviders.Abstractions" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.FileProviders.Composite" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.FileProviders.Composite" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.FileProviders.Embedded" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.FileProviders.Embedded" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.FileProviders.Physical" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.FileProviders.Physical" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.FileSystemGlobbing" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.FileSystemGlobbing" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.HashCodeCombiner.Sources" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.HashCodeCombiner.Sources" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Hosting.Abstractions" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Hosting.Abstractions" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Hosting" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Hosting" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.HostFactoryResolver.Sources" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.HostFactoryResolver.Sources" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Http" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Http" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Localization.Abstractions" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Localization.Abstractions" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Localization" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Localization" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Logging.Abstractions" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Logging.Abstractions" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Logging.AzureAppServices" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Logging.AzureAppServices" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Logging.Configuration" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Logging.Configuration" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Logging.Console" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Logging.Console" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Logging.Debug" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Logging.Debug" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Logging.EventSource" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Logging.EventSource" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Logging.TraceSource" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Logging.TraceSource" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Logging.Testing" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Logging.Testing" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Logging" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Logging" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.ObjectPool" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.ObjectPool" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Options.ConfigurationExtensions" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Options.ConfigurationExtensions" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Options.DataAnnotations" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Options.DataAnnotations" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Options" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Options" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.ParameterDefaultValue.Sources" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.ParameterDefaultValue.Sources" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.Primitives" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.Primitives" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.TypeNameHelper.Sources" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.TypeNameHelper.Sources" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.ValueStopwatch.Sources" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.ValueStopwatch.Sources" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.WebEncoders" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Extensions.WebEncoders" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Internal.Extensions.Refs" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.Internal.Extensions.Refs" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.JSInterop" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.JSInterop" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Mono.WebAssembly.Interop" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Mono.WebAssembly.Interop" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Bcl.Json.Sources" Version="4.6.0-preview4.19212.13" CoherentParentDependency="Microsoft.NETCore.App">
|
<Dependency Name="Microsoft.Bcl.Json.Sources" Version="4.6.0-preview5.19211.22" CoherentParentDependency="Microsoft.NETCore.App">
|
||||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>dc522ef97fac72e64cd74825b7ef497f82af4624</Sha>
|
<Sha>fe5c12ad8315e043e62285117a56bba1784756d1</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.CSharp" Version="4.6.0-preview4.19212.13" CoherentParentDependency="Microsoft.NETCore.App">
|
<Dependency Name="Microsoft.CSharp" Version="4.6.0-preview5.19211.22" CoherentParentDependency="Microsoft.NETCore.App">
|
||||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>dc522ef97fac72e64cd74825b7ef497f82af4624</Sha>
|
<Sha>fe5c12ad8315e043e62285117a56bba1784756d1</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Win32.Registry" Version="4.6.0-preview4.19212.13" CoherentParentDependency="Microsoft.NETCore.App">
|
<Dependency Name="Microsoft.Win32.Registry" Version="4.6.0-preview5.19211.22" CoherentParentDependency="Microsoft.NETCore.App">
|
||||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>dc522ef97fac72e64cd74825b7ef497f82af4624</Sha>
|
<Sha>fe5c12ad8315e043e62285117a56bba1784756d1</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="System.ComponentModel.Annotations" Version="4.6.0-preview4.19212.13" CoherentParentDependency="Microsoft.NETCore.App">
|
<Dependency Name="System.ComponentModel.Annotations" Version="4.6.0-preview5.19211.22" CoherentParentDependency="Microsoft.NETCore.App">
|
||||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>dc522ef97fac72e64cd74825b7ef497f82af4624</Sha>
|
<Sha>fe5c12ad8315e043e62285117a56bba1784756d1</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="System.Data.SqlClient" Version="4.7.0-preview4.19212.13" CoherentParentDependency="Microsoft.NETCore.App">
|
<Dependency Name="System.Data.SqlClient" Version="4.7.0-preview5.19211.22" CoherentParentDependency="Microsoft.NETCore.App">
|
||||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>dc522ef97fac72e64cd74825b7ef497f82af4624</Sha>
|
<Sha>fe5c12ad8315e043e62285117a56bba1784756d1</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="System.Diagnostics.EventLog" Version="4.6.0-preview4.19212.13" CoherentParentDependency="Microsoft.NETCore.App">
|
<Dependency Name="System.Diagnostics.EventLog" Version="4.6.0-preview5.19211.22" CoherentParentDependency="Microsoft.NETCore.App">
|
||||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>dc522ef97fac72e64cd74825b7ef497f82af4624</Sha>
|
<Sha>fe5c12ad8315e043e62285117a56bba1784756d1</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="System.IO.Pipelines" Version="4.6.0-preview4.19212.13" CoherentParentDependency="Microsoft.NETCore.App">
|
<Dependency Name="System.IO.Pipelines" Version="4.6.0-preview5.19211.22" CoherentParentDependency="Microsoft.NETCore.App">
|
||||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>dc522ef97fac72e64cd74825b7ef497f82af4624</Sha>
|
<Sha>fe5c12ad8315e043e62285117a56bba1784756d1</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="System.Net.Http.WinHttpHandler" Version="4.6.0-preview4.19212.13" CoherentParentDependency="Microsoft.NETCore.App">
|
<Dependency Name="System.Net.Http.WinHttpHandler" Version="4.6.0-preview5.19211.22" CoherentParentDependency="Microsoft.NETCore.App">
|
||||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>dc522ef97fac72e64cd74825b7ef497f82af4624</Sha>
|
<Sha>fe5c12ad8315e043e62285117a56bba1784756d1</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="System.Net.WebSockets.WebSocketProtocol" Version="4.6.0-preview4.19212.13" CoherentParentDependency="Microsoft.NETCore.App">
|
<Dependency Name="System.Net.WebSockets.WebSocketProtocol" Version="4.6.0-preview5.19211.22" CoherentParentDependency="Microsoft.NETCore.App">
|
||||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>dc522ef97fac72e64cd74825b7ef497f82af4624</Sha>
|
<Sha>fe5c12ad8315e043e62285117a56bba1784756d1</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="System.Reflection.Metadata" Version="1.7.0-preview4.19212.13" CoherentParentDependency="Microsoft.NETCore.App">
|
<Dependency Name="System.Reflection.Metadata" Version="1.7.0-preview5.19211.22" CoherentParentDependency="Microsoft.NETCore.App">
|
||||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>dc522ef97fac72e64cd74825b7ef497f82af4624</Sha>
|
<Sha>fe5c12ad8315e043e62285117a56bba1784756d1</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="System.Runtime.CompilerServices.Unsafe" Version="4.6.0-preview4.19212.13" CoherentParentDependency="Microsoft.NETCore.App">
|
<Dependency Name="System.Runtime.CompilerServices.Unsafe" Version="4.6.0-preview5.19211.22" CoherentParentDependency="Microsoft.NETCore.App">
|
||||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>dc522ef97fac72e64cd74825b7ef497f82af4624</Sha>
|
<Sha>fe5c12ad8315e043e62285117a56bba1784756d1</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="System.Security.Cryptography.Cng" Version="4.6.0-preview4.19212.13" CoherentParentDependency="Microsoft.NETCore.App">
|
<Dependency Name="System.Security.Cryptography.Cng" Version="4.6.0-preview5.19211.22" CoherentParentDependency="Microsoft.NETCore.App">
|
||||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>dc522ef97fac72e64cd74825b7ef497f82af4624</Sha>
|
<Sha>fe5c12ad8315e043e62285117a56bba1784756d1</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="System.Security.Cryptography.Pkcs" Version="4.6.0-preview4.19212.13" CoherentParentDependency="Microsoft.NETCore.App">
|
<Dependency Name="System.Security.Cryptography.Pkcs" Version="4.6.0-preview5.19211.22" CoherentParentDependency="Microsoft.NETCore.App">
|
||||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>dc522ef97fac72e64cd74825b7ef497f82af4624</Sha>
|
<Sha>fe5c12ad8315e043e62285117a56bba1784756d1</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="System.Security.Cryptography.Xml" Version="4.6.0-preview4.19212.13" CoherentParentDependency="Microsoft.NETCore.App">
|
<Dependency Name="System.Security.Cryptography.Xml" Version="4.6.0-preview5.19211.22" CoherentParentDependency="Microsoft.NETCore.App">
|
||||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>dc522ef97fac72e64cd74825b7ef497f82af4624</Sha>
|
<Sha>fe5c12ad8315e043e62285117a56bba1784756d1</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="System.Security.Permissions" Version="4.6.0-preview4.19212.13" CoherentParentDependency="Microsoft.NETCore.App">
|
<Dependency Name="System.Security.Permissions" Version="4.6.0-preview5.19211.22" CoherentParentDependency="Microsoft.NETCore.App">
|
||||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>dc522ef97fac72e64cd74825b7ef497f82af4624</Sha>
|
<Sha>fe5c12ad8315e043e62285117a56bba1784756d1</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="System.Security.Principal.Windows" Version="4.6.0-preview4.19212.13" CoherentParentDependency="Microsoft.NETCore.App">
|
<Dependency Name="System.Security.Principal.Windows" Version="4.6.0-preview5.19211.22" CoherentParentDependency="Microsoft.NETCore.App">
|
||||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>dc522ef97fac72e64cd74825b7ef497f82af4624</Sha>
|
<Sha>fe5c12ad8315e043e62285117a56bba1784756d1</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="System.ServiceProcess.ServiceController" Version="4.6.0-preview4.19212.13" CoherentParentDependency="Microsoft.NETCore.App">
|
<Dependency Name="System.ServiceProcess.ServiceController" Version="4.6.0-preview5.19211.22" CoherentParentDependency="Microsoft.NETCore.App">
|
||||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>dc522ef97fac72e64cd74825b7ef497f82af4624</Sha>
|
<Sha>fe5c12ad8315e043e62285117a56bba1784756d1</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="System.Text.Encodings.Web" Version="4.6.0-preview4.19212.13" CoherentParentDependency="Microsoft.NETCore.App">
|
<Dependency Name="System.Text.Encodings.Web" Version="4.6.0-preview5.19211.22" CoherentParentDependency="Microsoft.NETCore.App">
|
||||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>dc522ef97fac72e64cd74825b7ef497f82af4624</Sha>
|
<Sha>fe5c12ad8315e043e62285117a56bba1784756d1</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="System.Threading.Channels" Version="4.6.0-preview4.19212.13" CoherentParentDependency="Microsoft.NETCore.App">
|
<Dependency Name="System.Threading.Channels" Version="4.6.0-preview5.19211.22" CoherentParentDependency="Microsoft.NETCore.App">
|
||||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>dc522ef97fac72e64cd74825b7ef497f82af4624</Sha>
|
<Sha>fe5c12ad8315e043e62285117a56bba1784756d1</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.Extensions.DependencyModel" Version="3.0.0-preview4-27615-11" CoherentParentDependency="Microsoft.Extensions.Logging">
|
<Dependency Name="Microsoft.Extensions.DependencyModel" Version="3.0.0-preview5-27611-18" CoherentParentDependency="Microsoft.Extensions.Logging">
|
||||||
<Uri>https://github.com/dotnet/core-setup</Uri>
|
<Uri>https://github.com/dotnet/core-setup</Uri>
|
||||||
<Sha>ee54d4cbd2b305eadf6f341bdc9d4abccdb50559</Sha>
|
<Sha>b159f4bf9614203a0c60a20f5469d5226f3f12e7</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.NETCore.App" Version="3.0.0-preview4-27615-11" CoherentParentDependency="Microsoft.Extensions.Logging">
|
<Dependency Name="Microsoft.NETCore.App" Version="3.0.0-preview5-27611-18" CoherentParentDependency="Microsoft.Extensions.Logging">
|
||||||
<Uri>https://github.com/dotnet/core-setup</Uri>
|
<Uri>https://github.com/dotnet/core-setup</Uri>
|
||||||
<Sha>ee54d4cbd2b305eadf6f341bdc9d4abccdb50559</Sha>
|
<Sha>b159f4bf9614203a0c60a20f5469d5226f3f12e7</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
</ProductDependencies>
|
</ProductDependencies>
|
||||||
<ToolsetDependencies>
|
<ToolsetDependencies>
|
||||||
<!-- Listed explicitly to workaround https://github.com/dotnet/cli/issues/10528 -->
|
<!-- Listed explicitly to workaround https://github.com/dotnet/cli/issues/10528 -->
|
||||||
<Dependency Name="Microsoft.NETCore.Platforms" Version="3.0.0-preview4.19212.13" CoherentParentDependency="Microsoft.NETCore.App">
|
<Dependency Name="Microsoft.NETCore.Platforms" Version="3.0.0-preview5.19211.22" CoherentParentDependency="Microsoft.NETCore.App">
|
||||||
<Uri>https://github.com/dotnet/corefx</Uri>
|
<Uri>https://github.com/dotnet/corefx</Uri>
|
||||||
<Sha>dc522ef97fac72e64cd74825b7ef497f82af4624</Sha>
|
<Sha>fe5c12ad8315e043e62285117a56bba1784756d1</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Internal.AspNetCore.Analyzers" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Internal.AspNetCore.Analyzers" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.DotNet.GenAPI" Version="1.0.0-beta.19207.1">
|
<Dependency Name="Microsoft.DotNet.GenAPI" Version="1.0.0-beta.19215.12">
|
||||||
<Uri>https://github.com/dotnet/arcade</Uri>
|
<Uri>https://github.com/dotnet/arcade</Uri>
|
||||||
<Sha>b1f9e12fe3ee71c48ea60b15968745850ac0a4a7</Sha>
|
<Sha>517bf671ea342965d007aa48f5bfd4926e58d582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
<Dependency Name="Microsoft.AspNetCore.Testing" Version="3.0.0-preview4.19216.2" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
<Dependency Name="Microsoft.AspNetCore.Testing" Version="3.0.0-preview5.19212.9" CoherentParentDependency="Microsoft.EntityFrameworkCore">
|
||||||
<Uri>https://github.com/aspnet/Extensions</Uri>
|
<Uri>https://github.com/aspnet/Extensions</Uri>
|
||||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||||
</Dependency>
|
</Dependency>
|
||||||
</ToolsetDependencies>
|
</ToolsetDependencies>
|
||||||
</Dependencies>
|
</Dependencies>
|
||||||
|
|
|
||||||
|
|
@ -17,106 +17,106 @@
|
||||||
-->
|
-->
|
||||||
<PropertyGroup Label="Automated">
|
<PropertyGroup Label="Automated">
|
||||||
<!-- Packages from dotnet/arcade -->
|
<!-- Packages from dotnet/arcade -->
|
||||||
<MicrosoftDotNetGenAPIPackageVersion>1.0.0-beta.19207.1</MicrosoftDotNetGenAPIPackageVersion>
|
<MicrosoftDotNetGenAPIPackageVersion>1.0.0-beta.19215.12</MicrosoftDotNetGenAPIPackageVersion>
|
||||||
<!-- Packages from dotnet/core-setup -->
|
<!-- Packages from dotnet/core-setup -->
|
||||||
<MicrosoftExtensionsDependencyModelPackageVersion>3.0.0-preview4-27615-11</MicrosoftExtensionsDependencyModelPackageVersion>
|
<MicrosoftExtensionsDependencyModelPackageVersion>3.0.0-preview5-27611-18</MicrosoftExtensionsDependencyModelPackageVersion>
|
||||||
<MicrosoftNETCoreAppPackageVersion>3.0.0-preview4-27615-11</MicrosoftNETCoreAppPackageVersion>
|
<MicrosoftNETCoreAppPackageVersion>3.0.0-preview5-27611-18</MicrosoftNETCoreAppPackageVersion>
|
||||||
<!-- Packages from dotnet/corefx -->
|
<!-- Packages from dotnet/corefx -->
|
||||||
<MicrosoftBclJsonSourcesPackageVersion>4.6.0-preview4.19212.13</MicrosoftBclJsonSourcesPackageVersion>
|
<MicrosoftBclJsonSourcesPackageVersion>4.6.0-preview5.19211.22</MicrosoftBclJsonSourcesPackageVersion>
|
||||||
<MicrosoftCSharpPackageVersion>4.6.0-preview4.19212.13</MicrosoftCSharpPackageVersion>
|
<MicrosoftCSharpPackageVersion>4.6.0-preview5.19211.22</MicrosoftCSharpPackageVersion>
|
||||||
<MicrosoftWin32RegistryPackageVersion>4.6.0-preview4.19212.13</MicrosoftWin32RegistryPackageVersion>
|
<MicrosoftWin32RegistryPackageVersion>4.6.0-preview5.19211.22</MicrosoftWin32RegistryPackageVersion>
|
||||||
<SystemComponentModelAnnotationsPackageVersion>4.6.0-preview4.19212.13</SystemComponentModelAnnotationsPackageVersion>
|
<SystemComponentModelAnnotationsPackageVersion>4.6.0-preview5.19211.22</SystemComponentModelAnnotationsPackageVersion>
|
||||||
<SystemDataSqlClientPackageVersion>4.7.0-preview4.19212.13</SystemDataSqlClientPackageVersion>
|
<SystemDataSqlClientPackageVersion>4.7.0-preview5.19211.22</SystemDataSqlClientPackageVersion>
|
||||||
<SystemDiagnosticsEventLogPackageVersion>4.6.0-preview4.19212.13</SystemDiagnosticsEventLogPackageVersion>
|
<SystemDiagnosticsEventLogPackageVersion>4.6.0-preview5.19211.22</SystemDiagnosticsEventLogPackageVersion>
|
||||||
<SystemIOPipelinesPackageVersion>4.6.0-preview4.19212.13</SystemIOPipelinesPackageVersion>
|
<SystemIOPipelinesPackageVersion>4.6.0-preview5.19211.22</SystemIOPipelinesPackageVersion>
|
||||||
<SystemNetHttpWinHttpHandlerPackageVersion>4.6.0-preview4.19212.13</SystemNetHttpWinHttpHandlerPackageVersion>
|
<SystemNetHttpWinHttpHandlerPackageVersion>4.6.0-preview5.19211.22</SystemNetHttpWinHttpHandlerPackageVersion>
|
||||||
<SystemNetWebSocketsWebSocketProtocolPackageVersion>4.6.0-preview4.19212.13</SystemNetWebSocketsWebSocketProtocolPackageVersion>
|
<SystemNetWebSocketsWebSocketProtocolPackageVersion>4.6.0-preview5.19211.22</SystemNetWebSocketsWebSocketProtocolPackageVersion>
|
||||||
<SystemReflectionMetadataPackageVersion>1.7.0-preview4.19212.13</SystemReflectionMetadataPackageVersion>
|
<SystemReflectionMetadataPackageVersion>1.7.0-preview5.19211.22</SystemReflectionMetadataPackageVersion>
|
||||||
<SystemRuntimeCompilerServicesUnsafePackageVersion>4.6.0-preview4.19212.13</SystemRuntimeCompilerServicesUnsafePackageVersion>
|
<SystemRuntimeCompilerServicesUnsafePackageVersion>4.6.0-preview5.19211.22</SystemRuntimeCompilerServicesUnsafePackageVersion>
|
||||||
<SystemSecurityCryptographyCngPackageVersion>4.6.0-preview4.19212.13</SystemSecurityCryptographyCngPackageVersion>
|
<SystemSecurityCryptographyCngPackageVersion>4.6.0-preview5.19211.22</SystemSecurityCryptographyCngPackageVersion>
|
||||||
<SystemSecurityCryptographyPkcsPackageVersion>4.6.0-preview4.19212.13</SystemSecurityCryptographyPkcsPackageVersion>
|
<SystemSecurityCryptographyPkcsPackageVersion>4.6.0-preview5.19211.22</SystemSecurityCryptographyPkcsPackageVersion>
|
||||||
<SystemSecurityCryptographyXmlPackageVersion>4.6.0-preview4.19212.13</SystemSecurityCryptographyXmlPackageVersion>
|
<SystemSecurityCryptographyXmlPackageVersion>4.6.0-preview5.19211.22</SystemSecurityCryptographyXmlPackageVersion>
|
||||||
<SystemSecurityPermissionsPackageVersion>4.6.0-preview4.19212.13</SystemSecurityPermissionsPackageVersion>
|
<SystemSecurityPermissionsPackageVersion>4.6.0-preview5.19211.22</SystemSecurityPermissionsPackageVersion>
|
||||||
<SystemSecurityPrincipalWindowsPackageVersion>4.6.0-preview4.19212.13</SystemSecurityPrincipalWindowsPackageVersion>
|
<SystemSecurityPrincipalWindowsPackageVersion>4.6.0-preview5.19211.22</SystemSecurityPrincipalWindowsPackageVersion>
|
||||||
<SystemServiceProcessServiceControllerPackageVersion>4.6.0-preview4.19212.13</SystemServiceProcessServiceControllerPackageVersion>
|
<SystemServiceProcessServiceControllerPackageVersion>4.6.0-preview5.19211.22</SystemServiceProcessServiceControllerPackageVersion>
|
||||||
<SystemTextEncodingsWebPackageVersion>4.6.0-preview4.19212.13</SystemTextEncodingsWebPackageVersion>
|
<SystemTextEncodingsWebPackageVersion>4.6.0-preview5.19211.22</SystemTextEncodingsWebPackageVersion>
|
||||||
<SystemThreadingChannelsPackageVersion>4.6.0-preview4.19212.13</SystemThreadingChannelsPackageVersion>
|
<SystemThreadingChannelsPackageVersion>4.6.0-preview5.19211.22</SystemThreadingChannelsPackageVersion>
|
||||||
<!-- Only listed explicitly to workaround https://github.com/dotnet/cli/issues/10528 -->
|
<!-- Only listed explicitly to workaround https://github.com/dotnet/cli/issues/10528 -->
|
||||||
<MicrosoftNETCorePlatformsPackageVersion>3.0.0-preview4.19212.13</MicrosoftNETCorePlatformsPackageVersion>
|
<MicrosoftNETCorePlatformsPackageVersion>3.0.0-preview5.19211.22</MicrosoftNETCorePlatformsPackageVersion>
|
||||||
<!-- Packages from aspnet/Extensions -->
|
<!-- Packages from aspnet/Extensions -->
|
||||||
<InternalAspNetCoreAnalyzersPackageVersion>3.0.0-preview4.19216.2</InternalAspNetCoreAnalyzersPackageVersion>
|
<InternalAspNetCoreAnalyzersPackageVersion>3.0.0-preview5.19212.9</InternalAspNetCoreAnalyzersPackageVersion>
|
||||||
<MicrosoftAspNetCoreAnalyzerTestingPackageVersion>3.0.0-preview4.19216.2</MicrosoftAspNetCoreAnalyzerTestingPackageVersion>
|
<MicrosoftAspNetCoreAnalyzerTestingPackageVersion>3.0.0-preview5.19212.9</MicrosoftAspNetCoreAnalyzerTestingPackageVersion>
|
||||||
<MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>3.0.0-preview4.19216.2</MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>
|
<MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>3.0.0-preview5.19212.9</MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>
|
||||||
<MicrosoftAspNetCoreTestingPackageVersion>3.0.0-preview4.19216.2</MicrosoftAspNetCoreTestingPackageVersion>
|
<MicrosoftAspNetCoreTestingPackageVersion>3.0.0-preview5.19212.9</MicrosoftAspNetCoreTestingPackageVersion>
|
||||||
<MicrosoftExtensionsActivatorUtilitiesSourcesPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsActivatorUtilitiesSourcesPackageVersion>
|
<MicrosoftExtensionsActivatorUtilitiesSourcesPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsActivatorUtilitiesSourcesPackageVersion>
|
||||||
<MicrosoftExtensionsCachingAbstractionsPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsCachingAbstractionsPackageVersion>
|
<MicrosoftExtensionsCachingAbstractionsPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsCachingAbstractionsPackageVersion>
|
||||||
<MicrosoftExtensionsCachingMemoryPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsCachingMemoryPackageVersion>
|
<MicrosoftExtensionsCachingMemoryPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsCachingMemoryPackageVersion>
|
||||||
<MicrosoftExtensionsCachingSqlServerPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsCachingSqlServerPackageVersion>
|
<MicrosoftExtensionsCachingSqlServerPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsCachingSqlServerPackageVersion>
|
||||||
<MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>
|
<MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>
|
||||||
<MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>
|
<MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>
|
||||||
<MicrosoftExtensionsConfigurationAbstractionsPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsConfigurationAbstractionsPackageVersion>
|
<MicrosoftExtensionsConfigurationAbstractionsPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsConfigurationAbstractionsPackageVersion>
|
||||||
<MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>
|
<MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>
|
||||||
<MicrosoftExtensionsConfigurationBinderPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsConfigurationBinderPackageVersion>
|
<MicrosoftExtensionsConfigurationBinderPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsConfigurationBinderPackageVersion>
|
||||||
<MicrosoftExtensionsConfigurationCommandLinePackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsConfigurationCommandLinePackageVersion>
|
<MicrosoftExtensionsConfigurationCommandLinePackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsConfigurationCommandLinePackageVersion>
|
||||||
<MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>
|
<MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>
|
||||||
<MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>
|
<MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>
|
||||||
<MicrosoftExtensionsConfigurationIniPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsConfigurationIniPackageVersion>
|
<MicrosoftExtensionsConfigurationIniPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsConfigurationIniPackageVersion>
|
||||||
<MicrosoftExtensionsConfigurationJsonPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsConfigurationJsonPackageVersion>
|
<MicrosoftExtensionsConfigurationJsonPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsConfigurationJsonPackageVersion>
|
||||||
<MicrosoftExtensionsConfigurationKeyPerFilePackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsConfigurationKeyPerFilePackageVersion>
|
<MicrosoftExtensionsConfigurationKeyPerFilePackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsConfigurationKeyPerFilePackageVersion>
|
||||||
<MicrosoftExtensionsConfigurationPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsConfigurationPackageVersion>
|
<MicrosoftExtensionsConfigurationPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsConfigurationPackageVersion>
|
||||||
<MicrosoftExtensionsConfigurationUserSecretsPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsConfigurationUserSecretsPackageVersion>
|
<MicrosoftExtensionsConfigurationUserSecretsPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsConfigurationUserSecretsPackageVersion>
|
||||||
<MicrosoftExtensionsConfigurationXmlPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsConfigurationXmlPackageVersion>
|
<MicrosoftExtensionsConfigurationXmlPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsConfigurationXmlPackageVersion>
|
||||||
<MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>
|
<MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>
|
||||||
<MicrosoftExtensionsDependencyInjectionPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsDependencyInjectionPackageVersion>
|
<MicrosoftExtensionsDependencyInjectionPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsDependencyInjectionPackageVersion>
|
||||||
<MicrosoftExtensionsDiagnosticAdapterPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsDiagnosticAdapterPackageVersion>
|
<MicrosoftExtensionsDiagnosticAdapterPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsDiagnosticAdapterPackageVersion>
|
||||||
<MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsPackageVersion>
|
<MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsPackageVersion>
|
||||||
<MicrosoftExtensionsDiagnosticsHealthChecksPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsDiagnosticsHealthChecksPackageVersion>
|
<MicrosoftExtensionsDiagnosticsHealthChecksPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsDiagnosticsHealthChecksPackageVersion>
|
||||||
<MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>
|
<MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>
|
||||||
<MicrosoftExtensionsFileProvidersCompositePackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsFileProvidersCompositePackageVersion>
|
<MicrosoftExtensionsFileProvidersCompositePackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsFileProvidersCompositePackageVersion>
|
||||||
<MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>
|
<MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>
|
||||||
<MicrosoftExtensionsFileProvidersPhysicalPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsFileProvidersPhysicalPackageVersion>
|
<MicrosoftExtensionsFileProvidersPhysicalPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsFileProvidersPhysicalPackageVersion>
|
||||||
<MicrosoftExtensionsFileSystemGlobbingPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsFileSystemGlobbingPackageVersion>
|
<MicrosoftExtensionsFileSystemGlobbingPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsFileSystemGlobbingPackageVersion>
|
||||||
<MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion>
|
<MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion>
|
||||||
<MicrosoftExtensionsHostingAbstractionsPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsHostingAbstractionsPackageVersion>
|
<MicrosoftExtensionsHostingAbstractionsPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsHostingAbstractionsPackageVersion>
|
||||||
<MicrosoftExtensionsHostingPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsHostingPackageVersion>
|
<MicrosoftExtensionsHostingPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsHostingPackageVersion>
|
||||||
<MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion>
|
<MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion>
|
||||||
<MicrosoftExtensionsHttpPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsHttpPackageVersion>
|
<MicrosoftExtensionsHttpPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsHttpPackageVersion>
|
||||||
<MicrosoftExtensionsLocalizationAbstractionsPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsLocalizationAbstractionsPackageVersion>
|
<MicrosoftExtensionsLocalizationAbstractionsPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsLocalizationAbstractionsPackageVersion>
|
||||||
<MicrosoftExtensionsLocalizationPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsLocalizationPackageVersion>
|
<MicrosoftExtensionsLocalizationPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsLocalizationPackageVersion>
|
||||||
<MicrosoftExtensionsLoggingAbstractionsPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsLoggingAbstractionsPackageVersion>
|
<MicrosoftExtensionsLoggingAbstractionsPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsLoggingAbstractionsPackageVersion>
|
||||||
<MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>
|
<MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>
|
||||||
<MicrosoftExtensionsLoggingConfigurationPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsLoggingConfigurationPackageVersion>
|
<MicrosoftExtensionsLoggingConfigurationPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsLoggingConfigurationPackageVersion>
|
||||||
<MicrosoftExtensionsLoggingConsolePackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsLoggingConsolePackageVersion>
|
<MicrosoftExtensionsLoggingConsolePackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsLoggingConsolePackageVersion>
|
||||||
<MicrosoftExtensionsLoggingDebugPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsLoggingDebugPackageVersion>
|
<MicrosoftExtensionsLoggingDebugPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsLoggingDebugPackageVersion>
|
||||||
<MicrosoftExtensionsLoggingEventSourcePackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsLoggingEventSourcePackageVersion>
|
<MicrosoftExtensionsLoggingEventSourcePackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsLoggingEventSourcePackageVersion>
|
||||||
<MicrosoftExtensionsLoggingPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsLoggingPackageVersion>
|
<MicrosoftExtensionsLoggingPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsLoggingPackageVersion>
|
||||||
<MicrosoftExtensionsLoggingTestingPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsLoggingTestingPackageVersion>
|
<MicrosoftExtensionsLoggingTestingPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsLoggingTestingPackageVersion>
|
||||||
<MicrosoftExtensionsLoggingTraceSourcePackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsLoggingTraceSourcePackageVersion>
|
<MicrosoftExtensionsLoggingTraceSourcePackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsLoggingTraceSourcePackageVersion>
|
||||||
<MicrosoftExtensionsObjectPoolPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsObjectPoolPackageVersion>
|
<MicrosoftExtensionsObjectPoolPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsObjectPoolPackageVersion>
|
||||||
<MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>
|
<MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>
|
||||||
<MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>
|
<MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>
|
||||||
<MicrosoftExtensionsOptionsPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsOptionsPackageVersion>
|
<MicrosoftExtensionsOptionsPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsOptionsPackageVersion>
|
||||||
<MicrosoftExtensionsParameterDefaultValueSourcesPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsParameterDefaultValueSourcesPackageVersion>
|
<MicrosoftExtensionsParameterDefaultValueSourcesPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsParameterDefaultValueSourcesPackageVersion>
|
||||||
<MicrosoftExtensionsPrimitivesPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsPrimitivesPackageVersion>
|
<MicrosoftExtensionsPrimitivesPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsPrimitivesPackageVersion>
|
||||||
<MicrosoftExtensionsTypeNameHelperSourcesPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsTypeNameHelperSourcesPackageVersion>
|
<MicrosoftExtensionsTypeNameHelperSourcesPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsTypeNameHelperSourcesPackageVersion>
|
||||||
<MicrosoftExtensionsValueStopwatchSourcesPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsValueStopwatchSourcesPackageVersion>
|
<MicrosoftExtensionsValueStopwatchSourcesPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsValueStopwatchSourcesPackageVersion>
|
||||||
<MicrosoftExtensionsWebEncodersPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsWebEncodersPackageVersion>
|
<MicrosoftExtensionsWebEncodersPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsWebEncodersPackageVersion>
|
||||||
<MicrosoftInternalExtensionsRefsPackageVersion>3.0.0-preview4.19216.2</MicrosoftInternalExtensionsRefsPackageVersion>
|
<MicrosoftInternalExtensionsRefsPackageVersion>3.0.0-preview5.19212.9</MicrosoftInternalExtensionsRefsPackageVersion>
|
||||||
<MicrosoftJSInteropPackageVersion>3.0.0-preview4.19216.2</MicrosoftJSInteropPackageVersion>
|
<MicrosoftJSInteropPackageVersion>3.0.0-preview5.19212.9</MicrosoftJSInteropPackageVersion>
|
||||||
<MonoWebAssemblyInteropPackageVersion>3.0.0-preview4.19216.2</MonoWebAssemblyInteropPackageVersion>
|
<MonoWebAssemblyInteropPackageVersion>3.0.0-preview5.19212.9</MonoWebAssemblyInteropPackageVersion>
|
||||||
<!-- Packages from aspnet/EntityFrameworkCore -->
|
<!-- Packages from aspnet/EntityFrameworkCore -->
|
||||||
<dotnetefPackageVersion>3.0.0-preview4.19216.3</dotnetefPackageVersion>
|
<dotnetefPackageVersion>3.0.0-preview5.19213.2</dotnetefPackageVersion>
|
||||||
<MicrosoftEntityFrameworkCoreInMemoryPackageVersion>3.0.0-preview4.19216.3</MicrosoftEntityFrameworkCoreInMemoryPackageVersion>
|
<MicrosoftEntityFrameworkCoreInMemoryPackageVersion>3.0.0-preview5.19213.2</MicrosoftEntityFrameworkCoreInMemoryPackageVersion>
|
||||||
<MicrosoftEntityFrameworkCoreRelationalPackageVersion>3.0.0-preview4.19216.3</MicrosoftEntityFrameworkCoreRelationalPackageVersion>
|
<MicrosoftEntityFrameworkCoreRelationalPackageVersion>3.0.0-preview5.19213.2</MicrosoftEntityFrameworkCoreRelationalPackageVersion>
|
||||||
<MicrosoftEntityFrameworkCoreSqlitePackageVersion>3.0.0-preview4.19216.3</MicrosoftEntityFrameworkCoreSqlitePackageVersion>
|
<MicrosoftEntityFrameworkCoreSqlitePackageVersion>3.0.0-preview5.19213.2</MicrosoftEntityFrameworkCoreSqlitePackageVersion>
|
||||||
<MicrosoftEntityFrameworkCoreSqlServerPackageVersion>3.0.0-preview4.19216.3</MicrosoftEntityFrameworkCoreSqlServerPackageVersion>
|
<MicrosoftEntityFrameworkCoreSqlServerPackageVersion>3.0.0-preview5.19213.2</MicrosoftEntityFrameworkCoreSqlServerPackageVersion>
|
||||||
<MicrosoftEntityFrameworkCoreToolsPackageVersion>3.0.0-preview4.19216.3</MicrosoftEntityFrameworkCoreToolsPackageVersion>
|
<MicrosoftEntityFrameworkCoreToolsPackageVersion>3.0.0-preview5.19213.2</MicrosoftEntityFrameworkCoreToolsPackageVersion>
|
||||||
<MicrosoftEntityFrameworkCorePackageVersion>3.0.0-preview4.19216.3</MicrosoftEntityFrameworkCorePackageVersion>
|
<MicrosoftEntityFrameworkCorePackageVersion>3.0.0-preview5.19213.2</MicrosoftEntityFrameworkCorePackageVersion>
|
||||||
<!-- Packages from aspnet/AspNetCore-Tooling -->
|
<!-- Packages from aspnet/AspNetCore-Tooling -->
|
||||||
<MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>3.0.0-preview4.19216.2</MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>
|
<MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>3.0.0-preview5.19214.1</MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>
|
||||||
<MicrosoftAspNetCoreRazorLanguagePackageVersion>3.0.0-preview4.19216.2</MicrosoftAspNetCoreRazorLanguagePackageVersion>
|
<MicrosoftAspNetCoreRazorLanguagePackageVersion>3.0.0-preview5.19214.1</MicrosoftAspNetCoreRazorLanguagePackageVersion>
|
||||||
<MicrosoftCodeAnalysisRazorPackageVersion>3.0.0-preview4.19216.2</MicrosoftCodeAnalysisRazorPackageVersion>
|
<MicrosoftCodeAnalysisRazorPackageVersion>3.0.0-preview5.19214.1</MicrosoftCodeAnalysisRazorPackageVersion>
|
||||||
<MicrosoftNETSdkRazorPackageVersion>3.0.0-preview4.19216.2</MicrosoftNETSdkRazorPackageVersion>
|
<MicrosoftNETSdkRazorPackageVersion>3.0.0-preview5.19214.1</MicrosoftNETSdkRazorPackageVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<!--
|
<!--
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,6 @@
|
||||||
|
|
||||||
.\InstallVisualStudio.ps1
|
.\InstallVisualStudio.ps1
|
||||||
#>
|
#>
|
||||||
[CmdletBinding(DefaultParameterSetName = 'Default')]
|
|
||||||
param(
|
param(
|
||||||
[ValidateSet('BuildTools','Community', 'Professional', 'Enterprise')]
|
[ValidateSet('BuildTools','Community', 'Professional', 'Enterprise')]
|
||||||
[string]$Edition = 'Enterprise',
|
[string]$Edition = 'Enterprise',
|
||||||
|
|
@ -35,8 +34,8 @@ param(
|
||||||
)
|
)
|
||||||
|
|
||||||
if ($Passive -and $Quiet) {
|
if ($Passive -and $Quiet) {
|
||||||
Write-Host "The -Passive and -Quiet options cannot be used together." -f Red
|
Write-Host -ForegroundColor Red "Error: The -Passive and -Quiet options cannot be used together."
|
||||||
Write-Host "Run ``Get-Help $PSCommandPath`` for more details." -f Red
|
Write-Host -ForegroundColor Red "Run ``Get-Help $PSCommandPath`` for more details."
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -98,15 +97,61 @@ if ($Quiet) {
|
||||||
$arguments += '--quiet', '--wait'
|
$arguments += '--quiet', '--wait'
|
||||||
}
|
}
|
||||||
|
|
||||||
Write-Host ""
|
Write-Host
|
||||||
Write-Host "Installing Visual Studio 2019 $Edition" -f Magenta
|
Write-Host "Installing Visual Studio 2019 $Edition" -f Magenta
|
||||||
Write-Host ""
|
Write-Host
|
||||||
Write-Host "Running '$bootstrapper $arguments'"
|
Write-Host "Running '$bootstrapper $arguments'"
|
||||||
|
|
||||||
$process = Start-Process -FilePath "$bootstrapper" -ArgumentList $arguments `
|
foreach ($i in 0, 1, 2) {
|
||||||
-PassThru -RedirectStandardError "$intermedateDir\errors.txt" -Verbose -Wait
|
if ($i -ne 0) {
|
||||||
if ($process.ExitCode -ne 0) {
|
Write-Host "Retrying..."
|
||||||
Get-Content "$intermedateDir\errors.txt" | Write-Error
|
}
|
||||||
|
|
||||||
|
$process = Start-Process -FilePath "$bootstrapper" -ArgumentList $arguments -ErrorAction Continue -PassThru `
|
||||||
|
-RedirectStandardError "$intermedateDir\errors.txt" -Verbose -Wait
|
||||||
|
Write-Host "Exit code = $($process.ExitCode)."
|
||||||
|
if ($process.ExitCode -eq 0) {
|
||||||
|
break
|
||||||
|
} else {
|
||||||
|
# https://docs.microsoft.com/en-us/visualstudio/install/use-command-line-parameters-to-install-visual-studio#error-codes
|
||||||
|
if ($process.ExitCode -eq 3010) {
|
||||||
|
Write-Host -ForegroundColor Red "Error: Installation requires restart to finish the VS update."
|
||||||
|
break
|
||||||
|
}
|
||||||
|
elseif ($process.ExitCode -eq 5007) {
|
||||||
|
Write-Host -ForegroundColor Red "Error: Operation was blocked - the computer does not meet the requirements."
|
||||||
|
break
|
||||||
|
}
|
||||||
|
elseif (($process.ExitCode -eq 5004) -or ($process.ExitCode -eq 1602)) {
|
||||||
|
Write-Host -ForegroundColor Red "Error: Operation was canceled."
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Write-Host -ForegroundColor Red "Error: Installation failed for an unknown reason."
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Host
|
||||||
|
Write-Host "Errors:"
|
||||||
|
Get-Content "$intermedateDir\errors.txt" | Write-Warning
|
||||||
|
Write-Host
|
||||||
|
|
||||||
|
Get-ChildItem $env:Temp\dd_bootstrapper_*.log |Sort-Object CreationTime -Descending |Select-Object -First 1 |% {
|
||||||
|
Write-Host "${_}:"
|
||||||
|
Get-Content "$_"
|
||||||
|
Write-Host
|
||||||
|
}
|
||||||
|
|
||||||
|
$clientLogs = Get-ChildItem $env:Temp\dd_client_*.log |Sort-Object CreationTime -Descending |Select-Object -First 1 |% {
|
||||||
|
Write-Host "${_}:"
|
||||||
|
Get-Content "$_"
|
||||||
|
Write-Host
|
||||||
|
}
|
||||||
|
|
||||||
|
$setupLogs = Get-ChildItem $env:Temp\dd_setup_*.log |Sort-Object CreationTime -Descending |Select-Object -First 1 |% {
|
||||||
|
Write-Host "${_}:"
|
||||||
|
Get-Content "$_"
|
||||||
|
Write-Host
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Remove-Item "$intermedateDir\errors.txt" -errorAction SilentlyContinue
|
Remove-Item "$intermedateDir\errors.txt" -errorAction SilentlyContinue
|
||||||
|
|
|
||||||
|
|
@ -18,12 +18,7 @@
|
||||||
|
|
||||||
<Target Name="Restore">
|
<Target Name="Restore">
|
||||||
<Message Importance="High" Text="Running yarn install on $(MSBuildProjectFullPath)" />
|
<Message Importance="High" Text="Running yarn install on $(MSBuildProjectFullPath)" />
|
||||||
<Yarn Command="install $(InstallArgs)" ContinueOnError="true">
|
<Yarn Command="install $(InstallArgs)" />
|
||||||
<Output TaskParameter="ExitCode" PropertyName="_YarnExitCode"/>
|
|
||||||
</Yarn>
|
|
||||||
<Yarn Command="install $(InstallArgs)" Condition="'$(_YarnExitCode)' != '0'">
|
|
||||||
<Output TaskParameter="ExitCode" PropertyName="_YarnExitCode"/>
|
|
||||||
</Yarn>
|
|
||||||
</Target>
|
</Target>
|
||||||
|
|
||||||
<Target Name="PrepareForBuild">
|
<Target Name="PrepareForBuild">
|
||||||
|
|
|
||||||
|
|
@ -148,6 +148,8 @@
|
||||||
|
|
||||||
<!-- Identify if any references were present in the last release of this package, but have been removed. -->
|
<!-- Identify if any references were present in the last release of this package, but have been removed. -->
|
||||||
<UnusedBaselinePackageReference Include="@(BaselinePackageReference)" Exclude="@(Reference);@(_ProjectReferenceByAssemblyName);@(PackageReference)" />
|
<UnusedBaselinePackageReference Include="@(BaselinePackageReference)" Exclude="@(Reference);@(_ProjectReferenceByAssemblyName);@(PackageReference)" />
|
||||||
|
<!-- Only allow suppressing baseline changes in non-servicing builds. -->
|
||||||
|
<UnusedBaselinePackageReference Remove="@(SuppressBaselineReference)" Condition="'$(IsServicingBuild)' != 'true'"/>
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
MSBuild does not provide a way to join on matching identities in a Condition,
|
MSBuild does not provide a way to join on matching identities in a Condition,
|
||||||
|
|
@ -201,8 +203,13 @@
|
||||||
<_ExplicitPackageReference Remove="@(_ExplicitPackageReference)" />
|
<_ExplicitPackageReference Remove="@(_ExplicitPackageReference)" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<Warning Condition="@(UnusedBaselinePackageReference->Count()) != 0"
|
<Warning Condition="'$(IsReferenceAssemblyProject)' != 'true' AND '$(IsServicingBuild)' != 'true' AND '%(UnusedBaselinePackageReference.Identity)' != ''"
|
||||||
Text="Package references changed since the last release. This could be a breaking change. References removed:%0A - @(UnusedBaselinePackageReference, '%0A -')" />
|
Code="BUILD001"
|
||||||
|
Text="Reference to '%(UnusedBaselinePackageReference.Identity)' was removed since the last stable release of this package. This could be a breaking change. See docs/ReferenceResolution.md for instructions on how to update changes to references or suppress this warning if the error was intentional." />
|
||||||
|
|
||||||
|
<Error Condition="'$(IsReferenceAssemblyProject)' != 'true' AND '$(IsServicingBuild)' == 'true' AND @(UnusedBaselinePackageReference->Count()) != 0"
|
||||||
|
Code="BUILD002"
|
||||||
|
Text="Package references changed since the last release. This could be a breaking change and is not allowed in a servicing update. References removed:%0A - @(UnusedBaselinePackageReference, '%0A -')" />
|
||||||
|
|
||||||
<Error Condition="'$(TargetFrameworkIdentifier)' != '.NETFramework' AND '%(Reference.Identity)' != '' AND ! Exists('%(Reference.Identity)') AND '$(DisablePackageReferenceRestrictions)' != 'true'"
|
<Error Condition="'$(TargetFrameworkIdentifier)' != '.NETFramework' AND '%(Reference.Identity)' != '' AND ! Exists('%(Reference.Identity)') AND '$(DisablePackageReferenceRestrictions)' != 'true'"
|
||||||
Code="MSB3245"
|
Code="MSB3245"
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"sdk": {
|
"sdk": {
|
||||||
"version": "3.0.100-preview4-010309"
|
"version": "3.0.100-preview4-011136"
|
||||||
},
|
},
|
||||||
"msbuild-sdks": {
|
"msbuild-sdks": {
|
||||||
"Yarn.MSBuild": "1.13.0"
|
"Yarn.MSBuild": "1.13.0"
|
||||||
|
|
|
||||||
|
|
@ -1,2 +1,2 @@
|
||||||
version:3.0.0-build-20190322.1
|
version:3.0.0-build-20190412.2
|
||||||
commithash:c38761a564c72b5bc96356ec99c89de5f281a358
|
commithash:0e543fb8761394491250585d3811bdbb62e350e8
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,6 @@
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>netcoreapp3.0</TargetFramework>
|
<TargetFramework>netcoreapp3.0</TargetFramework>
|
||||||
<!-- https://github.com/aspnet/AspNetCore/issues/6549 -->
|
|
||||||
<BuildHelixPayload>false</BuildHelixPayload>
|
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
@ -19,5 +17,25 @@
|
||||||
<Reference Include="Microsoft.Extensions.Logging.Testing" />
|
<Reference Include="Microsoft.Extensions.Logging.Testing" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
<Target Name="PublishAssets" AfterTargets="Publish">
|
||||||
|
<ItemGroup>
|
||||||
|
<_PublishFiles Include="$(MSBuildThisFileDirectory)..\testassets\AzureAD.WebSite\bin\$(Configuration)\netcoreapp3.0\AzureAD.WebSite.deps.json" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Copy
|
||||||
|
SourceFiles="@(_PublishFiles)"
|
||||||
|
DestinationFolder="$(PublishDir)" />
|
||||||
|
<!-- Drop a dummy sln to specify content root location -->
|
||||||
|
<WriteLinesToFile
|
||||||
|
File="$(PublishDir)\contentroot.sln"
|
||||||
|
Lines="Ignored"
|
||||||
|
Overwrite="true"
|
||||||
|
Encoding="Unicode"/>
|
||||||
|
<WriteLinesToFile
|
||||||
|
File="$(PublishDir)\AzureAD.WebSite\ignored.txt"
|
||||||
|
Lines="Ignored"
|
||||||
|
Overwrite="true"
|
||||||
|
Encoding="Unicode"/>
|
||||||
|
</Target>
|
||||||
|
|
||||||
<Import Project="$(MvcTestingTargets)" Condition="'$(MvcTestingTargets)' != ''" />
|
<Import Project="$(MvcTestingTargets)" Condition="'$(MvcTestingTargets)' != ''" />
|
||||||
</Project>
|
</Project>
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ namespace Microsoft.AspNetCore.Components.Forms
|
||||||
[Parameter] public Expression<Func<T>> For { get; private set; }
|
[Parameter] public Expression<Func<T>> For { get; private set; }
|
||||||
|
|
||||||
/// <summary>`
|
/// <summary>`
|
||||||
/// Constructs an instance of <see cref="ValidationSummary"/>.
|
/// Constructs an instance of <see cref="ValidationMessage{T}"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public ValidationMessage()
|
public ValidationMessage()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@
|
||||||
<Reference Include="Microsoft.AspNetCore.Mvc.Components.Prerendering" />
|
<Reference Include="Microsoft.AspNetCore.Mvc.Components.Prerendering" />
|
||||||
<Reference Include="Microsoft.AspNetCore.Components.Server" />
|
<Reference Include="Microsoft.AspNetCore.Components.Server" />
|
||||||
<Reference Include="Microsoft.AspNetCore.Mvc" />
|
<Reference Include="Microsoft.AspNetCore.Mvc" />
|
||||||
|
<Reference Include="Newtonsoft.Json" />
|
||||||
<ProjectReference Include="..\ComponentsApp.App\ComponentsApp.App.csproj" />
|
<ProjectReference Include="..\ComponentsApp.App\ComponentsApp.App.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -268,7 +268,7 @@ namespace Microsoft.AspNetCore.Hosting.Internal
|
||||||
// _builder.ConfigureContainer<T>(ConfigureContainer);
|
// _builder.ConfigureContainer<T>(ConfigureContainer);
|
||||||
typeof(IHostBuilder).GetMethods().First(m => m.Name == nameof(IHostBuilder.ConfigureContainer))
|
typeof(IHostBuilder).GetMethods().First(m => m.Name == nameof(IHostBuilder.ConfigureContainer))
|
||||||
.MakeGenericMethod(containerType)
|
.MakeGenericMethod(containerType)
|
||||||
.Invoke(_builder, new object[] { configureCallback });
|
.InvokeWithoutWrappingExceptions(_builder, new object[] { configureCallback });
|
||||||
}
|
}
|
||||||
|
|
||||||
// Resolve Configure after calling ConfigureServices and ConfigureContainer
|
// Resolve Configure after calling ConfigureServices and ConfigureContainer
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
// 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.Globalization;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using Microsoft.AspNetCore.Builder;
|
using Microsoft.AspNetCore.Builder;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
|
@ -52,8 +53,9 @@ namespace Microsoft.AspNetCore.Hosting.Internal
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
MethodInfo.Invoke(instance, parameters);
|
|
||||||
|
MethodInfo.InvokeWithoutWrappingExceptions(instance, parameters);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// 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;
|
||||||
|
|
@ -46,7 +46,7 @@ namespace Microsoft.AspNetCore.Hosting.Internal
|
||||||
|
|
||||||
var arguments = new object[1] { container };
|
var arguments = new object[1] { container };
|
||||||
|
|
||||||
MethodInfo.Invoke(instance, arguments);
|
MethodInfo.InvokeWithoutWrappingExceptions(instance, arguments);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@ namespace Microsoft.AspNetCore.Hosting.Internal
|
||||||
arguments[0] = services;
|
arguments[0] = services;
|
||||||
}
|
}
|
||||||
|
|
||||||
return MethodInfo.Invoke(instance, arguments) as IServiceProvider;
|
return MethodInfo.InvokeWithoutWrappingExceptions(instance, arguments) as IServiceProvider;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -273,6 +273,8 @@ namespace Microsoft.AspNetCore.Hosting.Internal
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_diagnosticListener.OnActivityImport(activity, httpContext);
|
||||||
|
|
||||||
if (_diagnosticListener.IsEnabled(ActivityStartKey))
|
if (_diagnosticListener.IsEnabled(ActivityStartKey))
|
||||||
{
|
{
|
||||||
_diagnosticListener.StartActivity(activity, new { HttpContext = httpContext });
|
_diagnosticListener.StartActivity(activity, new { HttpContext = httpContext });
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
// Copyright (c) .NET Foundation. All rights reserved.
|
||||||
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
using System.Reflection;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNetCore.Hosting.Internal
|
||||||
|
{
|
||||||
|
internal static class MethodInfoExtensions
|
||||||
|
{
|
||||||
|
// This version of MethodInfo.Invoke removes TargetInvocationExceptions
|
||||||
|
public static object InvokeWithoutWrappingExceptions(this MethodInfo methodInfo, object obj, object[] parameters)
|
||||||
|
{
|
||||||
|
// These are the default arguments passed when methodInfo.Invoke(obj, parameters) are called. We do the same
|
||||||
|
// here but specify BindingFlags.DoNotWrapExceptions to avoid getting TAE (TargetInvocationException)
|
||||||
|
// methodInfo.Invoke(obj, BindingFlags.Default, binder: null, parameters: parameters, culture: null)
|
||||||
|
|
||||||
|
return methodInfo.Invoke(obj, BindingFlags.DoNotWrapExceptions, binder: null, parameters: parameters, culture: null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -175,6 +175,10 @@ namespace Microsoft.AspNetCore.Hosting
|
||||||
{
|
{
|
||||||
host.Initialize();
|
host.Initialize();
|
||||||
|
|
||||||
|
// resolve configuration explicitly once to mark it as resolved within the
|
||||||
|
// service provider, ensuring it will be properly disposed with the provider
|
||||||
|
_ = host.Services.GetService<IConfiguration>();
|
||||||
|
|
||||||
var logger = host.Services.GetRequiredService<ILogger<WebHost>>();
|
var logger = host.Services.GetRequiredService<ILogger<WebHost>>();
|
||||||
|
|
||||||
// Warn about duplicate HostingStartupAssemblies
|
// Warn about duplicate HostingStartupAssemblies
|
||||||
|
|
@ -264,12 +268,13 @@ namespace Microsoft.AspNetCore.Hosting
|
||||||
|
|
||||||
var builder = new ConfigurationBuilder()
|
var builder = new ConfigurationBuilder()
|
||||||
.SetBasePath(_hostingEnvironment.ContentRootPath)
|
.SetBasePath(_hostingEnvironment.ContentRootPath)
|
||||||
.AddConfiguration(_config);
|
.AddConfiguration(_config, shouldDisposeConfiguration: true);
|
||||||
|
|
||||||
_configureAppConfigurationBuilder?.Invoke(_context, builder);
|
_configureAppConfigurationBuilder?.Invoke(_context, builder);
|
||||||
|
|
||||||
var configuration = builder.Build();
|
var configuration = builder.Build();
|
||||||
services.AddSingleton<IConfiguration>(configuration);
|
// register configuration as factory to make it dispose with the service provider
|
||||||
|
services.AddSingleton<IConfiguration>(_ => configuration);
|
||||||
_context.Configuration = configuration;
|
_context.Configuration = configuration;
|
||||||
|
|
||||||
var listener = new DiagnosticListener("Microsoft.AspNetCore");
|
var listener = new DiagnosticListener("Microsoft.AspNetCore");
|
||||||
|
|
|
||||||
|
|
@ -11,8 +11,6 @@ using Microsoft.AspNetCore.Hosting.Internal;
|
||||||
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Http;
|
||||||
using Microsoft.AspNetCore.Http.Features;
|
using Microsoft.AspNetCore.Http.Features;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Microsoft.Extensions.ObjectPool;
|
|
||||||
using Microsoft.Extensions.Options;
|
|
||||||
using Moq;
|
using Moq;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
|
|
@ -304,6 +302,34 @@ namespace Microsoft.AspNetCore.Hosting.Tests
|
||||||
Assert.Contains(Activity.Current.Baggage, pair => pair.Key == "Key2" && pair.Value == "value2");
|
Assert.Contains(Activity.Current.Baggage, pair => pair.Key == "Key2" && pair.Value == "value2");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void ActivityOnExportHookIsCalled()
|
||||||
|
{
|
||||||
|
var diagnosticSource = new DiagnosticListener("DummySource");
|
||||||
|
var hostingApplication = CreateApplication(out var features, diagnosticSource: diagnosticSource);
|
||||||
|
|
||||||
|
bool onActivityImportCalled = false;
|
||||||
|
diagnosticSource.Subscribe(
|
||||||
|
observer: new CallbackDiagnosticListener(pair => { }),
|
||||||
|
isEnabled: (s, o, _) => true,
|
||||||
|
onActivityImport: (activity, context) =>
|
||||||
|
{
|
||||||
|
onActivityImportCalled = true;
|
||||||
|
Assert.Null(Activity.Current);
|
||||||
|
Assert.Equal("Microsoft.AspNetCore.Hosting.HttpRequestIn", activity.OperationName);
|
||||||
|
Assert.NotNull(context);
|
||||||
|
Assert.IsAssignableFrom<HttpContext>(context);
|
||||||
|
|
||||||
|
activity.ActivityTraceFlags = ActivityTraceFlags.Recorded;
|
||||||
|
});
|
||||||
|
|
||||||
|
hostingApplication.CreateContext(features);
|
||||||
|
|
||||||
|
Assert.True(onActivityImportCalled);
|
||||||
|
Assert.NotNull(Activity.Current);
|
||||||
|
Assert.True(Activity.Current.Recorded);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private static void AssertProperty<T>(object o, string name)
|
private static void AssertProperty<T>(object o, string name)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -500,8 +500,36 @@ namespace Microsoft.AspNetCore.Hosting.Tests
|
||||||
var app = new ApplicationBuilder(services);
|
var app = new ApplicationBuilder(services);
|
||||||
app.ApplicationServices = startup.ConfigureServicesDelegate(serviceCollection);
|
app.ApplicationServices = startup.ConfigureServicesDelegate(serviceCollection);
|
||||||
|
|
||||||
var ex = Assert.Throws<TargetInvocationException>(() => startup.ConfigureDelegate(app));
|
Assert.Throws<InvalidOperationException>(() => startup.ConfigureDelegate(app));
|
||||||
Assert.IsAssignableFrom<InvalidOperationException>(ex.InnerException);
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void ConfigureServicesThrowingDoesNotThrowTargetInvocationException()
|
||||||
|
{
|
||||||
|
var serviceCollection = new ServiceCollection();
|
||||||
|
serviceCollection.AddSingleton<IServiceProviderFactory<IServiceCollection>, DefaultServiceProviderFactory>();
|
||||||
|
var services = serviceCollection.BuildServiceProvider();
|
||||||
|
|
||||||
|
var startup = StartupLoader.LoadMethods(services, typeof(StartupConfigureServicesThrows), environmentName: null);
|
||||||
|
|
||||||
|
var app = new ApplicationBuilder(services);
|
||||||
|
|
||||||
|
Assert.Throws<Exception>(() => startup.ConfigureServicesDelegate(serviceCollection));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void ConfigureThrowingDoesNotThrowTargetInvocationException()
|
||||||
|
{
|
||||||
|
var serviceCollection = new ServiceCollection();
|
||||||
|
serviceCollection.AddSingleton<IServiceProviderFactory<IServiceCollection>, DefaultServiceProviderFactory>();
|
||||||
|
var services = serviceCollection.BuildServiceProvider();
|
||||||
|
|
||||||
|
var startup = StartupLoader.LoadMethods(services, typeof(StartupConfigureThrows), environmentName: null);
|
||||||
|
|
||||||
|
var app = new ApplicationBuilder(services);
|
||||||
|
app.ApplicationServices = startup.ConfigureServicesDelegate(serviceCollection);
|
||||||
|
|
||||||
|
Assert.Throws<Exception>(() => startup.ConfigureDelegate(app));
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
|
|
||||||
|
|
@ -975,6 +975,54 @@ namespace Microsoft.AspNetCore.Hosting
|
||||||
Assert.Contains("ConfigureServices", ex.Message);
|
Assert.Contains("ConfigureServices", ex.Message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Dispose_DisposesAppConfiguration()
|
||||||
|
{
|
||||||
|
var providerMock = new Mock<ConfigurationProvider>().As<IDisposable>();
|
||||||
|
providerMock.Setup(d => d.Dispose());
|
||||||
|
|
||||||
|
var sourceMock = new Mock<IConfigurationSource>();
|
||||||
|
sourceMock.Setup(s => s.Build(It.IsAny<IConfigurationBuilder>()))
|
||||||
|
.Returns((ConfigurationProvider)providerMock.Object);
|
||||||
|
|
||||||
|
var host = CreateBuilder()
|
||||||
|
.ConfigureAppConfiguration(configuration =>
|
||||||
|
{
|
||||||
|
configuration.Add(sourceMock.Object);
|
||||||
|
})
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
providerMock.Verify(c => c.Dispose(), Times.Never);
|
||||||
|
|
||||||
|
host.Dispose();
|
||||||
|
|
||||||
|
providerMock.Verify(c => c.Dispose(), Times.AtLeastOnce());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task DisposeAsync_DisposesAppConfiguration()
|
||||||
|
{
|
||||||
|
var providerMock = new Mock<ConfigurationProvider>().As<IDisposable>();
|
||||||
|
providerMock.Setup(d => d.Dispose());
|
||||||
|
|
||||||
|
var sourceMock = new Mock<IConfigurationSource>();
|
||||||
|
sourceMock.Setup(s => s.Build(It.IsAny<IConfigurationBuilder>()))
|
||||||
|
.Returns((ConfigurationProvider)providerMock.Object);
|
||||||
|
|
||||||
|
var host = CreateBuilder()
|
||||||
|
.ConfigureAppConfiguration(configuration =>
|
||||||
|
{
|
||||||
|
configuration.Add(sourceMock.Object);
|
||||||
|
})
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
providerMock.Verify(c => c.Dispose(), Times.Never);
|
||||||
|
|
||||||
|
await ((IAsyncDisposable)host).DisposeAsync();
|
||||||
|
|
||||||
|
providerMock.Verify(c => c.Dispose(), Times.AtLeastOnce());
|
||||||
|
}
|
||||||
|
|
||||||
public class BadConfigureServicesStartup
|
public class BadConfigureServicesStartup
|
||||||
{
|
{
|
||||||
public void ConfigureServices(IServiceCollection services, int gunk) { }
|
public void ConfigureServices(IServiceCollection services, int gunk) { }
|
||||||
|
|
|
||||||
|
|
@ -19,11 +19,9 @@ namespace Microsoft.AspNetCore.Http.Internal
|
||||||
public static StringValues GetHeaderSplit(IHeaderDictionary headers, string key)
|
public static StringValues GetHeaderSplit(IHeaderDictionary headers, string key)
|
||||||
{
|
{
|
||||||
var values = GetHeaderUnmodified(headers, key);
|
var values = GetHeaderUnmodified(headers, key);
|
||||||
return new StringValues(GetHeaderSplitImplementation(values).ToArray());
|
|
||||||
}
|
|
||||||
|
|
||||||
private static IEnumerable<string> GetHeaderSplitImplementation(StringValues values)
|
StringValues result = default;
|
||||||
{
|
|
||||||
foreach (var segment in new HeaderSegmentCollection(values))
|
foreach (var segment in new HeaderSegmentCollection(values))
|
||||||
{
|
{
|
||||||
if (!StringSegment.IsNullOrEmpty(segment.Data))
|
if (!StringSegment.IsNullOrEmpty(segment.Data))
|
||||||
|
|
@ -31,10 +29,12 @@ namespace Microsoft.AspNetCore.Http.Internal
|
||||||
var value = DeQuote(segment.Data.Value);
|
var value = DeQuote(segment.Data.Value);
|
||||||
if (!string.IsNullOrEmpty(value))
|
if (!string.IsNullOrEmpty(value))
|
||||||
{
|
{
|
||||||
yield return value;
|
result = StringValues.Concat(in result, value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static StringValues GetHeaderUnmodified(IHeaderDictionary headers, string key)
|
public static StringValues GetHeaderUnmodified(IHeaderDictionary headers, string key)
|
||||||
|
|
|
||||||
|
|
@ -406,7 +406,7 @@ namespace Microsoft.AspNetCore.Http.Internal
|
||||||
{
|
{
|
||||||
public ItemsDictionary() { }
|
public ItemsDictionary() { }
|
||||||
public ItemsDictionary(System.Collections.Generic.IDictionary<object, object> items) { }
|
public ItemsDictionary(System.Collections.Generic.IDictionary<object, object> items) { }
|
||||||
public System.Collections.Generic.IDictionary<object, object> Items { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
public System.Collections.Generic.IDictionary<object, object> Items { get { throw null; } }
|
||||||
int System.Collections.Generic.ICollection<System.Collections.Generic.KeyValuePair<System.Object,System.Object>>.Count { get { throw null; } }
|
int System.Collections.Generic.ICollection<System.Collections.Generic.KeyValuePair<System.Object,System.Object>>.Count { get { throw null; } }
|
||||||
bool System.Collections.Generic.ICollection<System.Collections.Generic.KeyValuePair<System.Object,System.Object>>.IsReadOnly { get { throw null; } }
|
bool System.Collections.Generic.ICollection<System.Collections.Generic.KeyValuePair<System.Object,System.Object>>.IsReadOnly { get { throw null; } }
|
||||||
object System.Collections.Generic.IDictionary<System.Object,System.Object>.this[object key] { get { throw null; } set { } }
|
object System.Collections.Generic.IDictionary<System.Object,System.Object>.this[object key] { get { throw null; } set { } }
|
||||||
|
|
|
||||||
|
|
@ -8,111 +8,155 @@ namespace Microsoft.AspNetCore.Http.Internal
|
||||||
{
|
{
|
||||||
public class ItemsDictionary : IDictionary<object, object>
|
public class ItemsDictionary : IDictionary<object, object>
|
||||||
{
|
{
|
||||||
|
private IDictionary<object, object> _items;
|
||||||
|
|
||||||
public ItemsDictionary()
|
public ItemsDictionary()
|
||||||
: this(new Dictionary<object, object>())
|
{}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public ItemsDictionary(IDictionary<object, object> items)
|
public ItemsDictionary(IDictionary<object, object> items)
|
||||||
{
|
{
|
||||||
Items = items;
|
_items = items;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IDictionary<object, object> Items { get; }
|
public IDictionary<object, object> Items => this;
|
||||||
|
|
||||||
// Replace the indexer with one that returns null for missing values
|
// Replace the indexer with one that returns null for missing values
|
||||||
object IDictionary<object, object>.this[object key]
|
object IDictionary<object, object>.this[object key]
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
object value;
|
if (_items != null && _items.TryGetValue(key, out var value))
|
||||||
if (Items.TryGetValue(key, out value))
|
|
||||||
{
|
{
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
set { Items[key] = value; }
|
set
|
||||||
|
{
|
||||||
|
EnsureDictionary();
|
||||||
|
_items[key] = value;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void IDictionary<object, object>.Add(object key, object value)
|
void IDictionary<object, object>.Add(object key, object value)
|
||||||
{
|
{
|
||||||
Items.Add(key, value);
|
EnsureDictionary();
|
||||||
|
_items.Add(key, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IDictionary<object, object>.ContainsKey(object key)
|
bool IDictionary<object, object>.ContainsKey(object key)
|
||||||
{
|
=> _items != null && _items.ContainsKey(key);
|
||||||
return Items.ContainsKey(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
ICollection<object> IDictionary<object, object>.Keys
|
ICollection<object> IDictionary<object, object>.Keys
|
||||||
{
|
{
|
||||||
get { return Items.Keys; }
|
get
|
||||||
|
{
|
||||||
|
if (_items == null)
|
||||||
|
{
|
||||||
|
return EmptyDictionary.Dictionary.Keys;
|
||||||
|
}
|
||||||
|
|
||||||
|
return _items.Keys;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IDictionary<object, object>.Remove(object key)
|
bool IDictionary<object, object>.Remove(object key)
|
||||||
{
|
=> _items != null && _items.Remove(key);
|
||||||
return Items.Remove(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool IDictionary<object, object>.TryGetValue(object key, out object value)
|
bool IDictionary<object, object>.TryGetValue(object key, out object value)
|
||||||
{
|
{
|
||||||
return Items.TryGetValue(key, out value);
|
value = null;
|
||||||
|
return _items != null && _items.TryGetValue(key, out value);
|
||||||
}
|
}
|
||||||
|
|
||||||
ICollection<object> IDictionary<object, object>.Values
|
ICollection<object> IDictionary<object, object>.Values
|
||||||
{
|
{
|
||||||
get { return Items.Values; }
|
get
|
||||||
|
{
|
||||||
|
if (_items == null)
|
||||||
|
{
|
||||||
|
return EmptyDictionary.Dictionary.Values;
|
||||||
|
}
|
||||||
|
|
||||||
|
return _items.Values;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ICollection<KeyValuePair<object, object>>.Add(KeyValuePair<object, object> item)
|
void ICollection<KeyValuePair<object, object>>.Add(KeyValuePair<object, object> item)
|
||||||
{
|
{
|
||||||
Items.Add(item);
|
EnsureDictionary();
|
||||||
|
_items.Add(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ICollection<KeyValuePair<object, object>>.Clear()
|
void ICollection<KeyValuePair<object, object>>.Clear() => _items?.Clear();
|
||||||
{
|
|
||||||
Items.Clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ICollection<KeyValuePair<object, object>>.Contains(KeyValuePair<object, object> item)
|
bool ICollection<KeyValuePair<object, object>>.Contains(KeyValuePair<object, object> item)
|
||||||
{
|
=> _items != null && _items.Contains(item);
|
||||||
return Items.Contains(item);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ICollection<KeyValuePair<object, object>>.CopyTo(KeyValuePair<object, object>[] array, int arrayIndex)
|
void ICollection<KeyValuePair<object, object>>.CopyTo(KeyValuePair<object, object>[] array, int arrayIndex)
|
||||||
{
|
{
|
||||||
Items.CopyTo(array, arrayIndex);
|
if (_items == null)
|
||||||
|
{
|
||||||
|
//Delegate to Empty Dictionary to do the argument checking.
|
||||||
|
EmptyDictionary.Collection.CopyTo(array, arrayIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
_items.CopyTo(array, arrayIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
int ICollection<KeyValuePair<object, object>>.Count
|
int ICollection<KeyValuePair<object, object>>.Count => _items?.Count ?? 0;
|
||||||
{
|
|
||||||
get { return Items.Count; }
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ICollection<KeyValuePair<object, object>>.IsReadOnly
|
bool ICollection<KeyValuePair<object, object>>.IsReadOnly => _items?.IsReadOnly ?? false;
|
||||||
{
|
|
||||||
get { return Items.IsReadOnly; }
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ICollection<KeyValuePair<object, object>>.Remove(KeyValuePair<object, object> item)
|
bool ICollection<KeyValuePair<object, object>>.Remove(KeyValuePair<object, object> item)
|
||||||
{
|
{
|
||||||
object value;
|
if (_items == null)
|
||||||
if (Items.TryGetValue(item.Key, out value) && Equals(item.Value, value))
|
|
||||||
{
|
{
|
||||||
return Items.Remove(item.Key);
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_items.TryGetValue(item.Key, out var value) && Equals(item.Value, value))
|
||||||
|
{
|
||||||
|
return _items.Remove(item.Key);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
IEnumerator<KeyValuePair<object, object>> IEnumerable<KeyValuePair<object, object>>.GetEnumerator()
|
private void EnsureDictionary()
|
||||||
{
|
{
|
||||||
return Items.GetEnumerator();
|
if (_items == null)
|
||||||
|
{
|
||||||
|
_items = new Dictionary<object, object>();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
IEnumerator IEnumerable.GetEnumerator()
|
IEnumerator<KeyValuePair<object, object>> IEnumerable<KeyValuePair<object, object>>.GetEnumerator()
|
||||||
|
=> _items?.GetEnumerator() ?? EmptyEnumerator.Instance;
|
||||||
|
|
||||||
|
IEnumerator IEnumerable.GetEnumerator() => _items.GetEnumerator() ?? EmptyEnumerator.Instance;
|
||||||
|
|
||||||
|
private class EmptyEnumerator : IEnumerator<KeyValuePair<object, object>>
|
||||||
{
|
{
|
||||||
return Items.GetEnumerator();
|
// In own class so only initalized if GetEnumerator is called on an empty ItemsDictionary
|
||||||
|
public readonly static IEnumerator<KeyValuePair<object, object>> Instance = new EmptyEnumerator();
|
||||||
|
public KeyValuePair<object, object> Current => default;
|
||||||
|
|
||||||
|
object IEnumerator.Current => null;
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{ }
|
||||||
|
|
||||||
|
public bool MoveNext() => false;
|
||||||
|
|
||||||
|
public void Reset()
|
||||||
|
{ }
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class EmptyDictionary
|
||||||
|
{
|
||||||
|
// In own class so only initalized if CopyTo is called on an empty ItemsDictionary
|
||||||
|
public readonly static IDictionary<object, object> Dictionary = new Dictionary<object, object>();
|
||||||
|
public static ICollection<KeyValuePair<object, object>> Collection => Dictionary;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -491,71 +491,19 @@ namespace Microsoft.AspNetCore.Routing.Constraints
|
||||||
}
|
}
|
||||||
namespace Microsoft.AspNetCore.Routing.Internal
|
namespace Microsoft.AspNetCore.Routing.Internal
|
||||||
{
|
{
|
||||||
[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
|
|
||||||
public readonly partial struct BufferValue
|
|
||||||
{
|
|
||||||
private readonly object _dummy;
|
|
||||||
private readonly int _dummyPrimitive;
|
|
||||||
public BufferValue(string value, bool requiresEncoding) { throw null; }
|
|
||||||
public bool RequiresEncoding { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
|
||||||
public string Value { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
|
||||||
}
|
|
||||||
public partial class DfaGraphWriter
|
public partial class DfaGraphWriter
|
||||||
{
|
{
|
||||||
public DfaGraphWriter(System.IServiceProvider services) { }
|
public DfaGraphWriter(System.IServiceProvider services) { }
|
||||||
public void Write(Microsoft.AspNetCore.Routing.EndpointDataSource dataSource, System.IO.TextWriter writer) { }
|
public void Write(Microsoft.AspNetCore.Routing.EndpointDataSource dataSource, System.IO.TextWriter writer) { }
|
||||||
}
|
}
|
||||||
[System.Diagnostics.DebuggerDisplayAttribute("{DebuggerDisplayString,nq}")]
|
[System.ObsoleteAttribute("This type will be marked as internal in a future release.")]
|
||||||
public partial class LinkGenerationDecisionTree
|
|
||||||
{
|
|
||||||
public LinkGenerationDecisionTree(System.Collections.Generic.IReadOnlyList<Microsoft.AspNetCore.Routing.Tree.OutboundMatch> entries) { }
|
|
||||||
public System.Collections.Generic.IList<Microsoft.AspNetCore.Routing.Internal.OutboundMatchResult> GetMatches(Microsoft.AspNetCore.Routing.RouteValueDictionary values, Microsoft.AspNetCore.Routing.RouteValueDictionary ambientValues) { throw null; }
|
|
||||||
}
|
|
||||||
[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
|
|
||||||
public readonly partial struct OutboundMatchResult
|
|
||||||
{
|
|
||||||
private readonly object _dummy;
|
|
||||||
private readonly int _dummyPrimitive;
|
|
||||||
public OutboundMatchResult(Microsoft.AspNetCore.Routing.Tree.OutboundMatch match, bool isFallbackMatch) { throw null; }
|
|
||||||
public bool IsFallbackMatch { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
|
||||||
public Microsoft.AspNetCore.Routing.Tree.OutboundMatch Match { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
|
||||||
}
|
|
||||||
[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
|
|
||||||
public partial struct PathTokenizer : System.Collections.Generic.IEnumerable<Microsoft.Extensions.Primitives.StringSegment>, System.Collections.Generic.IReadOnlyCollection<Microsoft.Extensions.Primitives.StringSegment>, System.Collections.Generic.IReadOnlyList<Microsoft.Extensions.Primitives.StringSegment>, System.Collections.IEnumerable
|
|
||||||
{
|
|
||||||
private object _dummy;
|
|
||||||
private int _dummyPrimitive;
|
|
||||||
public PathTokenizer(Microsoft.AspNetCore.Http.PathString path) { throw null; }
|
|
||||||
public int Count { get { throw null; } }
|
|
||||||
public Microsoft.Extensions.Primitives.StringSegment this[int index] { get { throw null; } }
|
|
||||||
public Microsoft.AspNetCore.Routing.Internal.PathTokenizer.Enumerator GetEnumerator() { throw null; }
|
|
||||||
System.Collections.Generic.IEnumerator<Microsoft.Extensions.Primitives.StringSegment> System.Collections.Generic.IEnumerable<Microsoft.Extensions.Primitives.StringSegment>.GetEnumerator() { throw null; }
|
|
||||||
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { throw null; }
|
|
||||||
[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
|
|
||||||
public partial struct Enumerator : System.Collections.Generic.IEnumerator<Microsoft.Extensions.Primitives.StringSegment>, System.Collections.IEnumerator, System.IDisposable
|
|
||||||
{
|
|
||||||
private object _dummy;
|
|
||||||
private int _dummyPrimitive;
|
|
||||||
public Enumerator(Microsoft.AspNetCore.Routing.Internal.PathTokenizer tokenizer) { throw null; }
|
|
||||||
public Microsoft.Extensions.Primitives.StringSegment Current { get { throw null; } }
|
|
||||||
object System.Collections.IEnumerator.Current { get { throw null; } }
|
|
||||||
public void Dispose() { }
|
|
||||||
public bool MoveNext() { throw null; }
|
|
||||||
public void Reset() { }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
public enum SegmentState
|
public enum SegmentState
|
||||||
{
|
{
|
||||||
Beginning = 0,
|
Beginning = 0,
|
||||||
Inside = 1,
|
Inside = 1,
|
||||||
}
|
}
|
||||||
public partial class UriBuilderContextPooledObjectPolicy : Microsoft.Extensions.ObjectPool.IPooledObjectPolicy<Microsoft.AspNetCore.Routing.Internal.UriBuildingContext>
|
|
||||||
{
|
|
||||||
public UriBuilderContextPooledObjectPolicy() { }
|
|
||||||
public Microsoft.AspNetCore.Routing.Internal.UriBuildingContext Create() { throw null; }
|
|
||||||
public bool Return(Microsoft.AspNetCore.Routing.Internal.UriBuildingContext obj) { throw null; }
|
|
||||||
}
|
|
||||||
[System.Diagnostics.DebuggerDisplayAttribute("{DebuggerToString(),nq}")]
|
[System.Diagnostics.DebuggerDisplayAttribute("{DebuggerToString(),nq}")]
|
||||||
|
[System.ObsoleteAttribute("This type will be marked as internal in a future release.")]
|
||||||
public partial class UriBuildingContext
|
public partial class UriBuildingContext
|
||||||
{
|
{
|
||||||
public UriBuildingContext(System.Text.Encodings.Web.UrlEncoder urlEncoder) { }
|
public UriBuildingContext(System.Text.Encodings.Web.UrlEncoder urlEncoder) { }
|
||||||
|
|
@ -808,13 +756,21 @@ namespace Microsoft.AspNetCore.Routing.Template
|
||||||
}
|
}
|
||||||
public partial class TemplateBinder
|
public partial class TemplateBinder
|
||||||
{
|
{
|
||||||
|
[System.ObsoleteAttribute("This constructor is obsolete and will be marked internal in a future release. Use the TemplateBinderFactory service to create TemplateBinder instances.")]
|
||||||
public TemplateBinder(System.Text.Encodings.Web.UrlEncoder urlEncoder, Microsoft.Extensions.ObjectPool.ObjectPool<Microsoft.AspNetCore.Routing.Internal.UriBuildingContext> pool, Microsoft.AspNetCore.Routing.Patterns.RoutePattern pattern, Microsoft.AspNetCore.Routing.RouteValueDictionary defaults, System.Collections.Generic.IEnumerable<string> requiredKeys, System.Collections.Generic.IEnumerable<System.ValueTuple<string, Microsoft.AspNetCore.Routing.IParameterPolicy>> parameterPolicies) { }
|
public TemplateBinder(System.Text.Encodings.Web.UrlEncoder urlEncoder, Microsoft.Extensions.ObjectPool.ObjectPool<Microsoft.AspNetCore.Routing.Internal.UriBuildingContext> pool, Microsoft.AspNetCore.Routing.Patterns.RoutePattern pattern, Microsoft.AspNetCore.Routing.RouteValueDictionary defaults, System.Collections.Generic.IEnumerable<string> requiredKeys, System.Collections.Generic.IEnumerable<System.ValueTuple<string, Microsoft.AspNetCore.Routing.IParameterPolicy>> parameterPolicies) { }
|
||||||
|
[System.ObsoleteAttribute("This constructor is obsolete and will be marked internal in a furture release. Use the TemplateBinderFactory service to create TemplateBinder instances.")]
|
||||||
public TemplateBinder(System.Text.Encodings.Web.UrlEncoder urlEncoder, Microsoft.Extensions.ObjectPool.ObjectPool<Microsoft.AspNetCore.Routing.Internal.UriBuildingContext> pool, Microsoft.AspNetCore.Routing.Template.RouteTemplate template, Microsoft.AspNetCore.Routing.RouteValueDictionary defaults) { }
|
public TemplateBinder(System.Text.Encodings.Web.UrlEncoder urlEncoder, Microsoft.Extensions.ObjectPool.ObjectPool<Microsoft.AspNetCore.Routing.Internal.UriBuildingContext> pool, Microsoft.AspNetCore.Routing.Template.RouteTemplate template, Microsoft.AspNetCore.Routing.RouteValueDictionary defaults) { }
|
||||||
public string BindValues(Microsoft.AspNetCore.Routing.RouteValueDictionary acceptedValues) { throw null; }
|
public string BindValues(Microsoft.AspNetCore.Routing.RouteValueDictionary acceptedValues) { throw null; }
|
||||||
public Microsoft.AspNetCore.Routing.Template.TemplateValuesResult GetValues(Microsoft.AspNetCore.Routing.RouteValueDictionary ambientValues, Microsoft.AspNetCore.Routing.RouteValueDictionary values) { throw null; }
|
public Microsoft.AspNetCore.Routing.Template.TemplateValuesResult GetValues(Microsoft.AspNetCore.Routing.RouteValueDictionary ambientValues, Microsoft.AspNetCore.Routing.RouteValueDictionary values) { throw null; }
|
||||||
public static bool RoutePartsEqual(object a, object b) { throw null; }
|
public static bool RoutePartsEqual(object a, object b) { throw null; }
|
||||||
public bool TryProcessConstraints(Microsoft.AspNetCore.Http.HttpContext httpContext, Microsoft.AspNetCore.Routing.RouteValueDictionary combinedValues, out string parameterName, out Microsoft.AspNetCore.Routing.IRouteConstraint constraint) { throw null; }
|
public bool TryProcessConstraints(Microsoft.AspNetCore.Http.HttpContext httpContext, Microsoft.AspNetCore.Routing.RouteValueDictionary combinedValues, out string parameterName, out Microsoft.AspNetCore.Routing.IRouteConstraint constraint) { throw null; }
|
||||||
}
|
}
|
||||||
|
public abstract partial class TemplateBinderFactory
|
||||||
|
{
|
||||||
|
protected TemplateBinderFactory() { }
|
||||||
|
public abstract Microsoft.AspNetCore.Routing.Template.TemplateBinder Create(Microsoft.AspNetCore.Routing.Patterns.RoutePattern pattern);
|
||||||
|
public abstract Microsoft.AspNetCore.Routing.Template.TemplateBinder Create(Microsoft.AspNetCore.Routing.Template.RouteTemplate template, Microsoft.AspNetCore.Routing.RouteValueDictionary defaults);
|
||||||
|
}
|
||||||
public partial class TemplateMatcher
|
public partial class TemplateMatcher
|
||||||
{
|
{
|
||||||
public TemplateMatcher(Microsoft.AspNetCore.Routing.Template.RouteTemplate template, Microsoft.AspNetCore.Routing.RouteValueDictionary defaults) { }
|
public TemplateMatcher(Microsoft.AspNetCore.Routing.Template.RouteTemplate template, Microsoft.AspNetCore.Routing.RouteValueDictionary defaults) { }
|
||||||
|
|
@ -901,6 +857,7 @@ namespace Microsoft.AspNetCore.Routing.Tree
|
||||||
}
|
}
|
||||||
public partial class TreeRouteBuilder
|
public partial class TreeRouteBuilder
|
||||||
{
|
{
|
||||||
|
[System.ObsoleteAttribute("This constructor will be marked internal in a future release. Use the service provider to create instances of TreeRouteBuilder.")]
|
||||||
public TreeRouteBuilder(Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, Microsoft.Extensions.ObjectPool.ObjectPool<Microsoft.AspNetCore.Routing.Internal.UriBuildingContext> objectPool, Microsoft.AspNetCore.Routing.IInlineConstraintResolver constraintResolver) { }
|
public TreeRouteBuilder(Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, Microsoft.Extensions.ObjectPool.ObjectPool<Microsoft.AspNetCore.Routing.Internal.UriBuildingContext> objectPool, Microsoft.AspNetCore.Routing.IInlineConstraintResolver constraintResolver) { }
|
||||||
public System.Collections.Generic.IList<Microsoft.AspNetCore.Routing.Tree.InboundRouteEntry> InboundEntries { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
public System.Collections.Generic.IList<Microsoft.AspNetCore.Routing.Tree.InboundRouteEntry> InboundEntries { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||||
public System.Collections.Generic.IList<Microsoft.AspNetCore.Routing.Tree.OutboundRouteEntry> OutboundEntries { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
public System.Collections.Generic.IList<Microsoft.AspNetCore.Routing.Tree.OutboundRouteEntry> OutboundEntries { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||||
|
|
@ -913,6 +870,7 @@ namespace Microsoft.AspNetCore.Routing.Tree
|
||||||
public partial class TreeRouter : Microsoft.AspNetCore.Routing.IRouter
|
public partial class TreeRouter : Microsoft.AspNetCore.Routing.IRouter
|
||||||
{
|
{
|
||||||
public static readonly string RouteGroupKey;
|
public static readonly string RouteGroupKey;
|
||||||
|
[System.ObsoleteAttribute("This constructor will be marked obsolete in a future release. Use the TreeRouterBuilder to create instances of TreeRouter.")]
|
||||||
public TreeRouter(Microsoft.AspNetCore.Routing.Tree.UrlMatchingTree[] trees, System.Collections.Generic.IEnumerable<Microsoft.AspNetCore.Routing.Tree.OutboundRouteEntry> linkGenerationEntries, System.Text.Encodings.Web.UrlEncoder urlEncoder, Microsoft.Extensions.ObjectPool.ObjectPool<Microsoft.AspNetCore.Routing.Internal.UriBuildingContext> objectPool, Microsoft.Extensions.Logging.ILogger routeLogger, Microsoft.Extensions.Logging.ILogger constraintLogger, int version) { }
|
public TreeRouter(Microsoft.AspNetCore.Routing.Tree.UrlMatchingTree[] trees, System.Collections.Generic.IEnumerable<Microsoft.AspNetCore.Routing.Tree.OutboundRouteEntry> linkGenerationEntries, System.Text.Encodings.Web.UrlEncoder urlEncoder, Microsoft.Extensions.ObjectPool.ObjectPool<Microsoft.AspNetCore.Routing.Internal.UriBuildingContext> objectPool, Microsoft.Extensions.Logging.ILogger routeLogger, Microsoft.Extensions.Logging.ILogger constraintLogger, int version) { }
|
||||||
public int Version { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
public int Version { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||||
public Microsoft.AspNetCore.Routing.VirtualPathData GetVirtualPath(Microsoft.AspNetCore.Routing.VirtualPathContext context) { throw null; }
|
public Microsoft.AspNetCore.Routing.VirtualPathData GetVirtualPath(Microsoft.AspNetCore.Routing.VirtualPathContext context) { throw null; }
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Licensed to the .NET Foundation under one or more agreements.
|
// Licensed to the .NET Foundation under one or more agreements.
|
||||||
// The .NET Foundation licenses this file to you under the MIT license.
|
// The .NET Foundation licenses this file to you under the MIT license.
|
||||||
// See the LICENSE file in the project root for more information.
|
// See the LICENSE file in the project root for more information.
|
||||||
|
|
||||||
|
|
@ -10,7 +10,7 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Routing.Internal
|
namespace Microsoft.AspNetCore.Routing
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Helper type for avoiding allocations while building arrays.
|
/// Helper type for avoiding allocations while building arrays.
|
||||||
|
|
@ -166,4 +166,4 @@ namespace Microsoft.AspNetCore.Routing.Internal
|
||||||
_array = next;
|
_array = next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -22,7 +22,7 @@ namespace Microsoft.AspNetCore.Routing
|
||||||
internal sealed class DefaultLinkGenerator : LinkGenerator, IDisposable
|
internal sealed class DefaultLinkGenerator : LinkGenerator, IDisposable
|
||||||
{
|
{
|
||||||
private readonly ParameterPolicyFactory _parameterPolicyFactory;
|
private readonly ParameterPolicyFactory _parameterPolicyFactory;
|
||||||
private readonly ObjectPool<UriBuildingContext> _uriBuildingContextPool;
|
private readonly TemplateBinderFactory _binderFactory;
|
||||||
private readonly ILogger<DefaultLinkGenerator> _logger;
|
private readonly ILogger<DefaultLinkGenerator> _logger;
|
||||||
private readonly IServiceProvider _serviceProvider;
|
private readonly IServiceProvider _serviceProvider;
|
||||||
|
|
||||||
|
|
@ -38,14 +38,14 @@ namespace Microsoft.AspNetCore.Routing
|
||||||
|
|
||||||
public DefaultLinkGenerator(
|
public DefaultLinkGenerator(
|
||||||
ParameterPolicyFactory parameterPolicyFactory,
|
ParameterPolicyFactory parameterPolicyFactory,
|
||||||
|
TemplateBinderFactory binderFactory,
|
||||||
EndpointDataSource dataSource,
|
EndpointDataSource dataSource,
|
||||||
ObjectPool<UriBuildingContext> uriBuildingContextPool,
|
|
||||||
IOptions<RouteOptions> routeOptions,
|
IOptions<RouteOptions> routeOptions,
|
||||||
ILogger<DefaultLinkGenerator> logger,
|
ILogger<DefaultLinkGenerator> logger,
|
||||||
IServiceProvider serviceProvider)
|
IServiceProvider serviceProvider)
|
||||||
{
|
{
|
||||||
_parameterPolicyFactory = parameterPolicyFactory;
|
_parameterPolicyFactory = parameterPolicyFactory;
|
||||||
_uriBuildingContextPool = uriBuildingContextPool;
|
_binderFactory = binderFactory;
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
_serviceProvider = serviceProvider;
|
_serviceProvider = serviceProvider;
|
||||||
|
|
||||||
|
|
@ -282,40 +282,7 @@ namespace Microsoft.AspNetCore.Routing
|
||||||
|
|
||||||
private TemplateBinder CreateTemplateBinder(RouteEndpoint endpoint)
|
private TemplateBinder CreateTemplateBinder(RouteEndpoint endpoint)
|
||||||
{
|
{
|
||||||
// Now create the constraints and parameter transformers from the pattern
|
return _binderFactory.Create(endpoint.RoutePattern);
|
||||||
var policies = new List<(string parameterName, IParameterPolicy policy)>();
|
|
||||||
foreach (var kvp in endpoint.RoutePattern.ParameterPolicies)
|
|
||||||
{
|
|
||||||
var parameterName = kvp.Key;
|
|
||||||
|
|
||||||
// It's possible that we don't have an actual route parameter, we need to support that case.
|
|
||||||
var parameter = endpoint.RoutePattern.GetParameter(parameterName);
|
|
||||||
|
|
||||||
// Use the first parameter transformer per parameter
|
|
||||||
var foundTransformer = false;
|
|
||||||
for (var i = 0; i < kvp.Value.Count; i++)
|
|
||||||
{
|
|
||||||
var parameterPolicy = _parameterPolicyFactory.Create(parameter, kvp.Value[i]);
|
|
||||||
if (!foundTransformer && parameterPolicy is IOutboundParameterTransformer parameterTransformer)
|
|
||||||
{
|
|
||||||
policies.Add((parameterName, parameterTransformer));
|
|
||||||
foundTransformer = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (parameterPolicy is IRouteConstraint constraint)
|
|
||||||
{
|
|
||||||
policies.Add((parameterName, constraint));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return new TemplateBinder(
|
|
||||||
UrlEncoder.Default,
|
|
||||||
_uriBuildingContextPool,
|
|
||||||
endpoint.RoutePattern,
|
|
||||||
new RouteValueDictionary(endpoint.RoutePattern.Defaults),
|
|
||||||
endpoint.RoutePattern.RequiredValues.Keys,
|
|
||||||
policies);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Internal for testing
|
// Internal for testing
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@ using Microsoft.AspNetCore.Routing;
|
||||||
using Microsoft.AspNetCore.Routing.Internal;
|
using Microsoft.AspNetCore.Routing.Internal;
|
||||||
using Microsoft.AspNetCore.Routing.Matching;
|
using Microsoft.AspNetCore.Routing.Matching;
|
||||||
using Microsoft.AspNetCore.Routing.Patterns;
|
using Microsoft.AspNetCore.Routing.Patterns;
|
||||||
|
using Microsoft.AspNetCore.Routing.Template;
|
||||||
using Microsoft.AspNetCore.Routing.Tree;
|
using Microsoft.AspNetCore.Routing.Tree;
|
||||||
using Microsoft.Extensions.DependencyInjection.Extensions;
|
using Microsoft.Extensions.DependencyInjection.Extensions;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
@ -34,6 +35,7 @@ namespace Microsoft.Extensions.DependencyInjection
|
||||||
|
|
||||||
services.TryAddTransient<IInlineConstraintResolver, DefaultInlineConstraintResolver>();
|
services.TryAddTransient<IInlineConstraintResolver, DefaultInlineConstraintResolver>();
|
||||||
services.TryAddTransient<ObjectPoolProvider, DefaultObjectPoolProvider>();
|
services.TryAddTransient<ObjectPoolProvider, DefaultObjectPoolProvider>();
|
||||||
|
#pragma warning disable CS0618 // Type or member is obsolete
|
||||||
services.TryAddSingleton<ObjectPool<UriBuildingContext>>(s =>
|
services.TryAddSingleton<ObjectPool<UriBuildingContext>>(s =>
|
||||||
{
|
{
|
||||||
var provider = s.GetRequiredService<ObjectPoolProvider>();
|
var provider = s.GetRequiredService<ObjectPoolProvider>();
|
||||||
|
|
@ -49,6 +51,7 @@ namespace Microsoft.Extensions.DependencyInjection
|
||||||
var constraintResolver = s.GetRequiredService<IInlineConstraintResolver>();
|
var constraintResolver = s.GetRequiredService<IInlineConstraintResolver>();
|
||||||
return new TreeRouteBuilder(loggerFactory, objectPool, constraintResolver);
|
return new TreeRouteBuilder(loggerFactory, objectPool, constraintResolver);
|
||||||
}));
|
}));
|
||||||
|
#pragma warning restore CS0618 // Type or member is obsolete
|
||||||
|
|
||||||
services.TryAddSingleton(typeof(RoutingMarkerService));
|
services.TryAddSingleton(typeof(RoutingMarkerService));
|
||||||
|
|
||||||
|
|
@ -88,6 +91,7 @@ namespace Microsoft.Extensions.DependencyInjection
|
||||||
//
|
//
|
||||||
// Misc infrastructure
|
// Misc infrastructure
|
||||||
//
|
//
|
||||||
|
services.TryAddSingleton<TemplateBinderFactory, DefaultTemplateBinderFactory>();
|
||||||
services.TryAddSingleton<RoutePatternTransformer, DefaultRoutePatternTransformer>();
|
services.TryAddSingleton<RoutePatternTransformer, DefaultRoutePatternTransformer>();
|
||||||
return services;
|
return services;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,18 +0,0 @@
|
||||||
// Copyright (c) .NET Foundation. All rights reserved.
|
|
||||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Routing.Internal
|
|
||||||
{
|
|
||||||
public readonly struct BufferValue
|
|
||||||
{
|
|
||||||
public BufferValue(string value, bool requiresEncoding)
|
|
||||||
{
|
|
||||||
Value = value;
|
|
||||||
RequiresEncoding = requiresEncoding;
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool RequiresEncoding { get; }
|
|
||||||
|
|
||||||
public string Value { get; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,6 +1,8 @@
|
||||||
// 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;
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Routing.Internal
|
namespace Microsoft.AspNetCore.Routing.Internal
|
||||||
{
|
{
|
||||||
// Segments are treated as all-or-none. We should never output a partial segment.
|
// Segments are treated as all-or-none. We should never output a partial segment.
|
||||||
|
|
@ -9,6 +11,7 @@ namespace Microsoft.AspNetCore.Routing.Internal
|
||||||
// used a value for {p1}, we have to output the entire segment up to the next "/".
|
// used a value for {p1}, we have to output the entire segment up to the next "/".
|
||||||
// Otherwise we could end up with the partial segment "v1" instead of the entire
|
// Otherwise we could end up with the partial segment "v1" instead of the entire
|
||||||
// segment "v1-v2.xml".
|
// segment "v1-v2.xml".
|
||||||
|
[Obsolete("This type will be marked as internal in a future release.")]
|
||||||
public enum SegmentState
|
public enum SegmentState
|
||||||
{
|
{
|
||||||
Beginning,
|
Beginning,
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
// 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.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
|
@ -10,6 +11,7 @@ using Microsoft.AspNetCore.Http;
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Routing.Internal
|
namespace Microsoft.AspNetCore.Routing.Internal
|
||||||
{
|
{
|
||||||
|
[Obsolete("This type will be marked as internal in a future release.")]
|
||||||
[DebuggerDisplay("{DebuggerToString(),nq}")]
|
[DebuggerDisplay("{DebuggerToString(),nq}")]
|
||||||
public class UriBuildingContext
|
public class UriBuildingContext
|
||||||
{
|
{
|
||||||
|
|
@ -321,5 +323,18 @@ namespace Microsoft.AspNetCore.Routing.Internal
|
||||||
{
|
{
|
||||||
return string.Format("{{Accepted: '{0}' Buffered: '{1}'}}", _path, string.Join("", _buffer));
|
return string.Format("{{Accepted: '{0}' Buffered: '{1}'}}", _path, string.Join("", _buffer));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private readonly struct BufferValue
|
||||||
|
{
|
||||||
|
public BufferValue(string value, bool requiresEncoding)
|
||||||
|
{
|
||||||
|
Value = value;
|
||||||
|
RequiresEncoding = requiresEncoding;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool RequiresEncoding { get; }
|
||||||
|
|
||||||
|
public string Value { get; }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// 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;
|
||||||
|
|
@ -9,7 +9,7 @@ using System.Reflection;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Routing.Internal
|
namespace Microsoft.AspNetCore.Routing
|
||||||
{
|
{
|
||||||
internal static class ParameterPolicyActivator
|
internal static class ParameterPolicyActivator
|
||||||
{
|
{
|
||||||
|
|
@ -8,9 +8,9 @@ using System.Diagnostics;
|
||||||
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Http;
|
||||||
using Microsoft.Extensions.Primitives;
|
using Microsoft.Extensions.Primitives;
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Routing.Internal
|
namespace Microsoft.AspNetCore.Routing
|
||||||
{
|
{
|
||||||
public struct PathTokenizer : IReadOnlyList<StringSegment>
|
internal struct PathTokenizer : IReadOnlyList<StringSegment>
|
||||||
{
|
{
|
||||||
private readonly string _path;
|
private readonly string _path;
|
||||||
private int _count;
|
private int _count;
|
||||||
|
|
@ -246,14 +246,16 @@ namespace Microsoft.AspNetCore.Routing
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#pragma warning disable CS0618 // Type or member is obsolete
|
||||||
private void EnsureBinder(HttpContext context)
|
private void EnsureBinder(HttpContext context)
|
||||||
{
|
{
|
||||||
if (_binder == null)
|
if (_binder == null)
|
||||||
{
|
{
|
||||||
var pool = context.RequestServices.GetRequiredService<ObjectPool<UriBuildingContext>>();
|
var binderFactory = context.RequestServices.GetRequiredService<TemplateBinderFactory>();
|
||||||
_binder = new TemplateBinder(UrlEncoder.Default, pool, ParsedTemplate, Defaults);
|
_binder = binderFactory.Create(ParsedTemplate, Defaults);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#pragma warning restore CS0618 // Type or member is obsolete
|
||||||
|
|
||||||
private void EnsureLoggers(HttpContext context)
|
private void EnsureLoggers(HttpContext context)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
|
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Routing.Internal
|
namespace Microsoft.AspNetCore.Routing
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// A marker class used to determine if all the routing services were added
|
/// A marker class used to determine if all the routing services were added
|
||||||
|
|
@ -12,4 +12,4 @@ namespace Microsoft.AspNetCore.Routing.Internal
|
||||||
internal class RoutingMarkerService
|
internal class RoutingMarkerService
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -0,0 +1,95 @@
|
||||||
|
// Copyright (c) .NET Foundation. All rights reserved.
|
||||||
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text.Encodings.Web;
|
||||||
|
using Microsoft.AspNetCore.Routing.Internal;
|
||||||
|
using Microsoft.AspNetCore.Routing.Patterns;
|
||||||
|
using Microsoft.Extensions.ObjectPool;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNetCore.Routing.Template
|
||||||
|
{
|
||||||
|
internal sealed class DefaultTemplateBinderFactory : TemplateBinderFactory
|
||||||
|
{
|
||||||
|
private readonly ParameterPolicyFactory _policyFactory;
|
||||||
|
#pragma warning disable CS0618 // Type or member is obsolete
|
||||||
|
private readonly ObjectPool<UriBuildingContext> _pool;
|
||||||
|
#pragma warning restore CS0618 // Type or member is obsolete
|
||||||
|
|
||||||
|
public DefaultTemplateBinderFactory(
|
||||||
|
ParameterPolicyFactory policyFactory,
|
||||||
|
#pragma warning disable CS0618 // Type or member is obsolete
|
||||||
|
ObjectPool<UriBuildingContext> pool)
|
||||||
|
#pragma warning restore CS0618 // Type or member is obsolete
|
||||||
|
{
|
||||||
|
if (policyFactory == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(policyFactory));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pool == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(pool));
|
||||||
|
}
|
||||||
|
|
||||||
|
_policyFactory = policyFactory;
|
||||||
|
_pool = pool;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public override TemplateBinder Create(RouteTemplate template, RouteValueDictionary defaults)
|
||||||
|
{
|
||||||
|
if (template == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(template));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (defaults == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(defaults));
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma warning disable CS0618 // Type or member is obsolete
|
||||||
|
return new TemplateBinder(UrlEncoder.Default, _pool, template, defaults);
|
||||||
|
#pragma warning restore CS0618 // Type or member is obsolete
|
||||||
|
}
|
||||||
|
|
||||||
|
public override TemplateBinder Create(RoutePattern pattern)
|
||||||
|
{
|
||||||
|
if (pattern == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(pattern));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Now create the constraints and parameter transformers from the pattern
|
||||||
|
var policies = new List<(string parameterName, IParameterPolicy policy)>();
|
||||||
|
foreach (var kvp in pattern.ParameterPolicies)
|
||||||
|
{
|
||||||
|
var parameterName = kvp.Key;
|
||||||
|
|
||||||
|
// It's possible that we don't have an actual route parameter, we need to support that case.
|
||||||
|
var parameter = pattern.GetParameter(parameterName);
|
||||||
|
|
||||||
|
// Use the first parameter transformer per parameter
|
||||||
|
var foundTransformer = false;
|
||||||
|
for (var i = 0; i < kvp.Value.Count; i++)
|
||||||
|
{
|
||||||
|
var parameterPolicy = _policyFactory.Create(parameter, kvp.Value[i]);
|
||||||
|
if (!foundTransformer && parameterPolicy is IOutboundParameterTransformer parameterTransformer)
|
||||||
|
{
|
||||||
|
policies.Add((parameterName, parameterTransformer));
|
||||||
|
foundTransformer = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (parameterPolicy is IRouteConstraint constraint)
|
||||||
|
{
|
||||||
|
policies.Add((parameterName, constraint));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return new TemplateBinder(UrlEncoder.Default, _pool, pattern, policies);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -19,7 +19,9 @@ namespace Microsoft.AspNetCore.Routing.Template
|
||||||
public class TemplateBinder
|
public class TemplateBinder
|
||||||
{
|
{
|
||||||
private readonly UrlEncoder _urlEncoder;
|
private readonly UrlEncoder _urlEncoder;
|
||||||
|
#pragma warning disable CS0618 // Type or member is obsolete
|
||||||
private readonly ObjectPool<UriBuildingContext> _pool;
|
private readonly ObjectPool<UriBuildingContext> _pool;
|
||||||
|
#pragma warning restore CS0618 // Type or member is obsolete
|
||||||
|
|
||||||
private readonly (string parameterName, IRouteConstraint constraint)[] _constraints;
|
private readonly (string parameterName, IRouteConstraint constraint)[] _constraints;
|
||||||
private readonly RouteValueDictionary _defaults;
|
private readonly RouteValueDictionary _defaults;
|
||||||
|
|
@ -40,6 +42,9 @@ namespace Microsoft.AspNetCore.Routing.Template
|
||||||
/// <param name="pool">The <see cref="ObjectPool{T}"/>.</param>
|
/// <param name="pool">The <see cref="ObjectPool{T}"/>.</param>
|
||||||
/// <param name="template">The <see cref="RouteTemplate"/> to bind values to.</param>
|
/// <param name="template">The <see cref="RouteTemplate"/> to bind values to.</param>
|
||||||
/// <param name="defaults">The default values for <paramref name="template"/>.</param>
|
/// <param name="defaults">The default values for <paramref name="template"/>.</param>
|
||||||
|
[Obsolete(
|
||||||
|
"This constructor is obsolete and will be marked internal in a furture release. Use the TemplateBinderFactory service " +
|
||||||
|
"to create TemplateBinder instances.")]
|
||||||
public TemplateBinder(
|
public TemplateBinder(
|
||||||
UrlEncoder urlEncoder,
|
UrlEncoder urlEncoder,
|
||||||
ObjectPool<UriBuildingContext> pool,
|
ObjectPool<UriBuildingContext> pool,
|
||||||
|
|
@ -60,6 +65,9 @@ namespace Microsoft.AspNetCore.Routing.Template
|
||||||
/// <param name="parameterPolicies">
|
/// <param name="parameterPolicies">
|
||||||
/// A list of (<see cref="string"/>, <see cref="IParameterPolicy"/>) pairs to evalute when producing a URI.
|
/// A list of (<see cref="string"/>, <see cref="IParameterPolicy"/>) pairs to evalute when producing a URI.
|
||||||
/// </param>
|
/// </param>
|
||||||
|
[Obsolete(
|
||||||
|
"This constructor is obsolete and will be marked internal in a future release. Use the TemplateBinderFactory service " +
|
||||||
|
"to create TemplateBinder instances.")]
|
||||||
public TemplateBinder(
|
public TemplateBinder(
|
||||||
UrlEncoder urlEncoder,
|
UrlEncoder urlEncoder,
|
||||||
ObjectPool<UriBuildingContext> pool,
|
ObjectPool<UriBuildingContext> pool,
|
||||||
|
|
@ -110,6 +118,58 @@ namespace Microsoft.AspNetCore.Routing.Template
|
||||||
_slots = AssignSlots(_pattern, _filters);
|
_slots = AssignSlots(_pattern, _filters);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal TemplateBinder(
|
||||||
|
UrlEncoder urlEncoder,
|
||||||
|
#pragma warning disable CS0618 // Type or member is obsolete
|
||||||
|
ObjectPool<UriBuildingContext> pool,
|
||||||
|
#pragma warning restore CS0618 // Type or member is obsolete
|
||||||
|
RoutePattern pattern,
|
||||||
|
IEnumerable<(string parameterName, IParameterPolicy policy)> parameterPolicies)
|
||||||
|
{
|
||||||
|
if (urlEncoder == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(urlEncoder));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pool == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(pool));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pattern == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(pattern));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Parameter policies can be null.
|
||||||
|
|
||||||
|
_urlEncoder = urlEncoder;
|
||||||
|
_pool = pool;
|
||||||
|
_pattern = pattern;
|
||||||
|
_defaults = new RouteValueDictionary(pattern.Defaults);
|
||||||
|
_requiredKeys = pattern.RequiredValues.Keys.ToArray();
|
||||||
|
|
||||||
|
// Any default that doesn't have a corresponding parameter is a 'filter' and if a value
|
||||||
|
// is provided for that 'filter' it must match the value in defaults.
|
||||||
|
var filters = new RouteValueDictionary(_defaults);
|
||||||
|
for (var i = 0; i < pattern.Parameters.Count; i++)
|
||||||
|
{
|
||||||
|
filters.Remove(pattern.Parameters[i].Name);
|
||||||
|
}
|
||||||
|
_filters = filters.ToArray();
|
||||||
|
|
||||||
|
_constraints = parameterPolicies
|
||||||
|
?.Where(p => p.policy is IRouteConstraint)
|
||||||
|
.Select(p => (p.parameterName, (IRouteConstraint)p.policy))
|
||||||
|
.ToArray() ?? Array.Empty<(string, IRouteConstraint)>();
|
||||||
|
_parameterTransformers = parameterPolicies
|
||||||
|
?.Where(p => p.policy is IOutboundParameterTransformer)
|
||||||
|
.Select(p => (p.parameterName, (IOutboundParameterTransformer)p.policy))
|
||||||
|
.ToArray() ?? Array.Empty<(string, IOutboundParameterTransformer)>();
|
||||||
|
|
||||||
|
_slots = AssignSlots(_pattern, _filters);
|
||||||
|
}
|
||||||
|
|
||||||
// Step 1: Get the list of values we're going to try to use to match and generate this URI
|
// Step 1: Get the list of values we're going to try to use to match and generate this URI
|
||||||
public TemplateValuesResult GetValues(RouteValueDictionary ambientValues, RouteValueDictionary values)
|
public TemplateValuesResult GetValues(RouteValueDictionary ambientValues, RouteValueDictionary values)
|
||||||
{
|
{
|
||||||
|
|
@ -442,6 +502,7 @@ namespace Microsoft.AspNetCore.Routing.Template
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#pragma warning disable CS0618 // Type or member is obsolete
|
||||||
private bool TryBindValuesCore(UriBuildingContext context, RouteValueDictionary acceptedValues)
|
private bool TryBindValuesCore(UriBuildingContext context, RouteValueDictionary acceptedValues)
|
||||||
{
|
{
|
||||||
// If we have any output parameter transformers, allow them a chance to influence the parameter values
|
// If we have any output parameter transformers, allow them a chance to influence the parameter values
|
||||||
|
|
@ -578,6 +639,7 @@ namespace Microsoft.AspNetCore.Routing.Template
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
#pragma warning restore CS0618 // Type or member is obsolete
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Compares two objects for equality as parts of a case-insensitive path.
|
/// Compares two objects for equality as parts of a case-insensitive path.
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
// Copyright (c) .NET Foundation. All rights reserved.
|
||||||
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
using Microsoft.AspNetCore.Routing.Patterns;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNetCore.Routing.Template
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// A factory used to create <see cref="TemplateBinder"/> instances.
|
||||||
|
/// </summary>
|
||||||
|
public abstract class TemplateBinderFactory
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Creates a new <see cref="TemplateBinder"/> from the provided <paramref name="template"/> and
|
||||||
|
/// <paramref name="defaults"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="template">The route template.</param>
|
||||||
|
/// <param name="defaults">A collection of extra default values that do not appear in the route template.</param>
|
||||||
|
/// <returns>A <see cref="TemplateBinder"/>.</returns>
|
||||||
|
public abstract TemplateBinder Create(RouteTemplate template, RouteValueDictionary defaults);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates a new <see cref="TemplateBinder"/> from the provided <paramref name="pattern"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="pattern">The <see cref="RoutePattern"/>.</param>
|
||||||
|
/// <returns>A <see cref="TemplateBinder"/>.</returns>
|
||||||
|
public abstract TemplateBinder Create(RoutePattern pattern);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -8,13 +8,12 @@ using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using Microsoft.AspNetCore.Routing.DecisionTree;
|
using Microsoft.AspNetCore.Routing.DecisionTree;
|
||||||
using Microsoft.AspNetCore.Routing.Patterns;
|
using Microsoft.AspNetCore.Routing.Patterns;
|
||||||
using Microsoft.AspNetCore.Routing.Tree;
|
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Routing.Internal
|
namespace Microsoft.AspNetCore.Routing.Tree
|
||||||
{
|
{
|
||||||
// A decision tree that matches link generation entries based on route data.
|
// A decision tree that matches link generation entries based on route data.
|
||||||
[DebuggerDisplay("{DebuggerDisplayString,nq}")]
|
[DebuggerDisplay("{DebuggerDisplayString,nq}")]
|
||||||
public class LinkGenerationDecisionTree
|
internal class LinkGenerationDecisionTree
|
||||||
{
|
{
|
||||||
// Fallback value for cases where the ambient values weren't provided.
|
// Fallback value for cases where the ambient values weren't provided.
|
||||||
//
|
//
|
||||||
|
|
@ -1,11 +1,9 @@
|
||||||
// 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 Microsoft.AspNetCore.Routing.Tree;
|
namespace Microsoft.AspNetCore.Routing.Tree
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Routing.Internal
|
|
||||||
{
|
{
|
||||||
public readonly struct OutboundMatchResult
|
internal readonly struct OutboundMatchResult
|
||||||
{
|
{
|
||||||
public OutboundMatchResult(OutboundMatch match, bool isFallbackMatch)
|
public OutboundMatchResult(OutboundMatch match, bool isFallbackMatch)
|
||||||
{
|
{
|
||||||
|
|
@ -3,7 +3,6 @@
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text.Encodings.Web;
|
using System.Text.Encodings.Web;
|
||||||
using Microsoft.AspNetCore.Routing.Internal;
|
using Microsoft.AspNetCore.Routing.Internal;
|
||||||
|
|
@ -21,7 +20,9 @@ namespace Microsoft.AspNetCore.Routing.Tree
|
||||||
private readonly ILogger _logger;
|
private readonly ILogger _logger;
|
||||||
private readonly ILogger _constraintLogger;
|
private readonly ILogger _constraintLogger;
|
||||||
private readonly UrlEncoder _urlEncoder;
|
private readonly UrlEncoder _urlEncoder;
|
||||||
|
#pragma warning disable CS0618 // Type or member is obsolete
|
||||||
private readonly ObjectPool<UriBuildingContext> _objectPool;
|
private readonly ObjectPool<UriBuildingContext> _objectPool;
|
||||||
|
#pragma warning restore CS0618 // Type or member is obsolete
|
||||||
private readonly IInlineConstraintResolver _constraintResolver;
|
private readonly IInlineConstraintResolver _constraintResolver;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
@ -30,9 +31,12 @@ namespace Microsoft.AspNetCore.Routing.Tree
|
||||||
/// <param name="loggerFactory">The <see cref="ILoggerFactory"/>.</param>
|
/// <param name="loggerFactory">The <see cref="ILoggerFactory"/>.</param>
|
||||||
/// <param name="objectPool">The <see cref="ObjectPool{UrlBuildingContext}"/>.</param>
|
/// <param name="objectPool">The <see cref="ObjectPool{UrlBuildingContext}"/>.</param>
|
||||||
/// <param name="constraintResolver">The <see cref="IInlineConstraintResolver"/>.</param>
|
/// <param name="constraintResolver">The <see cref="IInlineConstraintResolver"/>.</param>
|
||||||
|
[Obsolete("This constructor will be marked internal in a future release. Use the service provider to create instances of TreeRouteBuilder.")]
|
||||||
public TreeRouteBuilder(
|
public TreeRouteBuilder(
|
||||||
ILoggerFactory loggerFactory,
|
ILoggerFactory loggerFactory,
|
||||||
|
#pragma warning disable CS0618 // Type or member is obsolete
|
||||||
ObjectPool<UriBuildingContext> objectPool,
|
ObjectPool<UriBuildingContext> objectPool,
|
||||||
|
#pragma warning restore CS0618 // Type or member is obsolete
|
||||||
IInlineConstraintResolver constraintResolver)
|
IInlineConstraintResolver constraintResolver)
|
||||||
{
|
{
|
||||||
if (loggerFactory == null)
|
if (loggerFactory == null)
|
||||||
|
|
@ -240,6 +244,7 @@ namespace Microsoft.AspNetCore.Routing.Tree
|
||||||
tree.AddEntry(entry);
|
tree.AddEntry(entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#pragma warning disable CS0618 // Type or member is obsolete
|
||||||
return new TreeRouter(
|
return new TreeRouter(
|
||||||
trees.Values.OrderBy(tree => tree.Order).ToArray(),
|
trees.Values.OrderBy(tree => tree.Order).ToArray(),
|
||||||
OutboundEntries,
|
OutboundEntries,
|
||||||
|
|
@ -248,6 +253,7 @@ namespace Microsoft.AspNetCore.Routing.Tree
|
||||||
_logger,
|
_logger,
|
||||||
_constraintLogger,
|
_constraintLogger,
|
||||||
version);
|
version);
|
||||||
|
#pragma warning restore CS0618 // Type or member is obsolete
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
||||||
|
|
@ -40,11 +40,14 @@ namespace Microsoft.AspNetCore.Routing.Tree
|
||||||
/// <param name="constraintLogger">The <see cref="ILogger"/> instance used
|
/// <param name="constraintLogger">The <see cref="ILogger"/> instance used
|
||||||
/// in <see cref="RouteConstraintMatcher"/>.</param>
|
/// in <see cref="RouteConstraintMatcher"/>.</param>
|
||||||
/// <param name="version">The version of this route.</param>
|
/// <param name="version">The version of this route.</param>
|
||||||
|
[Obsolete("This constructor will be marked obsolete in a future release. Use the TreeRouterBuilder to create instances of TreeRouter.")]
|
||||||
public TreeRouter(
|
public TreeRouter(
|
||||||
UrlMatchingTree[] trees,
|
UrlMatchingTree[] trees,
|
||||||
IEnumerable<OutboundRouteEntry> linkGenerationEntries,
|
IEnumerable<OutboundRouteEntry> linkGenerationEntries,
|
||||||
UrlEncoder urlEncoder,
|
UrlEncoder urlEncoder,
|
||||||
|
#pragma warning disable CS0618 // Type or member is obsolete
|
||||||
ObjectPool<UriBuildingContext> objectPool,
|
ObjectPool<UriBuildingContext> objectPool,
|
||||||
|
#pragma warning restore CS0618 // Type or member is obsolete
|
||||||
ILogger routeLogger,
|
ILogger routeLogger,
|
||||||
ILogger constraintLogger,
|
ILogger constraintLogger,
|
||||||
int version)
|
int version)
|
||||||
|
|
|
||||||
|
|
@ -2,11 +2,13 @@
|
||||||
// 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.Text.Encodings.Web;
|
using System.Text.Encodings.Web;
|
||||||
|
using Microsoft.AspNetCore.Routing.Internal;
|
||||||
using Microsoft.Extensions.ObjectPool;
|
using Microsoft.Extensions.ObjectPool;
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Routing.Internal
|
namespace Microsoft.AspNetCore.Routing
|
||||||
{
|
{
|
||||||
public class UriBuilderContextPooledObjectPolicy : IPooledObjectPolicy<UriBuildingContext>
|
#pragma warning disable CS0618 // Type or member is obsolete
|
||||||
|
internal class UriBuilderContextPooledObjectPolicy : IPooledObjectPolicy<UriBuildingContext>
|
||||||
{
|
{
|
||||||
public UriBuildingContext Create()
|
public UriBuildingContext Create()
|
||||||
{
|
{
|
||||||
|
|
@ -19,4 +21,5 @@ namespace Microsoft.AspNetCore.Routing.Internal
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#pragma warning restore CS0618 // Type or member is obsolete
|
||||||
}
|
}
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// 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 Microsoft.Extensions.WebEncoders.Testing;
|
using Microsoft.Extensions.WebEncoders.Testing;
|
||||||
|
|
@ -6,6 +6,7 @@ using Xunit;
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Routing.Internal
|
namespace Microsoft.AspNetCore.Routing.Internal
|
||||||
{
|
{
|
||||||
|
#pragma warning disable CS0618 // Type or member is obsolete
|
||||||
public class UriBuildingContextTest
|
public class UriBuildingContextTest
|
||||||
{
|
{
|
||||||
[Fact]
|
[Fact]
|
||||||
|
|
@ -16,7 +17,7 @@ namespace Microsoft.AspNetCore.Routing.Internal
|
||||||
var value = "a/b b1/c";
|
var value = "a/b b1/c";
|
||||||
var expected = "/UrlEncode[[a/b b1/c]]";
|
var expected = "/UrlEncode[[a/b b1/c]]";
|
||||||
var uriBuilldingContext = new UriBuildingContext(urlTestEncoder);
|
var uriBuilldingContext = new UriBuildingContext(urlTestEncoder);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
uriBuilldingContext.EncodeValue(value, 0, value.Length, encodeSlashes: true);
|
uriBuilldingContext.EncodeValue(value, 0, value.Length, encodeSlashes: true);
|
||||||
|
|
||||||
|
|
@ -97,4 +98,5 @@ namespace Microsoft.AspNetCore.Routing.Internal
|
||||||
Assert.Equal(expected, uriBuilldingContext.ToPathString().Value);
|
Assert.Equal(expected, uriBuilldingContext.ToPathString().Value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#pragma warning restore CS0618 // Type or member is obsolete
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ using System;
|
||||||
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Http;
|
||||||
using Microsoft.AspNetCore.Http.Features;
|
using Microsoft.AspNetCore.Http.Features;
|
||||||
using Microsoft.AspNetCore.Routing.Internal;
|
using Microsoft.AspNetCore.Routing.Internal;
|
||||||
|
using Microsoft.AspNetCore.Routing.Template;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Microsoft.Extensions.Logging.Abstractions;
|
using Microsoft.Extensions.Logging.Abstractions;
|
||||||
using Microsoft.Extensions.ObjectPool;
|
using Microsoft.Extensions.ObjectPool;
|
||||||
|
|
@ -82,8 +83,8 @@ namespace Microsoft.AspNetCore.Routing
|
||||||
|
|
||||||
return new DefaultLinkGenerator(
|
return new DefaultLinkGenerator(
|
||||||
new DefaultParameterPolicyFactory(routeOptions, serviceProvider),
|
new DefaultParameterPolicyFactory(routeOptions, serviceProvider),
|
||||||
|
serviceProvider.GetRequiredService<TemplateBinderFactory>(),
|
||||||
new CompositeEndpointDataSource(routeOptions.Value.EndpointDataSources),
|
new CompositeEndpointDataSource(routeOptions.Value.EndpointDataSources),
|
||||||
new DefaultObjectPool<UriBuildingContext>(new UriBuilderContextPooledObjectPolicy()),
|
|
||||||
routeOptions,
|
routeOptions,
|
||||||
NullLogger<DefaultLinkGenerator>.Instance,
|
NullLogger<DefaultLinkGenerator>.Instance,
|
||||||
serviceProvider);
|
serviceProvider);
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// 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;
|
||||||
|
|
@ -32,10 +32,12 @@ namespace Microsoft.AspNetCore.Routing.Matching
|
||||||
|
|
||||||
public override Matcher Build()
|
public override Matcher Build()
|
||||||
{
|
{
|
||||||
|
#pragma warning disable CS0618 // Type or member is obsolete
|
||||||
var builder = new TreeRouteBuilder(
|
var builder = new TreeRouteBuilder(
|
||||||
NullLoggerFactory.Instance,
|
NullLoggerFactory.Instance,
|
||||||
new DefaultObjectPool<UriBuildingContext>(new UriBuilderContextPooledObjectPolicy()),
|
new DefaultObjectPool<UriBuildingContext>(new UriBuilderContextPooledObjectPolicy()),
|
||||||
new DefaultInlineConstraintResolver(Options.Create(new RouteOptions()), new TestServiceProvider()));
|
new DefaultInlineConstraintResolver(Options.Create(new RouteOptions()), new TestServiceProvider()));
|
||||||
|
#pragma warning restore CS0618 // Type or member is obsolete
|
||||||
|
|
||||||
var selector = new DefaultEndpointSelector();
|
var selector = new DefaultEndpointSelector();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -658,6 +658,7 @@ namespace Microsoft.AspNetCore.Routing
|
||||||
var expected = "/Home/Index?name=" + UrlEncoder.Default.Encode(nameRouteValue);
|
var expected = "/Home/Index?name=" + UrlEncoder.Default.Encode(nameRouteValue);
|
||||||
var services = new ServiceCollection();
|
var services = new ServiceCollection();
|
||||||
services.AddSingleton<ILoggerFactory>(NullLoggerFactory.Instance);
|
services.AddSingleton<ILoggerFactory>(NullLoggerFactory.Instance);
|
||||||
|
services.AddOptions();
|
||||||
services.AddRouting();
|
services.AddRouting();
|
||||||
// This test encoder should not be used by Routing and should always use the default one.
|
// This test encoder should not be used by Routing and should always use the default one.
|
||||||
services.AddSingleton<UrlEncoder>(new UrlTestEncoder());
|
services.AddSingleton<UrlEncoder>(new UrlTestEncoder());
|
||||||
|
|
@ -1520,6 +1521,7 @@ namespace Microsoft.AspNetCore.Routing
|
||||||
{
|
{
|
||||||
var services = new ServiceCollection();
|
var services = new ServiceCollection();
|
||||||
services.AddSingleton<ILoggerFactory>(NullLoggerFactory.Instance);
|
services.AddSingleton<ILoggerFactory>(NullLoggerFactory.Instance);
|
||||||
|
services.AddOptions();
|
||||||
services.AddRouting();
|
services.AddRouting();
|
||||||
|
|
||||||
var context = new DefaultHttpContext
|
var context = new DefaultHttpContext
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ using Xunit;
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Routing.Template.Tests
|
namespace Microsoft.AspNetCore.Routing.Template.Tests
|
||||||
{
|
{
|
||||||
|
#pragma warning disable CS0618 // Type or member is obsolete
|
||||||
public class TemplateBinderTests
|
public class TemplateBinderTests
|
||||||
{
|
{
|
||||||
private readonly IInlineConstraintResolver _inlineConstraintResolver = GetInlineConstraintResolver();
|
private readonly IInlineConstraintResolver _inlineConstraintResolver = GetInlineConstraintResolver();
|
||||||
|
|
@ -1480,4 +1481,5 @@ namespace Microsoft.AspNetCore.Routing.Template.Tests
|
||||||
public Dictionary<string, string> Parameters { get; private set; }
|
public Dictionary<string, string> Parameters { get; private set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#pragma warning restore CS0618 // Type or member is obsolete
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// 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.Text.Encodings.Web;
|
using System.Text.Encodings.Web;
|
||||||
|
|
@ -248,10 +248,12 @@ namespace Microsoft.AspNetCore.Routing.Tree
|
||||||
var objectPool = objectPoolProvider.Create(objectPolicy);
|
var objectPool = objectPoolProvider.Create(objectPolicy);
|
||||||
|
|
||||||
var constraintResolver = GetInlineConstraintResolver();
|
var constraintResolver = GetInlineConstraintResolver();
|
||||||
|
#pragma warning disable CS0618 // Type or member is obsolete
|
||||||
var builder = new TreeRouteBuilder(
|
var builder = new TreeRouteBuilder(
|
||||||
NullLoggerFactory.Instance,
|
NullLoggerFactory.Instance,
|
||||||
objectPool,
|
objectPool,
|
||||||
constraintResolver);
|
constraintResolver);
|
||||||
|
#pragma warning restore CS0618 // Type or member is obsolete
|
||||||
return builder;
|
return builder;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,8 +23,10 @@ namespace Microsoft.AspNetCore.Routing.Tree
|
||||||
{
|
{
|
||||||
private static readonly RequestDelegate NullHandler = (c) => Task.CompletedTask;
|
private static readonly RequestDelegate NullHandler = (c) => Task.CompletedTask;
|
||||||
|
|
||||||
|
#pragma warning disable CS0618 // Type or member is obsolete
|
||||||
private static ObjectPool<UriBuildingContext> Pool = new DefaultObjectPoolProvider().Create(
|
private static ObjectPool<UriBuildingContext> Pool = new DefaultObjectPoolProvider().Create(
|
||||||
new UriBuilderContextPooledObjectPolicy());
|
new UriBuilderContextPooledObjectPolicy());
|
||||||
|
#pragma warning restore CS0618 // Type or member is obsolete
|
||||||
|
|
||||||
[Theory]
|
[Theory]
|
||||||
[InlineData("template/5", "template/{parameter:int}")]
|
[InlineData("template/5", "template/{parameter:int}")]
|
||||||
|
|
@ -2073,6 +2075,7 @@ namespace Microsoft.AspNetCore.Routing.Tree
|
||||||
return new DefaultInlineConstraintResolver(optionsMock.Object, new TestServiceProvider());
|
return new DefaultInlineConstraintResolver(optionsMock.Object, new TestServiceProvider());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#pragma warning disable CS0618 // Type or member is obsolete
|
||||||
private static TreeRouteBuilder CreateBuilder()
|
private static TreeRouteBuilder CreateBuilder()
|
||||||
{
|
{
|
||||||
var objectPoolProvider = new DefaultObjectPoolProvider();
|
var objectPoolProvider = new DefaultObjectPoolProvider();
|
||||||
|
|
@ -2086,6 +2089,7 @@ namespace Microsoft.AspNetCore.Routing.Tree
|
||||||
constraintResolver);
|
constraintResolver);
|
||||||
return builder;
|
return builder;
|
||||||
}
|
}
|
||||||
|
#pragma warning restore CS0618 // Type or member is obsolete
|
||||||
|
|
||||||
private static TreeRouter CreateTreeRouter(
|
private static TreeRouter CreateTreeRouter(
|
||||||
string firstTemplate,
|
string firstTemplate,
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
[assembly: BenchmarkDotNet.Attributes.AspNetCoreBenchmark]
|
||||||
|
|
@ -0,0 +1,63 @@
|
||||||
|
// Copyright (c) .NET Foundation. All rights reserved.
|
||||||
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using BenchmarkDotNet.Attributes;
|
||||||
|
using BenchmarkDotNet.Configs;
|
||||||
|
using Microsoft.AspNetCore.Http.Internal;
|
||||||
|
using Microsoft.AspNetCore.Http;
|
||||||
|
using Microsoft.Extensions.Primitives;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNetCore.Http.Abstractions.Microbenchmarks
|
||||||
|
{
|
||||||
|
public class GetHeaderSplitBenchmark
|
||||||
|
{
|
||||||
|
HeaderDictionary _dictionary;
|
||||||
|
|
||||||
|
[GlobalSetup]
|
||||||
|
public void GlobalSetup()
|
||||||
|
{
|
||||||
|
var dict = new Dictionary<string, StringValues>()
|
||||||
|
{
|
||||||
|
{ "singleValue", new StringValues("single") },
|
||||||
|
{ "singleValueQuoted", new StringValues("\"single\"") },
|
||||||
|
{ "doubleValue", new StringValues(new [] { "first", "second" }) },
|
||||||
|
{ "manyValue", new StringValues(new [] { "first", "second", "third", "fourth", "fifth", "sixth" }) }
|
||||||
|
};
|
||||||
|
_dictionary = new HeaderDictionary(dict);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Benchmark]
|
||||||
|
public void SplitSingleHeader()
|
||||||
|
{
|
||||||
|
var values = ParsingHelpers.GetHeaderSplit(_dictionary, "singleValue");
|
||||||
|
if (values.Count != 1)
|
||||||
|
throw new Exception();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Benchmark]
|
||||||
|
public void SplitSingleQuotedHeader()
|
||||||
|
{
|
||||||
|
var values = ParsingHelpers.GetHeaderSplit(_dictionary, "singleValueQuoted");
|
||||||
|
if (values.Count != 1)
|
||||||
|
throw new Exception();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Benchmark]
|
||||||
|
public void SplitDoubleHeader()
|
||||||
|
{
|
||||||
|
var values = ParsingHelpers.GetHeaderSplit(_dictionary, "doubleValue");
|
||||||
|
if (values.Count != 2)
|
||||||
|
throw new Exception();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Benchmark]
|
||||||
|
public void SplitManyHeaders()
|
||||||
|
{
|
||||||
|
var values = ParsingHelpers.GetHeaderSplit(_dictionary, "manyValue");
|
||||||
|
if (values.Count != 6)
|
||||||
|
throw new Exception();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>Exe</OutputType>
|
||||||
|
<TargetFramework>netcoreapp3.0</TargetFramework>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="BenchmarkDotNet" />
|
||||||
|
<Reference Include="Microsoft.AspNetCore.BenchmarkRunner.Sources" />
|
||||||
|
<Reference Include="Microsoft.AspNetCore.Http.Abstractions" />
|
||||||
|
<Reference Include="Microsoft.AspNetCore.Http" />
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"isRoot": true,
|
||||||
|
"tools": {
|
||||||
|
"dotnet-ef": {
|
||||||
|
"version": "3.0.0-preview3.19153.1",
|
||||||
|
"commands": [
|
||||||
|
"dotnet-ef"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -4,28 +4,26 @@ using IdentitySample.DefaultUI.Data;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Metadata;
|
using Microsoft.EntityFrameworkCore.Metadata;
|
||||||
using Microsoft.EntityFrameworkCore.Metadata.Internal;
|
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using Microsoft.EntityFrameworkCore.Storage;
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
using Microsoft.EntityFrameworkCore.Storage.Internal;
|
|
||||||
|
|
||||||
namespace IdentitySample.DefaultUI.Data.Migrations
|
namespace IdentitySample.DefaultUI.Data.Migrations
|
||||||
{
|
{
|
||||||
[DbContext(typeof(ApplicationDbContext))]
|
[DbContext(typeof(ApplicationDbContext))]
|
||||||
[Migration("20180126174859_CreateIdentitySchema")]
|
[Migration("20190411154115_CreateIdentitySchema")]
|
||||||
partial class CreateIdentitySchema
|
partial class CreateIdentitySchema
|
||||||
{
|
{
|
||||||
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||||
{
|
{
|
||||||
#pragma warning disable 612, 618
|
#pragma warning disable 612, 618
|
||||||
modelBuilder
|
modelBuilder
|
||||||
.HasAnnotation("ProductVersion", "2.1.0-preview1-28153")
|
.HasAnnotation("ProductVersion", "3.0.0-preview5.19209.2")
|
||||||
|
.HasAnnotation("Relational:MaxIdentifierLength", 128)
|
||||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||||
|
|
||||||
modelBuilder.Entity("IdentitySample.DefaultUI.Data.ApplicationUser", b =>
|
modelBuilder.Entity("IdentitySample.DefaultUI.Data.ApplicationUser", b =>
|
||||||
{
|
{
|
||||||
b.Property<string>("Id")
|
b.Property<string>("Id");
|
||||||
.ValueGeneratedOnAdd();
|
|
||||||
|
|
||||||
b.Property<int>("AccessFailedCount");
|
b.Property<int>("AccessFailedCount");
|
||||||
|
|
||||||
|
|
@ -79,8 +77,7 @@ namespace IdentitySample.DefaultUI.Data.Migrations
|
||||||
|
|
||||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b =>
|
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b =>
|
||||||
{
|
{
|
||||||
b.Property<string>("Id")
|
b.Property<string>("Id");
|
||||||
.ValueGeneratedOnAdd();
|
|
||||||
|
|
||||||
b.Property<string>("ConcurrencyStamp")
|
b.Property<string>("ConcurrencyStamp")
|
||||||
.IsConcurrencyToken();
|
.IsConcurrencyToken();
|
||||||
|
|
@ -104,7 +101,8 @@ namespace IdentitySample.DefaultUI.Data.Migrations
|
||||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
|
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
|
||||||
{
|
{
|
||||||
b.Property<int>("Id")
|
b.Property<int>("Id")
|
||||||
.ValueGeneratedOnAdd();
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||||
|
|
||||||
b.Property<string>("ClaimType");
|
b.Property<string>("ClaimType");
|
||||||
|
|
||||||
|
|
@ -123,7 +121,8 @@ namespace IdentitySample.DefaultUI.Data.Migrations
|
||||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
|
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
|
||||||
{
|
{
|
||||||
b.Property<int>("Id")
|
b.Property<int>("Id")
|
||||||
.ValueGeneratedOnAdd();
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||||
|
|
||||||
b.Property<string>("ClaimType");
|
b.Property<string>("ClaimType");
|
||||||
|
|
||||||
|
|
@ -191,47 +190,53 @@ namespace IdentitySample.DefaultUI.Data.Migrations
|
||||||
|
|
||||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
|
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
|
||||||
{
|
{
|
||||||
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole")
|
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
|
||||||
.WithMany()
|
.WithMany()
|
||||||
.HasForeignKey("RoleId")
|
.HasForeignKey("RoleId")
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
|
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
|
||||||
{
|
{
|
||||||
b.HasOne("IdentitySample.DefaultUI.Data.ApplicationUser")
|
b.HasOne("IdentitySample.DefaultUI.Data.ApplicationUser", null)
|
||||||
.WithMany()
|
.WithMany()
|
||||||
.HasForeignKey("UserId")
|
.HasForeignKey("UserId")
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
|
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
|
||||||
{
|
{
|
||||||
b.HasOne("IdentitySample.DefaultUI.Data.ApplicationUser")
|
b.HasOne("IdentitySample.DefaultUI.Data.ApplicationUser", null)
|
||||||
.WithMany()
|
.WithMany()
|
||||||
.HasForeignKey("UserId")
|
.HasForeignKey("UserId")
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
|
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
|
||||||
{
|
{
|
||||||
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole")
|
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
|
||||||
.WithMany()
|
.WithMany()
|
||||||
.HasForeignKey("RoleId")
|
.HasForeignKey("RoleId")
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
b.HasOne("IdentitySample.DefaultUI.Data.ApplicationUser")
|
b.HasOne("IdentitySample.DefaultUI.Data.ApplicationUser", null)
|
||||||
.WithMany()
|
.WithMany()
|
||||||
.HasForeignKey("UserId")
|
.HasForeignKey("UserId")
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
|
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
|
||||||
{
|
{
|
||||||
b.HasOne("IdentitySample.DefaultUI.Data.ApplicationUser")
|
b.HasOne("IdentitySample.DefaultUI.Data.ApplicationUser", null)
|
||||||
.WithMany()
|
.WithMany()
|
||||||
.HasForeignKey("UserId")
|
.HasForeignKey("UserId")
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
});
|
});
|
||||||
#pragma warning restore 612, 618
|
#pragma warning restore 612, 618
|
||||||
}
|
}
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using Microsoft.EntityFrameworkCore.Metadata;
|
using Microsoft.EntityFrameworkCore.Metadata;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
|
|
@ -4,10 +4,7 @@ using IdentitySample.DefaultUI.Data;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Metadata;
|
using Microsoft.EntityFrameworkCore.Metadata;
|
||||||
using Microsoft.EntityFrameworkCore.Metadata.Internal;
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
|
||||||
using Microsoft.EntityFrameworkCore.Storage;
|
|
||||||
using Microsoft.EntityFrameworkCore.Storage.Internal;
|
|
||||||
|
|
||||||
namespace IdentitySample.DefaultUI.Data.Migrations
|
namespace IdentitySample.DefaultUI.Data.Migrations
|
||||||
{
|
{
|
||||||
|
|
@ -18,13 +15,13 @@ namespace IdentitySample.DefaultUI.Data.Migrations
|
||||||
{
|
{
|
||||||
#pragma warning disable 612, 618
|
#pragma warning disable 612, 618
|
||||||
modelBuilder
|
modelBuilder
|
||||||
.HasAnnotation("ProductVersion", "2.1.0-preview1-28153")
|
.HasAnnotation("ProductVersion", "3.0.0-preview5.19209.2")
|
||||||
|
.HasAnnotation("Relational:MaxIdentifierLength", 128)
|
||||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||||
|
|
||||||
modelBuilder.Entity("IdentitySample.DefaultUI.Data.ApplicationUser", b =>
|
modelBuilder.Entity("IdentitySample.DefaultUI.Data.ApplicationUser", b =>
|
||||||
{
|
{
|
||||||
b.Property<string>("Id")
|
b.Property<string>("Id");
|
||||||
.ValueGeneratedOnAdd();
|
|
||||||
|
|
||||||
b.Property<int>("AccessFailedCount");
|
b.Property<int>("AccessFailedCount");
|
||||||
|
|
||||||
|
|
@ -78,8 +75,7 @@ namespace IdentitySample.DefaultUI.Data.Migrations
|
||||||
|
|
||||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b =>
|
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b =>
|
||||||
{
|
{
|
||||||
b.Property<string>("Id")
|
b.Property<string>("Id");
|
||||||
.ValueGeneratedOnAdd();
|
|
||||||
|
|
||||||
b.Property<string>("ConcurrencyStamp")
|
b.Property<string>("ConcurrencyStamp")
|
||||||
.IsConcurrencyToken();
|
.IsConcurrencyToken();
|
||||||
|
|
@ -103,7 +99,8 @@ namespace IdentitySample.DefaultUI.Data.Migrations
|
||||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
|
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
|
||||||
{
|
{
|
||||||
b.Property<int>("Id")
|
b.Property<int>("Id")
|
||||||
.ValueGeneratedOnAdd();
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||||
|
|
||||||
b.Property<string>("ClaimType");
|
b.Property<string>("ClaimType");
|
||||||
|
|
||||||
|
|
@ -122,7 +119,8 @@ namespace IdentitySample.DefaultUI.Data.Migrations
|
||||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
|
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
|
||||||
{
|
{
|
||||||
b.Property<int>("Id")
|
b.Property<int>("Id")
|
||||||
.ValueGeneratedOnAdd();
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||||
|
|
||||||
b.Property<string>("ClaimType");
|
b.Property<string>("ClaimType");
|
||||||
|
|
||||||
|
|
@ -190,47 +188,53 @@ namespace IdentitySample.DefaultUI.Data.Migrations
|
||||||
|
|
||||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
|
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
|
||||||
{
|
{
|
||||||
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole")
|
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
|
||||||
.WithMany()
|
.WithMany()
|
||||||
.HasForeignKey("RoleId")
|
.HasForeignKey("RoleId")
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
|
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
|
||||||
{
|
{
|
||||||
b.HasOne("IdentitySample.DefaultUI.Data.ApplicationUser")
|
b.HasOne("IdentitySample.DefaultUI.Data.ApplicationUser", null)
|
||||||
.WithMany()
|
.WithMany()
|
||||||
.HasForeignKey("UserId")
|
.HasForeignKey("UserId")
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
|
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
|
||||||
{
|
{
|
||||||
b.HasOne("IdentitySample.DefaultUI.Data.ApplicationUser")
|
b.HasOne("IdentitySample.DefaultUI.Data.ApplicationUser", null)
|
||||||
.WithMany()
|
.WithMany()
|
||||||
.HasForeignKey("UserId")
|
.HasForeignKey("UserId")
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
|
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
|
||||||
{
|
{
|
||||||
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole")
|
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
|
||||||
.WithMany()
|
.WithMany()
|
||||||
.HasForeignKey("RoleId")
|
.HasForeignKey("RoleId")
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
b.HasOne("IdentitySample.DefaultUI.Data.ApplicationUser")
|
b.HasOne("IdentitySample.DefaultUI.Data.ApplicationUser", null)
|
||||||
.WithMany()
|
.WithMany()
|
||||||
.HasForeignKey("UserId")
|
.HasForeignKey("UserId")
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
|
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
|
||||||
{
|
{
|
||||||
b.HasOne("IdentitySample.DefaultUI.Data.ApplicationUser")
|
b.HasOne("IdentitySample.DefaultUI.Data.ApplicationUser", null)
|
||||||
.WithMany()
|
.WithMany()
|
||||||
.HasForeignKey("UserId")
|
.HasForeignKey("UserId")
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
});
|
});
|
||||||
#pragma warning restore 612, 618
|
#pragma warning restore 612, 618
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -31,4 +31,8 @@
|
||||||
<Reference Include="Microsoft.Extensions.Logging.Debug" />
|
<Reference Include="Microsoft.Extensions.Logging.Debug" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Folder Include="Properties\" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|
|
||||||
|
|
@ -1,25 +0,0 @@
|
||||||
{
|
|
||||||
"iisSettings": {
|
|
||||||
"windowsAuthentication": false,
|
|
||||||
"anonymousAuthentication": true,
|
|
||||||
"iisExpress": {
|
|
||||||
"applicationUrl": "http://localhost:54840/",
|
|
||||||
"sslPort": 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"profiles": {
|
|
||||||
"IIS Express": {
|
|
||||||
"commandName": "IISExpress",
|
|
||||||
"launchBrowser": true,
|
|
||||||
"environmentVariables": {
|
|
||||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"web": {
|
|
||||||
"commandName": "web",
|
|
||||||
"environmentVariables": {
|
|
||||||
"ASPNET_ENVIRONMENT": "Development"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -11,6 +11,8 @@
|
||||||
<SuppressIces>ICE03</SuppressIces>
|
<SuppressIces>ICE03</SuppressIces>
|
||||||
<DisableGuidGeneration>true</DisableGuidGeneration>
|
<DisableGuidGeneration>true</DisableGuidGeneration>
|
||||||
<SchemaVersion>2.0</SchemaVersion>
|
<SchemaVersion>2.0</SchemaVersion>
|
||||||
|
<TempPlatform Condition="'$(Platform)' == 'x64'">x64</TempPlatform>
|
||||||
|
<TempPlatform Condition="'$(Platform)' == 'x86'">Win32</TempPlatform>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
@ -51,6 +53,15 @@
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
<Target Name="CopyBuildOutputToArtifactDirectory"
|
||||||
|
Condition=" '$(IsProductInstaller)' == 'true' "
|
||||||
|
AfterTargets="Build">
|
||||||
|
<ItemGroup>
|
||||||
|
<BuildContentForAncm Include="$(RepositoryRoot)src\Servers\IIS\AspNetCoreModuleV2\AspNetCore\bin\$(Configuration)\$(TempPlatform)\*.*" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Copy SourceFiles="@(BuildContentForAncm)" DestinationFolder="$(InstallersOutputPath)\IISExpressSymbols\$(TempPlatform)" />
|
||||||
|
</Target>
|
||||||
|
|
||||||
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), Directory.Build.targets))\Directory.Build.targets" />
|
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), Directory.Build.targets))\Directory.Build.targets" />
|
||||||
<Import Project="..\build\settings.props" />
|
<Import Project="..\build\settings.props" />
|
||||||
<Import Project="..\build\versions.props" />
|
<Import Project="..\build\versions.props" />
|
||||||
|
|
|
||||||
|
|
@ -366,66 +366,25 @@
|
||||||
Value=""[IISEXPRESS_INSTALL_PATH]appcmd.exe" set config -section:system.webServer/httpCompression /+"dynamicTypes.[\[]mimeType='text/event-stream',enabled='FALSE'[\]]" /apphostconfig:"[IISEXPRESS_APPHOST_CONFIG_TMP]""/>
|
Value=""[IISEXPRESS_INSTALL_PATH]appcmd.exe" set config -section:system.webServer/httpCompression /+"dynamicTypes.[\[]mimeType='text/event-stream',enabled='FALSE'[\]]" /apphostconfig:"[IISEXPRESS_APPHOST_CONFIG_TMP]""/>
|
||||||
<CustomAction Id="CA_UPDATE_DYNAMIC_COMPRESSION_TMP" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="deferred" Return="ignore" Impersonate="no"/>
|
<CustomAction Id="CA_UPDATE_DYNAMIC_COMPRESSION_TMP" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="deferred" Return="ignore" Impersonate="no"/>
|
||||||
|
|
||||||
<!-- CA to add config section to applicationhost.config -->
|
|
||||||
<CustomAction Id="CA_ADD_CONFIGSECTION_PROPERTY"
|
<CustomAction Id="CA_ADD_CONFIGSECTION_PROPERTY"
|
||||||
Property="CA_ADD_CONFIGSECTION"
|
Property="CA_ADD_CONFIGSECTION"
|
||||||
Value="[IISEXPRESS_APPHOST_CONFIG];[IISEXPRESS_APPHOST_CONFIG_TMP]"/>
|
Value="[IISEXPRESS_APPHOST_CONFIG]"/>
|
||||||
<CustomAction Id="CA_ADD_CONFIGSECTION" Script="jscript" Execute="deferred" Return="check" Impersonate="no">
|
<CustomAction BinaryKey="IISCustomActionDll" Id="CA_ADD_CONFIGSECTION" DllEntry="AddConfigSection" Execute="deferred" Return="check" Impersonate="no"/>
|
||||||
<![CDATA[
|
|
||||||
var caData = Session.Property("CustomActionData");
|
<CustomAction Id="CA_ADD_CONFIGSECTION_PROPERTY_TMP"
|
||||||
configfiles = caData.split(';');
|
Property="CA_ADD_CONFIGSECTION_TMP"
|
||||||
for (var i = 0; i < configfiles.length; i++) {
|
Value="[IISEXPRESS_APPHOST_CONFIG_TMP]"/>
|
||||||
var configfile = configfiles[i];
|
<CustomAction BinaryKey="IISCustomActionDll" Id="CA_ADD_CONFIGSECTION_TMP" DllEntry="AddConfigSection" Execute="deferred" Return="check" Impersonate="no"/>
|
||||||
var xmlDoc = new ActiveXObject("Msxml2.DOMDocument");
|
|
||||||
xmlDoc.async = false;
|
|
||||||
xmlDoc.preserveWhiteSpace = true;
|
|
||||||
xmlDoc.load(configfile );
|
|
||||||
if (xmlDoc.parseError.errorCode == 0) {
|
|
||||||
xmlDoc.setProperty("SelectionLanguage", "XPath");
|
|
||||||
var websvrNode = xmlDoc.selectSingleNode("//configuration/configSections/sectionGroup[@name=\"system.webServer\"]");
|
|
||||||
if (websvrNode != null) {
|
|
||||||
var ancmNode = xmlDoc.selectSingleNode("//configuration/configSections/sectionGroup[@name=\"system.webServer\"]/section[@name=\"$(var.AspNetCoreSectionName)\"]");
|
|
||||||
if (ancmNode == null) {
|
|
||||||
ancmNode = xmlDoc.createElement("section");
|
|
||||||
ancmNode.setAttribute("name", "$(var.AspNetCoreSectionName)");
|
|
||||||
ancmNode.setAttribute("overrideModeDefault", "Allow");
|
|
||||||
websvrNode.appendChild(ancmNode);
|
|
||||||
xmlDoc.save(configfile );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]]>
|
|
||||||
</CustomAction>
|
|
||||||
|
|
||||||
<!-- CA to remove config section to applicationhost.config -->
|
|
||||||
<CustomAction Id="CA_REMOVE_CONFIGSECTION_PROPERTY"
|
<CustomAction Id="CA_REMOVE_CONFIGSECTION_PROPERTY"
|
||||||
Property="CA_REMOVE_CONFIGSECTION"
|
Property="CA_REMOVE_CONFIGSECTION"
|
||||||
Value="[IISEXPRESS_APPHOST_CONFIG];[IISEXPRESS_APPHOST_CONFIG_TMP]"/>
|
Value="[IISEXPRESS_APPHOST_CONFIG]"/>
|
||||||
<CustomAction Id="CA_REMOVE_CONFIGSECTION" Script="jscript" Execute="deferred" Return="check" Impersonate="no">
|
<CustomAction Id="CA_REMOVE_CONFIGSECTION" BinaryKey="IISCustomActionDll" DllEntry="RemoveConfigSection" Execute="deferred" Return="check" Impersonate="no" />
|
||||||
<![CDATA[
|
|
||||||
var caData = Session.Property("CustomActionData");
|
<CustomAction Id="CA_REMOVE_CONFIGSECTION_PROPERTY_TMP"
|
||||||
configfiles = caData.split(';');
|
Property="CA_REMOVE_CONFIGSECTION_TMP"
|
||||||
for (var i = 0; i < configfiles.length; i++) {
|
Value="[IISEXPRESS_APPHOST_CONFIG_TMP]"/>
|
||||||
var configfile = configfiles[i];
|
<CustomAction Id="CA_REMOVE_CONFIGSECTION_TMP" BinaryKey="IISCustomActionDll" DllEntry="RemoveConfigSection" Execute="deferred" Return="check" Impersonate="no" />
|
||||||
var xmlDoc = new ActiveXObject("Msxml2.DOMDocument");
|
|
||||||
xmlDoc.async = false;
|
|
||||||
xmlDoc.preserveWhiteSpace = true;
|
|
||||||
xmlDoc.load(configfile );
|
|
||||||
if (xmlDoc.parseError.errorCode == 0) {
|
|
||||||
xmlDoc.setProperty("SelectionLanguage", "XPath");
|
|
||||||
var websvrNode = xmlDoc.selectSingleNode("//configuration/configSections/sectionGroup[@name=\"system.webServer\"]");
|
|
||||||
if (websvrNode != null) {
|
|
||||||
var ancmNode = xmlDoc.selectSingleNode("//configuration/configSections/sectionGroup[@name=\"system.webServer\"]/section[@name=\"$(var.AspNetCoreSectionName)\"]");
|
|
||||||
if (ancmNode != null) {
|
|
||||||
websvrNode.removeChild(ancmNode);
|
|
||||||
xmlDoc.save(configfile );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]]>
|
|
||||||
</CustomAction>
|
|
||||||
|
|
||||||
<?if $(var.Platform) = "x64" ?>
|
<?if $(var.Platform) = "x64" ?>
|
||||||
<CustomAction Id="CA_UNLOCK_HANDLER32_PROPERTY"
|
<CustomAction Id="CA_UNLOCK_HANDLER32_PROPERTY"
|
||||||
|
|
@ -520,68 +479,25 @@
|
||||||
Value=""[IISEXPRESS_INSTALL_PATH32]appcmd.exe" set config -section:system.webServer/httpCompression /+"dynamicTypes.[\[]mimeType='text/event-stream',enabled='FALSE'[\]]" /apphostconfig:"[IISEXPRESS_APPHOST_CONFIG32]""/>
|
Value=""[IISEXPRESS_INSTALL_PATH32]appcmd.exe" set config -section:system.webServer/httpCompression /+"dynamicTypes.[\[]mimeType='text/event-stream',enabled='FALSE'[\]]" /apphostconfig:"[IISEXPRESS_APPHOST_CONFIG32]""/>
|
||||||
<CustomAction Id="CA_UPDATE_DYNAMIC_COMPRESSION_TMP32" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="deferred" Return="ignore" Impersonate="no"/>
|
<CustomAction Id="CA_UPDATE_DYNAMIC_COMPRESSION_TMP32" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="deferred" Return="ignore" Impersonate="no"/>
|
||||||
|
|
||||||
|
|
||||||
<!-- CA to add config section to applicationhost.config -->
|
|
||||||
<CustomAction Id="CA_ADD_CONFIGSECTION32_PROPERTY"
|
<CustomAction Id="CA_ADD_CONFIGSECTION32_PROPERTY"
|
||||||
Property="CA_ADD_CONFIGSECTION32"
|
Property="CA_ADD_CONFIGSECTION32"
|
||||||
Value="[IISEXPRESS_APPHOST_CONFIG32];[IISEXPRESS_APPHOST_CONFIG_TMP32]"/>
|
Value="[IISEXPRESS_APPHOST_CONFIG32]"/>
|
||||||
<CustomAction Id="CA_ADD_CONFIGSECTION32" Script="jscript" Execute="deferred" Return="check" Impersonate="no">
|
<CustomAction BinaryKey="IISCustomActionDll" Id="CA_ADD_CONFIGSECTION32" DllEntry="AddConfigSection" Execute="deferred" Return="check" Impersonate="no"/>
|
||||||
<!-- Warning LGHT1076: ICE03: String overflow. Orca.exe inspection shows the custom action value is populated correctly -->
|
|
||||||
<![CDATA[
|
<CustomAction Id="CA_ADD_CONFIGSECTION32_PROPERTY_TMP"
|
||||||
var caData = Session.Property("CustomActionData");
|
Property="CA_ADD_CONFIGSECTION32_TMP"
|
||||||
configfiles = caData.split(';');
|
Value="[IISEXPRESS_APPHOST_CONFIG_TMP32]"/>
|
||||||
for (var i = 0; i < configfiles.length; i++) {
|
<CustomAction BinaryKey="IISCustomActionDll" Id="CA_ADD_CONFIGSECTION32_TMP" DllEntry="AddConfigSection" Execute="deferred" Return="check" Impersonate="no"/>
|
||||||
var configfile = configfiles[i];
|
|
||||||
var xmlDoc = new ActiveXObject("Msxml2.DOMDocument");
|
|
||||||
xmlDoc.async = false;
|
|
||||||
xmlDoc.preserveWhiteSpace = true;
|
|
||||||
xmlDoc.load(configfile);
|
|
||||||
if (xmlDoc.parseError.errorCode == 0) {
|
|
||||||
xmlDoc.setProperty("SelectionLanguage", "XPath");
|
|
||||||
var websvrNode = xmlDoc.selectSingleNode("//configuration/configSections/sectionGroup[@name=\"system.webServer\"]");
|
|
||||||
if (websvrNode != null) {
|
|
||||||
var ancmNode = xmlDoc.selectSingleNode("//configuration/configSections/sectionGroup[@name=\"system.webServer\"]/section[@name=\"$(var.AspNetCoreSectionName)\"]");
|
|
||||||
if (ancmNode == null) {
|
|
||||||
ancmNode = xmlDoc.createElement("section");
|
|
||||||
ancmNode.setAttribute("name", "$(var.AspNetCoreSectionName)");
|
|
||||||
ancmNode.setAttribute("overrideModeDefault", "Allow");
|
|
||||||
websvrNode.appendChild(ancmNode);
|
|
||||||
xmlDoc.save(configfile);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]]>
|
|
||||||
</CustomAction>
|
|
||||||
|
|
||||||
<!-- CA to remove config section to applicationhost.config -->
|
|
||||||
<CustomAction Id="CA_REMOVE_CONFIGSECTION32_PROPERTY"
|
<CustomAction Id="CA_REMOVE_CONFIGSECTION32_PROPERTY"
|
||||||
Property="CA_REMOVE_CONFIGSECTION32"
|
Property="CA_REMOVE_CONFIGSECTION32"
|
||||||
Value="[IISEXPRESS_APPHOST_CONFIG32];[IISEXPRESS_APPHOST_CONFIG_TMP32]"/>
|
Value="[IISEXPRESS_APPHOST_CONFIG32]"/>
|
||||||
<CustomAction Id="CA_REMOVE_CONFIGSECTION32" Script="jscript" Execute="deferred" Return="check" Impersonate="no">
|
<CustomAction Id="CA_REMOVE_CONFIGSECTION32" BinaryKey="IISCustomActionDll" DllEntry="RemoveConfigSection" Execute="deferred" Return="check" Impersonate="no" />
|
||||||
<![CDATA[
|
|
||||||
var caData = Session.Property("CustomActionData");
|
<CustomAction Id="CA_REMOVE_CONFIGSECTION32_PROPERTY_TMP"
|
||||||
configfiles = caData.split(';');
|
Property="CA_REMOVE_CONFIGSECTION32_TMP"
|
||||||
for (var i = 0; i < configfiles.length; i++) {
|
Value="[IISEXPRESS_APPHOST_CONFIG_TMP32]"/>
|
||||||
var configfile = configfiles[i];
|
<CustomAction Id="CA_REMOVE_CONFIGSECTION32_TMP" BinaryKey="IISCustomActionDll" DllEntry="RemoveConfigSection" Execute="deferred" Return="check" Impersonate="no" />
|
||||||
var xmlDoc = new ActiveXObject("Msxml2.DOMDocument");
|
|
||||||
xmlDoc.async = false;
|
|
||||||
xmlDoc.preserveWhiteSpace = true;
|
|
||||||
xmlDoc.load(configfile);
|
|
||||||
if (xmlDoc.parseError.errorCode == 0) {
|
|
||||||
xmlDoc.setProperty("SelectionLanguage", "XPath");
|
|
||||||
var websvrNode = xmlDoc.selectSingleNode("//configuration/configSections/sectionGroup[@name=\"system.webServer\"]");
|
|
||||||
if (websvrNode != null) {
|
|
||||||
var ancmNode = xmlDoc.selectSingleNode("//configuration/configSections/sectionGroup[@name=\"system.webServer\"]/section[@name=\"$(var.AspNetCoreSectionName)\"]");
|
|
||||||
if (ancmNode != null) {
|
|
||||||
websvrNode.removeChild(ancmNode);
|
|
||||||
xmlDoc.save(configfile);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]]>
|
|
||||||
</CustomAction>
|
|
||||||
<?endif?>
|
<?endif?>
|
||||||
|
|
||||||
<InstallExecuteSequence>
|
<InstallExecuteSequence>
|
||||||
|
|
@ -600,7 +516,9 @@
|
||||||
<Custom Action="CA_SET_MODULE" After="CA_SET_MODULE_PROPERTY"><![CDATA[(NOT REMOVE)]]></Custom>
|
<Custom Action="CA_SET_MODULE" After="CA_SET_MODULE_PROPERTY"><![CDATA[(NOT REMOVE)]]></Custom>
|
||||||
<Custom Action="CA_ADD_CONFIGSECTION_PROPERTY" After="CA_SET_MODULE"><![CDATA[(NOT REMOVE)]]></Custom>
|
<Custom Action="CA_ADD_CONFIGSECTION_PROPERTY" After="CA_SET_MODULE"><![CDATA[(NOT REMOVE)]]></Custom>
|
||||||
<Custom Action="CA_ADD_CONFIGSECTION" After="CA_ADD_CONFIGSECTION_PROPERTY"><![CDATA[(NOT REMOVE)]]></Custom>
|
<Custom Action="CA_ADD_CONFIGSECTION" After="CA_ADD_CONFIGSECTION_PROPERTY"><![CDATA[(NOT REMOVE)]]></Custom>
|
||||||
<Custom Action="CA_ADD_TRACE_PROVIDER_DEFINITION_PROPERTY" After="CA_ADD_CONFIGSECTION"><![CDATA[(NOT REMOVE)]]></Custom>
|
<Custom Action="CA_ADD_CONFIGSECTION_PROPERTY_TMP" After="CA_ADD_CONFIGSECTION"><![CDATA[(NOT REMOVE)]]></Custom>
|
||||||
|
<Custom Action="CA_ADD_CONFIGSECTION_TMP" After="CA_ADD_CONFIGSECTION_PROPERTY_TMP"><![CDATA[(NOT REMOVE)]]></Custom>
|
||||||
|
<Custom Action="CA_ADD_TRACE_PROVIDER_DEFINITION_PROPERTY" After="CA_ADD_CONFIGSECTION_TMP"><![CDATA[(NOT REMOVE)]]></Custom>
|
||||||
<Custom Action="CA_ADD_TRACE_PROVIDER_DEFINITION" After="CA_ADD_TRACE_PROVIDER_DEFINITION_PROPERTY"><![CDATA[(NOT REMOVE)]]></Custom>
|
<Custom Action="CA_ADD_TRACE_PROVIDER_DEFINITION" After="CA_ADD_TRACE_PROVIDER_DEFINITION_PROPERTY"><![CDATA[(NOT REMOVE)]]></Custom>
|
||||||
<Custom Action="CA_ADD_TRACE_PROVIDER_DEFINITION_TMP_PROPERTY" After="CA_ADD_TRACE_PROVIDER_DEFINITION"><![CDATA[(NOT REMOVE)]]></Custom>
|
<Custom Action="CA_ADD_TRACE_PROVIDER_DEFINITION_TMP_PROPERTY" After="CA_ADD_TRACE_PROVIDER_DEFINITION"><![CDATA[(NOT REMOVE)]]></Custom>
|
||||||
<Custom Action="CA_ADD_TRACE_PROVIDER_DEFINITION_TMP" After="CA_ADD_TRACE_PROVIDER_DEFINITION_TMP_PROPERTY"><![CDATA[(NOT REMOVE)]]></Custom>
|
<Custom Action="CA_ADD_TRACE_PROVIDER_DEFINITION_TMP" After="CA_ADD_TRACE_PROVIDER_DEFINITION_TMP_PROPERTY"><![CDATA[(NOT REMOVE)]]></Custom>
|
||||||
|
|
@ -610,6 +528,8 @@
|
||||||
<Custom Action="CA_REMOVE_MODULE" Before="RemoveFiles"><![CDATA[(REMOVE~="ALL" AND NOT UPGRADINGPRODUCTCODE)]]></Custom>
|
<Custom Action="CA_REMOVE_MODULE" Before="RemoveFiles"><![CDATA[(REMOVE~="ALL" AND NOT UPGRADINGPRODUCTCODE)]]></Custom>
|
||||||
<Custom Action="CA_REMOVE_CONFIGSECTION_PROPERTY" Before="CA_REMOVE_CONFIGSECTION"><![CDATA[(REMOVE~="ALL" AND NOT UPGRADINGPRODUCTCODE)]]></Custom>
|
<Custom Action="CA_REMOVE_CONFIGSECTION_PROPERTY" Before="CA_REMOVE_CONFIGSECTION"><![CDATA[(REMOVE~="ALL" AND NOT UPGRADINGPRODUCTCODE)]]></Custom>
|
||||||
<Custom Action="CA_REMOVE_CONFIGSECTION" Before="RemoveFiles"><![CDATA[(REMOVE~="ALL" AND NOT UPGRADINGPRODUCTCODE)]]></Custom>
|
<Custom Action="CA_REMOVE_CONFIGSECTION" Before="RemoveFiles"><![CDATA[(REMOVE~="ALL" AND NOT UPGRADINGPRODUCTCODE)]]></Custom>
|
||||||
|
<Custom Action="CA_REMOVE_CONFIGSECTION_PROPERTY_TMP" Before="CA_REMOVE_CONFIGSECTION_TMP"><![CDATA[(REMOVE~="ALL" AND NOT UPGRADINGPRODUCTCODE)]]></Custom>
|
||||||
|
<Custom Action="CA_REMOVE_CONFIGSECTION_TMP" Before="RemoveFiles"><![CDATA[(REMOVE~="ALL" AND NOT UPGRADINGPRODUCTCODE)]]></Custom>
|
||||||
<Custom Action="CA_REMOVE_TRACE_PROVIDER_DEFINITION_PROPERTY" Before="CA_REMOVE_TRACE_PROVIDER_DEFINITION"><![CDATA[(REMOVE~="ALL" AND NOT UPGRADINGPRODUCTCODE)]]></Custom>
|
<Custom Action="CA_REMOVE_TRACE_PROVIDER_DEFINITION_PROPERTY" Before="CA_REMOVE_TRACE_PROVIDER_DEFINITION"><![CDATA[(REMOVE~="ALL" AND NOT UPGRADINGPRODUCTCODE)]]></Custom>
|
||||||
<Custom Action="CA_REMOVE_TRACE_PROVIDER_DEFINITION" Before="RemoveFiles"><![CDATA[(REMOVE~="ALL" AND NOT UPGRADINGPRODUCTCODE)]]></Custom>
|
<Custom Action="CA_REMOVE_TRACE_PROVIDER_DEFINITION" Before="RemoveFiles"><![CDATA[(REMOVE~="ALL" AND NOT UPGRADINGPRODUCTCODE)]]></Custom>
|
||||||
<Custom Action="CA_REMOVE_TRACE_PROVIDER_DEFINITION_TMP_PROPERTY" Before="CA_REMOVE_TRACE_PROVIDER_DEFINITION_TMP"><![CDATA[(REMOVE~="ALL" AND NOT UPGRADINGPRODUCTCODE)]]></Custom>
|
<Custom Action="CA_REMOVE_TRACE_PROVIDER_DEFINITION_TMP_PROPERTY" Before="CA_REMOVE_TRACE_PROVIDER_DEFINITION_TMP"><![CDATA[(REMOVE~="ALL" AND NOT UPGRADINGPRODUCTCODE)]]></Custom>
|
||||||
|
|
@ -640,7 +560,9 @@
|
||||||
<Custom Action="CA_SET_MODULE32" After="CA_ADD_MODULE32_PROPERTY"><![CDATA[(NOT REMOVE AND IISEXPRESS_INSTALL_PATH32)]]></Custom>
|
<Custom Action="CA_SET_MODULE32" After="CA_ADD_MODULE32_PROPERTY"><![CDATA[(NOT REMOVE AND IISEXPRESS_INSTALL_PATH32)]]></Custom>
|
||||||
<Custom Action="CA_ADD_CONFIGSECTION32_PROPERTY" After="CA_SET_MODULE32"><![CDATA[(NOT REMOVE)]]></Custom>
|
<Custom Action="CA_ADD_CONFIGSECTION32_PROPERTY" After="CA_SET_MODULE32"><![CDATA[(NOT REMOVE)]]></Custom>
|
||||||
<Custom Action="CA_ADD_CONFIGSECTION32" After="CA_ADD_CONFIGSECTION32_PROPERTY"><![CDATA[(NOT REMOVE)]]></Custom>
|
<Custom Action="CA_ADD_CONFIGSECTION32" After="CA_ADD_CONFIGSECTION32_PROPERTY"><![CDATA[(NOT REMOVE)]]></Custom>
|
||||||
<Custom Action="CA_ADD_TRACE_PROVIDER_DEFINITION32_PROPERTY" After="CA_ADD_CONFIGSECTION32"><![CDATA[(NOT REMOVE)]]></Custom>
|
<Custom Action="CA_ADD_CONFIGSECTION32_PROPERTY_TMP" After="CA_ADD_CONFIGSECTION32"><![CDATA[(NOT REMOVE)]]></Custom>
|
||||||
|
<Custom Action="CA_ADD_CONFIGSECTION32_TMP" After="CA_ADD_CONFIGSECTION32_PROPERTY_TMP"><![CDATA[(NOT REMOVE)]]></Custom>
|
||||||
|
<Custom Action="CA_ADD_TRACE_PROVIDER_DEFINITION32_PROPERTY" After="CA_ADD_CONFIGSECTION32_TMP"><![CDATA[(NOT REMOVE)]]></Custom>
|
||||||
<Custom Action="CA_ADD_TRACE_PROVIDER_DEFINITION32" After="CA_ADD_TRACE_PROVIDER_DEFINITION32_PROPERTY"><![CDATA[(NOT REMOVE)]]></Custom>
|
<Custom Action="CA_ADD_TRACE_PROVIDER_DEFINITION32" After="CA_ADD_TRACE_PROVIDER_DEFINITION32_PROPERTY"><![CDATA[(NOT REMOVE)]]></Custom>
|
||||||
<Custom Action="CA_ADD_TRACE_PROVIDER_DEFINITION_TMP32_PROPERTY" After="CA_ADD_TRACE_PROVIDER_DEFINITION32"><![CDATA[(NOT REMOVE)]]></Custom>
|
<Custom Action="CA_ADD_TRACE_PROVIDER_DEFINITION_TMP32_PROPERTY" After="CA_ADD_TRACE_PROVIDER_DEFINITION32"><![CDATA[(NOT REMOVE)]]></Custom>
|
||||||
<Custom Action="CA_ADD_TRACE_PROVIDER_DEFINITION_TMP32" After="CA_ADD_TRACE_PROVIDER_DEFINITION_TMP32_PROPERTY"><![CDATA[(NOT REMOVE)]]></Custom>
|
<Custom Action="CA_ADD_TRACE_PROVIDER_DEFINITION_TMP32" After="CA_ADD_TRACE_PROVIDER_DEFINITION_TMP32_PROPERTY"><![CDATA[(NOT REMOVE)]]></Custom>
|
||||||
|
|
@ -650,6 +572,8 @@
|
||||||
<Custom Action="CA_REMOVE_MODULE32" After="CA_REMOVE_MODULE32_PROPERTY"><![CDATA[(REMOVE~="ALL" AND IISEXPRESS_INSTALL_PATH32 AND NOT UPGRADINGPRODUCTCODE)]]></Custom>
|
<Custom Action="CA_REMOVE_MODULE32" After="CA_REMOVE_MODULE32_PROPERTY"><![CDATA[(REMOVE~="ALL" AND IISEXPRESS_INSTALL_PATH32 AND NOT UPGRADINGPRODUCTCODE)]]></Custom>
|
||||||
<Custom Action="CA_REMOVE_CONFIGSECTION32_PROPERTY" Before="CA_REMOVE_CONFIGSECTION32"><![CDATA[(REMOVE~="ALL" AND NOT UPGRADINGPRODUCTCODE)]]></Custom>
|
<Custom Action="CA_REMOVE_CONFIGSECTION32_PROPERTY" Before="CA_REMOVE_CONFIGSECTION32"><![CDATA[(REMOVE~="ALL" AND NOT UPGRADINGPRODUCTCODE)]]></Custom>
|
||||||
<Custom Action="CA_REMOVE_CONFIGSECTION32" Before="RemoveFiles"><![CDATA[(REMOVE~="ALL" AND NOT UPGRADINGPRODUCTCODE)]]></Custom>
|
<Custom Action="CA_REMOVE_CONFIGSECTION32" Before="RemoveFiles"><![CDATA[(REMOVE~="ALL" AND NOT UPGRADINGPRODUCTCODE)]]></Custom>
|
||||||
|
<Custom Action="CA_REMOVE_CONFIGSECTION32_PROPERTY_TMP" Before="CA_REMOVE_CONFIGSECTION32_TMP"><![CDATA[(REMOVE~="ALL" AND NOT UPGRADINGPRODUCTCODE)]]></Custom>
|
||||||
|
<Custom Action="CA_REMOVE_CONFIGSECTION32_TMP" Before="RemoveFiles"><![CDATA[(REMOVE~="ALL" AND NOT UPGRADINGPRODUCTCODE)]]></Custom>
|
||||||
<Custom Action="CA_REMOVE_TRACE_PROVIDER_DEFINITION32_PROPERTY" Before="CA_REMOVE_TRACE_PROVIDER_DEFINITION32"><![CDATA[(REMOVE~="ALL" AND NOT UPGRADINGPRODUCTCODE)]]></Custom>
|
<Custom Action="CA_REMOVE_TRACE_PROVIDER_DEFINITION32_PROPERTY" Before="CA_REMOVE_TRACE_PROVIDER_DEFINITION32"><![CDATA[(REMOVE~="ALL" AND NOT UPGRADINGPRODUCTCODE)]]></Custom>
|
||||||
<Custom Action="CA_REMOVE_TRACE_PROVIDER_DEFINITION32" Before="RemoveFiles"><![CDATA[(REMOVE~="ALL" AND NOT UPGRADINGPRODUCTCODE)]]></Custom>
|
<Custom Action="CA_REMOVE_TRACE_PROVIDER_DEFINITION32" Before="RemoveFiles"><![CDATA[(REMOVE~="ALL" AND NOT UPGRADINGPRODUCTCODE)]]></Custom>
|
||||||
<Custom Action="CA_REMOVE_TRACE_PROVIDER_DEFINITION_TMP32_PROPERTY" Before="CA_REMOVE_TRACE_PROVIDER_DEFINITION_TMP32"><![CDATA[(REMOVE~="ALL" AND NOT UPGRADINGPRODUCTCODE)]]></Custom>
|
<Custom Action="CA_REMOVE_TRACE_PROVIDER_DEFINITION_TMP32_PROPERTY" Before="CA_REMOVE_TRACE_PROVIDER_DEFINITION_TMP32"><![CDATA[(REMOVE~="ALL" AND NOT UPGRADINGPRODUCTCODE)]]></Custom>
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,8 @@
|
||||||
// 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.
|
||||||
|
|
||||||
#include <precomp.h>
|
#include <precomp.h>
|
||||||
|
#include <MsiQuery.h>
|
||||||
|
#include <msxml6.h>
|
||||||
|
|
||||||
DECLARE_DEBUG_PRINT_OBJECT( "proxyCA.dll" );
|
DECLARE_DEBUG_PRINT_OBJECT( "proxyCA.dll" );
|
||||||
|
|
||||||
|
|
@ -40,6 +42,137 @@ struct COMPRESSION_MIME_TYPE
|
||||||
COMPRESSION_MIME_TYPE gMimeTypes[] =
|
COMPRESSION_MIME_TYPE gMimeTypes[] =
|
||||||
{ { L"text/event-stream", FALSE} };
|
{ { L"text/event-stream", FALSE} };
|
||||||
|
|
||||||
|
#define _HR_RET(hr) __pragma(warning(push)) \
|
||||||
|
__pragma(warning(disable:26498)) /*disable constexpr warning */ \
|
||||||
|
const HRESULT __hrRet = hr; \
|
||||||
|
__pragma(warning(pop))
|
||||||
|
|
||||||
|
#define _GOTO_FINISHED() __pragma(warning(push)) \
|
||||||
|
__pragma(warning(disable:26438)) /*disable avoid goto warning*/ \
|
||||||
|
goto Finished \
|
||||||
|
__pragma(warning(pop))
|
||||||
|
|
||||||
|
#define RETURN_IF_FAILED(hrr) do { _HR_RET(hrr); if (FAILED(__hrRet)) { hr = __hrRet; IISLogWrite(SETUP_LOG_SEVERITY_INFORMATION, L"Exiting hr=0x%x", hr); return hr; }} while (0, 0)
|
||||||
|
|
||||||
|
// Modifies the configSections to include the aspNetCore section
|
||||||
|
UINT
|
||||||
|
WINAPI
|
||||||
|
AddConfigSection(
|
||||||
|
IN MSIHANDLE handle
|
||||||
|
)
|
||||||
|
{
|
||||||
|
HRESULT hr;
|
||||||
|
CComPtr<IXMLDOMDocument2> pXMLDoc;
|
||||||
|
VARIANT_BOOL variantResult;
|
||||||
|
IXMLDOMNode* webServerNode;
|
||||||
|
IXMLDOMNode* aspNetCoreNode;
|
||||||
|
IXMLDOMNode* tempNode;
|
||||||
|
IXMLDOMElement* element;
|
||||||
|
STRU customActionData;
|
||||||
|
|
||||||
|
CComBSTR selectLanguage = SysAllocString(L"SelectionLanguage");
|
||||||
|
CComBSTR xPath = SysAllocString(L"XPath");
|
||||||
|
CComBSTR webServerPath = SysAllocString(L"//configuration/configSections/sectionGroup[@name=\"system.webServer\"]");
|
||||||
|
CComBSTR aspNetCorePath = SysAllocString(L"//configuration/configSections/sectionGroup[@name=\"system.webServer\"]/section[@name=\"aspNetCore\"]");
|
||||||
|
CComBSTR section = SysAllocString(L"section");
|
||||||
|
CComBSTR name = SysAllocString(L"name");
|
||||||
|
CComBSTR aspNetCore = SysAllocString(L"aspNetCore");
|
||||||
|
CComBSTR overrideMode = SysAllocString(L"overrideModeDefault");
|
||||||
|
CComBSTR allow = SysAllocString(L"Allow");
|
||||||
|
|
||||||
|
RETURN_IF_FAILED(CoInitialize(NULL));
|
||||||
|
|
||||||
|
hr = MsiUtilGetProperty(handle, TEXT("CustomActionData"), &customActionData);
|
||||||
|
|
||||||
|
RETURN_IF_FAILED(hr = pXMLDoc.CoCreateInstance(__uuidof(DOMDocument60)));
|
||||||
|
|
||||||
|
RETURN_IF_FAILED(hr = pXMLDoc->put_async(false));
|
||||||
|
|
||||||
|
RETURN_IF_FAILED(hr = pXMLDoc->load(CComVariant(customActionData.QueryStr()), &variantResult));
|
||||||
|
|
||||||
|
if (variantResult == VARIANT_FALSE)
|
||||||
|
{
|
||||||
|
return ERROR_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
RETURN_IF_FAILED(hr = pXMLDoc->setProperty(selectLanguage, CComVariant(xPath)));
|
||||||
|
|
||||||
|
RETURN_IF_FAILED(hr = pXMLDoc->selectSingleNode(webServerPath, &webServerNode));
|
||||||
|
|
||||||
|
RETURN_IF_FAILED(hr = pXMLDoc->selectSingleNode(aspNetCorePath, &aspNetCoreNode));
|
||||||
|
|
||||||
|
if (aspNetCoreNode == NULL)
|
||||||
|
{
|
||||||
|
RETURN_IF_FAILED(hr = pXMLDoc->createElement(section, &element));
|
||||||
|
|
||||||
|
RETURN_IF_FAILED(hr = element->setAttribute(name, CComVariant(aspNetCore)));
|
||||||
|
|
||||||
|
RETURN_IF_FAILED(hr = element->setAttribute(overrideMode, CComVariant(allow)));
|
||||||
|
|
||||||
|
RETURN_IF_FAILED(hr = webServerNode->appendChild(element, &tempNode));
|
||||||
|
|
||||||
|
RETURN_IF_FAILED(hr = pXMLDoc->save(CComVariant(customActionData.QueryStr())));
|
||||||
|
}
|
||||||
|
|
||||||
|
return ERROR_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Modifies the configSections to remove the aspNetCore section
|
||||||
|
UINT
|
||||||
|
WINAPI
|
||||||
|
RemoveConfigSection(
|
||||||
|
IN MSIHANDLE handle
|
||||||
|
)
|
||||||
|
{
|
||||||
|
HRESULT hr;
|
||||||
|
CComPtr<IXMLDOMDocument2> pXMLDoc;
|
||||||
|
VARIANT_BOOL variantResult;
|
||||||
|
IXMLDOMNode* webServerNode;
|
||||||
|
IXMLDOMNode* aspNetCoreNode;
|
||||||
|
IXMLDOMNode* tempNode;
|
||||||
|
STRU customActionData;
|
||||||
|
|
||||||
|
CComBSTR selectLanguage = SysAllocString(L"SelectionLanguage");
|
||||||
|
CComBSTR xPath = SysAllocString(L"XPath");
|
||||||
|
CComBSTR webServerPath = SysAllocString(L"//configuration/configSections/sectionGroup[@name=\"system.webServer\"]");
|
||||||
|
CComBSTR aspNetCorePath = SysAllocString(L"//configuration/configSections/sectionGroup[@name=\"system.webServer\"]/section[@name=\"aspNetCore\"]");
|
||||||
|
CComBSTR section = SysAllocString(L"section");
|
||||||
|
CComBSTR name = SysAllocString(L"name");
|
||||||
|
CComBSTR aspNetCore = SysAllocString(L"aspNetCore");
|
||||||
|
CComBSTR overrideMode = SysAllocString(L"overrideModeDefault");
|
||||||
|
CComBSTR allow = SysAllocString(L"Allow");
|
||||||
|
|
||||||
|
RETURN_IF_FAILED(CoInitialize(NULL));
|
||||||
|
|
||||||
|
hr = MsiUtilGetProperty(handle, TEXT("CustomActionData"), &customActionData);
|
||||||
|
|
||||||
|
RETURN_IF_FAILED(hr = pXMLDoc.CoCreateInstance(__uuidof(DOMDocument60)));
|
||||||
|
|
||||||
|
RETURN_IF_FAILED(hr = pXMLDoc->put_async(false));
|
||||||
|
|
||||||
|
RETURN_IF_FAILED(hr = pXMLDoc->load(CComVariant(customActionData.QueryStr()), &variantResult));
|
||||||
|
|
||||||
|
if (variantResult == VARIANT_FALSE)
|
||||||
|
{
|
||||||
|
return ERROR_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
RETURN_IF_FAILED(hr = pXMLDoc->setProperty(selectLanguage, CComVariant(xPath)));
|
||||||
|
|
||||||
|
RETURN_IF_FAILED(hr = pXMLDoc->selectSingleNode(webServerPath, &webServerNode));
|
||||||
|
|
||||||
|
RETURN_IF_FAILED(hr = pXMLDoc->selectSingleNode(aspNetCorePath, &aspNetCoreNode));
|
||||||
|
|
||||||
|
if (aspNetCoreNode != NULL)
|
||||||
|
{
|
||||||
|
RETURN_IF_FAILED(webServerNode->removeChild(aspNetCoreNode, &tempNode));
|
||||||
|
|
||||||
|
RETURN_IF_FAILED(hr = pXMLDoc->save(CComVariant(customActionData.QueryStr())));
|
||||||
|
}
|
||||||
|
|
||||||
|
return ERROR_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
UINT
|
UINT
|
||||||
WINAPI
|
WINAPI
|
||||||
RegisterANCMCompressionCA(
|
RegisterANCMCompressionCA(
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,8 @@ EXPORTS
|
||||||
ExecuteCleanUpWindowsHotfixCA
|
ExecuteCleanUpWindowsHotfixCA
|
||||||
ScheduleRebootIfRequiredCA
|
ScheduleRebootIfRequiredCA
|
||||||
|
|
||||||
|
AddConfigSection
|
||||||
|
RemoveConfigSection
|
||||||
RegisterANCMCompressionCA
|
RegisterANCMCompressionCA
|
||||||
|
|
||||||
CheckForServicesRunningCA
|
CheckForServicesRunningCA
|
||||||
|
|
|
||||||
|
|
@ -48,6 +48,9 @@
|
||||||
<PropertyGroup Condition="'$(Configuration)'=='Release'">
|
<PropertyGroup Condition="'$(Configuration)'=='Release'">
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Label="Configuration">
|
||||||
|
<VCToolsVersion />
|
||||||
|
</PropertyGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<AdditionalIncludeDirectories>$(IIS-Common)version;$(IIS-Common)Include;$(IIS-Setup)iisca\lib;$(WIX)sdk\$(WixPlatformToolset)\inc;$(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(IIS-Common)version;$(IIS-Common)Include;$(IIS-Setup)iisca\lib;$(WIX)sdk\$(WixPlatformToolset)\inc;$(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
|
|
||||||
|
|
@ -41,6 +41,9 @@
|
||||||
<IncludePath>$(ProjectDir)..\include;$(IncludePath)</IncludePath>
|
<IncludePath>$(ProjectDir)..\include;$(IncludePath)</IncludePath>
|
||||||
<TargetName>iiscommon</TargetName>
|
<TargetName>iiscommon</TargetName>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Label="Configuration">
|
||||||
|
<VCToolsVersion />
|
||||||
|
</PropertyGroup>
|
||||||
<ItemDefinitionGroup>
|
<ItemDefinitionGroup>
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<SDLCheck>true</SDLCheck>
|
<SDLCheck>true</SDLCheck>
|
||||||
|
|
|
||||||
|
|
@ -77,6 +77,9 @@
|
||||||
<PlatformToolset>v141</PlatformToolset>
|
<PlatformToolset>v141</PlatformToolset>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<PropertyGroup Label="Configuration">
|
||||||
|
<VCToolsVersion />
|
||||||
|
</PropertyGroup>
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<AdditionalIncludeDirectories>$(IIS-Common)version;$(IIS-Common)Include;$(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(IIS-Common)version;$(IIS-Common)Include;$(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<PrecompiledHeader>Create</PrecompiledHeader>
|
<PrecompiledHeader>Create</PrecompiledHeader>
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -53,11 +53,31 @@ namespace Microsoft.AspNetCore.HeaderPropagation
|
||||||
{
|
{
|
||||||
var outputName = string.IsNullOrEmpty(entry?.OutboundHeaderName) ? headerName : entry.OutboundHeaderName;
|
var outputName = string.IsNullOrEmpty(entry?.OutboundHeaderName) ? headerName : entry.OutboundHeaderName;
|
||||||
|
|
||||||
if (!request.Headers.Contains(outputName) &&
|
var hasContent = request.Content != null;
|
||||||
_values.Headers.TryGetValue(headerName, out var values) &&
|
|
||||||
!StringValues.IsNullOrEmpty(values))
|
if (!request.Headers.TryGetValues(outputName, out var _) &&
|
||||||
|
!(hasContent && request.Content.Headers.TryGetValues(outputName, out var _)))
|
||||||
{
|
{
|
||||||
request.Headers.TryAddWithoutValidation(outputName, (string[])values);
|
if (_values.Headers.TryGetValue(headerName, out var stringValues) &&
|
||||||
|
!StringValues.IsNullOrEmpty(stringValues))
|
||||||
|
{
|
||||||
|
if (stringValues.Count == 1)
|
||||||
|
{
|
||||||
|
var value = (string)stringValues;
|
||||||
|
if (!request.Headers.TryAddWithoutValidation(outputName, value) && hasContent)
|
||||||
|
{
|
||||||
|
request.Content.Headers.TryAddWithoutValidation(outputName, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var values = (string[])stringValues;
|
||||||
|
if (!request.Headers.TryAddWithoutValidation(outputName, values) && hasContent)
|
||||||
|
{
|
||||||
|
request.Content.Headers.TryAddWithoutValidation(outputName, values);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -52,6 +52,63 @@ namespace Microsoft.AspNetCore.HeaderPropagation.Tests
|
||||||
Assert.Equal(new[] { "test" }, Handler.Headers.GetValues("out"));
|
Assert.Equal(new[] { "test" }, Handler.Headers.GetValues("out"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task HeaderInState_WithMultipleValues_AddAllValues()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
Configuration.Headers.Add("in", new HeaderPropagationEntry { OutboundHeaderName = "out" });
|
||||||
|
State.Headers.Add("in", new[] { "one", "two" });
|
||||||
|
|
||||||
|
// Act
|
||||||
|
await Client.SendAsync(new HttpRequestMessage());
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.True(Handler.Headers.Contains("out"));
|
||||||
|
Assert.Equal(new[] { "one", "two" }, Handler.Headers.GetValues("out"));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task HeaderInState_RequestWithContent_ContentHeaderPresent_DoesNotAddIt()
|
||||||
|
{
|
||||||
|
Configuration.Headers.Add("in", new HeaderPropagationEntry() { OutboundHeaderName = "Content-Type" });
|
||||||
|
State.Headers.Add("in", "test");
|
||||||
|
|
||||||
|
// Act
|
||||||
|
await Client.SendAsync(new HttpRequestMessage() { Content = new StringContent("test") });
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.True(Handler.Content.Headers.Contains("Content-Type"));
|
||||||
|
Assert.Equal(new[] { "text/plain; charset=utf-8" }, Handler.Content.Headers.GetValues("Content-Type"));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task HeaderInState_RequestWithContent_ContentHeaderNotPresent_AddValue()
|
||||||
|
{
|
||||||
|
Configuration.Headers.Add("in", new HeaderPropagationEntry() { OutboundHeaderName = "Content-Language" });
|
||||||
|
State.Headers.Add("in", "test");
|
||||||
|
|
||||||
|
// Act
|
||||||
|
await Client.SendAsync(new HttpRequestMessage() { Content = new StringContent("test") });
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.True(Handler.Content.Headers.Contains("Content-Language"));
|
||||||
|
Assert.Equal(new[] { "test" }, Handler.Content.Headers.GetValues("Content-Language"));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task HeaderInState_WithMultipleValues_RequestWithContent_ContentHeaderNotPresent_AddAllValues()
|
||||||
|
{
|
||||||
|
Configuration.Headers.Add("in", new HeaderPropagationEntry() { OutboundHeaderName = "Content-Language" });
|
||||||
|
State.Headers.Add("in", new[] { "one", "two" });
|
||||||
|
|
||||||
|
// Act
|
||||||
|
await Client.SendAsync(new HttpRequestMessage() { Content = new StringContent("test") });
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.True(Handler.Content.Headers.Contains("Content-Language"));
|
||||||
|
Assert.Equal(new[] { "one", "two" }, Handler.Content.Headers.GetValues("Content-Language"));
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public async Task HeaderInState_NoOutputName_UseInputName()
|
public async Task HeaderInState_NoOutputName_UseInputName()
|
||||||
{
|
{
|
||||||
|
|
@ -168,11 +225,13 @@ namespace Microsoft.AspNetCore.HeaderPropagation.Tests
|
||||||
private class SimpleHandler : DelegatingHandler
|
private class SimpleHandler : DelegatingHandler
|
||||||
{
|
{
|
||||||
public HttpHeaders Headers { get; private set; }
|
public HttpHeaders Headers { get; private set; }
|
||||||
|
public HttpContent Content { get; private set; }
|
||||||
|
|
||||||
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request,
|
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request,
|
||||||
CancellationToken cancellationToken)
|
CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
Headers = request.Headers;
|
Headers = request.Headers;
|
||||||
|
Content = request.Content;
|
||||||
return Task.FromResult(new HttpResponseMessage());
|
return Task.FromResult(new HttpResponseMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -21,12 +21,15 @@
|
||||||
|
|
||||||
<Target Name="YarnInstall">
|
<Target Name="YarnInstall">
|
||||||
<Message Text="Running yarn install on $(MSBuildProjectFile)" Importance="High" />
|
<Message Text="Running yarn install on $(MSBuildProjectFile)" Importance="High" />
|
||||||
<Yarn Command="install" ContinueOnError="true">
|
<Yarn Command="install" />
|
||||||
<Output TaskParameter="ExitCode" PropertyName="_YarnExitCode"/>
|
</Target>
|
||||||
</Yarn>
|
|
||||||
<Yarn Command="install" Condition="'$(_YarnExitCode)' != '0'">
|
<Target Name="_IsCustomRestoreTargetSupported" Returns="@(CustomRestoreTargets)" Condition="'$(BuildNodeJs)' == 'true'">
|
||||||
<Output TaskParameter="ExitCode" PropertyName="_YarnExitCode"/>
|
<ItemGroup>
|
||||||
</Yarn>
|
<CustomRestoreTargets Include="$(MSBuildProjectFullPath)">
|
||||||
|
<Targets>YarnInstall</Targets>
|
||||||
|
</CustomRestoreTargets>
|
||||||
|
</ItemGroup>
|
||||||
</Target>
|
</Target>
|
||||||
|
|
||||||
<Target Name="PrepublishScript" DependsOnTargets="YarnInstall" BeforeTargets="PrepareForPublish" Condition=" '$(IsCrossTargetingBuild)' != 'true' ">
|
<Target Name="PrepublishScript" DependsOnTargets="YarnInstall" BeforeTargets="PrepareForPublish" Condition=" '$(IsCrossTargetingBuild)' != 'true' ">
|
||||||
|
|
|
||||||
|
|
@ -25,12 +25,15 @@
|
||||||
|
|
||||||
<Target Name="YarnInstall">
|
<Target Name="YarnInstall">
|
||||||
<Message Text="Running yarn install on $(MSBuildProjectFile)" Importance="High" />
|
<Message Text="Running yarn install on $(MSBuildProjectFile)" Importance="High" />
|
||||||
<Yarn Command="install" ContinueOnError="true">
|
<Yarn Command="install" />
|
||||||
<Output TaskParameter="ExitCode" PropertyName="_YarnExitCode"/>
|
</Target>
|
||||||
</Yarn>
|
|
||||||
<Yarn Command="install" Condition="'$(_YarnExitCode)' != '0'">
|
<Target Name="_IsCustomRestoreTargetSupported" Returns="@(CustomRestoreTargets)" Condition="'$(BuildNodeJs)' == 'true'">
|
||||||
<Output TaskParameter="ExitCode" PropertyName="_YarnExitCode"/>
|
<ItemGroup>
|
||||||
</Yarn>
|
<CustomRestoreTargets Include="$(MSBuildProjectFullPath)">
|
||||||
|
<Targets>YarnInstall</Targets>
|
||||||
|
</CustomRestoreTargets>
|
||||||
|
</ItemGroup>
|
||||||
</Target>
|
</Target>
|
||||||
|
|
||||||
<Target Name="PrepublishScript" DependsOnTargets="YarnInstall" BeforeTargets="PrepareForPublish" Condition=" '$(IsCrossTargetingBuild)' != 'true' ">
|
<Target Name="PrepublishScript" DependsOnTargets="YarnInstall" BeforeTargets="PrepareForPublish" Condition=" '$(IsCrossTargetingBuild)' != 'true' ">
|
||||||
|
|
|
||||||
|
|
@ -57,46 +57,133 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
|
||||||
_cursor = new FilterCursor(filters);
|
_cursor = new FilterCursor(filters);
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual async Task InvokeAsync()
|
public virtual Task InvokeAsync()
|
||||||
{
|
{
|
||||||
|
if (_diagnosticListener.IsEnabled() || _logger.IsEnabled(LogLevel.Information))
|
||||||
|
{
|
||||||
|
return Logged(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
_actionContextAccessor.ActionContext = _actionContext;
|
||||||
|
var scope = _logger.ActionScope(_actionContext.ActionDescriptor);
|
||||||
|
|
||||||
|
Task task = null;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
_actionContextAccessor.ActionContext = _actionContext;
|
task = InvokeFilterPipelineAsync();
|
||||||
|
}
|
||||||
|
catch (Exception exception)
|
||||||
|
{
|
||||||
|
return Awaited(this, Task.FromException(exception), scope);
|
||||||
|
}
|
||||||
|
|
||||||
_diagnosticListener.BeforeAction(
|
Debug.Assert(task != null);
|
||||||
_actionContext.ActionDescriptor,
|
if (!task.IsCompletedSuccessfully)
|
||||||
_actionContext.HttpContext,
|
{
|
||||||
_actionContext.RouteData);
|
return Awaited(this, task, scope);
|
||||||
|
}
|
||||||
|
|
||||||
using (_logger.ActionScope(_actionContext.ActionDescriptor))
|
Exception releaseException = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
ReleaseResources();
|
||||||
|
}
|
||||||
|
catch (Exception exception)
|
||||||
|
{
|
||||||
|
releaseException = exception;
|
||||||
|
}
|
||||||
|
|
||||||
|
Exception scopeException = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
scope.Dispose();
|
||||||
|
}
|
||||||
|
catch (Exception exception)
|
||||||
|
{
|
||||||
|
scopeException = exception;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (releaseException == null && scopeException == null)
|
||||||
|
{
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
|
else if (releaseException != null && scopeException != null)
|
||||||
|
{
|
||||||
|
return Task.FromException(new AggregateException(releaseException, scopeException));
|
||||||
|
}
|
||||||
|
else if (releaseException != null)
|
||||||
|
{
|
||||||
|
return Task.FromException(releaseException);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return Task.FromException(scopeException);
|
||||||
|
}
|
||||||
|
|
||||||
|
static async Task Awaited(ResourceInvoker invoker, Task task, IDisposable scope)
|
||||||
|
{
|
||||||
|
try
|
||||||
{
|
{
|
||||||
_logger.ExecutingAction(_actionContext.ActionDescriptor);
|
|
||||||
|
|
||||||
_logger.AuthorizationFiltersExecutionPlan(_filters);
|
|
||||||
_logger.ResourceFiltersExecutionPlan(_filters);
|
|
||||||
_logger.ActionFiltersExecutionPlan(_filters);
|
|
||||||
_logger.ExceptionFiltersExecutionPlan(_filters);
|
|
||||||
_logger.ResultFiltersExecutionPlan(_filters);
|
|
||||||
|
|
||||||
var stopwatch = ValueStopwatch.StartNew();
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await InvokeFilterPipelineAsync();
|
await task;
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
ReleaseResources();
|
invoker.ReleaseResources();
|
||||||
_logger.ExecutedAction(_actionContext.ActionDescriptor, stopwatch.GetElapsedTime());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
scope.Dispose();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
finally
|
|
||||||
|
static async Task Logged(ResourceInvoker invoker)
|
||||||
{
|
{
|
||||||
_diagnosticListener.AfterAction(
|
var actionContext = invoker._actionContext;
|
||||||
_actionContext.ActionDescriptor,
|
invoker._actionContextAccessor.ActionContext = actionContext;
|
||||||
_actionContext.HttpContext,
|
|
||||||
_actionContext.RouteData);
|
try
|
||||||
|
{
|
||||||
|
var logger = invoker._logger;
|
||||||
|
|
||||||
|
invoker._diagnosticListener.BeforeAction(
|
||||||
|
actionContext.ActionDescriptor,
|
||||||
|
actionContext.HttpContext,
|
||||||
|
actionContext.RouteData);
|
||||||
|
|
||||||
|
using (logger.ActionScope(actionContext.ActionDescriptor))
|
||||||
|
{
|
||||||
|
logger.ExecutingAction(actionContext.ActionDescriptor);
|
||||||
|
|
||||||
|
var filters = invoker._filters;
|
||||||
|
logger.AuthorizationFiltersExecutionPlan(filters);
|
||||||
|
logger.ResourceFiltersExecutionPlan(filters);
|
||||||
|
logger.ActionFiltersExecutionPlan(filters);
|
||||||
|
logger.ExceptionFiltersExecutionPlan(filters);
|
||||||
|
logger.ResultFiltersExecutionPlan(filters);
|
||||||
|
|
||||||
|
var stopwatch = ValueStopwatch.StartNew();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await invoker.InvokeFilterPipelineAsync();
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
invoker.ReleaseResources();
|
||||||
|
logger.ExecutedAction(actionContext.ActionDescriptor, stopwatch.GetElapsedTime());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
invoker._diagnosticListener.AfterAction(
|
||||||
|
actionContext.ActionDescriptor,
|
||||||
|
actionContext.HttpContext,
|
||||||
|
actionContext.RouteData);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -106,7 +193,7 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
|
||||||
/// </summary>
|
/// </summary>
|
||||||
protected abstract void ReleaseResources();
|
protected abstract void ReleaseResources();
|
||||||
|
|
||||||
private async Task InvokeFilterPipelineAsync()
|
private Task InvokeFilterPipelineAsync()
|
||||||
{
|
{
|
||||||
var next = State.InvokeBegin;
|
var next = State.InvokeBegin;
|
||||||
|
|
||||||
|
|
@ -121,30 +208,64 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
|
||||||
|
|
||||||
// `isCompleted` will be set to true when we've reached a terminal state.
|
// `isCompleted` will be set to true when we've reached a terminal state.
|
||||||
var isCompleted = false;
|
var isCompleted = false;
|
||||||
|
try
|
||||||
while (!isCompleted)
|
|
||||||
{
|
{
|
||||||
await Next(ref next, ref scope, ref state, ref isCompleted);
|
while (!isCompleted)
|
||||||
|
{
|
||||||
|
var lastTask = Next(ref next, ref scope, ref state, ref isCompleted);
|
||||||
|
if (!lastTask.IsCompletedSuccessfully)
|
||||||
|
{
|
||||||
|
return Awaited(this, lastTask, next, scope, state, isCompleted);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
// Wrap non task-wrapped exceptions in a Task,
|
||||||
|
// as this isn't done automatically since the method is not async.
|
||||||
|
return Task.FromException(ex);
|
||||||
|
}
|
||||||
|
|
||||||
|
static async Task Awaited(ResourceInvoker invoker, Task lastTask, State next, Scope scope, object state, bool isCompleted)
|
||||||
|
{
|
||||||
|
await lastTask;
|
||||||
|
|
||||||
|
while (!isCompleted)
|
||||||
|
{
|
||||||
|
await invoker.Next(ref next, ref scope, ref state, ref isCompleted);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract Task InvokeInnerFilterAsync();
|
protected abstract Task InvokeInnerFilterAsync();
|
||||||
|
|
||||||
protected virtual async Task InvokeResultAsync(IActionResult result)
|
protected virtual Task InvokeResultAsync(IActionResult result)
|
||||||
{
|
{
|
||||||
var actionContext = _actionContext;
|
if (_diagnosticListener.IsEnabled() || _logger.IsEnabled(LogLevel.Trace))
|
||||||
|
|
||||||
_diagnosticListener.BeforeActionResult(actionContext, result);
|
|
||||||
_logger.BeforeExecutingActionResult(result);
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
{
|
||||||
await result.ExecuteResultAsync(actionContext);
|
return Logged(this, result);
|
||||||
}
|
}
|
||||||
finally
|
|
||||||
|
return result.ExecuteResultAsync(_actionContext);
|
||||||
|
|
||||||
|
static async Task Logged(ResourceInvoker invoker, IActionResult result)
|
||||||
{
|
{
|
||||||
_diagnosticListener.AfterActionResult(actionContext, result);
|
var actionContext = invoker._actionContext;
|
||||||
_logger.AfterExecutingActionResult(result);
|
|
||||||
|
invoker._diagnosticListener.BeforeActionResult(actionContext, result);
|
||||||
|
invoker._logger.BeforeExecutingActionResult(result);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await result.ExecuteResultAsync(actionContext);
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
invoker._diagnosticListener.AfterActionResult(actionContext, result);
|
||||||
|
invoker._logger.AfterExecutingActionResult(result);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -207,7 +328,7 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
|
||||||
filter);
|
filter);
|
||||||
|
|
||||||
var task = filter.OnAuthorizationAsync(authorizationContext);
|
var task = filter.OnAuthorizationAsync(authorizationContext);
|
||||||
if (task.Status != TaskStatus.RanToCompletion)
|
if (!task.IsCompletedSuccessfully)
|
||||||
{
|
{
|
||||||
next = State.AuthorizationAsyncEnd;
|
next = State.AuthorizationAsyncEnd;
|
||||||
return task;
|
return task;
|
||||||
|
|
@ -344,7 +465,7 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
|
||||||
filter);
|
filter);
|
||||||
|
|
||||||
var task = filter.OnResourceExecutionAsync(resourceExecutingContext, InvokeNextResourceFilterAwaitedAsync);
|
var task = filter.OnResourceExecutionAsync(resourceExecutingContext, InvokeNextResourceFilterAwaitedAsync);
|
||||||
if (task.Status != TaskStatus.RanToCompletion)
|
if (!task.IsCompletedSuccessfully)
|
||||||
{
|
{
|
||||||
next = State.ResourceAsyncEnd;
|
next = State.ResourceAsyncEnd;
|
||||||
return task;
|
return task;
|
||||||
|
|
@ -418,7 +539,7 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
|
||||||
}
|
}
|
||||||
|
|
||||||
var task = InvokeNextResourceFilter();
|
var task = InvokeNextResourceFilter();
|
||||||
if (task.Status != TaskStatus.RanToCompletion)
|
if (!task.IsCompletedSuccessfully)
|
||||||
{
|
{
|
||||||
next = State.ResourceSyncEnd;
|
next = State.ResourceSyncEnd;
|
||||||
return task;
|
return task;
|
||||||
|
|
@ -463,7 +584,7 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
|
||||||
|
|
||||||
_result = _resourceExecutingContext.Result;
|
_result = _resourceExecutingContext.Result;
|
||||||
var task = InvokeAlwaysRunResultFilters();
|
var task = InvokeAlwaysRunResultFilters();
|
||||||
if (task.Status != TaskStatus.RanToCompletion)
|
if (!task.IsCompletedSuccessfully)
|
||||||
{
|
{
|
||||||
next = State.ResourceEnd;
|
next = State.ResourceEnd;
|
||||||
return task;
|
return task;
|
||||||
|
|
@ -512,7 +633,7 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
|
||||||
case State.ExceptionAsyncBegin:
|
case State.ExceptionAsyncBegin:
|
||||||
{
|
{
|
||||||
var task = InvokeNextExceptionFilterAsync();
|
var task = InvokeNextExceptionFilterAsync();
|
||||||
if (task.Status != TaskStatus.RanToCompletion)
|
if (!task.IsCompletedSuccessfully)
|
||||||
{
|
{
|
||||||
next = State.ExceptionAsyncResume;
|
next = State.ExceptionAsyncResume;
|
||||||
return task;
|
return task;
|
||||||
|
|
@ -539,7 +660,7 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
|
||||||
filter);
|
filter);
|
||||||
|
|
||||||
var task = filter.OnExceptionAsync(exceptionContext);
|
var task = filter.OnExceptionAsync(exceptionContext);
|
||||||
if (task.Status != TaskStatus.RanToCompletion)
|
if (!task.IsCompletedSuccessfully)
|
||||||
{
|
{
|
||||||
next = State.ExceptionAsyncEnd;
|
next = State.ExceptionAsyncEnd;
|
||||||
return task;
|
return task;
|
||||||
|
|
@ -579,7 +700,7 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
|
||||||
case State.ExceptionSyncBegin:
|
case State.ExceptionSyncBegin:
|
||||||
{
|
{
|
||||||
var task = InvokeNextExceptionFilterAsync();
|
var task = InvokeNextExceptionFilterAsync();
|
||||||
if (task.Status != TaskStatus.RanToCompletion)
|
if (!task.IsCompletedSuccessfully)
|
||||||
{
|
{
|
||||||
next = State.ExceptionSyncEnd;
|
next = State.ExceptionSyncEnd;
|
||||||
return task;
|
return task;
|
||||||
|
|
@ -650,7 +771,7 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
|
||||||
_result = _exceptionContext.Result;
|
_result = _exceptionContext.Result;
|
||||||
|
|
||||||
var task = InvokeAlwaysRunResultFilters();
|
var task = InvokeAlwaysRunResultFilters();
|
||||||
if (task.Status != TaskStatus.RanToCompletion)
|
if (!task.IsCompletedSuccessfully)
|
||||||
{
|
{
|
||||||
next = State.ResourceInsideEnd;
|
next = State.ResourceInsideEnd;
|
||||||
return task;
|
return task;
|
||||||
|
|
@ -683,7 +804,7 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
|
||||||
}
|
}
|
||||||
|
|
||||||
var task = InvokeResultFilters();
|
var task = InvokeResultFilters();
|
||||||
if (task.Status != TaskStatus.RanToCompletion)
|
if (!task.IsCompletedSuccessfully)
|
||||||
{
|
{
|
||||||
next = State.ResourceInsideEnd;
|
next = State.ResourceInsideEnd;
|
||||||
return task;
|
return task;
|
||||||
|
|
@ -694,7 +815,7 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
|
||||||
case State.ActionBegin:
|
case State.ActionBegin:
|
||||||
{
|
{
|
||||||
var task = InvokeInnerFilterAsync();
|
var task = InvokeInnerFilterAsync();
|
||||||
if (task.Status != TaskStatus.RanToCompletion)
|
if (!task.IsCompletedSuccessfully)
|
||||||
{
|
{
|
||||||
next = State.ActionEnd;
|
next = State.ActionEnd;
|
||||||
return task;
|
return task;
|
||||||
|
|
@ -715,7 +836,7 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
|
||||||
|
|
||||||
Debug.Assert(scope == Scope.Invoker || scope == Scope.Resource);
|
Debug.Assert(scope == Scope.Invoker || scope == Scope.Resource);
|
||||||
var task = InvokeResultFilters();
|
var task = InvokeResultFilters();
|
||||||
if (task.Status != TaskStatus.RanToCompletion)
|
if (!task.IsCompletedSuccessfully)
|
||||||
{
|
{
|
||||||
next = State.ResourceInsideEnd;
|
next = State.ResourceInsideEnd;
|
||||||
return task;
|
return task;
|
||||||
|
|
@ -763,13 +884,35 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<ResourceExecutedContext> InvokeNextResourceFilterAwaitedAsync()
|
private Task<ResourceExecutedContext> InvokeNextResourceFilterAwaitedAsync()
|
||||||
{
|
{
|
||||||
Debug.Assert(_resourceExecutingContext != null);
|
Debug.Assert(_resourceExecutingContext != null);
|
||||||
|
|
||||||
if (_resourceExecutingContext.Result != null)
|
if (_resourceExecutingContext.Result != null)
|
||||||
{
|
{
|
||||||
// If we get here, it means that an async filter set a result AND called next(). This is forbidden.
|
// If we get here, it means that an async filter set a result AND called next(). This is forbidden.
|
||||||
|
return Throw();
|
||||||
|
}
|
||||||
|
|
||||||
|
var task = InvokeNextResourceFilter();
|
||||||
|
if (!task.IsCompletedSuccessfully)
|
||||||
|
{
|
||||||
|
return Awaited(this, task);
|
||||||
|
}
|
||||||
|
|
||||||
|
Debug.Assert(_resourceExecutedContext != null);
|
||||||
|
return Task.FromResult(_resourceExecutedContext);
|
||||||
|
|
||||||
|
static async Task<ResourceExecutedContext> Awaited(ResourceInvoker invoker, Task task)
|
||||||
|
{
|
||||||
|
await task;
|
||||||
|
|
||||||
|
Debug.Assert(invoker._resourceExecutedContext != null);
|
||||||
|
return invoker._resourceExecutedContext;
|
||||||
|
}
|
||||||
|
#pragma warning disable CS1998
|
||||||
|
static async Task<ResourceExecutedContext> Throw()
|
||||||
|
{
|
||||||
var message = Resources.FormatAsyncResourceFilter_InvalidShortCircuit(
|
var message = Resources.FormatAsyncResourceFilter_InvalidShortCircuit(
|
||||||
typeof(IAsyncResourceFilter).Name,
|
typeof(IAsyncResourceFilter).Name,
|
||||||
nameof(ResourceExecutingContext.Result),
|
nameof(ResourceExecutingContext.Result),
|
||||||
|
|
@ -777,14 +920,10 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
|
||||||
typeof(ResourceExecutionDelegate).Name);
|
typeof(ResourceExecutionDelegate).Name);
|
||||||
throw new InvalidOperationException(message);
|
throw new InvalidOperationException(message);
|
||||||
}
|
}
|
||||||
|
#pragma warning restore CS1998
|
||||||
await InvokeNextResourceFilter();
|
|
||||||
|
|
||||||
Debug.Assert(_resourceExecutedContext != null);
|
|
||||||
return _resourceExecutedContext;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task InvokeNextResourceFilter()
|
private Task InvokeNextResourceFilter()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|
@ -792,9 +931,14 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
|
||||||
var next = State.ResourceNext;
|
var next = State.ResourceNext;
|
||||||
var state = (object)null;
|
var state = (object)null;
|
||||||
var isCompleted = false;
|
var isCompleted = false;
|
||||||
|
|
||||||
while (!isCompleted)
|
while (!isCompleted)
|
||||||
{
|
{
|
||||||
await Next(ref next, ref scope, ref state, ref isCompleted);
|
var lastTask = Next(ref next, ref scope, ref state, ref isCompleted);
|
||||||
|
if (!lastTask.IsCompletedSuccessfully)
|
||||||
|
{
|
||||||
|
return Awaited(this, lastTask, next, scope, state, isCompleted);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception exception)
|
catch (Exception exception)
|
||||||
|
|
@ -806,9 +950,32 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
|
||||||
}
|
}
|
||||||
|
|
||||||
Debug.Assert(_resourceExecutedContext != null);
|
Debug.Assert(_resourceExecutedContext != null);
|
||||||
|
return Task.CompletedTask;
|
||||||
|
|
||||||
|
static async Task Awaited(ResourceInvoker invoker, Task lastTask, State next, Scope scope, object state, bool isCompleted)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await lastTask;
|
||||||
|
|
||||||
|
while (!isCompleted)
|
||||||
|
{
|
||||||
|
await invoker.Next(ref next, ref scope, ref state, ref isCompleted);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception exception)
|
||||||
|
{
|
||||||
|
invoker._resourceExecutedContext = new ResourceExecutedContext(invoker._resourceExecutingContext, invoker._filters)
|
||||||
|
{
|
||||||
|
ExceptionDispatchInfo = ExceptionDispatchInfo.Capture(exception),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
Debug.Assert(invoker._resourceExecutedContext != null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task InvokeNextExceptionFilterAsync()
|
private Task InvokeNextExceptionFilterAsync()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|
@ -816,43 +983,119 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
|
||||||
var state = (object)null;
|
var state = (object)null;
|
||||||
var scope = Scope.Exception;
|
var scope = Scope.Exception;
|
||||||
var isCompleted = false;
|
var isCompleted = false;
|
||||||
|
|
||||||
while (!isCompleted)
|
while (!isCompleted)
|
||||||
{
|
{
|
||||||
await Next(ref next, ref scope, ref state, ref isCompleted);
|
var lastTask = Next(ref next, ref scope, ref state, ref isCompleted);
|
||||||
|
if (!lastTask.IsCompletedSuccessfully)
|
||||||
|
{
|
||||||
|
return Awaited(this, lastTask, next, scope, state, isCompleted);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
// Wrap non task-wrapped exceptions in a Task,
|
||||||
|
// as this isn't done automatically since the method is not async.
|
||||||
|
return Task.FromException(ex);
|
||||||
|
}
|
||||||
|
|
||||||
|
static async Task Awaited(ResourceInvoker invoker, Task lastTask, State next, Scope scope, object state, bool isCompleted)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await lastTask;
|
||||||
|
|
||||||
|
while (!isCompleted)
|
||||||
|
{
|
||||||
|
await invoker.Next(ref next, ref scope, ref state, ref isCompleted);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception exception)
|
||||||
|
{
|
||||||
|
invoker._exceptionContext = new ExceptionContext(invoker._actionContext, invoker._filters)
|
||||||
|
{
|
||||||
|
ExceptionDispatchInfo = ExceptionDispatchInfo.Capture(exception),
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception exception)
|
}
|
||||||
|
|
||||||
|
private Task InvokeAlwaysRunResultFilters()
|
||||||
|
{
|
||||||
|
try
|
||||||
{
|
{
|
||||||
_exceptionContext = new ExceptionContext(_actionContext, _filters)
|
var next = State.ResultBegin;
|
||||||
|
var scope = Scope.Invoker;
|
||||||
|
var state = (object)null;
|
||||||
|
var isCompleted = false;
|
||||||
|
|
||||||
|
while (!isCompleted)
|
||||||
{
|
{
|
||||||
ExceptionDispatchInfo = ExceptionDispatchInfo.Capture(exception),
|
var lastTask = ResultNext<IAlwaysRunResultFilter, IAsyncAlwaysRunResultFilter>(ref next, ref scope, ref state, ref isCompleted);
|
||||||
};
|
if (!lastTask.IsCompletedSuccessfully)
|
||||||
|
{
|
||||||
|
return Awaited(this, lastTask, next, scope, state, isCompleted);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
// Wrap non task-wrapped exceptions in a Task,
|
||||||
|
// as this isn't done automatically since the method is not async.
|
||||||
|
return Task.FromException(ex);
|
||||||
|
}
|
||||||
|
|
||||||
|
static async Task Awaited(ResourceInvoker invoker, Task lastTask, State next, Scope scope, object state, bool isCompleted)
|
||||||
|
{
|
||||||
|
await lastTask;
|
||||||
|
|
||||||
|
while (!isCompleted)
|
||||||
|
{
|
||||||
|
await invoker.ResultNext<IAlwaysRunResultFilter, IAsyncAlwaysRunResultFilter>(ref next, ref scope, ref state, ref isCompleted);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task InvokeAlwaysRunResultFilters()
|
private Task InvokeResultFilters()
|
||||||
{
|
{
|
||||||
var next = State.ResultBegin;
|
try
|
||||||
var scope = Scope.Invoker;
|
|
||||||
var state = (object)null;
|
|
||||||
var isCompleted = false;
|
|
||||||
|
|
||||||
while (!isCompleted)
|
|
||||||
{
|
{
|
||||||
await ResultNext<IAlwaysRunResultFilter, IAsyncAlwaysRunResultFilter>(ref next, ref scope, ref state, ref isCompleted);
|
var next = State.ResultBegin;
|
||||||
|
var scope = Scope.Invoker;
|
||||||
|
var state = (object)null;
|
||||||
|
var isCompleted = false;
|
||||||
|
|
||||||
|
while (!isCompleted)
|
||||||
|
{
|
||||||
|
var lastTask = ResultNext<IResultFilter, IAsyncResultFilter>(ref next, ref scope, ref state, ref isCompleted);
|
||||||
|
if (!lastTask.IsCompletedSuccessfully)
|
||||||
|
{
|
||||||
|
return Awaited(this, lastTask, next, scope, state, isCompleted);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.CompletedTask;
|
||||||
}
|
}
|
||||||
}
|
catch (Exception ex)
|
||||||
|
|
||||||
private async Task InvokeResultFilters()
|
|
||||||
{
|
|
||||||
var next = State.ResultBegin;
|
|
||||||
var scope = Scope.Invoker;
|
|
||||||
var state = (object)null;
|
|
||||||
var isCompleted = false;
|
|
||||||
|
|
||||||
while (!isCompleted)
|
|
||||||
{
|
{
|
||||||
await ResultNext<IResultFilter, IAsyncResultFilter>(ref next, ref scope, ref state, ref isCompleted);
|
// Wrap non task-wrapped exceptions in a Task,
|
||||||
|
// as this isn't done automatically since the method is not async.
|
||||||
|
return Task.FromException(ex);
|
||||||
|
}
|
||||||
|
|
||||||
|
static async Task Awaited(ResourceInvoker invoker, Task lastTask, State next, Scope scope, object state, bool isCompleted)
|
||||||
|
{
|
||||||
|
await lastTask;
|
||||||
|
|
||||||
|
while (!isCompleted)
|
||||||
|
{
|
||||||
|
await invoker.ResultNext<IResultFilter, IAsyncResultFilter>(ref next, ref scope, ref state, ref isCompleted);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -916,7 +1159,7 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
|
||||||
filter);
|
filter);
|
||||||
|
|
||||||
var task = filter.OnResultExecutionAsync(resultExecutingContext, InvokeNextResultFilterAwaitedAsync<TFilter, TFilterAsync>);
|
var task = filter.OnResultExecutionAsync(resultExecutingContext, InvokeNextResultFilterAwaitedAsync<TFilter, TFilterAsync>);
|
||||||
if (task.Status != TaskStatus.RanToCompletion)
|
if (!task.IsCompletedSuccessfully)
|
||||||
{
|
{
|
||||||
next = State.ResultAsyncEnd;
|
next = State.ResultAsyncEnd;
|
||||||
return task;
|
return task;
|
||||||
|
|
@ -998,7 +1241,7 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
|
||||||
}
|
}
|
||||||
|
|
||||||
var task = InvokeNextResultFilterAsync<TFilter, TFilterAsync>();
|
var task = InvokeNextResultFilterAsync<TFilter, TFilterAsync>();
|
||||||
if (task.Status != TaskStatus.RanToCompletion)
|
if (!task.IsCompletedSuccessfully)
|
||||||
{
|
{
|
||||||
next = State.ResultSyncEnd;
|
next = State.ResultSyncEnd;
|
||||||
return task;
|
return task;
|
||||||
|
|
@ -1048,7 +1291,7 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
|
||||||
}
|
}
|
||||||
|
|
||||||
var task = InvokeResultAsync(_result);
|
var task = InvokeResultAsync(_result);
|
||||||
if (task.Status != TaskStatus.RanToCompletion)
|
if (!task.IsCompletedSuccessfully)
|
||||||
{
|
{
|
||||||
next = State.ResultEnd;
|
next = State.ResultEnd;
|
||||||
return task;
|
return task;
|
||||||
|
|
@ -1081,7 +1324,7 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task InvokeNextResultFilterAsync<TFilter, TFilterAsync>()
|
private Task InvokeNextResultFilterAsync<TFilter, TFilterAsync>()
|
||||||
where TFilter : class, IResultFilter
|
where TFilter : class, IResultFilter
|
||||||
where TFilterAsync : class, IAsyncResultFilter
|
where TFilterAsync : class, IAsyncResultFilter
|
||||||
{
|
{
|
||||||
|
|
@ -1093,7 +1336,11 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
|
||||||
var isCompleted = false;
|
var isCompleted = false;
|
||||||
while (!isCompleted)
|
while (!isCompleted)
|
||||||
{
|
{
|
||||||
await ResultNext<TFilter, TFilterAsync>(ref next, ref scope, ref state, ref isCompleted);
|
var lastTask = ResultNext<TFilter, TFilterAsync>(ref next, ref scope, ref state, ref isCompleted);
|
||||||
|
if (!lastTask.IsCompletedSuccessfully)
|
||||||
|
{
|
||||||
|
return Awaited(this, lastTask, next, scope, state, isCompleted);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception exception)
|
catch (Exception exception)
|
||||||
|
|
@ -1105,9 +1352,33 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
|
||||||
}
|
}
|
||||||
|
|
||||||
Debug.Assert(_resultExecutedContext != null);
|
Debug.Assert(_resultExecutedContext != null);
|
||||||
|
|
||||||
|
return Task.CompletedTask;
|
||||||
|
|
||||||
|
static async Task Awaited(ResourceInvoker invoker, Task lastTask, State next, Scope scope, object state, bool isCompleted)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await lastTask;
|
||||||
|
|
||||||
|
while (!isCompleted)
|
||||||
|
{
|
||||||
|
await invoker.ResultNext<TFilter, TFilterAsync>(ref next, ref scope, ref state, ref isCompleted);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception exception)
|
||||||
|
{
|
||||||
|
invoker._resultExecutedContext = new ResultExecutedContext(invoker._actionContext, invoker._filters, invoker._result, invoker._instance)
|
||||||
|
{
|
||||||
|
ExceptionDispatchInfo = ExceptionDispatchInfo.Capture(exception),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
Debug.Assert(invoker._resultExecutedContext != null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<ResultExecutedContext> InvokeNextResultFilterAwaitedAsync<TFilter, TFilterAsync>()
|
private Task<ResultExecutedContext> InvokeNextResultFilterAwaitedAsync<TFilter, TFilterAsync>()
|
||||||
where TFilter : class, IResultFilter
|
where TFilter : class, IResultFilter
|
||||||
where TFilterAsync : class, IAsyncResultFilter
|
where TFilterAsync : class, IAsyncResultFilter
|
||||||
{
|
{
|
||||||
|
|
@ -1116,6 +1387,28 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
|
||||||
{
|
{
|
||||||
// If we get here, it means that an async filter set cancel == true AND called next().
|
// If we get here, it means that an async filter set cancel == true AND called next().
|
||||||
// This is forbidden.
|
// This is forbidden.
|
||||||
|
return Throw();
|
||||||
|
}
|
||||||
|
|
||||||
|
var task = InvokeNextResultFilterAsync<TFilter, TFilterAsync>();
|
||||||
|
if (!task.IsCompletedSuccessfully)
|
||||||
|
{
|
||||||
|
return Awaited(this, task);
|
||||||
|
}
|
||||||
|
|
||||||
|
Debug.Assert(_resultExecutedContext != null);
|
||||||
|
return Task.FromResult(_resultExecutedContext);
|
||||||
|
|
||||||
|
static async Task<ResultExecutedContext> Awaited(ResourceInvoker invoker, Task task)
|
||||||
|
{
|
||||||
|
await task;
|
||||||
|
|
||||||
|
Debug.Assert(invoker._resultExecutedContext != null);
|
||||||
|
return invoker._resultExecutedContext;
|
||||||
|
}
|
||||||
|
#pragma warning disable CS1998
|
||||||
|
static async Task<ResultExecutedContext> Throw()
|
||||||
|
{
|
||||||
var message = Resources.FormatAsyncResultFilter_InvalidShortCircuit(
|
var message = Resources.FormatAsyncResultFilter_InvalidShortCircuit(
|
||||||
typeof(IAsyncResultFilter).Name,
|
typeof(IAsyncResultFilter).Name,
|
||||||
nameof(ResultExecutingContext.Cancel),
|
nameof(ResultExecutingContext.Cancel),
|
||||||
|
|
@ -1124,13 +1417,10 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
|
||||||
|
|
||||||
throw new InvalidOperationException(message);
|
throw new InvalidOperationException(message);
|
||||||
}
|
}
|
||||||
|
#pragma warning restore CS1998
|
||||||
await InvokeNextResultFilterAsync<TFilter, TFilterAsync>();
|
|
||||||
|
|
||||||
Debug.Assert(_resultExecutedContext != null);
|
|
||||||
return _resultExecutedContext;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private static void Rethrow(ResourceExecutedContext context)
|
private static void Rethrow(ResourceExecutedContext context)
|
||||||
{
|
{
|
||||||
if (context == null)
|
if (context == null)
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure
|
||||||
private readonly IModelMetadataProvider _modelMetadataProvider;
|
private readonly IModelMetadataProvider _modelMetadataProvider;
|
||||||
private readonly ITempDataDictionaryFactory _tempDataFactory;
|
private readonly ITempDataDictionaryFactory _tempDataFactory;
|
||||||
private readonly MvcOptions _mvcOptions;
|
private readonly MvcOptions _mvcOptions;
|
||||||
private readonly HtmlHelperOptions _htmlHelperOptions;
|
private readonly MvcViewOptions _mvcViewOptions;
|
||||||
private readonly IPageHandlerMethodSelector _selector;
|
private readonly IPageHandlerMethodSelector _selector;
|
||||||
private readonly DiagnosticListener _diagnosticListener;
|
private readonly DiagnosticListener _diagnosticListener;
|
||||||
private readonly ILogger<PageActionInvoker> _logger;
|
private readonly ILogger<PageActionInvoker> _logger;
|
||||||
|
|
@ -52,7 +52,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure
|
||||||
IModelBinderFactory modelBinderFactory,
|
IModelBinderFactory modelBinderFactory,
|
||||||
ITempDataDictionaryFactory tempDataFactory,
|
ITempDataDictionaryFactory tempDataFactory,
|
||||||
IOptions<MvcOptions> mvcOptions,
|
IOptions<MvcOptions> mvcOptions,
|
||||||
IOptions<HtmlHelperOptions> htmlHelperOptions,
|
IOptions<MvcViewOptions> mvcViewOptions,
|
||||||
IPageHandlerMethodSelector selector,
|
IPageHandlerMethodSelector selector,
|
||||||
DiagnosticListener diagnosticListener,
|
DiagnosticListener diagnosticListener,
|
||||||
ILoggerFactory loggerFactory,
|
ILoggerFactory loggerFactory,
|
||||||
|
|
@ -69,7 +69,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure
|
||||||
modelBinderFactory,
|
modelBinderFactory,
|
||||||
tempDataFactory,
|
tempDataFactory,
|
||||||
mvcOptions,
|
mvcOptions,
|
||||||
htmlHelperOptions,
|
mvcViewOptions,
|
||||||
selector,
|
selector,
|
||||||
diagnosticListener,
|
diagnosticListener,
|
||||||
loggerFactory,
|
loggerFactory,
|
||||||
|
|
@ -90,7 +90,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure
|
||||||
IModelBinderFactory modelBinderFactory,
|
IModelBinderFactory modelBinderFactory,
|
||||||
ITempDataDictionaryFactory tempDataFactory,
|
ITempDataDictionaryFactory tempDataFactory,
|
||||||
IOptions<MvcOptions> mvcOptions,
|
IOptions<MvcOptions> mvcOptions,
|
||||||
IOptions<HtmlHelperOptions> htmlHelperOptions,
|
IOptions<MvcViewOptions> mvcViewOptions,
|
||||||
IPageHandlerMethodSelector selector,
|
IPageHandlerMethodSelector selector,
|
||||||
DiagnosticListener diagnosticListener,
|
DiagnosticListener diagnosticListener,
|
||||||
ILoggerFactory loggerFactory,
|
ILoggerFactory loggerFactory,
|
||||||
|
|
@ -109,7 +109,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure
|
||||||
_modelMetadataProvider = modelMetadataProvider;
|
_modelMetadataProvider = modelMetadataProvider;
|
||||||
_tempDataFactory = tempDataFactory;
|
_tempDataFactory = tempDataFactory;
|
||||||
_mvcOptions = mvcOptions.Value;
|
_mvcOptions = mvcOptions.Value;
|
||||||
_htmlHelperOptions = htmlHelperOptions.Value;
|
_mvcViewOptions = mvcViewOptions.Value;
|
||||||
_selector = selector;
|
_selector = selector;
|
||||||
_diagnosticListener = diagnosticListener;
|
_diagnosticListener = diagnosticListener;
|
||||||
_logger = loggerFactory.CreateLogger<PageActionInvoker>();
|
_logger = loggerFactory.CreateLogger<PageActionInvoker>();
|
||||||
|
|
@ -214,7 +214,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure
|
||||||
cacheEntry,
|
cacheEntry,
|
||||||
_parameterBinder,
|
_parameterBinder,
|
||||||
_tempDataFactory,
|
_tempDataFactory,
|
||||||
_htmlHelperOptions);
|
_mvcViewOptions.HtmlHelperOptions);
|
||||||
}
|
}
|
||||||
|
|
||||||
private PageActionInvokerCacheEntry CreateCacheEntry(
|
private PageActionInvokerCacheEntry CreateCacheEntry(
|
||||||
|
|
|
||||||
|
|
@ -532,7 +532,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure
|
||||||
modelBinderFactory,
|
modelBinderFactory,
|
||||||
tempDataFactory.Object,
|
tempDataFactory.Object,
|
||||||
Options.Create(mvcOptions),
|
Options.Create(mvcOptions),
|
||||||
Options.Create(new HtmlHelperOptions()),
|
Options.Create(new MvcViewOptions()),
|
||||||
Mock.Of<IPageHandlerMethodSelector>(),
|
Mock.Of<IPageHandlerMethodSelector>(),
|
||||||
new DiagnosticListener("Microsoft.AspNetCore"),
|
new DiagnosticListener("Microsoft.AspNetCore"),
|
||||||
NullLoggerFactory.Instance,
|
NullLoggerFactory.Instance,
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@ namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Filters
|
||||||
/// </summary>
|
/// </summary>
|
||||||
internal class SaveTempDataFilter : IResourceFilter, IResultFilter
|
internal class SaveTempDataFilter : IResourceFilter, IResultFilter
|
||||||
{
|
{
|
||||||
|
private static readonly Func<object, Task> OnStartingCallback = (state) => OnStarting((HttpContext)state);
|
||||||
// Internal for unit testing
|
// Internal for unit testing
|
||||||
internal static readonly object SaveTempDataFilterContextKey = new object();
|
internal static readonly object SaveTempDataFilterContextKey = new object();
|
||||||
|
|
||||||
|
|
@ -43,38 +44,39 @@ namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Filters
|
||||||
|
|
||||||
if (!context.HttpContext.Response.HasStarted)
|
if (!context.HttpContext.Response.HasStarted)
|
||||||
{
|
{
|
||||||
context.HttpContext.Response.OnStarting((state) =>
|
context.HttpContext.Response.OnStarting(
|
||||||
{
|
callback: OnStartingCallback,
|
||||||
var httpContext = (HttpContext)state;
|
state: context.HttpContext);
|
||||||
|
|
||||||
var saveTempDataContext = GetTempDataContext(context.HttpContext);
|
|
||||||
if (saveTempDataContext.RequestHasUnhandledException)
|
|
||||||
{
|
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If temp data was already saved, skip trying to save again as the calls here would potentially fail
|
|
||||||
// because the session feature might not be available at this point.
|
|
||||||
// Example: An action returns NoContentResult and since NoContentResult does not write anything to
|
|
||||||
// the body of the response, this delegate would get executed way late in the pipeline at which point
|
|
||||||
// the session feature would have been removed.
|
|
||||||
if (saveTempDataContext.TempDataSaved)
|
|
||||||
{
|
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
|
||||||
|
|
||||||
SaveTempData(
|
|
||||||
result: null,
|
|
||||||
factory: saveTempDataContext.TempDataDictionaryFactory,
|
|
||||||
filters: saveTempDataContext.Filters,
|
|
||||||
httpContext: httpContext);
|
|
||||||
|
|
||||||
return Task.CompletedTask;
|
|
||||||
},
|
|
||||||
state: context.HttpContext);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static Task OnStarting(HttpContext httpContext)
|
||||||
|
{
|
||||||
|
var saveTempDataContext = GetTempDataContext(httpContext);
|
||||||
|
if (saveTempDataContext.RequestHasUnhandledException)
|
||||||
|
{
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If temp data was already saved, skip trying to save again as the calls here would potentially fail
|
||||||
|
// because the session feature might not be available at this point.
|
||||||
|
// Example: An action returns NoContentResult and since NoContentResult does not write anything to
|
||||||
|
// the body of the response, this delegate would get executed way late in the pipeline at which point
|
||||||
|
// the session feature would have been removed.
|
||||||
|
if (saveTempDataContext.TempDataSaved)
|
||||||
|
{
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
|
|
||||||
|
SaveTempData(
|
||||||
|
result: null,
|
||||||
|
factory: saveTempDataContext.TempDataDictionaryFactory,
|
||||||
|
filters: saveTempDataContext.Filters,
|
||||||
|
httpContext: httpContext);
|
||||||
|
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public void OnResourceExecuted(ResourceExecutedContext context)
|
public void OnResourceExecuted(ResourceExecutedContext context)
|
||||||
{
|
{
|
||||||
|
|
@ -115,7 +117,7 @@ namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Filters
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private SaveTempDataContext GetTempDataContext(HttpContext httpContext)
|
private static SaveTempDataContext GetTempDataContext(HttpContext httpContext)
|
||||||
{
|
{
|
||||||
SaveTempDataContext saveTempDataContext = null;
|
SaveTempDataContext saveTempDataContext = null;
|
||||||
if (httpContext.Items.TryGetValue(SaveTempDataFilterContextKey, out var value))
|
if (httpContext.Items.TryGetValue(SaveTempDataFilterContextKey, out var value))
|
||||||
|
|
|
||||||
|
|
@ -146,22 +146,15 @@ namespace Microsoft.AspNetCore.Mvc.ViewFeatures
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Because it is not possible to delete while enumerating, a copy of the keys must be taken.
|
// In .NET Core 3.0 a Dictionary can have items removed during enumeration
|
||||||
// Use the size of the dictionary as an upper bound to avoid creating more than one copy of the keys.
|
// https://github.com/dotnet/coreclr/pull/18854
|
||||||
var removeCount = 0;
|
|
||||||
var keys = new string[_data.Count];
|
|
||||||
foreach (var entry in _data)
|
foreach (var entry in _data)
|
||||||
{
|
{
|
||||||
if (!_initialKeys.Contains(entry.Key) && !_retainedKeys.Contains(entry.Key))
|
if (!_initialKeys.Contains(entry.Key) && !_retainedKeys.Contains(entry.Key))
|
||||||
{
|
{
|
||||||
keys[removeCount] = entry.Key;
|
_data.Remove(entry.Key);
|
||||||
removeCount++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (var i = 0; i < removeCount; i++)
|
|
||||||
{
|
|
||||||
_data.Remove(keys[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
_provider.SaveTempData(_context, _data);
|
_provider.SaveTempData(_context, _data);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,34 @@
|
||||||
|
// Copyright (c) .NET Foundation. All rights reserved.
|
||||||
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNetCore.Hosting;
|
||||||
|
using Xunit;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNetCore.Mvc.FunctionalTests
|
||||||
|
{
|
||||||
|
public class ClientValidationOptionsTests : IClassFixture<MvcTestFixture<RazorPagesWebSite.Startup>>
|
||||||
|
{
|
||||||
|
public ClientValidationOptionsTests(MvcTestFixture<RazorPagesWebSite.Startup> fixture) =>
|
||||||
|
Fixture = fixture;
|
||||||
|
|
||||||
|
public MvcTestFixture<RazorPagesWebSite.Startup> Fixture { get; }
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task DisablingClientValidation_DisablesItForPagesAndViews()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var client = Fixture
|
||||||
|
.WithWebHostBuilder(whb => whb.UseStartup<RazorPagesWebSite.StartupWithClientValidationDisabled>())
|
||||||
|
.CreateClient();
|
||||||
|
|
||||||
|
// Act
|
||||||
|
var view = await client.GetStringAsync("Controller/ClientValidationDisabled");
|
||||||
|
var page = await client.GetStringAsync("ClientvalidationDisabled");
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.Equal("ClientValidationDisabled", view);
|
||||||
|
Assert.Equal("ClientValidationDisabled", page);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,13 @@
|
||||||
|
// Copyright (c) .NET Foundation. All rights reserved.
|
||||||
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
|
||||||
|
namespace RazorPagesWebSite
|
||||||
|
{
|
||||||
|
public class ClientValidationDisabledController : Controller
|
||||||
|
{
|
||||||
|
[HttpGet("/Controller/ClientValidationDisabled")]
|
||||||
|
public IActionResult ValidationDisabled() => View();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
@page
|
||||||
|
@(ViewContext.ClientValidationEnabled ? "ClientValidationEnabled" : "ClientValidationDisabled")
|
||||||
|
|
@ -0,0 +1,41 @@
|
||||||
|
// Copyright (c) .NET Foundation. All rights reserved.
|
||||||
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
using Microsoft.AspNetCore.Authentication.Cookies;
|
||||||
|
using Microsoft.AspNetCore.Builder;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
|
||||||
|
namespace RazorPagesWebSite
|
||||||
|
{
|
||||||
|
public class StartupWithClientValidationDisabled
|
||||||
|
{
|
||||||
|
public void ConfigureServices(IServiceCollection services)
|
||||||
|
{
|
||||||
|
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
|
||||||
|
.AddCookie(options => options.LoginPath = "/Login");
|
||||||
|
|
||||||
|
services.AddRazorPages(options =>
|
||||||
|
{
|
||||||
|
options.Conventions.AuthorizeFolder("/Admin");
|
||||||
|
})
|
||||||
|
.SetCompatibilityVersion(CompatibilityVersion.Latest);
|
||||||
|
|
||||||
|
services.Configure<MvcViewOptions>(o => o.HtmlHelperOptions.ClientValidationEnabled = false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Configure(IApplicationBuilder app)
|
||||||
|
{
|
||||||
|
app.UseRouting();
|
||||||
|
|
||||||
|
app.UseAuthentication();
|
||||||
|
app.UseAuthorization();
|
||||||
|
|
||||||
|
app.UseEndpoints(endpoints =>
|
||||||
|
{
|
||||||
|
endpoints.MapControllers();
|
||||||
|
endpoints.MapRazorPages();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
@(ViewContext.ClientValidationEnabled ? "ClientValidationEnabled" : "ClientValidationDisabled")
|
||||||
|
|
@ -50,7 +50,5 @@ body {
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
/* Set the fixed height of the footer here */
|
|
||||||
height: 60px;
|
|
||||||
line-height: 60px; /* Vertically center the text there */
|
line-height: 60px; /* Vertically center the text there */
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,5 @@ body {
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
/* Set the fixed height of the footer here */
|
|
||||||
height: 60px;
|
|
||||||
line-height: 60px; /* Vertically center the text there */
|
line-height: 60px; /* Vertically center the text there */
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue