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
|
||||
- powershell: "& ./src/Servers/IIS/tools/UpdateIISExpressCertificate.ps1; & ./src/Servers/IIS/tools/update_schema.ps1"
|
||||
displayName: Setup IISExpress test certificates and schema
|
||||
- powershell: "& ./.azure/pipelines/tools/SetupTestEnvironment.ps1 Setup signalrclienttests.exe"
|
||||
displayName: Start AppVerifier
|
||||
afterBuild:
|
||||
- powershell: "& ./build.ps1 -CI -NoBuild -Test /p:RunFlakyTests=true"
|
||||
displayName: Run Flaky Tests
|
||||
continueOnError: true
|
||||
- powershell: "& ./.azure/pipelines/tools/SetupTestEnvironment.ps1 Shutdown signalrclienttests.exe"
|
||||
displayName: Stop AppVerifier
|
||||
condition: always()
|
||||
artifacts:
|
||||
- name: Windows_Test_Logs
|
||||
path: artifacts/logs/
|
||||
|
|
|
|||
|
|
@ -189,13 +189,21 @@ jobs:
|
|||
buildConfiguration: $(BuildConfiguration)
|
||||
buildPlatform: $(AgentOsName)
|
||||
- task: PublishTestResults@2
|
||||
displayName: Publish junit test results
|
||||
displayName: Publish js test results
|
||||
condition: always()
|
||||
inputs:
|
||||
testRunner: junit
|
||||
testResultsFiles: '**/artifacts/logs/**/*.junit.xml'
|
||||
buildConfiguration: $(BuildConfiguration)
|
||||
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 }}:
|
||||
- task: PublishBuildArtifacts@1
|
||||
displayName: Upload artifacts from ${{ artifact.path }}
|
||||
|
|
|
|||
|
|
@ -14,11 +14,4 @@ jobs:
|
|||
agentOs: Windows
|
||||
jobName: SignalRDailyTests
|
||||
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.
|
||||
# See https://help.github.com/articles/about-code-owners/
|
||||
|
||||
/.azure/ @dougbu
|
||||
/.config/ @dougbu
|
||||
/build/ @dougbu
|
||||
/eng/ @dougbu
|
||||
/src/Components/ @SteveSandersonMS
|
||||
/src/DefaultBuilder/ @tratcher @anurse
|
||||
/src/Hosting/ @tratcher @anurse
|
||||
/src/Http/ @tratcher @jkotalik @anurse
|
||||
/src/Middleware/ @tratcher @anurse
|
||||
/src/ProjectTemplates/ @ryanbrandenburg
|
||||
/src/Security/ @tratcher @anurse
|
||||
/src/Servers/ @tratcher @jkotalik @anurse
|
||||
/src/Middleware/Rewrite @jkotalik @anurse
|
||||
/src/Middleware/HttpsPolicy @jkotalik @anurse
|
||||
/src/SignalR/ @mikaelm12 @BrennanConroy @halter73 @anurse
|
||||
/.azure/ @aspnet/build
|
||||
/.config/ @aspnet/build
|
||||
/build/ @aspnet/build
|
||||
/eng/ @aspnet/build
|
||||
/src/Components/ @SteveSandersonMS
|
||||
/src/DefaultBuilder/ @tratcher @anurse
|
||||
/src/Hosting/ @tratcher @anurse
|
||||
/src/Http/ @tratcher @jkotalik @anurse
|
||||
/src/Middleware/ @tratcher @anurse
|
||||
/src/ProjectTemplates/ @ryanbrandenburg
|
||||
/src/Security/ @tratcher @anurse
|
||||
/src/Servers/ @tratcher @jkotalik @anurse
|
||||
/src/Middleware/Rewrite @jkotalik @anurse
|
||||
/src/Middleware/HttpsPolicy @jkotalik @anurse
|
||||
/src/SignalR/ @mikaelm12 @BrennanConroy @halter73 @anurse
|
||||
|
|
|
|||
|
|
@ -98,6 +98,35 @@
|
|||
|
||||
</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\targets\ResolveIisReferences.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\Razor\Razor.Design\test\testassets\**\*.*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\SignalR\clients\ts\**\node_modules\**\*.*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/blazor-dev/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/api/v3/index.json;
|
||||
https://vside.myget.org/F/devcore/api/v3/index.json;
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
<ItemGroup>
|
||||
<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="Yarn.MSBuild" Version="1.13.0" />
|
||||
</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
|
||||
```
|
||||
* 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 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
|
||||
* NodeJS. LTS version of 10.14.2 or newer <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
|
||||
|
||||
### 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>
|
||||
* 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>
|
||||
* (Optional) some optional components, like the SignalR Java client, may require
|
||||
* NodeJS. LTS version of 10.14.2 or newer recommended <https://nodejs.org>
|
||||
* Java Development Kit 10 or newer. Either:
|
||||
* OpenJDK <http://jdk.java.net/10/>
|
||||
* Oracle's JDK <https://www.oracle.com/technetwork/java/javase/downloads/index.html>
|
||||
* NodeJS. LTS version of 10.14.2 or newer <https://nodejs.org>
|
||||
* Java Development Kit 10 or newer. Either:
|
||||
* OpenJDK <http://jdk.java.net/10/>
|
||||
* Oracle's JDK <https://www.oracle.com/technetwork/java/javase/downloads/index.html>
|
||||
|
||||
## 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>
|
||||
<clear />
|
||||
<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" />
|
||||
</packageSources>
|
||||
</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.
|
||||
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.
|
||||
* Run `build.cmd /t:GenerateProjectList` when adding new projects
|
||||
* 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
|
||||
|
||||
|
|
@ -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`
|
||||
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>
|
||||
<PropertyGroup>
|
||||
<MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
|
||||
<AspNetCoreBaselineVersion>2.2.3</AspNetCoreBaselineVersion>
|
||||
<AspNetCoreBaselineVersion>2.2.4</AspNetCoreBaselineVersion>
|
||||
</PropertyGroup>
|
||||
<!-- Package: dotnet-dev-certs-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'dotnet-dev-certs' ">
|
||||
|
|
@ -81,7 +81,7 @@
|
|||
</PropertyGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.AspNetCoreModuleV2-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.AspNetCoreModuleV2' ">
|
||||
<BaselinePackageVersion>2.2.2</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>2.2.4</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.AspNetCoreModuleV2' AND '$(TargetFramework)' == 'netcoreapp2.2' " />
|
||||
<!-- 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.
|
||||
|
||||
-->
|
||||
<Baseline Version="2.2.3">
|
||||
<Baseline Version="2.2.4">
|
||||
<Package Id="dotnet-dev-certs" Version="2.2.0" />
|
||||
<Package Id="dotnet-sql-cache" 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.ApplicationInsights.HostingStartup" Version="2.2.0" />
|
||||
<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.AzureAD.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' ">
|
||||
<PackagesInPatch>
|
||||
@aspnet/signalr;
|
||||
Microsoft.AspNetCore.AspNetCoreModuleV2;
|
||||
</PackagesInPatch>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(VersionPrefix)' == '2.2.5' ">
|
||||
<PackagesInPatch>
|
||||
Microsoft.AspNetCore.AspNetCoreModule;
|
||||
Microsoft.AspNetCore.AspNetCoreModuleV2;
|
||||
java:signalr;
|
||||
</PackagesInPatch>
|
||||
</PropertyGroup>
|
||||
|
||||
</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.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.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.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" />
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@
|
|||
<AspNetCoreAppReferenceAndPackage Include="Microsoft.AspNetCore.Http.Features" />
|
||||
<AspNetCoreAppReferenceAndPackage Include="Microsoft.AspNetCore.Connections.Abstractions" />
|
||||
<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.Common" />
|
||||
<AspNetCoreAppReferenceAndPackage Include="Microsoft.AspNetCore.Components.Browser" />
|
||||
|
|
|
|||
|
|
@ -9,384 +9,384 @@
|
|||
-->
|
||||
<Dependencies>
|
||||
<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>
|
||||
<Sha>5ec5b0c8894e758ef2a41fd534746500bbcf00ad</Sha>
|
||||
<Sha>d4ef2a1d4a68428e29a86cafc24837a45aef7e0d</Sha>
|
||||
</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>
|
||||
<Sha>5ec5b0c8894e758ef2a41fd534746500bbcf00ad</Sha>
|
||||
<Sha>d4ef2a1d4a68428e29a86cafc24837a45aef7e0d</Sha>
|
||||
</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>
|
||||
<Sha>5ec5b0c8894e758ef2a41fd534746500bbcf00ad</Sha>
|
||||
<Sha>d4ef2a1d4a68428e29a86cafc24837a45aef7e0d</Sha>
|
||||
</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>
|
||||
<Sha>5ec5b0c8894e758ef2a41fd534746500bbcf00ad</Sha>
|
||||
<Sha>d4ef2a1d4a68428e29a86cafc24837a45aef7e0d</Sha>
|
||||
</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>
|
||||
<Sha>a4d2bafcdfaf0ed6b451056b7d9d75f53ee8c4df</Sha>
|
||||
<Sha>b191c93d850ff31445534eb5cd6184599f40bbb4</Sha>
|
||||
</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>
|
||||
<Sha>a4d2bafcdfaf0ed6b451056b7d9d75f53ee8c4df</Sha>
|
||||
<Sha>b191c93d850ff31445534eb5cd6184599f40bbb4</Sha>
|
||||
</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>
|
||||
<Sha>a4d2bafcdfaf0ed6b451056b7d9d75f53ee8c4df</Sha>
|
||||
<Sha>b191c93d850ff31445534eb5cd6184599f40bbb4</Sha>
|
||||
</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>
|
||||
<Sha>a4d2bafcdfaf0ed6b451056b7d9d75f53ee8c4df</Sha>
|
||||
<Sha>b191c93d850ff31445534eb5cd6184599f40bbb4</Sha>
|
||||
</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>
|
||||
<Sha>a4d2bafcdfaf0ed6b451056b7d9d75f53ee8c4df</Sha>
|
||||
<Sha>b191c93d850ff31445534eb5cd6184599f40bbb4</Sha>
|
||||
</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>
|
||||
<Sha>a4d2bafcdfaf0ed6b451056b7d9d75f53ee8c4df</Sha>
|
||||
<Sha>b191c93d850ff31445534eb5cd6184599f40bbb4</Sha>
|
||||
</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>
|
||||
<Sha>a4d2bafcdfaf0ed6b451056b7d9d75f53ee8c4df</Sha>
|
||||
<Sha>b191c93d850ff31445534eb5cd6184599f40bbb4</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>dc522ef97fac72e64cd74825b7ef497f82af4624</Sha>
|
||||
<Sha>fe5c12ad8315e043e62285117a56bba1784756d1</Sha>
|
||||
</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>
|
||||
<Sha>dc522ef97fac72e64cd74825b7ef497f82af4624</Sha>
|
||||
<Sha>fe5c12ad8315e043e62285117a56bba1784756d1</Sha>
|
||||
</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>
|
||||
<Sha>dc522ef97fac72e64cd74825b7ef497f82af4624</Sha>
|
||||
<Sha>fe5c12ad8315e043e62285117a56bba1784756d1</Sha>
|
||||
</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>
|
||||
<Sha>dc522ef97fac72e64cd74825b7ef497f82af4624</Sha>
|
||||
<Sha>fe5c12ad8315e043e62285117a56bba1784756d1</Sha>
|
||||
</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>
|
||||
<Sha>dc522ef97fac72e64cd74825b7ef497f82af4624</Sha>
|
||||
<Sha>fe5c12ad8315e043e62285117a56bba1784756d1</Sha>
|
||||
</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>
|
||||
<Sha>dc522ef97fac72e64cd74825b7ef497f82af4624</Sha>
|
||||
<Sha>fe5c12ad8315e043e62285117a56bba1784756d1</Sha>
|
||||
</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>
|
||||
<Sha>dc522ef97fac72e64cd74825b7ef497f82af4624</Sha>
|
||||
<Sha>fe5c12ad8315e043e62285117a56bba1784756d1</Sha>
|
||||
</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>
|
||||
<Sha>dc522ef97fac72e64cd74825b7ef497f82af4624</Sha>
|
||||
<Sha>fe5c12ad8315e043e62285117a56bba1784756d1</Sha>
|
||||
</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>
|
||||
<Sha>dc522ef97fac72e64cd74825b7ef497f82af4624</Sha>
|
||||
<Sha>fe5c12ad8315e043e62285117a56bba1784756d1</Sha>
|
||||
</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>
|
||||
<Sha>dc522ef97fac72e64cd74825b7ef497f82af4624</Sha>
|
||||
<Sha>fe5c12ad8315e043e62285117a56bba1784756d1</Sha>
|
||||
</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>
|
||||
<Sha>dc522ef97fac72e64cd74825b7ef497f82af4624</Sha>
|
||||
<Sha>fe5c12ad8315e043e62285117a56bba1784756d1</Sha>
|
||||
</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>
|
||||
<Sha>dc522ef97fac72e64cd74825b7ef497f82af4624</Sha>
|
||||
<Sha>fe5c12ad8315e043e62285117a56bba1784756d1</Sha>
|
||||
</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>
|
||||
<Sha>dc522ef97fac72e64cd74825b7ef497f82af4624</Sha>
|
||||
<Sha>fe5c12ad8315e043e62285117a56bba1784756d1</Sha>
|
||||
</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>
|
||||
<Sha>dc522ef97fac72e64cd74825b7ef497f82af4624</Sha>
|
||||
<Sha>fe5c12ad8315e043e62285117a56bba1784756d1</Sha>
|
||||
</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>
|
||||
<Sha>dc522ef97fac72e64cd74825b7ef497f82af4624</Sha>
|
||||
<Sha>fe5c12ad8315e043e62285117a56bba1784756d1</Sha>
|
||||
</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>
|
||||
<Sha>dc522ef97fac72e64cd74825b7ef497f82af4624</Sha>
|
||||
<Sha>fe5c12ad8315e043e62285117a56bba1784756d1</Sha>
|
||||
</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>
|
||||
<Sha>dc522ef97fac72e64cd74825b7ef497f82af4624</Sha>
|
||||
<Sha>fe5c12ad8315e043e62285117a56bba1784756d1</Sha>
|
||||
</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>
|
||||
<Sha>dc522ef97fac72e64cd74825b7ef497f82af4624</Sha>
|
||||
<Sha>fe5c12ad8315e043e62285117a56bba1784756d1</Sha>
|
||||
</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>
|
||||
<Sha>dc522ef97fac72e64cd74825b7ef497f82af4624</Sha>
|
||||
<Sha>fe5c12ad8315e043e62285117a56bba1784756d1</Sha>
|
||||
</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>
|
||||
<Sha>ee54d4cbd2b305eadf6f341bdc9d4abccdb50559</Sha>
|
||||
<Sha>b159f4bf9614203a0c60a20f5469d5226f3f12e7</Sha>
|
||||
</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>
|
||||
<Sha>ee54d4cbd2b305eadf6f341bdc9d4abccdb50559</Sha>
|
||||
<Sha>b159f4bf9614203a0c60a20f5469d5226f3f12e7</Sha>
|
||||
</Dependency>
|
||||
</ProductDependencies>
|
||||
<ToolsetDependencies>
|
||||
<!-- 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>
|
||||
<Sha>dc522ef97fac72e64cd74825b7ef497f82af4624</Sha>
|
||||
<Sha>fe5c12ad8315e043e62285117a56bba1784756d1</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</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>
|
||||
<Sha>b1f9e12fe3ee71c48ea60b15968745850ac0a4a7</Sha>
|
||||
<Sha>517bf671ea342965d007aa48f5bfd4926e58d582</Sha>
|
||||
</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>
|
||||
<Sha>fd0366daae4c9d47eba72ea6034002cbd7492018</Sha>
|
||||
<Sha>0b1aa473a7a722cd3f0aab5166fbe9e5203f0582</Sha>
|
||||
</Dependency>
|
||||
</ToolsetDependencies>
|
||||
</Dependencies>
|
||||
|
|
|
|||
|
|
@ -17,106 +17,106 @@
|
|||
-->
|
||||
<PropertyGroup Label="Automated">
|
||||
<!-- 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 -->
|
||||
<MicrosoftExtensionsDependencyModelPackageVersion>3.0.0-preview4-27615-11</MicrosoftExtensionsDependencyModelPackageVersion>
|
||||
<MicrosoftNETCoreAppPackageVersion>3.0.0-preview4-27615-11</MicrosoftNETCoreAppPackageVersion>
|
||||
<MicrosoftExtensionsDependencyModelPackageVersion>3.0.0-preview5-27611-18</MicrosoftExtensionsDependencyModelPackageVersion>
|
||||
<MicrosoftNETCoreAppPackageVersion>3.0.0-preview5-27611-18</MicrosoftNETCoreAppPackageVersion>
|
||||
<!-- Packages from dotnet/corefx -->
|
||||
<MicrosoftBclJsonSourcesPackageVersion>4.6.0-preview4.19212.13</MicrosoftBclJsonSourcesPackageVersion>
|
||||
<MicrosoftCSharpPackageVersion>4.6.0-preview4.19212.13</MicrosoftCSharpPackageVersion>
|
||||
<MicrosoftWin32RegistryPackageVersion>4.6.0-preview4.19212.13</MicrosoftWin32RegistryPackageVersion>
|
||||
<SystemComponentModelAnnotationsPackageVersion>4.6.0-preview4.19212.13</SystemComponentModelAnnotationsPackageVersion>
|
||||
<SystemDataSqlClientPackageVersion>4.7.0-preview4.19212.13</SystemDataSqlClientPackageVersion>
|
||||
<SystemDiagnosticsEventLogPackageVersion>4.6.0-preview4.19212.13</SystemDiagnosticsEventLogPackageVersion>
|
||||
<SystemIOPipelinesPackageVersion>4.6.0-preview4.19212.13</SystemIOPipelinesPackageVersion>
|
||||
<SystemNetHttpWinHttpHandlerPackageVersion>4.6.0-preview4.19212.13</SystemNetHttpWinHttpHandlerPackageVersion>
|
||||
<SystemNetWebSocketsWebSocketProtocolPackageVersion>4.6.0-preview4.19212.13</SystemNetWebSocketsWebSocketProtocolPackageVersion>
|
||||
<SystemReflectionMetadataPackageVersion>1.7.0-preview4.19212.13</SystemReflectionMetadataPackageVersion>
|
||||
<SystemRuntimeCompilerServicesUnsafePackageVersion>4.6.0-preview4.19212.13</SystemRuntimeCompilerServicesUnsafePackageVersion>
|
||||
<SystemSecurityCryptographyCngPackageVersion>4.6.0-preview4.19212.13</SystemSecurityCryptographyCngPackageVersion>
|
||||
<SystemSecurityCryptographyPkcsPackageVersion>4.6.0-preview4.19212.13</SystemSecurityCryptographyPkcsPackageVersion>
|
||||
<SystemSecurityCryptographyXmlPackageVersion>4.6.0-preview4.19212.13</SystemSecurityCryptographyXmlPackageVersion>
|
||||
<SystemSecurityPermissionsPackageVersion>4.6.0-preview4.19212.13</SystemSecurityPermissionsPackageVersion>
|
||||
<SystemSecurityPrincipalWindowsPackageVersion>4.6.0-preview4.19212.13</SystemSecurityPrincipalWindowsPackageVersion>
|
||||
<SystemServiceProcessServiceControllerPackageVersion>4.6.0-preview4.19212.13</SystemServiceProcessServiceControllerPackageVersion>
|
||||
<SystemTextEncodingsWebPackageVersion>4.6.0-preview4.19212.13</SystemTextEncodingsWebPackageVersion>
|
||||
<SystemThreadingChannelsPackageVersion>4.6.0-preview4.19212.13</SystemThreadingChannelsPackageVersion>
|
||||
<MicrosoftBclJsonSourcesPackageVersion>4.6.0-preview5.19211.22</MicrosoftBclJsonSourcesPackageVersion>
|
||||
<MicrosoftCSharpPackageVersion>4.6.0-preview5.19211.22</MicrosoftCSharpPackageVersion>
|
||||
<MicrosoftWin32RegistryPackageVersion>4.6.0-preview5.19211.22</MicrosoftWin32RegistryPackageVersion>
|
||||
<SystemComponentModelAnnotationsPackageVersion>4.6.0-preview5.19211.22</SystemComponentModelAnnotationsPackageVersion>
|
||||
<SystemDataSqlClientPackageVersion>4.7.0-preview5.19211.22</SystemDataSqlClientPackageVersion>
|
||||
<SystemDiagnosticsEventLogPackageVersion>4.6.0-preview5.19211.22</SystemDiagnosticsEventLogPackageVersion>
|
||||
<SystemIOPipelinesPackageVersion>4.6.0-preview5.19211.22</SystemIOPipelinesPackageVersion>
|
||||
<SystemNetHttpWinHttpHandlerPackageVersion>4.6.0-preview5.19211.22</SystemNetHttpWinHttpHandlerPackageVersion>
|
||||
<SystemNetWebSocketsWebSocketProtocolPackageVersion>4.6.0-preview5.19211.22</SystemNetWebSocketsWebSocketProtocolPackageVersion>
|
||||
<SystemReflectionMetadataPackageVersion>1.7.0-preview5.19211.22</SystemReflectionMetadataPackageVersion>
|
||||
<SystemRuntimeCompilerServicesUnsafePackageVersion>4.6.0-preview5.19211.22</SystemRuntimeCompilerServicesUnsafePackageVersion>
|
||||
<SystemSecurityCryptographyCngPackageVersion>4.6.0-preview5.19211.22</SystemSecurityCryptographyCngPackageVersion>
|
||||
<SystemSecurityCryptographyPkcsPackageVersion>4.6.0-preview5.19211.22</SystemSecurityCryptographyPkcsPackageVersion>
|
||||
<SystemSecurityCryptographyXmlPackageVersion>4.6.0-preview5.19211.22</SystemSecurityCryptographyXmlPackageVersion>
|
||||
<SystemSecurityPermissionsPackageVersion>4.6.0-preview5.19211.22</SystemSecurityPermissionsPackageVersion>
|
||||
<SystemSecurityPrincipalWindowsPackageVersion>4.6.0-preview5.19211.22</SystemSecurityPrincipalWindowsPackageVersion>
|
||||
<SystemServiceProcessServiceControllerPackageVersion>4.6.0-preview5.19211.22</SystemServiceProcessServiceControllerPackageVersion>
|
||||
<SystemTextEncodingsWebPackageVersion>4.6.0-preview5.19211.22</SystemTextEncodingsWebPackageVersion>
|
||||
<SystemThreadingChannelsPackageVersion>4.6.0-preview5.19211.22</SystemThreadingChannelsPackageVersion>
|
||||
<!-- 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 -->
|
||||
<InternalAspNetCoreAnalyzersPackageVersion>3.0.0-preview4.19216.2</InternalAspNetCoreAnalyzersPackageVersion>
|
||||
<MicrosoftAspNetCoreAnalyzerTestingPackageVersion>3.0.0-preview4.19216.2</MicrosoftAspNetCoreAnalyzerTestingPackageVersion>
|
||||
<MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>3.0.0-preview4.19216.2</MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>
|
||||
<MicrosoftAspNetCoreTestingPackageVersion>3.0.0-preview4.19216.2</MicrosoftAspNetCoreTestingPackageVersion>
|
||||
<MicrosoftExtensionsActivatorUtilitiesSourcesPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsActivatorUtilitiesSourcesPackageVersion>
|
||||
<MicrosoftExtensionsCachingAbstractionsPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsCachingAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsCachingMemoryPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsCachingMemoryPackageVersion>
|
||||
<MicrosoftExtensionsCachingSqlServerPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsCachingSqlServerPackageVersion>
|
||||
<MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>
|
||||
<MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationAbstractionsPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsConfigurationAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationBinderPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsConfigurationBinderPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationCommandLinePackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsConfigurationCommandLinePackageVersion>
|
||||
<MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationIniPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsConfigurationIniPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationJsonPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsConfigurationJsonPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationKeyPerFilePackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsConfigurationKeyPerFilePackageVersion>
|
||||
<MicrosoftExtensionsConfigurationPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsConfigurationPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationUserSecretsPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsConfigurationUserSecretsPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationXmlPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsConfigurationXmlPackageVersion>
|
||||
<MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsDependencyInjectionPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsDependencyInjectionPackageVersion>
|
||||
<MicrosoftExtensionsDiagnosticAdapterPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsDiagnosticAdapterPackageVersion>
|
||||
<MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsDiagnosticsHealthChecksPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsDiagnosticsHealthChecksPackageVersion>
|
||||
<MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsFileProvidersCompositePackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsFileProvidersCompositePackageVersion>
|
||||
<MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>
|
||||
<MicrosoftExtensionsFileProvidersPhysicalPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsFileProvidersPhysicalPackageVersion>
|
||||
<MicrosoftExtensionsFileSystemGlobbingPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsFileSystemGlobbingPackageVersion>
|
||||
<MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion>
|
||||
<MicrosoftExtensionsHostingAbstractionsPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsHostingAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsHostingPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsHostingPackageVersion>
|
||||
<MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion>
|
||||
<MicrosoftExtensionsHttpPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsHttpPackageVersion>
|
||||
<MicrosoftExtensionsLocalizationAbstractionsPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsLocalizationAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsLocalizationPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsLocalizationPackageVersion>
|
||||
<MicrosoftExtensionsLoggingAbstractionsPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsLoggingAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>
|
||||
<MicrosoftExtensionsLoggingConfigurationPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsLoggingConfigurationPackageVersion>
|
||||
<MicrosoftExtensionsLoggingConsolePackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsLoggingConsolePackageVersion>
|
||||
<MicrosoftExtensionsLoggingDebugPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsLoggingDebugPackageVersion>
|
||||
<MicrosoftExtensionsLoggingEventSourcePackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsLoggingEventSourcePackageVersion>
|
||||
<MicrosoftExtensionsLoggingPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsLoggingPackageVersion>
|
||||
<MicrosoftExtensionsLoggingTestingPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsLoggingTestingPackageVersion>
|
||||
<MicrosoftExtensionsLoggingTraceSourcePackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsLoggingTraceSourcePackageVersion>
|
||||
<MicrosoftExtensionsObjectPoolPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsObjectPoolPackageVersion>
|
||||
<MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>
|
||||
<MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>
|
||||
<MicrosoftExtensionsOptionsPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsOptionsPackageVersion>
|
||||
<MicrosoftExtensionsParameterDefaultValueSourcesPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsParameterDefaultValueSourcesPackageVersion>
|
||||
<MicrosoftExtensionsPrimitivesPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsPrimitivesPackageVersion>
|
||||
<MicrosoftExtensionsTypeNameHelperSourcesPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsTypeNameHelperSourcesPackageVersion>
|
||||
<MicrosoftExtensionsValueStopwatchSourcesPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsValueStopwatchSourcesPackageVersion>
|
||||
<MicrosoftExtensionsWebEncodersPackageVersion>3.0.0-preview4.19216.2</MicrosoftExtensionsWebEncodersPackageVersion>
|
||||
<MicrosoftInternalExtensionsRefsPackageVersion>3.0.0-preview4.19216.2</MicrosoftInternalExtensionsRefsPackageVersion>
|
||||
<MicrosoftJSInteropPackageVersion>3.0.0-preview4.19216.2</MicrosoftJSInteropPackageVersion>
|
||||
<MonoWebAssemblyInteropPackageVersion>3.0.0-preview4.19216.2</MonoWebAssemblyInteropPackageVersion>
|
||||
<InternalAspNetCoreAnalyzersPackageVersion>3.0.0-preview5.19212.9</InternalAspNetCoreAnalyzersPackageVersion>
|
||||
<MicrosoftAspNetCoreAnalyzerTestingPackageVersion>3.0.0-preview5.19212.9</MicrosoftAspNetCoreAnalyzerTestingPackageVersion>
|
||||
<MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>3.0.0-preview5.19212.9</MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>
|
||||
<MicrosoftAspNetCoreTestingPackageVersion>3.0.0-preview5.19212.9</MicrosoftAspNetCoreTestingPackageVersion>
|
||||
<MicrosoftExtensionsActivatorUtilitiesSourcesPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsActivatorUtilitiesSourcesPackageVersion>
|
||||
<MicrosoftExtensionsCachingAbstractionsPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsCachingAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsCachingMemoryPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsCachingMemoryPackageVersion>
|
||||
<MicrosoftExtensionsCachingSqlServerPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsCachingSqlServerPackageVersion>
|
||||
<MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>
|
||||
<MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationAbstractionsPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsConfigurationAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationBinderPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsConfigurationBinderPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationCommandLinePackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsConfigurationCommandLinePackageVersion>
|
||||
<MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationIniPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsConfigurationIniPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationJsonPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsConfigurationJsonPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationKeyPerFilePackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsConfigurationKeyPerFilePackageVersion>
|
||||
<MicrosoftExtensionsConfigurationPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsConfigurationPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationUserSecretsPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsConfigurationUserSecretsPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationXmlPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsConfigurationXmlPackageVersion>
|
||||
<MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsDependencyInjectionPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsDependencyInjectionPackageVersion>
|
||||
<MicrosoftExtensionsDiagnosticAdapterPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsDiagnosticAdapterPackageVersion>
|
||||
<MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsDiagnosticsHealthChecksPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsDiagnosticsHealthChecksPackageVersion>
|
||||
<MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsFileProvidersCompositePackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsFileProvidersCompositePackageVersion>
|
||||
<MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>
|
||||
<MicrosoftExtensionsFileProvidersPhysicalPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsFileProvidersPhysicalPackageVersion>
|
||||
<MicrosoftExtensionsFileSystemGlobbingPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsFileSystemGlobbingPackageVersion>
|
||||
<MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion>
|
||||
<MicrosoftExtensionsHostingAbstractionsPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsHostingAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsHostingPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsHostingPackageVersion>
|
||||
<MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion>
|
||||
<MicrosoftExtensionsHttpPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsHttpPackageVersion>
|
||||
<MicrosoftExtensionsLocalizationAbstractionsPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsLocalizationAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsLocalizationPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsLocalizationPackageVersion>
|
||||
<MicrosoftExtensionsLoggingAbstractionsPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsLoggingAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>
|
||||
<MicrosoftExtensionsLoggingConfigurationPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsLoggingConfigurationPackageVersion>
|
||||
<MicrosoftExtensionsLoggingConsolePackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsLoggingConsolePackageVersion>
|
||||
<MicrosoftExtensionsLoggingDebugPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsLoggingDebugPackageVersion>
|
||||
<MicrosoftExtensionsLoggingEventSourcePackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsLoggingEventSourcePackageVersion>
|
||||
<MicrosoftExtensionsLoggingPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsLoggingPackageVersion>
|
||||
<MicrosoftExtensionsLoggingTestingPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsLoggingTestingPackageVersion>
|
||||
<MicrosoftExtensionsLoggingTraceSourcePackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsLoggingTraceSourcePackageVersion>
|
||||
<MicrosoftExtensionsObjectPoolPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsObjectPoolPackageVersion>
|
||||
<MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>
|
||||
<MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>
|
||||
<MicrosoftExtensionsOptionsPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsOptionsPackageVersion>
|
||||
<MicrosoftExtensionsParameterDefaultValueSourcesPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsParameterDefaultValueSourcesPackageVersion>
|
||||
<MicrosoftExtensionsPrimitivesPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsPrimitivesPackageVersion>
|
||||
<MicrosoftExtensionsTypeNameHelperSourcesPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsTypeNameHelperSourcesPackageVersion>
|
||||
<MicrosoftExtensionsValueStopwatchSourcesPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsValueStopwatchSourcesPackageVersion>
|
||||
<MicrosoftExtensionsWebEncodersPackageVersion>3.0.0-preview5.19212.9</MicrosoftExtensionsWebEncodersPackageVersion>
|
||||
<MicrosoftInternalExtensionsRefsPackageVersion>3.0.0-preview5.19212.9</MicrosoftInternalExtensionsRefsPackageVersion>
|
||||
<MicrosoftJSInteropPackageVersion>3.0.0-preview5.19212.9</MicrosoftJSInteropPackageVersion>
|
||||
<MonoWebAssemblyInteropPackageVersion>3.0.0-preview5.19212.9</MonoWebAssemblyInteropPackageVersion>
|
||||
<!-- Packages from aspnet/EntityFrameworkCore -->
|
||||
<dotnetefPackageVersion>3.0.0-preview4.19216.3</dotnetefPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreInMemoryPackageVersion>3.0.0-preview4.19216.3</MicrosoftEntityFrameworkCoreInMemoryPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreRelationalPackageVersion>3.0.0-preview4.19216.3</MicrosoftEntityFrameworkCoreRelationalPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreSqlitePackageVersion>3.0.0-preview4.19216.3</MicrosoftEntityFrameworkCoreSqlitePackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreSqlServerPackageVersion>3.0.0-preview4.19216.3</MicrosoftEntityFrameworkCoreSqlServerPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreToolsPackageVersion>3.0.0-preview4.19216.3</MicrosoftEntityFrameworkCoreToolsPackageVersion>
|
||||
<MicrosoftEntityFrameworkCorePackageVersion>3.0.0-preview4.19216.3</MicrosoftEntityFrameworkCorePackageVersion>
|
||||
<dotnetefPackageVersion>3.0.0-preview5.19213.2</dotnetefPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreInMemoryPackageVersion>3.0.0-preview5.19213.2</MicrosoftEntityFrameworkCoreInMemoryPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreRelationalPackageVersion>3.0.0-preview5.19213.2</MicrosoftEntityFrameworkCoreRelationalPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreSqlitePackageVersion>3.0.0-preview5.19213.2</MicrosoftEntityFrameworkCoreSqlitePackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreSqlServerPackageVersion>3.0.0-preview5.19213.2</MicrosoftEntityFrameworkCoreSqlServerPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreToolsPackageVersion>3.0.0-preview5.19213.2</MicrosoftEntityFrameworkCoreToolsPackageVersion>
|
||||
<MicrosoftEntityFrameworkCorePackageVersion>3.0.0-preview5.19213.2</MicrosoftEntityFrameworkCorePackageVersion>
|
||||
<!-- Packages from aspnet/AspNetCore-Tooling -->
|
||||
<MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>3.0.0-preview4.19216.2</MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>
|
||||
<MicrosoftAspNetCoreRazorLanguagePackageVersion>3.0.0-preview4.19216.2</MicrosoftAspNetCoreRazorLanguagePackageVersion>
|
||||
<MicrosoftCodeAnalysisRazorPackageVersion>3.0.0-preview4.19216.2</MicrosoftCodeAnalysisRazorPackageVersion>
|
||||
<MicrosoftNETSdkRazorPackageVersion>3.0.0-preview4.19216.2</MicrosoftNETSdkRazorPackageVersion>
|
||||
<MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>3.0.0-preview5.19214.1</MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>
|
||||
<MicrosoftAspNetCoreRazorLanguagePackageVersion>3.0.0-preview5.19214.1</MicrosoftAspNetCoreRazorLanguagePackageVersion>
|
||||
<MicrosoftCodeAnalysisRazorPackageVersion>3.0.0-preview5.19214.1</MicrosoftCodeAnalysisRazorPackageVersion>
|
||||
<MicrosoftNETSdkRazorPackageVersion>3.0.0-preview5.19214.1</MicrosoftNETSdkRazorPackageVersion>
|
||||
</PropertyGroup>
|
||||
<!--
|
||||
|
||||
|
|
|
|||
|
|
@ -25,7 +25,6 @@
|
|||
|
||||
.\InstallVisualStudio.ps1
|
||||
#>
|
||||
[CmdletBinding(DefaultParameterSetName = 'Default')]
|
||||
param(
|
||||
[ValidateSet('BuildTools','Community', 'Professional', 'Enterprise')]
|
||||
[string]$Edition = 'Enterprise',
|
||||
|
|
@ -35,8 +34,8 @@ param(
|
|||
)
|
||||
|
||||
if ($Passive -and $Quiet) {
|
||||
Write-Host "The -Passive and -Quiet options cannot be used together." -f Red
|
||||
Write-Host "Run ``Get-Help $PSCommandPath`` for more details." -f Red
|
||||
Write-Host -ForegroundColor Red "Error: The -Passive and -Quiet options cannot be used together."
|
||||
Write-Host -ForegroundColor Red "Run ``Get-Help $PSCommandPath`` for more details."
|
||||
exit 1
|
||||
}
|
||||
|
||||
|
|
@ -98,15 +97,61 @@ if ($Quiet) {
|
|||
$arguments += '--quiet', '--wait'
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
Write-Host
|
||||
Write-Host "Installing Visual Studio 2019 $Edition" -f Magenta
|
||||
Write-Host ""
|
||||
Write-Host
|
||||
Write-Host "Running '$bootstrapper $arguments'"
|
||||
|
||||
$process = Start-Process -FilePath "$bootstrapper" -ArgumentList $arguments `
|
||||
-PassThru -RedirectStandardError "$intermedateDir\errors.txt" -Verbose -Wait
|
||||
if ($process.ExitCode -ne 0) {
|
||||
Get-Content "$intermedateDir\errors.txt" | Write-Error
|
||||
foreach ($i in 0, 1, 2) {
|
||||
if ($i -ne 0) {
|
||||
Write-Host "Retrying..."
|
||||
}
|
||||
|
||||
$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
|
||||
|
|
|
|||
|
|
@ -18,12 +18,7 @@
|
|||
|
||||
<Target Name="Restore">
|
||||
<Message Importance="High" Text="Running yarn install on $(MSBuildProjectFullPath)" />
|
||||
<Yarn Command="install $(InstallArgs)" ContinueOnError="true">
|
||||
<Output TaskParameter="ExitCode" PropertyName="_YarnExitCode"/>
|
||||
</Yarn>
|
||||
<Yarn Command="install $(InstallArgs)" Condition="'$(_YarnExitCode)' != '0'">
|
||||
<Output TaskParameter="ExitCode" PropertyName="_YarnExitCode"/>
|
||||
</Yarn>
|
||||
<Yarn Command="install $(InstallArgs)" />
|
||||
</Target>
|
||||
|
||||
<Target Name="PrepareForBuild">
|
||||
|
|
|
|||
|
|
@ -148,6 +148,8 @@
|
|||
|
||||
<!-- Identify if any references were present in the last release of this package, but have been removed. -->
|
||||
<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,
|
||||
|
|
@ -201,8 +203,13 @@
|
|||
<_ExplicitPackageReference Remove="@(_ExplicitPackageReference)" />
|
||||
</ItemGroup>
|
||||
|
||||
<Warning Condition="@(UnusedBaselinePackageReference->Count()) != 0"
|
||||
Text="Package references changed since the last release. This could be a breaking change. References removed:%0A - @(UnusedBaselinePackageReference, '%0A -')" />
|
||||
<Warning Condition="'$(IsReferenceAssemblyProject)' != 'true' AND '$(IsServicingBuild)' != 'true' AND '%(UnusedBaselinePackageReference.Identity)' != ''"
|
||||
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'"
|
||||
Code="MSB3245"
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"sdk": {
|
||||
"version": "3.0.100-preview4-010309"
|
||||
"version": "3.0.100-preview4-011136"
|
||||
},
|
||||
"msbuild-sdks": {
|
||||
"Yarn.MSBuild": "1.13.0"
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
version:3.0.0-build-20190322.1
|
||||
commithash:c38761a564c72b5bc96356ec99c89de5f281a358
|
||||
version:3.0.0-build-20190412.2
|
||||
commithash:0e543fb8761394491250585d3811bdbb62e350e8
|
||||
|
|
|
|||
|
|
@ -2,8 +2,6 @@
|
|||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netcoreapp3.0</TargetFramework>
|
||||
<!-- https://github.com/aspnet/AspNetCore/issues/6549 -->
|
||||
<BuildHelixPayload>false</BuildHelixPayload>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
@ -19,5 +17,25 @@
|
|||
<Reference Include="Microsoft.Extensions.Logging.Testing" />
|
||||
</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)' != ''" />
|
||||
</Project>
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ namespace Microsoft.AspNetCore.Components.Forms
|
|||
[Parameter] public Expression<Func<T>> For { get; private set; }
|
||||
|
||||
/// <summary>`
|
||||
/// Constructs an instance of <see cref="ValidationSummary"/>.
|
||||
/// Constructs an instance of <see cref="ValidationMessage{T}"/>.
|
||||
/// </summary>
|
||||
public ValidationMessage()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@
|
|||
<Reference Include="Microsoft.AspNetCore.Mvc.Components.Prerendering" />
|
||||
<Reference Include="Microsoft.AspNetCore.Components.Server" />
|
||||
<Reference Include="Microsoft.AspNetCore.Mvc" />
|
||||
<Reference Include="Newtonsoft.Json" />
|
||||
<ProjectReference Include="..\ComponentsApp.App\ComponentsApp.App.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
|
|
|
|||
|
|
@ -268,7 +268,7 @@ namespace Microsoft.AspNetCore.Hosting.Internal
|
|||
// _builder.ConfigureContainer<T>(ConfigureContainer);
|
||||
typeof(IHostBuilder).GetMethods().First(m => m.Name == nameof(IHostBuilder.ConfigureContainer))
|
||||
.MakeGenericMethod(containerType)
|
||||
.Invoke(_builder, new object[] { configureCallback });
|
||||
.InvokeWithoutWrappingExceptions(_builder, new object[] { configureCallback });
|
||||
}
|
||||
|
||||
// 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.
|
||||
|
||||
using System;
|
||||
using System.Globalization;
|
||||
using System.Reflection;
|
||||
using Microsoft.AspNetCore.Builder;
|
||||
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.
|
||||
|
||||
using System;
|
||||
|
|
@ -46,7 +46,7 @@ namespace Microsoft.AspNetCore.Hosting.Internal
|
|||
|
||||
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;
|
||||
}
|
||||
|
||||
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))
|
||||
{
|
||||
_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();
|
||||
|
||||
// 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>>();
|
||||
|
||||
// Warn about duplicate HostingStartupAssemblies
|
||||
|
|
@ -264,12 +268,13 @@ namespace Microsoft.AspNetCore.Hosting
|
|||
|
||||
var builder = new ConfigurationBuilder()
|
||||
.SetBasePath(_hostingEnvironment.ContentRootPath)
|
||||
.AddConfiguration(_config);
|
||||
.AddConfiguration(_config, shouldDisposeConfiguration: true);
|
||||
|
||||
_configureAppConfigurationBuilder?.Invoke(_context, builder);
|
||||
|
||||
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;
|
||||
|
||||
var listener = new DiagnosticListener("Microsoft.AspNetCore");
|
||||
|
|
|
|||
|
|
@ -11,8 +11,6 @@ using Microsoft.AspNetCore.Hosting.Internal;
|
|||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Http.Features;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Microsoft.Extensions.ObjectPool;
|
||||
using Microsoft.Extensions.Options;
|
||||
using Moq;
|
||||
using Xunit;
|
||||
|
||||
|
|
@ -304,6 +302,34 @@ namespace Microsoft.AspNetCore.Hosting.Tests
|
|||
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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -500,8 +500,36 @@ namespace Microsoft.AspNetCore.Hosting.Tests
|
|||
var app = new ApplicationBuilder(services);
|
||||
app.ApplicationServices = startup.ConfigureServicesDelegate(serviceCollection);
|
||||
|
||||
var ex = Assert.Throws<TargetInvocationException>(() => startup.ConfigureDelegate(app));
|
||||
Assert.IsAssignableFrom<InvalidOperationException>(ex.InnerException);
|
||||
Assert.Throws<InvalidOperationException>(() => startup.ConfigureDelegate(app));
|
||||
}
|
||||
|
||||
[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]
|
||||
|
|
|
|||
|
|
@ -975,6 +975,54 @@ namespace Microsoft.AspNetCore.Hosting
|
|||
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 void ConfigureServices(IServiceCollection services, int gunk) { }
|
||||
|
|
|
|||
|
|
@ -19,11 +19,9 @@ namespace Microsoft.AspNetCore.Http.Internal
|
|||
public static StringValues GetHeaderSplit(IHeaderDictionary headers, string 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))
|
||||
{
|
||||
if (!StringSegment.IsNullOrEmpty(segment.Data))
|
||||
|
|
@ -31,10 +29,12 @@ namespace Microsoft.AspNetCore.Http.Internal
|
|||
var value = DeQuote(segment.Data.Value);
|
||||
if (!string.IsNullOrEmpty(value))
|
||||
{
|
||||
yield return value;
|
||||
result = StringValues.Concat(in result, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public static StringValues GetHeaderUnmodified(IHeaderDictionary headers, string key)
|
||||
|
|
|
|||
|
|
@ -406,7 +406,7 @@ namespace Microsoft.AspNetCore.Http.Internal
|
|||
{
|
||||
public ItemsDictionary() { }
|
||||
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; } }
|
||||
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 { } }
|
||||
|
|
|
|||
|
|
@ -8,111 +8,155 @@ namespace Microsoft.AspNetCore.Http.Internal
|
|||
{
|
||||
public class ItemsDictionary : IDictionary<object, object>
|
||||
{
|
||||
private IDictionary<object, object> _items;
|
||||
|
||||
public ItemsDictionary()
|
||||
: this(new Dictionary<object, object>())
|
||||
{
|
||||
}
|
||||
{}
|
||||
|
||||
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
|
||||
object IDictionary<object, object>.this[object key]
|
||||
{
|
||||
get
|
||||
{
|
||||
object value;
|
||||
if (Items.TryGetValue(key, out value))
|
||||
if (_items != null && _items.TryGetValue(key, out var value))
|
||||
{
|
||||
return value;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
set { Items[key] = value; }
|
||||
set
|
||||
{
|
||||
EnsureDictionary();
|
||||
_items[key] = 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)
|
||||
{
|
||||
return Items.ContainsKey(key);
|
||||
}
|
||||
=> _items != null && _items.ContainsKey(key);
|
||||
|
||||
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)
|
||||
{
|
||||
return Items.Remove(key);
|
||||
}
|
||||
=> _items != null && _items.Remove(key);
|
||||
|
||||
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
|
||||
{
|
||||
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)
|
||||
{
|
||||
Items.Add(item);
|
||||
EnsureDictionary();
|
||||
_items.Add(item);
|
||||
}
|
||||
|
||||
void ICollection<KeyValuePair<object, object>>.Clear()
|
||||
{
|
||||
Items.Clear();
|
||||
}
|
||||
void ICollection<KeyValuePair<object, object>>.Clear() => _items?.Clear();
|
||||
|
||||
bool ICollection<KeyValuePair<object, object>>.Contains(KeyValuePair<object, object> item)
|
||||
{
|
||||
return Items.Contains(item);
|
||||
}
|
||||
=> _items != null && _items.Contains(item);
|
||||
|
||||
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
|
||||
{
|
||||
get { return Items.Count; }
|
||||
}
|
||||
int ICollection<KeyValuePair<object, object>>.Count => _items?.Count ?? 0;
|
||||
|
||||
bool ICollection<KeyValuePair<object, object>>.IsReadOnly
|
||||
{
|
||||
get { return Items.IsReadOnly; }
|
||||
}
|
||||
bool ICollection<KeyValuePair<object, object>>.IsReadOnly => _items?.IsReadOnly ?? false;
|
||||
|
||||
bool ICollection<KeyValuePair<object, object>>.Remove(KeyValuePair<object, object> item)
|
||||
{
|
||||
object value;
|
||||
if (Items.TryGetValue(item.Key, out value) && Equals(item.Value, value))
|
||||
if (_items == null)
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
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
|
||||
{
|
||||
[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 DfaGraphWriter(System.IServiceProvider services) { }
|
||||
public void Write(Microsoft.AspNetCore.Routing.EndpointDataSource dataSource, System.IO.TextWriter writer) { }
|
||||
}
|
||||
[System.Diagnostics.DebuggerDisplayAttribute("{DebuggerDisplayString,nq}")]
|
||||
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() { }
|
||||
}
|
||||
}
|
||||
[System.ObsoleteAttribute("This type will be marked as internal in a future release.")]
|
||||
public enum SegmentState
|
||||
{
|
||||
Beginning = 0,
|
||||
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.ObsoleteAttribute("This type will be marked as internal in a future release.")]
|
||||
public partial class UriBuildingContext
|
||||
{
|
||||
public UriBuildingContext(System.Text.Encodings.Web.UrlEncoder urlEncoder) { }
|
||||
|
|
@ -808,13 +756,21 @@ namespace Microsoft.AspNetCore.Routing.Template
|
|||
}
|
||||
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) { }
|
||||
[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 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 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 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 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
|
||||
{
|
||||
[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 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; } }
|
||||
|
|
@ -913,6 +870,7 @@ namespace Microsoft.AspNetCore.Routing.Tree
|
|||
public partial class TreeRouter : Microsoft.AspNetCore.Routing.IRouter
|
||||
{
|
||||
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 int Version { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { 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.
|
||||
// See the LICENSE file in the project root for more information.
|
||||
|
||||
|
|
@ -10,7 +10,7 @@
|
|||
using System;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace Microsoft.AspNetCore.Routing.Internal
|
||||
namespace Microsoft.AspNetCore.Routing
|
||||
{
|
||||
/// <summary>
|
||||
/// Helper type for avoiding allocations while building arrays.
|
||||
|
|
@ -166,4 +166,4 @@ namespace Microsoft.AspNetCore.Routing.Internal
|
|||
_array = next;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -22,7 +22,7 @@ namespace Microsoft.AspNetCore.Routing
|
|||
internal sealed class DefaultLinkGenerator : LinkGenerator, IDisposable
|
||||
{
|
||||
private readonly ParameterPolicyFactory _parameterPolicyFactory;
|
||||
private readonly ObjectPool<UriBuildingContext> _uriBuildingContextPool;
|
||||
private readonly TemplateBinderFactory _binderFactory;
|
||||
private readonly ILogger<DefaultLinkGenerator> _logger;
|
||||
private readonly IServiceProvider _serviceProvider;
|
||||
|
||||
|
|
@ -38,14 +38,14 @@ namespace Microsoft.AspNetCore.Routing
|
|||
|
||||
public DefaultLinkGenerator(
|
||||
ParameterPolicyFactory parameterPolicyFactory,
|
||||
TemplateBinderFactory binderFactory,
|
||||
EndpointDataSource dataSource,
|
||||
ObjectPool<UriBuildingContext> uriBuildingContextPool,
|
||||
IOptions<RouteOptions> routeOptions,
|
||||
ILogger<DefaultLinkGenerator> logger,
|
||||
IServiceProvider serviceProvider)
|
||||
{
|
||||
_parameterPolicyFactory = parameterPolicyFactory;
|
||||
_uriBuildingContextPool = uriBuildingContextPool;
|
||||
_binderFactory = binderFactory;
|
||||
_logger = logger;
|
||||
_serviceProvider = serviceProvider;
|
||||
|
||||
|
|
@ -282,40 +282,7 @@ namespace Microsoft.AspNetCore.Routing
|
|||
|
||||
private TemplateBinder CreateTemplateBinder(RouteEndpoint endpoint)
|
||||
{
|
||||
// Now create the constraints and parameter transformers from the pattern
|
||||
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);
|
||||
return _binderFactory.Create(endpoint.RoutePattern);
|
||||
}
|
||||
|
||||
// Internal for testing
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ using Microsoft.AspNetCore.Routing;
|
|||
using Microsoft.AspNetCore.Routing.Internal;
|
||||
using Microsoft.AspNetCore.Routing.Matching;
|
||||
using Microsoft.AspNetCore.Routing.Patterns;
|
||||
using Microsoft.AspNetCore.Routing.Template;
|
||||
using Microsoft.AspNetCore.Routing.Tree;
|
||||
using Microsoft.Extensions.DependencyInjection.Extensions;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
|
@ -34,6 +35,7 @@ namespace Microsoft.Extensions.DependencyInjection
|
|||
|
||||
services.TryAddTransient<IInlineConstraintResolver, DefaultInlineConstraintResolver>();
|
||||
services.TryAddTransient<ObjectPoolProvider, DefaultObjectPoolProvider>();
|
||||
#pragma warning disable CS0618 // Type or member is obsolete
|
||||
services.TryAddSingleton<ObjectPool<UriBuildingContext>>(s =>
|
||||
{
|
||||
var provider = s.GetRequiredService<ObjectPoolProvider>();
|
||||
|
|
@ -49,6 +51,7 @@ namespace Microsoft.Extensions.DependencyInjection
|
|||
var constraintResolver = s.GetRequiredService<IInlineConstraintResolver>();
|
||||
return new TreeRouteBuilder(loggerFactory, objectPool, constraintResolver);
|
||||
}));
|
||||
#pragma warning restore CS0618 // Type or member is obsolete
|
||||
|
||||
services.TryAddSingleton(typeof(RoutingMarkerService));
|
||||
|
||||
|
|
@ -88,6 +91,7 @@ namespace Microsoft.Extensions.DependencyInjection
|
|||
//
|
||||
// Misc infrastructure
|
||||
//
|
||||
services.TryAddSingleton<TemplateBinderFactory, DefaultTemplateBinderFactory>();
|
||||
services.TryAddSingleton<RoutePatternTransformer, DefaultRoutePatternTransformer>();
|
||||
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.
|
||||
// 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
|
||||
{
|
||||
// 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 "/".
|
||||
// Otherwise we could end up with the partial segment "v1" instead of the entire
|
||||
// segment "v1-v2.xml".
|
||||
[Obsolete("This type will be marked as internal in a future release.")]
|
||||
public enum SegmentState
|
||||
{
|
||||
Beginning,
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
|
|
@ -10,6 +11,7 @@ using Microsoft.AspNetCore.Http;
|
|||
|
||||
namespace Microsoft.AspNetCore.Routing.Internal
|
||||
{
|
||||
[Obsolete("This type will be marked as internal in a future release.")]
|
||||
[DebuggerDisplay("{DebuggerToString(),nq}")]
|
||||
public class UriBuildingContext
|
||||
{
|
||||
|
|
@ -321,5 +323,18 @@ namespace Microsoft.AspNetCore.Routing.Internal
|
|||
{
|
||||
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.
|
||||
|
||||
using System;
|
||||
|
|
@ -9,7 +9,7 @@ using System.Reflection;
|
|||
using System.Text;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
|
||||
namespace Microsoft.AspNetCore.Routing.Internal
|
||||
namespace Microsoft.AspNetCore.Routing
|
||||
{
|
||||
internal static class ParameterPolicyActivator
|
||||
{
|
||||
|
|
@ -8,9 +8,9 @@ using System.Diagnostics;
|
|||
using Microsoft.AspNetCore.Http;
|
||||
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 int _count;
|
||||
|
|
@ -246,14 +246,16 @@ namespace Microsoft.AspNetCore.Routing
|
|||
}
|
||||
}
|
||||
|
||||
#pragma warning disable CS0618 // Type or member is obsolete
|
||||
private void EnsureBinder(HttpContext context)
|
||||
{
|
||||
if (_binder == null)
|
||||
{
|
||||
var pool = context.RequestServices.GetRequiredService<ObjectPool<UriBuildingContext>>();
|
||||
_binder = new TemplateBinder(UrlEncoder.Default, pool, ParsedTemplate, Defaults);
|
||||
var binderFactory = context.RequestServices.GetRequiredService<TemplateBinderFactory>();
|
||||
_binder = binderFactory.Create(ParsedTemplate, Defaults);
|
||||
}
|
||||
}
|
||||
#pragma warning restore CS0618 // Type or member is obsolete
|
||||
|
||||
private void EnsureLoggers(HttpContext context)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
|
||||
namespace Microsoft.AspNetCore.Routing.Internal
|
||||
namespace Microsoft.AspNetCore.Routing
|
||||
{
|
||||
/// <summary>
|
||||
/// 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
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
{
|
||||
private readonly UrlEncoder _urlEncoder;
|
||||
#pragma warning disable CS0618 // Type or member is obsolete
|
||||
private readonly ObjectPool<UriBuildingContext> _pool;
|
||||
#pragma warning restore CS0618 // Type or member is obsolete
|
||||
|
||||
private readonly (string parameterName, IRouteConstraint constraint)[] _constraints;
|
||||
private readonly RouteValueDictionary _defaults;
|
||||
|
|
@ -40,6 +42,9 @@ namespace Microsoft.AspNetCore.Routing.Template
|
|||
/// <param name="pool">The <see cref="ObjectPool{T}"/>.</param>
|
||||
/// <param name="template">The <see cref="RouteTemplate"/> to bind values to.</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(
|
||||
UrlEncoder urlEncoder,
|
||||
ObjectPool<UriBuildingContext> pool,
|
||||
|
|
@ -60,6 +65,9 @@ namespace Microsoft.AspNetCore.Routing.Template
|
|||
/// <param name="parameterPolicies">
|
||||
/// A list of (<see cref="string"/>, <see cref="IParameterPolicy"/>) pairs to evalute when producing a URI.
|
||||
/// </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(
|
||||
UrlEncoder urlEncoder,
|
||||
ObjectPool<UriBuildingContext> pool,
|
||||
|
|
@ -110,6 +118,58 @@ namespace Microsoft.AspNetCore.Routing.Template
|
|||
_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
|
||||
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)
|
||||
{
|
||||
// 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;
|
||||
}
|
||||
#pragma warning restore CS0618 // Type or member is obsolete
|
||||
|
||||
/// <summary>
|
||||
/// 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 Microsoft.AspNetCore.Routing.DecisionTree;
|
||||
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.
|
||||
[DebuggerDisplay("{DebuggerDisplayString,nq}")]
|
||||
public class LinkGenerationDecisionTree
|
||||
internal class LinkGenerationDecisionTree
|
||||
{
|
||||
// Fallback value for cases where the ambient values weren't provided.
|
||||
//
|
||||
|
|
@ -1,11 +1,9 @@
|
|||
// 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.Tree;
|
||||
|
||||
namespace Microsoft.AspNetCore.Routing.Internal
|
||||
namespace Microsoft.AspNetCore.Routing.Tree
|
||||
{
|
||||
public readonly struct OutboundMatchResult
|
||||
internal readonly struct OutboundMatchResult
|
||||
{
|
||||
public OutboundMatchResult(OutboundMatch match, bool isFallbackMatch)
|
||||
{
|
||||
|
|
@ -3,7 +3,6 @@
|
|||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Text.Encodings.Web;
|
||||
using Microsoft.AspNetCore.Routing.Internal;
|
||||
|
|
@ -21,7 +20,9 @@ namespace Microsoft.AspNetCore.Routing.Tree
|
|||
private readonly ILogger _logger;
|
||||
private readonly ILogger _constraintLogger;
|
||||
private readonly UrlEncoder _urlEncoder;
|
||||
#pragma warning disable CS0618 // Type or member is obsolete
|
||||
private readonly ObjectPool<UriBuildingContext> _objectPool;
|
||||
#pragma warning restore CS0618 // Type or member is obsolete
|
||||
private readonly IInlineConstraintResolver _constraintResolver;
|
||||
|
||||
/// <summary>
|
||||
|
|
@ -30,9 +31,12 @@ namespace Microsoft.AspNetCore.Routing.Tree
|
|||
/// <param name="loggerFactory">The <see cref="ILoggerFactory"/>.</param>
|
||||
/// <param name="objectPool">The <see cref="ObjectPool{UrlBuildingContext}"/>.</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(
|
||||
ILoggerFactory loggerFactory,
|
||||
#pragma warning disable CS0618 // Type or member is obsolete
|
||||
ObjectPool<UriBuildingContext> objectPool,
|
||||
#pragma warning restore CS0618 // Type or member is obsolete
|
||||
IInlineConstraintResolver constraintResolver)
|
||||
{
|
||||
if (loggerFactory == null)
|
||||
|
|
@ -240,6 +244,7 @@ namespace Microsoft.AspNetCore.Routing.Tree
|
|||
tree.AddEntry(entry);
|
||||
}
|
||||
|
||||
#pragma warning disable CS0618 // Type or member is obsolete
|
||||
return new TreeRouter(
|
||||
trees.Values.OrderBy(tree => tree.Order).ToArray(),
|
||||
OutboundEntries,
|
||||
|
|
@ -248,6 +253,7 @@ namespace Microsoft.AspNetCore.Routing.Tree
|
|||
_logger,
|
||||
_constraintLogger,
|
||||
version);
|
||||
#pragma warning restore CS0618 // Type or member is obsolete
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
|||
|
|
@ -40,11 +40,14 @@ namespace Microsoft.AspNetCore.Routing.Tree
|
|||
/// <param name="constraintLogger">The <see cref="ILogger"/> instance used
|
||||
/// in <see cref="RouteConstraintMatcher"/>.</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(
|
||||
UrlMatchingTree[] trees,
|
||||
IEnumerable<OutboundRouteEntry> linkGenerationEntries,
|
||||
UrlEncoder urlEncoder,
|
||||
#pragma warning disable CS0618 // Type or member is obsolete
|
||||
ObjectPool<UriBuildingContext> objectPool,
|
||||
#pragma warning restore CS0618 // Type or member is obsolete
|
||||
ILogger routeLogger,
|
||||
ILogger constraintLogger,
|
||||
int version)
|
||||
|
|
|
|||
|
|
@ -2,11 +2,13 @@
|
|||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System.Text.Encodings.Web;
|
||||
using Microsoft.AspNetCore.Routing.Internal;
|
||||
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()
|
||||
{
|
||||
|
|
@ -19,4 +21,5 @@ namespace Microsoft.AspNetCore.Routing.Internal
|
|||
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.
|
||||
|
||||
using Microsoft.Extensions.WebEncoders.Testing;
|
||||
|
|
@ -6,6 +6,7 @@ using Xunit;
|
|||
|
||||
namespace Microsoft.AspNetCore.Routing.Internal
|
||||
{
|
||||
#pragma warning disable CS0618 // Type or member is obsolete
|
||||
public class UriBuildingContextTest
|
||||
{
|
||||
[Fact]
|
||||
|
|
@ -16,7 +17,7 @@ namespace Microsoft.AspNetCore.Routing.Internal
|
|||
var value = "a/b b1/c";
|
||||
var expected = "/UrlEncode[[a/b b1/c]]";
|
||||
var uriBuilldingContext = new UriBuildingContext(urlTestEncoder);
|
||||
|
||||
|
||||
// Act
|
||||
uriBuilldingContext.EncodeValue(value, 0, value.Length, encodeSlashes: true);
|
||||
|
||||
|
|
@ -97,4 +98,5 @@ namespace Microsoft.AspNetCore.Routing.Internal
|
|||
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.Features;
|
||||
using Microsoft.AspNetCore.Routing.Internal;
|
||||
using Microsoft.AspNetCore.Routing.Template;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Logging.Abstractions;
|
||||
using Microsoft.Extensions.ObjectPool;
|
||||
|
|
@ -82,8 +83,8 @@ namespace Microsoft.AspNetCore.Routing
|
|||
|
||||
return new DefaultLinkGenerator(
|
||||
new DefaultParameterPolicyFactory(routeOptions, serviceProvider),
|
||||
serviceProvider.GetRequiredService<TemplateBinderFactory>(),
|
||||
new CompositeEndpointDataSource(routeOptions.Value.EndpointDataSources),
|
||||
new DefaultObjectPool<UriBuildingContext>(new UriBuilderContextPooledObjectPolicy()),
|
||||
routeOptions,
|
||||
NullLogger<DefaultLinkGenerator>.Instance,
|
||||
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.
|
||||
|
||||
using System;
|
||||
|
|
@ -32,10 +32,12 @@ namespace Microsoft.AspNetCore.Routing.Matching
|
|||
|
||||
public override Matcher Build()
|
||||
{
|
||||
#pragma warning disable CS0618 // Type or member is obsolete
|
||||
var builder = new TreeRouteBuilder(
|
||||
NullLoggerFactory.Instance,
|
||||
new DefaultObjectPool<UriBuildingContext>(new UriBuilderContextPooledObjectPolicy()),
|
||||
new DefaultInlineConstraintResolver(Options.Create(new RouteOptions()), new TestServiceProvider()));
|
||||
#pragma warning restore CS0618 // Type or member is obsolete
|
||||
|
||||
var selector = new DefaultEndpointSelector();
|
||||
|
||||
|
|
|
|||
|
|
@ -658,6 +658,7 @@ namespace Microsoft.AspNetCore.Routing
|
|||
var expected = "/Home/Index?name=" + UrlEncoder.Default.Encode(nameRouteValue);
|
||||
var services = new ServiceCollection();
|
||||
services.AddSingleton<ILoggerFactory>(NullLoggerFactory.Instance);
|
||||
services.AddOptions();
|
||||
services.AddRouting();
|
||||
// This test encoder should not be used by Routing and should always use the default one.
|
||||
services.AddSingleton<UrlEncoder>(new UrlTestEncoder());
|
||||
|
|
@ -1520,6 +1521,7 @@ namespace Microsoft.AspNetCore.Routing
|
|||
{
|
||||
var services = new ServiceCollection();
|
||||
services.AddSingleton<ILoggerFactory>(NullLoggerFactory.Instance);
|
||||
services.AddOptions();
|
||||
services.AddRouting();
|
||||
|
||||
var context = new DefaultHttpContext
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ using Xunit;
|
|||
|
||||
namespace Microsoft.AspNetCore.Routing.Template.Tests
|
||||
{
|
||||
#pragma warning disable CS0618 // Type or member is obsolete
|
||||
public class TemplateBinderTests
|
||||
{
|
||||
private readonly IInlineConstraintResolver _inlineConstraintResolver = GetInlineConstraintResolver();
|
||||
|
|
@ -1480,4 +1481,5 @@ namespace Microsoft.AspNetCore.Routing.Template.Tests
|
|||
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.
|
||||
|
||||
using System.Text.Encodings.Web;
|
||||
|
|
@ -248,10 +248,12 @@ namespace Microsoft.AspNetCore.Routing.Tree
|
|||
var objectPool = objectPoolProvider.Create(objectPolicy);
|
||||
|
||||
var constraintResolver = GetInlineConstraintResolver();
|
||||
#pragma warning disable CS0618 // Type or member is obsolete
|
||||
var builder = new TreeRouteBuilder(
|
||||
NullLoggerFactory.Instance,
|
||||
objectPool,
|
||||
constraintResolver);
|
||||
#pragma warning restore CS0618 // Type or member is obsolete
|
||||
return builder;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -23,8 +23,10 @@ namespace Microsoft.AspNetCore.Routing.Tree
|
|||
{
|
||||
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(
|
||||
new UriBuilderContextPooledObjectPolicy());
|
||||
#pragma warning restore CS0618 // Type or member is obsolete
|
||||
|
||||
[Theory]
|
||||
[InlineData("template/5", "template/{parameter:int}")]
|
||||
|
|
@ -2073,6 +2075,7 @@ namespace Microsoft.AspNetCore.Routing.Tree
|
|||
return new DefaultInlineConstraintResolver(optionsMock.Object, new TestServiceProvider());
|
||||
}
|
||||
|
||||
#pragma warning disable CS0618 // Type or member is obsolete
|
||||
private static TreeRouteBuilder CreateBuilder()
|
||||
{
|
||||
var objectPoolProvider = new DefaultObjectPoolProvider();
|
||||
|
|
@ -2086,6 +2089,7 @@ namespace Microsoft.AspNetCore.Routing.Tree
|
|||
constraintResolver);
|
||||
return builder;
|
||||
}
|
||||
#pragma warning restore CS0618 // Type or member is obsolete
|
||||
|
||||
private static TreeRouter CreateTreeRouter(
|
||||
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.Infrastructure;
|
||||
using Microsoft.EntityFrameworkCore.Metadata;
|
||||
using Microsoft.EntityFrameworkCore.Metadata.Internal;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
using Microsoft.EntityFrameworkCore.Storage;
|
||||
using Microsoft.EntityFrameworkCore.Storage.Internal;
|
||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||
|
||||
namespace IdentitySample.DefaultUI.Data.Migrations
|
||||
{
|
||||
[DbContext(typeof(ApplicationDbContext))]
|
||||
[Migration("20180126174859_CreateIdentitySchema")]
|
||||
[Migration("20190411154115_CreateIdentitySchema")]
|
||||
partial class CreateIdentitySchema
|
||||
{
|
||||
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||
{
|
||||
#pragma warning disable 612, 618
|
||||
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);
|
||||
|
||||
modelBuilder.Entity("IdentitySample.DefaultUI.Data.ApplicationUser", b =>
|
||||
{
|
||||
b.Property<string>("Id")
|
||||
.ValueGeneratedOnAdd();
|
||||
b.Property<string>("Id");
|
||||
|
||||
b.Property<int>("AccessFailedCount");
|
||||
|
||||
|
|
@ -79,8 +77,7 @@ namespace IdentitySample.DefaultUI.Data.Migrations
|
|||
|
||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b =>
|
||||
{
|
||||
b.Property<string>("Id")
|
||||
.ValueGeneratedOnAdd();
|
||||
b.Property<string>("Id");
|
||||
|
||||
b.Property<string>("ConcurrencyStamp")
|
||||
.IsConcurrencyToken();
|
||||
|
|
@ -104,7 +101,8 @@ namespace IdentitySample.DefaultUI.Data.Migrations
|
|||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
|
||||
{
|
||||
b.Property<int>("Id")
|
||||
.ValueGeneratedOnAdd();
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||
|
||||
b.Property<string>("ClaimType");
|
||||
|
||||
|
|
@ -123,7 +121,8 @@ namespace IdentitySample.DefaultUI.Data.Migrations
|
|||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
|
||||
{
|
||||
b.Property<int>("Id")
|
||||
.ValueGeneratedOnAdd();
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||
|
||||
b.Property<string>("ClaimType");
|
||||
|
||||
|
|
@ -191,47 +190,53 @@ namespace IdentitySample.DefaultUI.Data.Migrations
|
|||
|
||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
|
||||
{
|
||||
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole")
|
||||
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
|
||||
.WithMany()
|
||||
.HasForeignKey("RoleId")
|
||||
.OnDelete(DeleteBehavior.Cascade);
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
|
||||
{
|
||||
b.HasOne("IdentitySample.DefaultUI.Data.ApplicationUser")
|
||||
b.HasOne("IdentitySample.DefaultUI.Data.ApplicationUser", null)
|
||||
.WithMany()
|
||||
.HasForeignKey("UserId")
|
||||
.OnDelete(DeleteBehavior.Cascade);
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
|
||||
{
|
||||
b.HasOne("IdentitySample.DefaultUI.Data.ApplicationUser")
|
||||
b.HasOne("IdentitySample.DefaultUI.Data.ApplicationUser", null)
|
||||
.WithMany()
|
||||
.HasForeignKey("UserId")
|
||||
.OnDelete(DeleteBehavior.Cascade);
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
|
||||
{
|
||||
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole")
|
||||
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
|
||||
.WithMany()
|
||||
.HasForeignKey("RoleId")
|
||||
.OnDelete(DeleteBehavior.Cascade);
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
|
||||
b.HasOne("IdentitySample.DefaultUI.Data.ApplicationUser")
|
||||
b.HasOne("IdentitySample.DefaultUI.Data.ApplicationUser", null)
|
||||
.WithMany()
|
||||
.HasForeignKey("UserId")
|
||||
.OnDelete(DeleteBehavior.Cascade);
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
|
||||
{
|
||||
b.HasOne("IdentitySample.DefaultUI.Data.ApplicationUser")
|
||||
b.HasOne("IdentitySample.DefaultUI.Data.ApplicationUser", null)
|
||||
.WithMany()
|
||||
.HasForeignKey("UserId")
|
||||
.OnDelete(DeleteBehavior.Cascade);
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
});
|
||||
#pragma warning restore 612, 618
|
||||
}
|
||||
|
|
@ -1,5 +1,4 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Microsoft.EntityFrameworkCore.Metadata;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
|
|
@ -4,10 +4,7 @@ using IdentitySample.DefaultUI.Data;
|
|||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||
using Microsoft.EntityFrameworkCore.Metadata;
|
||||
using Microsoft.EntityFrameworkCore.Metadata.Internal;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
using Microsoft.EntityFrameworkCore.Storage;
|
||||
using Microsoft.EntityFrameworkCore.Storage.Internal;
|
||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||
|
||||
namespace IdentitySample.DefaultUI.Data.Migrations
|
||||
{
|
||||
|
|
@ -18,13 +15,13 @@ namespace IdentitySample.DefaultUI.Data.Migrations
|
|||
{
|
||||
#pragma warning disable 612, 618
|
||||
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);
|
||||
|
||||
modelBuilder.Entity("IdentitySample.DefaultUI.Data.ApplicationUser", b =>
|
||||
{
|
||||
b.Property<string>("Id")
|
||||
.ValueGeneratedOnAdd();
|
||||
b.Property<string>("Id");
|
||||
|
||||
b.Property<int>("AccessFailedCount");
|
||||
|
||||
|
|
@ -78,8 +75,7 @@ namespace IdentitySample.DefaultUI.Data.Migrations
|
|||
|
||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b =>
|
||||
{
|
||||
b.Property<string>("Id")
|
||||
.ValueGeneratedOnAdd();
|
||||
b.Property<string>("Id");
|
||||
|
||||
b.Property<string>("ConcurrencyStamp")
|
||||
.IsConcurrencyToken();
|
||||
|
|
@ -103,7 +99,8 @@ namespace IdentitySample.DefaultUI.Data.Migrations
|
|||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
|
||||
{
|
||||
b.Property<int>("Id")
|
||||
.ValueGeneratedOnAdd();
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||
|
||||
b.Property<string>("ClaimType");
|
||||
|
||||
|
|
@ -122,7 +119,8 @@ namespace IdentitySample.DefaultUI.Data.Migrations
|
|||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
|
||||
{
|
||||
b.Property<int>("Id")
|
||||
.ValueGeneratedOnAdd();
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||
|
||||
b.Property<string>("ClaimType");
|
||||
|
||||
|
|
@ -190,47 +188,53 @@ namespace IdentitySample.DefaultUI.Data.Migrations
|
|||
|
||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
|
||||
{
|
||||
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole")
|
||||
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
|
||||
.WithMany()
|
||||
.HasForeignKey("RoleId")
|
||||
.OnDelete(DeleteBehavior.Cascade);
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
|
||||
{
|
||||
b.HasOne("IdentitySample.DefaultUI.Data.ApplicationUser")
|
||||
b.HasOne("IdentitySample.DefaultUI.Data.ApplicationUser", null)
|
||||
.WithMany()
|
||||
.HasForeignKey("UserId")
|
||||
.OnDelete(DeleteBehavior.Cascade);
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
|
||||
{
|
||||
b.HasOne("IdentitySample.DefaultUI.Data.ApplicationUser")
|
||||
b.HasOne("IdentitySample.DefaultUI.Data.ApplicationUser", null)
|
||||
.WithMany()
|
||||
.HasForeignKey("UserId")
|
||||
.OnDelete(DeleteBehavior.Cascade);
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
|
||||
{
|
||||
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole")
|
||||
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
|
||||
.WithMany()
|
||||
.HasForeignKey("RoleId")
|
||||
.OnDelete(DeleteBehavior.Cascade);
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
|
||||
b.HasOne("IdentitySample.DefaultUI.Data.ApplicationUser")
|
||||
b.HasOne("IdentitySample.DefaultUI.Data.ApplicationUser", null)
|
||||
.WithMany()
|
||||
.HasForeignKey("UserId")
|
||||
.OnDelete(DeleteBehavior.Cascade);
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
|
||||
{
|
||||
b.HasOne("IdentitySample.DefaultUI.Data.ApplicationUser")
|
||||
b.HasOne("IdentitySample.DefaultUI.Data.ApplicationUser", null)
|
||||
.WithMany()
|
||||
.HasForeignKey("UserId")
|
||||
.OnDelete(DeleteBehavior.Cascade);
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
});
|
||||
#pragma warning restore 612, 618
|
||||
}
|
||||
|
|
|
|||
|
|
@ -31,4 +31,8 @@
|
|||
<Reference Include="Microsoft.Extensions.Logging.Debug" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Folder Include="Properties\" />
|
||||
</ItemGroup>
|
||||
|
||||
</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>
|
||||
<DisableGuidGeneration>true</DisableGuidGeneration>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<TempPlatform Condition="'$(Platform)' == 'x64'">x64</TempPlatform>
|
||||
<TempPlatform Condition="'$(Platform)' == 'x86'">Win32</TempPlatform>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
@ -51,6 +53,15 @@
|
|||
</ProjectReference>
|
||||
</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="..\build\settings.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]""/>
|
||||
<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"
|
||||
Property="CA_ADD_CONFIGSECTION"
|
||||
Value="[IISEXPRESS_APPHOST_CONFIG];[IISEXPRESS_APPHOST_CONFIG_TMP]"/>
|
||||
<CustomAction Id="CA_ADD_CONFIGSECTION" Script="jscript" Execute="deferred" Return="check" Impersonate="no">
|
||||
<![CDATA[
|
||||
var caData = Session.Property("CustomActionData");
|
||||
configfiles = caData.split(';');
|
||||
for (var i = 0; i < configfiles.length; i++) {
|
||||
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>
|
||||
Value="[IISEXPRESS_APPHOST_CONFIG]"/>
|
||||
<CustomAction BinaryKey="IISCustomActionDll" Id="CA_ADD_CONFIGSECTION" DllEntry="AddConfigSection" Execute="deferred" Return="check" Impersonate="no"/>
|
||||
|
||||
<CustomAction Id="CA_ADD_CONFIGSECTION_PROPERTY_TMP"
|
||||
Property="CA_ADD_CONFIGSECTION_TMP"
|
||||
Value="[IISEXPRESS_APPHOST_CONFIG_TMP]"/>
|
||||
<CustomAction BinaryKey="IISCustomActionDll" Id="CA_ADD_CONFIGSECTION_TMP" DllEntry="AddConfigSection" Execute="deferred" Return="check" Impersonate="no"/>
|
||||
|
||||
<!-- CA to remove config section to applicationhost.config -->
|
||||
<CustomAction Id="CA_REMOVE_CONFIGSECTION_PROPERTY"
|
||||
Property="CA_REMOVE_CONFIGSECTION"
|
||||
Value="[IISEXPRESS_APPHOST_CONFIG];[IISEXPRESS_APPHOST_CONFIG_TMP]"/>
|
||||
<CustomAction Id="CA_REMOVE_CONFIGSECTION" Script="jscript" Execute="deferred" Return="check" Impersonate="no">
|
||||
<![CDATA[
|
||||
var caData = Session.Property("CustomActionData");
|
||||
configfiles = caData.split(';');
|
||||
for (var i = 0; i < configfiles.length; i++) {
|
||||
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) {
|
||||
websvrNode.removeChild(ancmNode);
|
||||
xmlDoc.save(configfile );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]]>
|
||||
</CustomAction>
|
||||
Property="CA_REMOVE_CONFIGSECTION"
|
||||
Value="[IISEXPRESS_APPHOST_CONFIG]"/>
|
||||
<CustomAction Id="CA_REMOVE_CONFIGSECTION" BinaryKey="IISCustomActionDll" DllEntry="RemoveConfigSection" Execute="deferred" Return="check" Impersonate="no" />
|
||||
|
||||
<CustomAction Id="CA_REMOVE_CONFIGSECTION_PROPERTY_TMP"
|
||||
Property="CA_REMOVE_CONFIGSECTION_TMP"
|
||||
Value="[IISEXPRESS_APPHOST_CONFIG_TMP]"/>
|
||||
<CustomAction Id="CA_REMOVE_CONFIGSECTION_TMP" BinaryKey="IISCustomActionDll" DllEntry="RemoveConfigSection" Execute="deferred" Return="check" Impersonate="no" />
|
||||
|
||||
<?if $(var.Platform) = "x64" ?>
|
||||
<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]""/>
|
||||
<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"
|
||||
Property="CA_ADD_CONFIGSECTION32"
|
||||
Value="[IISEXPRESS_APPHOST_CONFIG32];[IISEXPRESS_APPHOST_CONFIG_TMP32]"/>
|
||||
<CustomAction Id="CA_ADD_CONFIGSECTION32" Script="jscript" Execute="deferred" Return="check" Impersonate="no">
|
||||
<!-- Warning LGHT1076: ICE03: String overflow. Orca.exe inspection shows the custom action value is populated correctly -->
|
||||
<![CDATA[
|
||||
var caData = Session.Property("CustomActionData");
|
||||
configfiles = caData.split(';');
|
||||
for (var i = 0; i < configfiles.length; i++) {
|
||||
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>
|
||||
Property="CA_ADD_CONFIGSECTION32"
|
||||
Value="[IISEXPRESS_APPHOST_CONFIG32]"/>
|
||||
<CustomAction BinaryKey="IISCustomActionDll" Id="CA_ADD_CONFIGSECTION32" DllEntry="AddConfigSection" Execute="deferred" Return="check" Impersonate="no"/>
|
||||
|
||||
<CustomAction Id="CA_ADD_CONFIGSECTION32_PROPERTY_TMP"
|
||||
Property="CA_ADD_CONFIGSECTION32_TMP"
|
||||
Value="[IISEXPRESS_APPHOST_CONFIG_TMP32]"/>
|
||||
<CustomAction BinaryKey="IISCustomActionDll" Id="CA_ADD_CONFIGSECTION32_TMP" DllEntry="AddConfigSection" Execute="deferred" Return="check" Impersonate="no"/>
|
||||
|
||||
<!-- CA to remove config section to applicationhost.config -->
|
||||
<CustomAction Id="CA_REMOVE_CONFIGSECTION32_PROPERTY"
|
||||
Property="CA_REMOVE_CONFIGSECTION32"
|
||||
Value="[IISEXPRESS_APPHOST_CONFIG32];[IISEXPRESS_APPHOST_CONFIG_TMP32]"/>
|
||||
<CustomAction Id="CA_REMOVE_CONFIGSECTION32" Script="jscript" Execute="deferred" Return="check" Impersonate="no">
|
||||
<![CDATA[
|
||||
var caData = Session.Property("CustomActionData");
|
||||
configfiles = caData.split(';');
|
||||
for (var i = 0; i < configfiles.length; i++) {
|
||||
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) {
|
||||
websvrNode.removeChild(ancmNode);
|
||||
xmlDoc.save(configfile);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]]>
|
||||
</CustomAction>
|
||||
Value="[IISEXPRESS_APPHOST_CONFIG32]"/>
|
||||
<CustomAction Id="CA_REMOVE_CONFIGSECTION32" BinaryKey="IISCustomActionDll" DllEntry="RemoveConfigSection" Execute="deferred" Return="check" Impersonate="no" />
|
||||
|
||||
<CustomAction Id="CA_REMOVE_CONFIGSECTION32_PROPERTY_TMP"
|
||||
Property="CA_REMOVE_CONFIGSECTION32_TMP"
|
||||
Value="[IISEXPRESS_APPHOST_CONFIG_TMP32]"/>
|
||||
<CustomAction Id="CA_REMOVE_CONFIGSECTION32_TMP" BinaryKey="IISCustomActionDll" DllEntry="RemoveConfigSection" Execute="deferred" Return="check" Impersonate="no" />
|
||||
<?endif?>
|
||||
|
||||
<InstallExecuteSequence>
|
||||
|
|
@ -600,7 +516,9 @@
|
|||
<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" 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_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>
|
||||
|
|
@ -610,6 +528,8 @@
|
|||
<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" 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" 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>
|
||||
|
|
@ -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_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_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_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>
|
||||
|
|
@ -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_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_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" 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>
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@
|
|||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
#include <precomp.h>
|
||||
#include <MsiQuery.h>
|
||||
#include <msxml6.h>
|
||||
|
||||
DECLARE_DEBUG_PRINT_OBJECT( "proxyCA.dll" );
|
||||
|
||||
|
|
@ -40,6 +42,137 @@ struct COMPRESSION_MIME_TYPE
|
|||
COMPRESSION_MIME_TYPE gMimeTypes[] =
|
||||
{ { 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
|
||||
WINAPI
|
||||
RegisterANCMCompressionCA(
|
||||
|
|
|
|||
|
|
@ -18,6 +18,8 @@ EXPORTS
|
|||
ExecuteCleanUpWindowsHotfixCA
|
||||
ScheduleRebootIfRequiredCA
|
||||
|
||||
AddConfigSection
|
||||
RemoveConfigSection
|
||||
RegisterANCMCompressionCA
|
||||
|
||||
CheckForServicesRunningCA
|
||||
|
|
|
|||
|
|
@ -48,6 +48,9 @@
|
|||
<PropertyGroup Condition="'$(Configuration)'=='Release'">
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Label="Configuration">
|
||||
<VCToolsVersion />
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<PropertyGroup>
|
||||
<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>
|
||||
<TargetName>iiscommon</TargetName>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Label="Configuration">
|
||||
<VCToolsVersion />
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup>
|
||||
<ClCompile>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
|
|
|
|||
|
|
@ -77,6 +77,9 @@
|
|||
<PlatformToolset>v141</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<PropertyGroup Label="Configuration">
|
||||
<VCToolsVersion />
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<AdditionalIncludeDirectories>$(IIS-Common)version;$(IIS-Common)Include;$(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PrecompiledHeader>Create</PrecompiledHeader>
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -53,11 +53,31 @@ namespace Microsoft.AspNetCore.HeaderPropagation
|
|||
{
|
||||
var outputName = string.IsNullOrEmpty(entry?.OutboundHeaderName) ? headerName : entry.OutboundHeaderName;
|
||||
|
||||
if (!request.Headers.Contains(outputName) &&
|
||||
_values.Headers.TryGetValue(headerName, out var values) &&
|
||||
!StringValues.IsNullOrEmpty(values))
|
||||
var hasContent = request.Content != null;
|
||||
|
||||
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"));
|
||||
}
|
||||
|
||||
[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]
|
||||
public async Task HeaderInState_NoOutputName_UseInputName()
|
||||
{
|
||||
|
|
@ -168,11 +225,13 @@ namespace Microsoft.AspNetCore.HeaderPropagation.Tests
|
|||
private class SimpleHandler : DelegatingHandler
|
||||
{
|
||||
public HttpHeaders Headers { get; private set; }
|
||||
public HttpContent Content { get; private set; }
|
||||
|
||||
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request,
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
Headers = request.Headers;
|
||||
Content = request.Content;
|
||||
return Task.FromResult(new HttpResponseMessage());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,12 +21,15 @@
|
|||
|
||||
<Target Name="YarnInstall">
|
||||
<Message Text="Running yarn install on $(MSBuildProjectFile)" Importance="High" />
|
||||
<Yarn Command="install" ContinueOnError="true">
|
||||
<Output TaskParameter="ExitCode" PropertyName="_YarnExitCode"/>
|
||||
</Yarn>
|
||||
<Yarn Command="install" Condition="'$(_YarnExitCode)' != '0'">
|
||||
<Output TaskParameter="ExitCode" PropertyName="_YarnExitCode"/>
|
||||
</Yarn>
|
||||
<Yarn Command="install" />
|
||||
</Target>
|
||||
|
||||
<Target Name="_IsCustomRestoreTargetSupported" Returns="@(CustomRestoreTargets)" Condition="'$(BuildNodeJs)' == 'true'">
|
||||
<ItemGroup>
|
||||
<CustomRestoreTargets Include="$(MSBuildProjectFullPath)">
|
||||
<Targets>YarnInstall</Targets>
|
||||
</CustomRestoreTargets>
|
||||
</ItemGroup>
|
||||
</Target>
|
||||
|
||||
<Target Name="PrepublishScript" DependsOnTargets="YarnInstall" BeforeTargets="PrepareForPublish" Condition=" '$(IsCrossTargetingBuild)' != 'true' ">
|
||||
|
|
|
|||
|
|
@ -25,12 +25,15 @@
|
|||
|
||||
<Target Name="YarnInstall">
|
||||
<Message Text="Running yarn install on $(MSBuildProjectFile)" Importance="High" />
|
||||
<Yarn Command="install" ContinueOnError="true">
|
||||
<Output TaskParameter="ExitCode" PropertyName="_YarnExitCode"/>
|
||||
</Yarn>
|
||||
<Yarn Command="install" Condition="'$(_YarnExitCode)' != '0'">
|
||||
<Output TaskParameter="ExitCode" PropertyName="_YarnExitCode"/>
|
||||
</Yarn>
|
||||
<Yarn Command="install" />
|
||||
</Target>
|
||||
|
||||
<Target Name="_IsCustomRestoreTargetSupported" Returns="@(CustomRestoreTargets)" Condition="'$(BuildNodeJs)' == 'true'">
|
||||
<ItemGroup>
|
||||
<CustomRestoreTargets Include="$(MSBuildProjectFullPath)">
|
||||
<Targets>YarnInstall</Targets>
|
||||
</CustomRestoreTargets>
|
||||
</ItemGroup>
|
||||
</Target>
|
||||
|
||||
<Target Name="PrepublishScript" DependsOnTargets="YarnInstall" BeforeTargets="PrepareForPublish" Condition=" '$(IsCrossTargetingBuild)' != 'true' ">
|
||||
|
|
|
|||
|
|
@ -57,46 +57,133 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
|
|||
_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
|
||||
{
|
||||
_actionContextAccessor.ActionContext = _actionContext;
|
||||
task = InvokeFilterPipelineAsync();
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
return Awaited(this, Task.FromException(exception), scope);
|
||||
}
|
||||
|
||||
_diagnosticListener.BeforeAction(
|
||||
_actionContext.ActionDescriptor,
|
||||
_actionContext.HttpContext,
|
||||
_actionContext.RouteData);
|
||||
Debug.Assert(task != null);
|
||||
if (!task.IsCompletedSuccessfully)
|
||||
{
|
||||
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
|
||||
{
|
||||
await InvokeFilterPipelineAsync();
|
||||
await task;
|
||||
}
|
||||
finally
|
||||
{
|
||||
ReleaseResources();
|
||||
_logger.ExecutedAction(_actionContext.ActionDescriptor, stopwatch.GetElapsedTime());
|
||||
invoker.ReleaseResources();
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
scope.Dispose();
|
||||
}
|
||||
}
|
||||
finally
|
||||
|
||||
static async Task Logged(ResourceInvoker invoker)
|
||||
{
|
||||
_diagnosticListener.AfterAction(
|
||||
_actionContext.ActionDescriptor,
|
||||
_actionContext.HttpContext,
|
||||
_actionContext.RouteData);
|
||||
var actionContext = invoker._actionContext;
|
||||
invoker._actionContextAccessor.ActionContext = actionContext;
|
||||
|
||||
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>
|
||||
protected abstract void ReleaseResources();
|
||||
|
||||
private async Task InvokeFilterPipelineAsync()
|
||||
private Task InvokeFilterPipelineAsync()
|
||||
{
|
||||
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.
|
||||
var isCompleted = false;
|
||||
|
||||
while (!isCompleted)
|
||||
try
|
||||
{
|
||||
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 virtual async Task InvokeResultAsync(IActionResult result)
|
||||
protected virtual Task InvokeResultAsync(IActionResult result)
|
||||
{
|
||||
var actionContext = _actionContext;
|
||||
|
||||
_diagnosticListener.BeforeActionResult(actionContext, result);
|
||||
_logger.BeforeExecutingActionResult(result);
|
||||
|
||||
try
|
||||
if (_diagnosticListener.IsEnabled() || _logger.IsEnabled(LogLevel.Trace))
|
||||
{
|
||||
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);
|
||||
_logger.AfterExecutingActionResult(result);
|
||||
var actionContext = invoker._actionContext;
|
||||
|
||||
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);
|
||||
|
||||
var task = filter.OnAuthorizationAsync(authorizationContext);
|
||||
if (task.Status != TaskStatus.RanToCompletion)
|
||||
if (!task.IsCompletedSuccessfully)
|
||||
{
|
||||
next = State.AuthorizationAsyncEnd;
|
||||
return task;
|
||||
|
|
@ -344,7 +465,7 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
|
|||
filter);
|
||||
|
||||
var task = filter.OnResourceExecutionAsync(resourceExecutingContext, InvokeNextResourceFilterAwaitedAsync);
|
||||
if (task.Status != TaskStatus.RanToCompletion)
|
||||
if (!task.IsCompletedSuccessfully)
|
||||
{
|
||||
next = State.ResourceAsyncEnd;
|
||||
return task;
|
||||
|
|
@ -418,7 +539,7 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
|
|||
}
|
||||
|
||||
var task = InvokeNextResourceFilter();
|
||||
if (task.Status != TaskStatus.RanToCompletion)
|
||||
if (!task.IsCompletedSuccessfully)
|
||||
{
|
||||
next = State.ResourceSyncEnd;
|
||||
return task;
|
||||
|
|
@ -463,7 +584,7 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
|
|||
|
||||
_result = _resourceExecutingContext.Result;
|
||||
var task = InvokeAlwaysRunResultFilters();
|
||||
if (task.Status != TaskStatus.RanToCompletion)
|
||||
if (!task.IsCompletedSuccessfully)
|
||||
{
|
||||
next = State.ResourceEnd;
|
||||
return task;
|
||||
|
|
@ -512,7 +633,7 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
|
|||
case State.ExceptionAsyncBegin:
|
||||
{
|
||||
var task = InvokeNextExceptionFilterAsync();
|
||||
if (task.Status != TaskStatus.RanToCompletion)
|
||||
if (!task.IsCompletedSuccessfully)
|
||||
{
|
||||
next = State.ExceptionAsyncResume;
|
||||
return task;
|
||||
|
|
@ -539,7 +660,7 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
|
|||
filter);
|
||||
|
||||
var task = filter.OnExceptionAsync(exceptionContext);
|
||||
if (task.Status != TaskStatus.RanToCompletion)
|
||||
if (!task.IsCompletedSuccessfully)
|
||||
{
|
||||
next = State.ExceptionAsyncEnd;
|
||||
return task;
|
||||
|
|
@ -579,7 +700,7 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
|
|||
case State.ExceptionSyncBegin:
|
||||
{
|
||||
var task = InvokeNextExceptionFilterAsync();
|
||||
if (task.Status != TaskStatus.RanToCompletion)
|
||||
if (!task.IsCompletedSuccessfully)
|
||||
{
|
||||
next = State.ExceptionSyncEnd;
|
||||
return task;
|
||||
|
|
@ -650,7 +771,7 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
|
|||
_result = _exceptionContext.Result;
|
||||
|
||||
var task = InvokeAlwaysRunResultFilters();
|
||||
if (task.Status != TaskStatus.RanToCompletion)
|
||||
if (!task.IsCompletedSuccessfully)
|
||||
{
|
||||
next = State.ResourceInsideEnd;
|
||||
return task;
|
||||
|
|
@ -683,7 +804,7 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
|
|||
}
|
||||
|
||||
var task = InvokeResultFilters();
|
||||
if (task.Status != TaskStatus.RanToCompletion)
|
||||
if (!task.IsCompletedSuccessfully)
|
||||
{
|
||||
next = State.ResourceInsideEnd;
|
||||
return task;
|
||||
|
|
@ -694,7 +815,7 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
|
|||
case State.ActionBegin:
|
||||
{
|
||||
var task = InvokeInnerFilterAsync();
|
||||
if (task.Status != TaskStatus.RanToCompletion)
|
||||
if (!task.IsCompletedSuccessfully)
|
||||
{
|
||||
next = State.ActionEnd;
|
||||
return task;
|
||||
|
|
@ -715,7 +836,7 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
|
|||
|
||||
Debug.Assert(scope == Scope.Invoker || scope == Scope.Resource);
|
||||
var task = InvokeResultFilters();
|
||||
if (task.Status != TaskStatus.RanToCompletion)
|
||||
if (!task.IsCompletedSuccessfully)
|
||||
{
|
||||
next = State.ResourceInsideEnd;
|
||||
return task;
|
||||
|
|
@ -763,13 +884,35 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
|
|||
}
|
||||
}
|
||||
|
||||
private async Task<ResourceExecutedContext> InvokeNextResourceFilterAwaitedAsync()
|
||||
private Task<ResourceExecutedContext> InvokeNextResourceFilterAwaitedAsync()
|
||||
{
|
||||
Debug.Assert(_resourceExecutingContext != null);
|
||||
|
||||
if (_resourceExecutingContext.Result != null)
|
||||
{
|
||||
// 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(
|
||||
typeof(IAsyncResourceFilter).Name,
|
||||
nameof(ResourceExecutingContext.Result),
|
||||
|
|
@ -777,14 +920,10 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
|
|||
typeof(ResourceExecutionDelegate).Name);
|
||||
throw new InvalidOperationException(message);
|
||||
}
|
||||
|
||||
await InvokeNextResourceFilter();
|
||||
|
||||
Debug.Assert(_resourceExecutedContext != null);
|
||||
return _resourceExecutedContext;
|
||||
#pragma warning restore CS1998
|
||||
}
|
||||
|
||||
private async Task InvokeNextResourceFilter()
|
||||
private Task InvokeNextResourceFilter()
|
||||
{
|
||||
try
|
||||
{
|
||||
|
|
@ -792,9 +931,14 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
|
|||
var next = State.ResourceNext;
|
||||
var state = (object)null;
|
||||
var isCompleted = false;
|
||||
|
||||
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)
|
||||
|
|
@ -806,9 +950,32 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
|
|||
}
|
||||
|
||||
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
|
||||
{
|
||||
|
|
@ -816,43 +983,119 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
|
|||
var state = (object)null;
|
||||
var scope = Scope.Exception;
|
||||
var isCompleted = false;
|
||||
|
||||
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;
|
||||
var scope = Scope.Invoker;
|
||||
var state = (object)null;
|
||||
var isCompleted = false;
|
||||
|
||||
while (!isCompleted)
|
||||
try
|
||||
{
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
private async Task InvokeResultFilters()
|
||||
{
|
||||
var next = State.ResultBegin;
|
||||
var scope = Scope.Invoker;
|
||||
var state = (object)null;
|
||||
var isCompleted = false;
|
||||
|
||||
while (!isCompleted)
|
||||
catch (Exception ex)
|
||||
{
|
||||
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);
|
||||
|
||||
var task = filter.OnResultExecutionAsync(resultExecutingContext, InvokeNextResultFilterAwaitedAsync<TFilter, TFilterAsync>);
|
||||
if (task.Status != TaskStatus.RanToCompletion)
|
||||
if (!task.IsCompletedSuccessfully)
|
||||
{
|
||||
next = State.ResultAsyncEnd;
|
||||
return task;
|
||||
|
|
@ -998,7 +1241,7 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
|
|||
}
|
||||
|
||||
var task = InvokeNextResultFilterAsync<TFilter, TFilterAsync>();
|
||||
if (task.Status != TaskStatus.RanToCompletion)
|
||||
if (!task.IsCompletedSuccessfully)
|
||||
{
|
||||
next = State.ResultSyncEnd;
|
||||
return task;
|
||||
|
|
@ -1048,7 +1291,7 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
|
|||
}
|
||||
|
||||
var task = InvokeResultAsync(_result);
|
||||
if (task.Status != TaskStatus.RanToCompletion)
|
||||
if (!task.IsCompletedSuccessfully)
|
||||
{
|
||||
next = State.ResultEnd;
|
||||
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 TFilterAsync : class, IAsyncResultFilter
|
||||
{
|
||||
|
|
@ -1093,7 +1336,11 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
|
|||
var isCompleted = false;
|
||||
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)
|
||||
|
|
@ -1105,9 +1352,33 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
|
|||
}
|
||||
|
||||
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 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().
|
||||
// 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(
|
||||
typeof(IAsyncResultFilter).Name,
|
||||
nameof(ResultExecutingContext.Cancel),
|
||||
|
|
@ -1124,13 +1417,10 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
|
|||
|
||||
throw new InvalidOperationException(message);
|
||||
}
|
||||
|
||||
await InvokeNextResultFilterAsync<TFilter, TFilterAsync>();
|
||||
|
||||
Debug.Assert(_resultExecutedContext != null);
|
||||
return _resultExecutedContext;
|
||||
#pragma warning restore CS1998
|
||||
}
|
||||
|
||||
|
||||
private static void Rethrow(ResourceExecutedContext context)
|
||||
{
|
||||
if (context == null)
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure
|
|||
private readonly IModelMetadataProvider _modelMetadataProvider;
|
||||
private readonly ITempDataDictionaryFactory _tempDataFactory;
|
||||
private readonly MvcOptions _mvcOptions;
|
||||
private readonly HtmlHelperOptions _htmlHelperOptions;
|
||||
private readonly MvcViewOptions _mvcViewOptions;
|
||||
private readonly IPageHandlerMethodSelector _selector;
|
||||
private readonly DiagnosticListener _diagnosticListener;
|
||||
private readonly ILogger<PageActionInvoker> _logger;
|
||||
|
|
@ -52,7 +52,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure
|
|||
IModelBinderFactory modelBinderFactory,
|
||||
ITempDataDictionaryFactory tempDataFactory,
|
||||
IOptions<MvcOptions> mvcOptions,
|
||||
IOptions<HtmlHelperOptions> htmlHelperOptions,
|
||||
IOptions<MvcViewOptions> mvcViewOptions,
|
||||
IPageHandlerMethodSelector selector,
|
||||
DiagnosticListener diagnosticListener,
|
||||
ILoggerFactory loggerFactory,
|
||||
|
|
@ -69,7 +69,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure
|
|||
modelBinderFactory,
|
||||
tempDataFactory,
|
||||
mvcOptions,
|
||||
htmlHelperOptions,
|
||||
mvcViewOptions,
|
||||
selector,
|
||||
diagnosticListener,
|
||||
loggerFactory,
|
||||
|
|
@ -90,7 +90,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure
|
|||
IModelBinderFactory modelBinderFactory,
|
||||
ITempDataDictionaryFactory tempDataFactory,
|
||||
IOptions<MvcOptions> mvcOptions,
|
||||
IOptions<HtmlHelperOptions> htmlHelperOptions,
|
||||
IOptions<MvcViewOptions> mvcViewOptions,
|
||||
IPageHandlerMethodSelector selector,
|
||||
DiagnosticListener diagnosticListener,
|
||||
ILoggerFactory loggerFactory,
|
||||
|
|
@ -109,7 +109,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure
|
|||
_modelMetadataProvider = modelMetadataProvider;
|
||||
_tempDataFactory = tempDataFactory;
|
||||
_mvcOptions = mvcOptions.Value;
|
||||
_htmlHelperOptions = htmlHelperOptions.Value;
|
||||
_mvcViewOptions = mvcViewOptions.Value;
|
||||
_selector = selector;
|
||||
_diagnosticListener = diagnosticListener;
|
||||
_logger = loggerFactory.CreateLogger<PageActionInvoker>();
|
||||
|
|
@ -214,7 +214,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure
|
|||
cacheEntry,
|
||||
_parameterBinder,
|
||||
_tempDataFactory,
|
||||
_htmlHelperOptions);
|
||||
_mvcViewOptions.HtmlHelperOptions);
|
||||
}
|
||||
|
||||
private PageActionInvokerCacheEntry CreateCacheEntry(
|
||||
|
|
|
|||
|
|
@ -532,7 +532,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure
|
|||
modelBinderFactory,
|
||||
tempDataFactory.Object,
|
||||
Options.Create(mvcOptions),
|
||||
Options.Create(new HtmlHelperOptions()),
|
||||
Options.Create(new MvcViewOptions()),
|
||||
Mock.Of<IPageHandlerMethodSelector>(),
|
||||
new DiagnosticListener("Microsoft.AspNetCore"),
|
||||
NullLoggerFactory.Instance,
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Filters
|
|||
/// </summary>
|
||||
internal class SaveTempDataFilter : IResourceFilter, IResultFilter
|
||||
{
|
||||
private static readonly Func<object, Task> OnStartingCallback = (state) => OnStarting((HttpContext)state);
|
||||
// Internal for unit testing
|
||||
internal static readonly object SaveTempDataFilterContextKey = new object();
|
||||
|
||||
|
|
@ -43,38 +44,39 @@ namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Filters
|
|||
|
||||
if (!context.HttpContext.Response.HasStarted)
|
||||
{
|
||||
context.HttpContext.Response.OnStarting((state) =>
|
||||
{
|
||||
var httpContext = (HttpContext)state;
|
||||
|
||||
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);
|
||||
context.HttpContext.Response.OnStarting(
|
||||
callback: OnStartingCallback,
|
||||
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 />
|
||||
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;
|
||||
if (httpContext.Items.TryGetValue(SaveTempDataFilterContextKey, out var value))
|
||||
|
|
|
|||
|
|
@ -146,22 +146,15 @@ namespace Microsoft.AspNetCore.Mvc.ViewFeatures
|
|||
return;
|
||||
}
|
||||
|
||||
// Because it is not possible to delete while enumerating, a copy of the keys must be taken.
|
||||
// Use the size of the dictionary as an upper bound to avoid creating more than one copy of the keys.
|
||||
var removeCount = 0;
|
||||
var keys = new string[_data.Count];
|
||||
// In .NET Core 3.0 a Dictionary can have items removed during enumeration
|
||||
// https://github.com/dotnet/coreclr/pull/18854
|
||||
foreach (var entry in _data)
|
||||
{
|
||||
if (!_initialKeys.Contains(entry.Key) && !_retainedKeys.Contains(entry.Key))
|
||||
{
|
||||
keys[removeCount] = entry.Key;
|
||||
removeCount++;
|
||||
_data.Remove(entry.Key);
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < removeCount; i++)
|
||||
{
|
||||
_data.Remove(keys[i]);
|
||||
}
|
||||
|
||||
_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;
|
||||
width: 100%;
|
||||
white-space: nowrap;
|
||||
/* Set the fixed height of the footer here */
|
||||
height: 60px;
|
||||
line-height: 60px; /* Vertically center the text there */
|
||||
}
|
||||
|
|
|
|||
|
|
@ -50,7 +50,5 @@ body {
|
|||
bottom: 0;
|
||||
width: 100%;
|
||||
white-space: nowrap;
|
||||
/* Set the fixed height of the footer here */
|
||||
height: 60px;
|
||||
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