Merge pull request #18151 from dotnet/johluo/feb-branding

Update branding to 3.1.2
This commit is contained in:
John Luo 2020-01-15 10:46:39 -08:00 committed by GitHub
commit 36e79022be
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
39 changed files with 1914 additions and 741 deletions

View File

@ -38,6 +38,19 @@ variables:
value: '' value: ''
- name: _SignType - name: _SignType
value: '' value: ''
- name: _InternalRuntimeDownloadArgs
value: ''
- name: _InternalRuntimeDownloadCodeSignArgs
value: ''
- ${{ if eq(variables['System.TeamProject'], 'internal') }}:
- group: DotNet-MSRC-Storage
- name: _InternalRuntimeDownloadArgs
value: -DotNetRuntimeSourceFeed https://dotnetclimsrc.blob.core.windows.net/dotnet -DotNetRuntimeSourceFeedKey $(dotnetclimsrc-read-sas-token-base64) /p:DotNetAssetRootAccessTokenSuffix='$(dotnetclimsrc-read-sas-token-base64)'
# The code signing doesn't use the aspnet build scripts, so the msbuild parameers have
# to be passed directly. This is awkward, since we pass the same info above, but we have
# to have it in two different forms
- name: _InternalRuntimeDownloadCodeSignArgs
value: /p:DotNetRuntimeSourceFeed=https://dotnetclimsrc.blob.core.windows.net/dotnet /p:DotNetRuntimeSourceFeedKey=$(dotnetclimsrc-read-sas-token-base64)
- ${{ if eq(variables['System.TeamProject'], 'internal') }}: - ${{ if eq(variables['System.TeamProject'], 'internal') }}:
- ${{ if ne(variables['Build.Reason'], 'PullRequest') }}: - ${{ if ne(variables['Build.Reason'], 'PullRequest') }}:
# DotNet-Blob-Feed provides: dotnetfeed-storage-access-key-1 # DotNet-Blob-Feed provides: dotnetfeed-storage-access-key-1
@ -81,7 +94,15 @@ stages:
jobDisplayName: Code check jobDisplayName: Code check
agentOs: Windows agentOs: Windows
steps: steps:
- powershell: ./eng/scripts/CodeCheck.ps1 -ci - ${{ if ne(variables['System.TeamProject'], 'public') }}:
- task: PowerShell@2
displayName: Setup Private Feeds Credentials
inputs:
filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.ps1
arguments: -ConfigFile $(Build.SourcesDirectory)/NuGet.config -Password $Env:Token
env:
Token: $(dn-bot-dnceng-artifact-feeds-rw)
- powershell: ./eng/scripts/CodeCheck.ps1 -ci $(_InternalRuntimeDownloadArgs)
displayName: Run eng/scripts/CodeCheck.ps1 displayName: Run eng/scripts/CodeCheck.ps1
artifacts: artifacts:
- name: Code_Check_Logs - name: Code_Check_Logs
@ -108,6 +129,14 @@ stages:
# This is intentional to workaround https://github.com/dotnet/arcade/issues/1957 which always re-submits for code-signing, even # This is intentional to workaround https://github.com/dotnet/arcade/issues/1957 which always re-submits for code-signing, even
# if they have already been signed. This results in slower builds due to re-submitting the same .nupkg many times for signing. # if they have already been signed. This results in slower builds due to re-submitting the same .nupkg many times for signing.
# The sign settings have been configured to # The sign settings have been configured to
- ${{ if ne(variables['System.TeamProject'], 'public') }}:
- task: PowerShell@2
displayName: Setup Private Feeds Credentials
inputs:
filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.ps1
arguments: -ConfigFile $(Build.SourcesDirectory)/NuGet.config -Password $Env:Token
env:
Token: $(dn-bot-dnceng-artifact-feeds-rw)
- script: ./build.cmd - script: ./build.cmd
-ci -ci
@ -117,6 +146,7 @@ stages:
-buildNative -buildNative
/bl:artifacts/log/build.x64.binlog /bl:artifacts/log/build.x64.binlog
$(_BuildArgs) $(_BuildArgs)
$(_InternalRuntimeDownloadArgs)
displayName: Build x64 displayName: Build x64
# Build the x86 shared framework # Build the x86 shared framework
@ -132,6 +162,7 @@ stages:
/p:OnlyPackPlatformSpecificPackages=true /p:OnlyPackPlatformSpecificPackages=true
/bl:artifacts/log/build.x86.binlog /bl:artifacts/log/build.x86.binlog
$(_BuildArgs) $(_BuildArgs)
$(_InternalRuntimeDownloadArgs)
displayName: Build x86 displayName: Build x86
# This is in a separate build step with -forceCoreMsbuild to workaround MAX_PATH limitations - https://github.com/Microsoft/msbuild/issues/53 # This is in a separate build step with -forceCoreMsbuild to workaround MAX_PATH limitations - https://github.com/Microsoft/msbuild/issues/53
@ -140,6 +171,7 @@ stages:
-pack -pack
-noBuildDeps -noBuildDeps
$(_BuildArgs) $(_BuildArgs)
$(_InternalRuntimeDownloadArgs)
displayName: Build SiteExtension displayName: Build SiteExtension
# This runs code-signing on all packages, zips, and jar files as defined in build/CodeSign.targets. If https://github.com/dotnet/arcade/issues/1957 is resolved, # This runs code-signing on all packages, zips, and jar files as defined in build/CodeSign.targets. If https://github.com/dotnet/arcade/issues/1957 is resolved,
@ -165,6 +197,7 @@ stages:
/p:AssetManifestFileName=aspnetcore-win-x64-x86.xml /p:AssetManifestFileName=aspnetcore-win-x64-x86.xml
$(_BuildArgs) $(_BuildArgs)
$(_PublishArgs) $(_PublishArgs)
$(_InternalRuntimeDownloadArgs)
/p:PublishInstallerBaseVersion=true /p:PublishInstallerBaseVersion=true
displayName: Build Installers displayName: Build Installers
@ -205,6 +238,7 @@ stages:
/p:AssetManifestFileName=aspnetcore-win-arm.xml /p:AssetManifestFileName=aspnetcore-win-arm.xml
$(_BuildArgs) $(_BuildArgs)
$(_PublishArgs) $(_PublishArgs)
$(_InternalRuntimeDownloadArgs)
installNodeJs: false installNodeJs: false
installJdk: false installJdk: false
artifacts: artifacts:
@ -231,6 +265,7 @@ stages:
-p:AssetManifestFileName=aspnetcore-MacOS_x64.xml -p:AssetManifestFileName=aspnetcore-MacOS_x64.xml
$(_BuildArgs) $(_BuildArgs)
$(_PublishArgs) $(_PublishArgs)
$(_InternalRuntimeDownloadArgs)
installNodeJs: false installNodeJs: false
installJdk: false installJdk: false
artifacts: artifacts:
@ -251,6 +286,14 @@ stages:
jobDisplayName: "Build: Linux x64" jobDisplayName: "Build: Linux x64"
agentOs: Linux agentOs: Linux
steps: steps:
- ${{ if ne(variables['System.TeamProject'], 'public') }}:
- task: Bash@3
displayName: Setup Private Feeds Credentials
inputs:
filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.sh
arguments: $(Build.SourcesDirectory)/NuGet.config $Token
env:
Token: $(dn-bot-dnceng-artifact-feeds-rw)
- script: ./build.sh - script: ./build.sh
--ci --ci
--arch x64 --arch x64
@ -261,6 +304,7 @@ stages:
-p:OnlyPackPlatformSpecificPackages=true -p:OnlyPackPlatformSpecificPackages=true
-bl:artifacts/log/build.linux-x64.binlog -bl:artifacts/log/build.linux-x64.binlog
$(_BuildArgs) $(_BuildArgs)
$(_InternalRuntimeDownloadArgs)
displayName: Run build.sh displayName: Run build.sh
- script: | - script: |
git clean -xfd src/**/obj/ git clean -xfd src/**/obj/
@ -274,7 +318,8 @@ stages:
-p:BuildRuntimeArchive=false \ -p:BuildRuntimeArchive=false \
-p:LinuxInstallerType=deb \ -p:LinuxInstallerType=deb \
-bl:artifacts/log/build.deb.binlog \ -bl:artifacts/log/build.deb.binlog \
$(_BuildArgs) $(_BuildArgs) \
$(_InternalRuntimeDownloadArgs)
displayName: Build Debian installers displayName: Build Debian installers
- script: | - script: |
git clean -xfd src/**/obj/ git clean -xfd src/**/obj/
@ -290,7 +335,8 @@ stages:
-bl:artifacts/log/build.rpm.binlog \ -bl:artifacts/log/build.rpm.binlog \
-p:AssetManifestFileName=aspnetcore-Linux_x64.xml \ -p:AssetManifestFileName=aspnetcore-Linux_x64.xml \
$(_BuildArgs) \ $(_BuildArgs) \
$(_PublishArgs) $(_PublishArgs) \
$(_InternalRuntimeDownloadArgs)
displayName: Build RPM installers displayName: Build RPM installers
installNodeJs: false installNodeJs: false
installJdk: false installJdk: false
@ -322,6 +368,7 @@ stages:
-p:AssetManifestFileName=aspnetcore-Linux_arm.xml -p:AssetManifestFileName=aspnetcore-Linux_arm.xml
$(_BuildArgs) $(_BuildArgs)
$(_PublishArgs) $(_PublishArgs)
$(_InternalRuntimeDownloadArgs)
installNodeJs: false installNodeJs: false
installJdk: false installJdk: false
artifacts: artifacts:
@ -352,6 +399,7 @@ stages:
-p:AssetManifestFileName=aspnetcore-Linux_arm64.xml -p:AssetManifestFileName=aspnetcore-Linux_arm64.xml
$(_BuildArgs) $(_BuildArgs)
$(_PublishArgs) $(_PublishArgs)
$(_InternalRuntimeDownloadArgs)
installNodeJs: false installNodeJs: false
installJdk: false installJdk: false
artifacts: artifacts:
@ -385,6 +433,7 @@ stages:
-p:AssetManifestFileName=aspnetcore-Linux_musl_x64.xml -p:AssetManifestFileName=aspnetcore-Linux_musl_x64.xml
$(_BuildArgs) $(_BuildArgs)
$(_PublishArgs) $(_PublishArgs)
$(_InternalRuntimeDownloadArgs)
installNodeJs: false installNodeJs: false
installJdk: false installJdk: false
artifacts: artifacts:
@ -418,6 +467,7 @@ stages:
-p:AssetManifestFileName=aspnetcore-Linux_musl_arm64.xml -p:AssetManifestFileName=aspnetcore-Linux_musl_arm64.xml
$(_BuildArgs) $(_BuildArgs)
$(_PublishArgs) $(_PublishArgs)
$(_InternalRuntimeDownloadArgs)
installNodeJs: false installNodeJs: false
installJdk: false installJdk: false
artifacts: artifacts:
@ -439,7 +489,7 @@ stages:
jobDisplayName: "Test: Windows Server 2016 x64" jobDisplayName: "Test: Windows Server 2016 x64"
agentOs: Windows agentOs: Windows
isTestingJob: true isTestingJob: true
buildArgs: -all -pack -test -BuildNative "/p:SkipIISNewHandlerTests=true /p:SkipIISTests=true /p:SkipIISExpressTests=true /p:SkipIISNewShimTests=true /p:RunTemplateTests=false" buildArgs: -all -pack -test -BuildNative "/p:SkipIISNewHandlerTests=true /p:SkipIISTests=true /p:SkipIISExpressTests=true /p:SkipIISNewShimTests=true /p:RunTemplateTests=false" $(_InternalRuntimeDownloadArgs)
beforeBuild: beforeBuild:
- powershell: "& ./src/Servers/IIS/tools/UpdateIISExpressCertificate.ps1; & ./src/Servers/IIS/tools/update_schema.ps1" - powershell: "& ./src/Servers/IIS/tools/UpdateIISExpressCertificate.ps1; & ./src/Servers/IIS/tools/update_schema.ps1"
displayName: Setup IISExpress test certificates and schema displayName: Setup IISExpress test certificates and schema
@ -475,7 +525,15 @@ stages:
agentOs: Windows agentOs: Windows
isTestingJob: true isTestingJob: true
steps: steps:
- script: ./build.cmd -ci -all -pack - ${{ if ne(variables['System.TeamProject'], 'public') }}:
- task: PowerShell@2
displayName: Setup Private Feeds Credentials
inputs:
filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.ps1
arguments: -ConfigFile $(Build.SourcesDirectory)/NuGet.config -Password $Env:Token
env:
Token: $(dn-bot-dnceng-artifact-feeds-rw)
- script: ./build.cmd -ci -all -pack $(_InternalRuntimeDownloadArgs)
displayName: Build Repo displayName: Build Repo
- script: ./src/ProjectTemplates/build.cmd -ci -pack -NoRestore -NoBuilddeps "/p:RunTemplateTests=true /bl:artifacts/log/template.pack.binlog" - script: ./src/ProjectTemplates/build.cmd -ci -pack -NoRestore -NoBuilddeps "/p:RunTemplateTests=true /bl:artifacts/log/template.pack.binlog"
displayName: Pack Templates displayName: Pack Templates
@ -502,7 +560,7 @@ stages:
jobDisplayName: "Test: macOS 10.13" jobDisplayName: "Test: macOS 10.13"
agentOs: macOS agentOs: macOS
isTestingJob: true isTestingJob: true
buildArgs: --all --test "/p:RunTemplateTests=false" buildArgs: --all --test "/p:RunTemplateTests=false" $(_InternalRuntimeDownloadArgs)
beforeBuild: beforeBuild:
- bash: "./eng/scripts/install-nginx-mac.sh" - bash: "./eng/scripts/install-nginx-mac.sh"
displayName: Installing Nginx displayName: Installing Nginx
@ -537,7 +595,7 @@ stages:
jobDisplayName: "Test: Ubuntu 16.04 x64" jobDisplayName: "Test: Ubuntu 16.04 x64"
agentOs: Linux agentOs: Linux
isTestingJob: true isTestingJob: true
buildArgs: --all --test "/p:RunTemplateTests=false" buildArgs: --all --test "/p:RunTemplateTests=false" $(_InternalRuntimeDownloadArgs)
beforeBuild: beforeBuild:
- bash: "./eng/scripts/install-nginx-linux.sh" - bash: "./eng/scripts/install-nginx-linux.sh"
displayName: Installing Nginx displayName: Installing Nginx
@ -584,6 +642,25 @@ stages:
chmod +x $HOME/bin/jq chmod +x $HOME/bin/jq
echo "##vso[task.prependpath]$HOME/bin" echo "##vso[task.prependpath]$HOME/bin"
displayName: Install jq displayName: Install jq
- task: UseDotNet@2
displayName: 'Use .NET Core sdk'
inputs:
packageType: sdk
# The SDK version selected here is intentionally supposed to use the latest release
# For the purpose of building Linux distros, we can't depend on features of the SDK
# which may not exist in pre-built versions of the SDK
# Pinning to preview 8 since preview 9 has breaking changes
version: 3.1.100
installationPath: $(DotNetCoreSdkDir)
includePreviewVersions: true
- ${{ if ne(variables['System.TeamProject'], 'public') }}:
- task: Bash@3
displayName: Setup Private Feeds Credentials
inputs:
filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.sh
arguments: $(Build.SourcesDirectory)/NuGet.config $Token
env:
Token: $(dn-bot-dnceng-artifact-feeds-rw)
- script: ./eng/scripts/ci-source-build.sh --ci --configuration Release /p:BuildManaged=true /p:BuildNodeJs=false - script: ./eng/scripts/ci-source-build.sh --ci --configuration Release /p:BuildManaged=true /p:BuildNodeJs=false
displayName: Run ci-source-build.sh displayName: Run ci-source-build.sh
- task: PublishBuildArtifacts@1 - task: PublishBuildArtifacts@1

View File

@ -28,6 +28,14 @@ jobs:
contents: '**/*.nupkg' contents: '**/*.nupkg'
targetFolder: $(Build.SourcesDirectory)/artifacts/packages/$(BuildConfiguration)/shipping/ targetFolder: $(Build.SourcesDirectory)/artifacts/packages/$(BuildConfiguration)/shipping/
flattenFolders: true flattenFolders: true
- ${{ if ne(variables['System.TeamProject'], 'public') }}:
- task: PowerShell@2
displayName: Setup Private Feeds Credentials
inputs:
filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.ps1
arguments: -ConfigFile $(Build.SourcesDirectory)/NuGet.config -Password $Env:Token
env:
Token: $(dn-bot-dnceng-artifact-feeds-rw)
- powershell: .\eng\common\build.ps1 - powershell: .\eng\common\build.ps1
-ci -ci
-restore -restore
@ -39,6 +47,7 @@ jobs:
/p:DotNetSignType=$(_SignType) /p:DotNetSignType=$(_SignType)
$(_BuildArgs) $(_BuildArgs)
$(_PublishArgs) $(_PublishArgs)
$(_InternalRuntimeDownloadCodeSignArgs)
displayName: Sign and publish packages displayName: Sign and publish packages
artifacts: artifacts:
- name: CodeSign_Xplat_${{ parameters.inputName }}_Logs - name: CodeSign_Xplat_${{ parameters.inputName }}_Logs

View File

@ -161,6 +161,24 @@ jobs:
- ${{ if ne(parameters.steps, '')}}: - ${{ if ne(parameters.steps, '')}}:
- ${{ parameters.steps }} - ${{ parameters.steps }}
- ${{ if eq(parameters.steps, '')}}: - ${{ if eq(parameters.steps, '')}}:
- ${{ if ne(variables['System.TeamProject'], 'public') }}:
- ${{ if eq(parameters.agentOs, 'Windows') }}:
- ${{ if ne(variables['System.TeamProject'], 'public') }}:
- task: PowerShell@2
displayName: Setup Private Feeds Credentials
inputs:
filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.ps1
arguments: -ConfigFile $(Build.SourcesDirectory)/NuGet.config -Password $Env:Token
env:
Token: $(dn-bot-dnceng-artifact-feeds-rw)
- ${{ if ne(parameters.agentOs, 'Windows') }}:
- task: Bash@3
displayName: Setup Private Feeds Credentials
inputs:
filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.sh
arguments: $(Build.SourcesDirectory)/NuGet.config $Token
env:
Token: $(dn-bot-dnceng-artifact-feeds-rw)
- ${{ if eq(parameters.buildScript, '') }}: - ${{ if eq(parameters.buildScript, '') }}:
- ${{ if eq(parameters.agentOs, 'Windows') }}: - ${{ if eq(parameters.agentOs, 'Windows') }}:
- script: .\$(BuildDirectory)\build.cmd -ci /p:DotNetSignType=$(_SignType) -Configuration $(BuildConfiguration) $(BuildScriptArgs) - script: .\$(BuildDirectory)\build.cmd -ci /p:DotNetSignType=$(_SignType) -Configuration $(BuildConfiguration) $(BuildScriptArgs)

View File

@ -84,8 +84,8 @@
<RuntimeInstallerBaseName>aspnetcore-runtime</RuntimeInstallerBaseName> <RuntimeInstallerBaseName>aspnetcore-runtime</RuntimeInstallerBaseName>
<TargetingPackInstallerBaseName>aspnetcore-targeting-pack</TargetingPackInstallerBaseName> <TargetingPackInstallerBaseName>aspnetcore-targeting-pack</TargetingPackInstallerBaseName>
<!-- Produce targeting pack installers/packages once per major.minor except in extraordinary cases i.e. 3.0.1. --> <!-- Produce targeting pack installers/packages once per major.minor except in extraordinary cases i.e. 3.1.2. -->
<!-- We can remove the 3.0.1 line from any branch other than release/3.0 and from here after 3.0.1 is released. --> <!-- We can remove the 3.1.2 line from any branch other than release/3.1 and from here after 3.1.2 is released. -->
<IsTargetingPackBuilding Condition=" '$(DotNetBuildFromSource)' == 'true' ">false</IsTargetingPackBuilding> <IsTargetingPackBuilding Condition=" '$(DotNetBuildFromSource)' == 'true' ">false</IsTargetingPackBuilding>
<IsTargetingPackBuilding <IsTargetingPackBuilding
Condition=" '$(IsTargetingPackBuilding)' == '' AND '$(VersionPrefix)' == '3.0.1' ">true</IsTargetingPackBuilding> Condition=" '$(IsTargetingPackBuilding)' == '' AND '$(VersionPrefix)' == '3.0.1' ">true</IsTargetingPackBuilding>

View File

@ -77,6 +77,12 @@ MSBuild verbosity: q[uiet], m[inimal], n[ormal], d[etailed], and diag[nostic]
.PARAMETER MSBuildArguments .PARAMETER MSBuildArguments
Additional MSBuild arguments to be passed through. Additional MSBuild arguments to be passed through.
.PARAMETER DotNetRuntimeSourceFeed
Additional feed that can be used when downloading .NET runtimes
.PARAMETER DotNetRuntimeSourceFeedKey
Key for feed that can be used when downloading .NET runtimes
.EXAMPLE .EXAMPLE
Building both native and managed projects. Building both native and managed projects.
@ -151,6 +157,11 @@ param(
# Other lifecycle targets # Other lifecycle targets
[switch]$Help, # Show help [switch]$Help, # Show help
# Optional arguments that enable downloading an internal
# runtime or runtime from a non-default location
[string]$DotNetRuntimeSourceFeed,
[string]$DotNetRuntimeSourceFeedKey,
# Capture the rest # Capture the rest
[Parameter(ValueFromRemainingArguments = $true)] [Parameter(ValueFromRemainingArguments = $true)]
@ -251,6 +262,16 @@ if (-not $Configuration) {
} }
$MSBuildArguments += "/p:Configuration=$Configuration" $MSBuildArguments += "/p:Configuration=$Configuration"
[string[]]$ToolsetBuildArguments = @()
if ($DotNetRuntimeSourceFeed -or $DotNetRuntimeSourceFeedKey) {
$runtimeFeedArg = "/p:DotNetRuntimeSourceFeed=$DotNetRuntimeSourceFeed"
$runtimeFeedKeyArg = "/p:DotNetRuntimeSourceFeedKey=$DotNetRuntimeSourceFeedKey"
$MSBuildArguments += $runtimeFeedArg
$MSBuildArguments += $runtimeFeedKeyArg
$ToolsetBuildArguments += $runtimeFeedArg
$ToolsetBuildArguments += $runtimeFeedKeyArg
}
$foundJdk = $false $foundJdk = $false
$javac = Get-Command javac -ErrorAction Ignore -CommandType Application $javac = Get-Command javac -ErrorAction Ignore -CommandType Application
$localJdkPath = "$PSScriptRoot\.tools\jdk\win-x64\" $localJdkPath = "$PSScriptRoot\.tools\jdk\win-x64\"
@ -375,7 +396,8 @@ try {
/p:Configuration=Release ` /p:Configuration=Release `
/p:Restore=$RunRestore ` /p:Restore=$RunRestore `
/p:Build=true ` /p:Build=true `
/clp:NoSummary /clp:NoSummary `
@ToolsetBuildArguments
} }
MSBuild $toolsetBuildProj ` MSBuild $toolsetBuildProj `

View File

@ -29,6 +29,8 @@ build_installers=''
build_projects='' build_projects=''
target_arch='x64' target_arch='x64'
configuration='' configuration=''
dotnet_runtime_source_feed=''
dotnet_runtime_source_feed_key=''
if [ "$(uname)" = "Darwin" ]; then if [ "$(uname)" = "Darwin" ]; then
target_os_name='osx' target_os_name='osx'
@ -45,33 +47,36 @@ __usage() {
echo "Usage: $(basename "${BASH_SOURCE[0]}") [options] [[--] <Arguments>...] echo "Usage: $(basename "${BASH_SOURCE[0]}") [options] [[--] <Arguments>...]
Arguments: Arguments:
<Arguments>... Arguments passed to the command. Variable number of arguments allowed. <Arguments>... Arguments passed to the command. Variable number of arguments allowed.
Options: Options:
--configuration|-c The build configuration (Debug, Release). Default=Debug --configuration|-c The build configuration (Debug, Release). Default=Debug
--arch The CPU architecture to build for (x64, arm, arm64). Default=$target_arch --arch The CPU architecture to build for (x64, arm, arm64). Default=$target_arch
--os-name The base runtime identifier to build for (linux, osx, linux-musl). Default=$target_os_name --os-name The base runtime identifier to build for (linux, osx, linux-musl). Default=$target_os_name
--[no-]restore Run restore. --[no-]restore Run restore.
--[no-]build Compile projects. (Implies --no-restore) --[no-]build Compile projects. (Implies --no-restore)
--[no-]pack Produce packages. --[no-]pack Produce packages.
--[no-]test Run tests. --[no-]test Run tests.
--projects A list of projects to build. (Must be an absolute path.) --projects A list of projects to build. (Must be an absolute path.)
Globbing patterns are supported, such as \"$(pwd)/**/*.csproj\". Globbing patterns are supported, such as \"$(pwd)/**/*.csproj\".
--no-build-deps Do not build project-to-project references and only build the specified project. --no-build-deps Do not build project-to-project references and only build the specified project.
--no-build-repo-tasks Suppress building RepoTasks. --no-build-repo-tasks Suppress building RepoTasks.
--all Build all project types. --all Build all project types.
--[no-]build-native Build native projects (C, C++). --[no-]build-native Build native projects (C, C++).
--[no-]build-managed Build managed projects (C#, F#, VB). --[no-]build-managed Build managed projects (C#, F#, VB).
--[no-]build-nodejs Build NodeJS projects (TypeScript, JS). --[no-]build-nodejs Build NodeJS projects (TypeScript, JS).
--[no-]build-java Build Java projects. --[no-]build-java Build Java projects.
--[no-]build-installers Build Java projects. --[no-]build-installers Build Java projects.
--ci Apply CI specific settings and environment variables. --ci Apply CI specific settings and environment variables.
--binarylog|-bl Use a binary logger --binarylog|-bl Use a binary logger
--verbosity|-v MSBuild verbosity: q[uiet], m[inimal], n[ormal], d[etailed], and diag[nostic] --verbosity|-v MSBuild verbosity: q[uiet], m[inimal], n[ormal], d[etailed], and diag[nostic]
--dotnet-runtime-source-feed Additional feed that can be used when downloading .NET runtimes
--dotnet-runtime-source-feed-key Key for feed that can be used when downloading .NET runtimes
Description: Description:
This build script installs required tools and runs an MSBuild command on this repository This build script installs required tools and runs an MSBuild command on this repository
@ -188,16 +193,26 @@ while [[ $# -gt 0 ]]; do
-no-build-repo-tasks|-nobuildrepotasks) -no-build-repo-tasks|-nobuildrepotasks)
build_repo_tasks=false build_repo_tasks=false
;; ;;
-arch)
shift
target_arch="${1:-}"
[ -z "$target_arch" ] && __error "Missing value for parameter --arch" && __usage
;;
-ci) -ci)
ci=true ci=true
;; ;;
-binarylog|-bl) -binarylog|-bl)
use_default_binary_log=true use_default_binary_log=true
;; ;;
-verbosity|-v) -dotnet-runtime-source-feed|-dotnetruntimesourcefeed)
shift shift
[ -z "${1:-}" ] && __error "Missing value for parameter --verbosity" && __usage [ -z "${1:-}" ] && __error "Missing value for parameter --dotnet-runtime-source-feed" && __usage
verbosity="${1:-}" dotnet_runtime_source_feed="${1:-}"
;;
-dotnet-runtime-source-feed-key|-dotnetruntimesourcefeedkey)
shift
[ -z "${1:-}" ] && __error "Missing value for parameter --dotnet-runtime-source-feed-key" && __usage
dotnet_runtime_source_feed_key="${1:-}"
;; ;;
*) *)
msbuild_args[${#msbuild_args[*]}]="$1" msbuild_args[${#msbuild_args[*]}]="$1"
@ -270,6 +285,17 @@ msbuild_args[${#msbuild_args[*]}]="-p:Configuration=$configuration"
echo "Setting msbuild verbosity to $verbosity" echo "Setting msbuild verbosity to $verbosity"
msbuild_args[${#msbuild_args[*]}]="-verbosity:$verbosity" msbuild_args[${#msbuild_args[*]}]="-verbosity:$verbosity"
# Set up additional runtime args
toolset_build_args=()
if [ ! -z "$dotnet_runtime_source_feed" ] || [ ! -z "$dotnet_runtime_source_feed_key" ]; then
runtimeFeedArg="/p:DotNetRuntimeSourceFeed=$dotnet_runtime_source_feed"
runtimeFeedKeyArg="/p:DotNetRuntimeSourceFeedKey=$dotnet_runtime_source_feed_key"
msbuild_args[${#msbuild_args[*]}]=$runtimeFeedArg
msbuild_args[${#msbuild_args[*]}]=$runtimeFeedKeyArg
toolset_build_args[${#toolset_build_args[*]}]=$runtimeFeedArg
toolset_build_args[${#toolset_build_args[*]}]=$runtimeFeedKeyArg
fi
# Initialize global variables need to be set before the import of Arcade is imported # Initialize global variables need to be set before the import of Arcade is imported
restore=$run_restore restore=$run_restore
@ -325,7 +351,8 @@ if [ "$build_repo_tasks" = true ]; then
-p:Configuration=Release \ -p:Configuration=Release \
-p:Restore=$run_restore \ -p:Restore=$run_restore \
-p:Build=true \ -p:Build=true \
-clp:NoSummary -clp:NoSummary \
${toolset_build_args[@]+"${toolset_build_args[@]}"}
fi fi
# This incantation avoids unbound variable issues if msbuild_args is empty # This incantation avoids unbound variable issues if msbuild_args is empty

View File

@ -2,106 +2,106 @@
<Project> <Project>
<PropertyGroup> <PropertyGroup>
<MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects> <MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
<AspNetCoreBaselineVersion>3.1.0</AspNetCoreBaselineVersion> <AspNetCoreBaselineVersion>3.1.1</AspNetCoreBaselineVersion>
</PropertyGroup> </PropertyGroup>
<!-- Package: AspNetCoreRuntime.3.0.x64--> <!-- Package: AspNetCoreRuntime.3.0.x64-->
<PropertyGroup Condition=" '$(PackageId)' == 'AspNetCoreRuntime.3.0.x64' "> <PropertyGroup Condition=" '$(PackageId)' == 'AspNetCoreRuntime.3.0.x64' ">
<BaselinePackageVersion>3.0.0</BaselinePackageVersion> <BaselinePackageVersion>3.0.2</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'AspNetCoreRuntime.3.0.x64' AND '$(TargetFramework)' == 'net461' " /> <ItemGroup Condition=" '$(PackageId)' == 'AspNetCoreRuntime.3.0.x64' AND '$(TargetFramework)' == 'net461' " />
<!-- Package: AspNetCoreRuntime.3.0.x86--> <!-- Package: AspNetCoreRuntime.3.0.x86-->
<PropertyGroup Condition=" '$(PackageId)' == 'AspNetCoreRuntime.3.0.x86' "> <PropertyGroup Condition=" '$(PackageId)' == 'AspNetCoreRuntime.3.0.x86' ">
<BaselinePackageVersion>3.0.0</BaselinePackageVersion> <BaselinePackageVersion>3.0.2</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'AspNetCoreRuntime.3.0.x86' AND '$(TargetFramework)' == 'net461' " /> <ItemGroup Condition=" '$(PackageId)' == 'AspNetCoreRuntime.3.0.x86' AND '$(TargetFramework)' == 'net461' " />
<!-- Package: dotnet-sql-cache--> <!-- Package: dotnet-sql-cache-->
<PropertyGroup Condition=" '$(PackageId)' == 'dotnet-sql-cache' "> <PropertyGroup Condition=" '$(PackageId)' == 'dotnet-sql-cache' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<!-- Package: Microsoft.AspNetCore.ApiAuthorization.IdentityServer--> <!-- Package: Microsoft.AspNetCore.ApiAuthorization.IdentityServer-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.ApiAuthorization.IdentityServer' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.ApiAuthorization.IdentityServer' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.ApiAuthorization.IdentityServer' AND '$(TargetFramework)' == 'netcoreapp3.1' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.ApiAuthorization.IdentityServer' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
<BaselinePackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.AspNetCore.Identity.UI" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.Identity.UI" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="[3.1.1, )" />
<BaselinePackageReference Include="IdentityServer4" Version="[3.0.0, )" /> <BaselinePackageReference Include="IdentityServer4" Version="[3.0.0, )" />
<BaselinePackageReference Include="IdentityServer4.AspNetIdentity" Version="[3.0.0, )" /> <BaselinePackageReference Include="IdentityServer4.AspNetIdentity" Version="[3.0.0, )" />
<BaselinePackageReference Include="IdentityServer4.EntityFramework" Version="[3.0.0, )" /> <BaselinePackageReference Include="IdentityServer4.EntityFramework" Version="[3.0.0, )" />
<BaselinePackageReference Include="IdentityServer4.EntityFramework.Storage" Version="[3.0.0, )" /> <BaselinePackageReference Include="IdentityServer4.EntityFramework.Storage" Version="[3.0.0, )" />
<BaselinePackageReference Include="IdentityServer4.Storage" Version="[3.0.0, )" /> <BaselinePackageReference Include="IdentityServer4.Storage" Version="[3.0.0, )" />
<BaselinePackageReference Include="Microsoft.Extensions.Http" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.Http" Version="[3.1.1, )" />
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.AspNetCore.App.Runtime.win-x64--> <!-- Package: Microsoft.AspNetCore.App.Runtime.win-x64-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.App.Runtime.win-x64' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.App.Runtime.win-x64' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<!-- Package: Microsoft.AspNetCore.Authentication.AzureAD.UI--> <!-- Package: Microsoft.AspNetCore.Authentication.AzureAD.UI-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.AzureAD.UI' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.AzureAD.UI' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.AzureAD.UI' AND '$(TargetFramework)' == 'netcoreapp3.1' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.AzureAD.UI' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
<BaselinePackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="[3.1.1, )" />
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.AspNetCore.Authentication.AzureADB2C.UI--> <!-- Package: Microsoft.AspNetCore.Authentication.AzureADB2C.UI-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.AzureADB2C.UI' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.AzureADB2C.UI' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.AzureADB2C.UI' AND '$(TargetFramework)' == 'netcoreapp3.1' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.AzureADB2C.UI' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
<BaselinePackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="[3.1.1, )" />
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.AspNetCore.Authentication.Certificate--> <!-- Package: Microsoft.AspNetCore.Authentication.Certificate-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Certificate' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Certificate' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Certificate' AND '$(TargetFramework)' == 'netcoreapp3.1' " /> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Certificate' AND '$(TargetFramework)' == 'netcoreapp3.1' " />
<!-- Package: Microsoft.AspNetCore.Authentication.Facebook--> <!-- Package: Microsoft.AspNetCore.Authentication.Facebook-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Facebook' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Facebook' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Facebook' AND '$(TargetFramework)' == 'netcoreapp3.1' " /> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Facebook' AND '$(TargetFramework)' == 'netcoreapp3.1' " />
<!-- Package: Microsoft.AspNetCore.Authentication.Google--> <!-- Package: Microsoft.AspNetCore.Authentication.Google-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Google' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Google' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Google' AND '$(TargetFramework)' == 'netcoreapp3.1' " /> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Google' AND '$(TargetFramework)' == 'netcoreapp3.1' " />
<!-- Package: Microsoft.AspNetCore.Authentication.JwtBearer--> <!-- Package: Microsoft.AspNetCore.Authentication.JwtBearer-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.JwtBearer' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.JwtBearer' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.JwtBearer' AND '$(TargetFramework)' == 'netcoreapp3.1' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.JwtBearer' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
<BaselinePackageReference Include="Microsoft.IdentityModel.Protocols.OpenIdConnect" Version="[5.5.0, )" /> <BaselinePackageReference Include="Microsoft.IdentityModel.Protocols.OpenIdConnect" Version="[5.5.0, )" />
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.AspNetCore.Authentication.MicrosoftAccount--> <!-- Package: Microsoft.AspNetCore.Authentication.MicrosoftAccount-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.MicrosoftAccount' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.MicrosoftAccount' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.MicrosoftAccount' AND '$(TargetFramework)' == 'netcoreapp3.1' " /> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.MicrosoftAccount' AND '$(TargetFramework)' == 'netcoreapp3.1' " />
<!-- Package: Microsoft.AspNetCore.Authentication.Negotiate--> <!-- Package: Microsoft.AspNetCore.Authentication.Negotiate-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Negotiate' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Negotiate' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Negotiate' AND '$(TargetFramework)' == 'netcoreapp3.1' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Negotiate' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
<BaselinePackageReference Include="Microsoft.AspNetCore.Connections.Abstractions" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.Connections.Abstractions" Version="[3.1.1, )" />
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.AspNetCore.Authentication.OpenIdConnect--> <!-- Package: Microsoft.AspNetCore.Authentication.OpenIdConnect-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.OpenIdConnect' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.OpenIdConnect' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.OpenIdConnect' AND '$(TargetFramework)' == 'netcoreapp3.1' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.OpenIdConnect' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
<BaselinePackageReference Include="Microsoft.IdentityModel.Protocols.OpenIdConnect" Version="[5.5.0, )" /> <BaselinePackageReference Include="Microsoft.IdentityModel.Protocols.OpenIdConnect" Version="[5.5.0, )" />
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.AspNetCore.Authentication.Twitter--> <!-- Package: Microsoft.AspNetCore.Authentication.Twitter-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Twitter' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Twitter' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Twitter' AND '$(TargetFramework)' == 'netcoreapp3.1' " /> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Twitter' AND '$(TargetFramework)' == 'netcoreapp3.1' " />
<!-- Package: Microsoft.AspNetCore.Authentication.WsFederation--> <!-- Package: Microsoft.AspNetCore.Authentication.WsFederation-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.WsFederation' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.WsFederation' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.WsFederation' AND '$(TargetFramework)' == 'netcoreapp3.1' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.WsFederation' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
<BaselinePackageReference Include="Microsoft.IdentityModel.Protocols.WsFederation" Version="[5.5.0, )" /> <BaselinePackageReference Include="Microsoft.IdentityModel.Protocols.WsFederation" Version="[5.5.0, )" />
@ -109,39 +109,39 @@
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.AspNetCore.Authorization--> <!-- Package: Microsoft.AspNetCore.Authorization-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authorization' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authorization' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authorization' AND '$(TargetFramework)' == 'netcoreapp3.1' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authorization' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
<BaselinePackageReference Include="Microsoft.AspNetCore.Metadata" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.Metadata" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.1, )" />
</ItemGroup> </ItemGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authorization' AND '$(TargetFramework)' == 'netstandard2.0' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authorization' AND '$(TargetFramework)' == 'netstandard2.0' ">
<BaselinePackageReference Include="Microsoft.AspNetCore.Metadata" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.Metadata" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.1, )" />
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.AspNetCore.AzureAppServices.HostingStartup--> <!-- Package: Microsoft.AspNetCore.AzureAppServices.HostingStartup-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.AzureAppServices.HostingStartup' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.AzureAppServices.HostingStartup' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.AzureAppServices.HostingStartup' AND '$(TargetFramework)' == 'netcoreapp3.1' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.AzureAppServices.HostingStartup' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
<BaselinePackageReference Include="Microsoft.AspNetCore.AzureAppServicesIntegration" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.AzureAppServicesIntegration" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="[3.1.1, )" />
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.AspNetCore.AzureAppServices.SiteExtension--> <!-- Package: Microsoft.AspNetCore.AzureAppServices.SiteExtension-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.AzureAppServices.SiteExtension' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.AzureAppServices.SiteExtension' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.AzureAppServices.SiteExtension' AND '$(TargetFramework)' == 'net461' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.AzureAppServices.SiteExtension' AND '$(TargetFramework)' == 'net461' ">
<BaselinePackageReference Include="Microsoft.Web.Xdt.Extensions" Version="[3.1.0-rtm.19566.1, )" /> <BaselinePackageReference Include="Microsoft.Web.Xdt.Extensions" Version="[3.1.1-servicing.19615.10, )" />
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.AspNetCore.AzureAppServicesIntegration--> <!-- Package: Microsoft.AspNetCore.AzureAppServicesIntegration-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.AzureAppServicesIntegration' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.AzureAppServicesIntegration' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.AzureAppServicesIntegration' AND '$(TargetFramework)' == 'netcoreapp3.1' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.AzureAppServicesIntegration' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
<BaselinePackageReference Include="Microsoft.Extensions.Logging.AzureAppServices" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.Logging.AzureAppServices" Version="[3.1.1, )" />
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.AspNetCore.Blazor--> <!-- Package: Microsoft.AspNetCore.Blazor-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Blazor' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Blazor' ">
@ -186,273 +186,273 @@
</PropertyGroup> </PropertyGroup>
<!-- Package: Microsoft.AspNetCore.Components--> <!-- Package: Microsoft.AspNetCore.Components-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components' AND '$(TargetFramework)' == 'netstandard2.0' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components' AND '$(TargetFramework)' == 'netstandard2.0' ">
<BaselinePackageReference Include="Microsoft.AspNetCore.Components.Analyzers" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.Components.Analyzers" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.AspNetCore.Authorization" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.Authorization" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.JSInterop" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.JSInterop" Version="[3.1.1, )" />
<BaselinePackageReference Include="System.ComponentModel.Annotations" Version="[4.7.0, )" /> <BaselinePackageReference Include="System.ComponentModel.Annotations" Version="[4.7.0, )" />
</ItemGroup> </ItemGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components' AND '$(TargetFramework)' == 'netcoreapp3.1' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
<BaselinePackageReference Include="Microsoft.AspNetCore.Components.Analyzers" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.Components.Analyzers" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.AspNetCore.Authorization" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.Authorization" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.JSInterop" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.JSInterop" Version="[3.1.1, )" />
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.AspNetCore.Components.Analyzers--> <!-- Package: Microsoft.AspNetCore.Components.Analyzers-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Analyzers' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Analyzers' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<!-- Package: Microsoft.AspNetCore.Components.Authorization--> <!-- Package: Microsoft.AspNetCore.Components.Authorization-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Authorization' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Authorization' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Authorization' AND '$(TargetFramework)' == 'netcoreapp3.1' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Authorization' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
<BaselinePackageReference Include="Microsoft.AspNetCore.Components" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.Components" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.AspNetCore.Authorization" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.Authorization" Version="[3.1.1, )" />
</ItemGroup> </ItemGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Authorization' AND '$(TargetFramework)' == 'netstandard2.0' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Authorization' AND '$(TargetFramework)' == 'netstandard2.0' ">
<BaselinePackageReference Include="Microsoft.AspNetCore.Components" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.Components" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.AspNetCore.Authorization" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.Authorization" Version="[3.1.1, )" />
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.AspNetCore.Components.Forms--> <!-- Package: Microsoft.AspNetCore.Components.Forms-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Forms' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Forms' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Forms' AND '$(TargetFramework)' == 'netcoreapp3.1' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Forms' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
<BaselinePackageReference Include="Microsoft.AspNetCore.Components" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.Components" Version="[3.1.1, )" />
</ItemGroup> </ItemGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Forms' AND '$(TargetFramework)' == 'netstandard2.0' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Forms' AND '$(TargetFramework)' == 'netstandard2.0' ">
<BaselinePackageReference Include="Microsoft.AspNetCore.Components" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.Components" Version="[3.1.1, )" />
<BaselinePackageReference Include="System.ComponentModel.Annotations" Version="[4.7.0, )" /> <BaselinePackageReference Include="System.ComponentModel.Annotations" Version="[4.7.0, )" />
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.AspNetCore.Components.Web--> <!-- Package: Microsoft.AspNetCore.Components.Web-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Web' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Web' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Web' AND '$(TargetFramework)' == 'netcoreapp3.1' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Web' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
<BaselinePackageReference Include="Microsoft.AspNetCore.Components" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.Components" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.AspNetCore.Components.Forms" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.Components.Forms" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.JSInterop" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.JSInterop" Version="[3.1.1, )" />
</ItemGroup> </ItemGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Web' AND '$(TargetFramework)' == 'netstandard2.0' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Web' AND '$(TargetFramework)' == 'netstandard2.0' ">
<BaselinePackageReference Include="Microsoft.AspNetCore.Components" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.Components" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.AspNetCore.Components.Forms" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.Components.Forms" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.JSInterop" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.JSInterop" Version="[3.1.1, )" />
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.AspNetCore.ConcurrencyLimiter--> <!-- Package: Microsoft.AspNetCore.ConcurrencyLimiter-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.ConcurrencyLimiter' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.ConcurrencyLimiter' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.ConcurrencyLimiter' AND '$(TargetFramework)' == 'netcoreapp3.1' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.ConcurrencyLimiter' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
<BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.1, )" />
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.AspNetCore.Connections.Abstractions--> <!-- Package: Microsoft.AspNetCore.Connections.Abstractions-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Connections.Abstractions' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Connections.Abstractions' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Connections.Abstractions' AND '$(TargetFramework)' == 'netcoreapp3.1' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Connections.Abstractions' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
<BaselinePackageReference Include="Microsoft.AspNetCore.Http.Features" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.Http.Features" Version="[3.1.1, )" />
<BaselinePackageReference Include="System.IO.Pipelines" Version="[4.7.0, )" /> <BaselinePackageReference Include="System.IO.Pipelines" Version="[4.7.0, )" />
</ItemGroup> </ItemGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Connections.Abstractions' AND '$(TargetFramework)' == 'netstandard2.0' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Connections.Abstractions' AND '$(TargetFramework)' == 'netstandard2.0' ">
<BaselinePackageReference Include="Microsoft.AspNetCore.Http.Features" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.Http.Features" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="[1.1.0, )" /> <BaselinePackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="[1.1.0, )" />
<BaselinePackageReference Include="System.IO.Pipelines" Version="[4.7.0, )" /> <BaselinePackageReference Include="System.IO.Pipelines" Version="[4.7.0, )" />
</ItemGroup> </ItemGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Connections.Abstractions' AND '$(TargetFramework)' == 'netstandard2.1' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Connections.Abstractions' AND '$(TargetFramework)' == 'netstandard2.1' ">
<BaselinePackageReference Include="Microsoft.AspNetCore.Http.Features" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.Http.Features" Version="[3.1.1, )" />
<BaselinePackageReference Include="System.IO.Pipelines" Version="[4.7.0, )" /> <BaselinePackageReference Include="System.IO.Pipelines" Version="[4.7.0, )" />
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.AspNetCore.Cryptography.Internal--> <!-- Package: Microsoft.AspNetCore.Cryptography.Internal-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Cryptography.Internal' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Cryptography.Internal' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Cryptography.Internal' AND '$(TargetFramework)' == 'netstandard2.0' " /> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Cryptography.Internal' AND '$(TargetFramework)' == 'netstandard2.0' " />
<!-- Package: Microsoft.AspNetCore.Cryptography.KeyDerivation--> <!-- Package: Microsoft.AspNetCore.Cryptography.KeyDerivation-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Cryptography.KeyDerivation' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Cryptography.KeyDerivation' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Cryptography.KeyDerivation' AND '$(TargetFramework)' == 'netcoreapp2.0' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Cryptography.KeyDerivation' AND '$(TargetFramework)' == 'netcoreapp2.0' ">
<BaselinePackageReference Include="Microsoft.AspNetCore.Cryptography.Internal" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.Cryptography.Internal" Version="[3.1.1, )" />
</ItemGroup> </ItemGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Cryptography.KeyDerivation' AND '$(TargetFramework)' == 'netstandard2.0' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Cryptography.KeyDerivation' AND '$(TargetFramework)' == 'netstandard2.0' ">
<BaselinePackageReference Include="Microsoft.AspNetCore.Cryptography.Internal" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.Cryptography.Internal" Version="[3.1.1, )" />
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.AspNetCore.DataProtection--> <!-- Package: Microsoft.AspNetCore.DataProtection-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection' AND '$(TargetFramework)' == 'netcoreapp3.1' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
<BaselinePackageReference Include="Microsoft.AspNetCore.DataProtection.Abstractions" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.DataProtection.Abstractions" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.AspNetCore.Cryptography.Internal" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.Cryptography.Internal" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Win32.Registry" Version="[4.7.0, )" /> <BaselinePackageReference Include="Microsoft.Win32.Registry" Version="[4.7.0, )" />
<BaselinePackageReference Include="System.Security.Cryptography.Xml" Version="[4.7.0, )" /> <BaselinePackageReference Include="System.Security.Cryptography.Xml" Version="[4.7.0, )" />
</ItemGroup> </ItemGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection' AND '$(TargetFramework)' == 'netstandard2.0' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection' AND '$(TargetFramework)' == 'netstandard2.0' ">
<BaselinePackageReference Include="Microsoft.AspNetCore.DataProtection.Abstractions" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.DataProtection.Abstractions" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.AspNetCore.Cryptography.Internal" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.Cryptography.Internal" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Win32.Registry" Version="[4.7.0, )" /> <BaselinePackageReference Include="Microsoft.Win32.Registry" Version="[4.7.0, )" />
<BaselinePackageReference Include="System.Security.Cryptography.Xml" Version="[4.7.0, )" /> <BaselinePackageReference Include="System.Security.Cryptography.Xml" Version="[4.7.0, )" />
<BaselinePackageReference Include="System.Security.Principal.Windows" Version="[4.7.0, )" /> <BaselinePackageReference Include="System.Security.Principal.Windows" Version="[4.7.0, )" />
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.AspNetCore.DataProtection.Abstractions--> <!-- Package: Microsoft.AspNetCore.DataProtection.Abstractions-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.Abstractions' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.Abstractions' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.Abstractions' AND '$(TargetFramework)' == 'netstandard2.0' " /> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.Abstractions' AND '$(TargetFramework)' == 'netstandard2.0' " />
<!-- Package: Microsoft.AspNetCore.DataProtection.AzureKeyVault--> <!-- Package: Microsoft.AspNetCore.DataProtection.AzureKeyVault-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.AzureKeyVault' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.AzureKeyVault' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.AzureKeyVault' AND '$(TargetFramework)' == 'netstandard2.0' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.AzureKeyVault' AND '$(TargetFramework)' == 'netstandard2.0' ">
<BaselinePackageReference Include="Microsoft.AspNetCore.DataProtection" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.DataProtection" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Azure.KeyVault" Version="[2.3.2, )" /> <BaselinePackageReference Include="Microsoft.Azure.KeyVault" Version="[2.3.2, )" />
<BaselinePackageReference Include="Microsoft.IdentityModel.Clients.ActiveDirectory" Version="[3.19.8, )" /> <BaselinePackageReference Include="Microsoft.IdentityModel.Clients.ActiveDirectory" Version="[3.19.8, )" />
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.AspNetCore.DataProtection.AzureStorage--> <!-- Package: Microsoft.AspNetCore.DataProtection.AzureStorage-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.AzureStorage' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.AzureStorage' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.AzureStorage' AND '$(TargetFramework)' == 'netstandard2.0' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.AzureStorage' AND '$(TargetFramework)' == 'netstandard2.0' ">
<BaselinePackageReference Include="Microsoft.AspNetCore.DataProtection" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.DataProtection" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Azure.Storage.Blob" Version="[10.0.1, )" /> <BaselinePackageReference Include="Microsoft.Azure.Storage.Blob" Version="[10.0.1, )" />
<BaselinePackageReference Include="Microsoft.Data.OData" Version="[5.8.4, )" /> <BaselinePackageReference Include="Microsoft.Data.OData" Version="[5.8.4, )" />
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.AspNetCore.DataProtection.EntityFrameworkCore--> <!-- Package: Microsoft.AspNetCore.DataProtection.EntityFrameworkCore-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.EntityFrameworkCore' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.EntityFrameworkCore' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.EntityFrameworkCore' AND '$(TargetFramework)' == 'netstandard2.1' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.EntityFrameworkCore' AND '$(TargetFramework)' == 'netstandard2.1' ">
<BaselinePackageReference Include="Microsoft.AspNetCore.DataProtection" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.DataProtection" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.EntityFrameworkCore" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.EntityFrameworkCore" Version="[3.1.1, )" />
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.AspNetCore.DataProtection.Extensions--> <!-- Package: Microsoft.AspNetCore.DataProtection.Extensions-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.Extensions' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.Extensions' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.Extensions' AND '$(TargetFramework)' == 'netcoreapp3.1' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.Extensions' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
<BaselinePackageReference Include="Microsoft.AspNetCore.DataProtection" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.DataProtection" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection" Version="[3.1.1, )" />
</ItemGroup> </ItemGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.Extensions' AND '$(TargetFramework)' == 'netstandard2.0' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.Extensions' AND '$(TargetFramework)' == 'netstandard2.0' ">
<BaselinePackageReference Include="Microsoft.AspNetCore.DataProtection" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.DataProtection" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection" Version="[3.1.1, )" />
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.AspNetCore.DataProtection.StackExchangeRedis--> <!-- Package: Microsoft.AspNetCore.DataProtection.StackExchangeRedis-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.StackExchangeRedis' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.StackExchangeRedis' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.StackExchangeRedis' AND '$(TargetFramework)' == 'netstandard2.0' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.StackExchangeRedis' AND '$(TargetFramework)' == 'netstandard2.0' ">
<BaselinePackageReference Include="Microsoft.AspNetCore.DataProtection" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.DataProtection" Version="[3.1.1, )" />
<BaselinePackageReference Include="StackExchange.Redis" Version="[2.0.593, )" /> <BaselinePackageReference Include="StackExchange.Redis" Version="[2.0.593, )" />
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore--> <!-- Package: Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore' AND '$(TargetFramework)' == 'netcoreapp3.1' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
<BaselinePackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="[3.1.1, )" />
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.AspNetCore.HeaderPropagation--> <!-- Package: Microsoft.AspNetCore.HeaderPropagation-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.HeaderPropagation' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.HeaderPropagation' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.HeaderPropagation' AND '$(TargetFramework)' == 'netcoreapp3.1' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.HeaderPropagation' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Extensions.Http" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.Http" Version="[3.1.1, )" />
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.AspNetCore.Hosting.WindowsServices--> <!-- Package: Microsoft.AspNetCore.Hosting.WindowsServices-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Hosting.WindowsServices' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Hosting.WindowsServices' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Hosting.WindowsServices' AND '$(TargetFramework)' == 'netcoreapp3.1' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Hosting.WindowsServices' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
<BaselinePackageReference Include="System.ServiceProcess.ServiceController" Version="[4.7.0, )" /> <BaselinePackageReference Include="System.ServiceProcess.ServiceController" Version="[4.7.0, )" />
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.AspNetCore.Http.Connections.Client--> <!-- Package: Microsoft.AspNetCore.Http.Connections.Client-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Http.Connections.Client' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Http.Connections.Client' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Http.Connections.Client' AND '$(TargetFramework)' == 'netstandard2.0' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Http.Connections.Client' AND '$(TargetFramework)' == 'netstandard2.0' ">
<BaselinePackageReference Include="Microsoft.AspNetCore.Http.Connections.Common" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.Http.Connections.Common" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.1, )" />
</ItemGroup> </ItemGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Http.Connections.Client' AND '$(TargetFramework)' == 'netstandard2.1' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Http.Connections.Client' AND '$(TargetFramework)' == 'netstandard2.1' ">
<BaselinePackageReference Include="Microsoft.AspNetCore.Http.Connections.Common" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.Http.Connections.Common" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.1, )" />
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.AspNetCore.Http.Connections.Common--> <!-- Package: Microsoft.AspNetCore.Http.Connections.Common-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Http.Connections.Common' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Http.Connections.Common' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Http.Connections.Common' AND '$(TargetFramework)' == 'netcoreapp3.1' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Http.Connections.Common' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
<BaselinePackageReference Include="Microsoft.AspNetCore.Connections.Abstractions" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.Connections.Abstractions" Version="[3.1.1, )" />
</ItemGroup> </ItemGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Http.Connections.Common' AND '$(TargetFramework)' == 'netstandard2.0' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Http.Connections.Common' AND '$(TargetFramework)' == 'netstandard2.0' ">
<BaselinePackageReference Include="Microsoft.AspNetCore.Connections.Abstractions" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.Connections.Abstractions" Version="[3.1.1, )" />
<BaselinePackageReference Include="System.Text.Json" Version="[4.7.0, )" /> <BaselinePackageReference Include="System.Text.Json" Version="[4.7.0, )" />
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.AspNetCore.Http.Features--> <!-- Package: Microsoft.AspNetCore.Http.Features-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Http.Features' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Http.Features' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Http.Features' AND '$(TargetFramework)' == 'netcoreapp3.1' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Http.Features' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
<BaselinePackageReference Include="Microsoft.Extensions.Primitives" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.Primitives" Version="[3.1.1, )" />
<BaselinePackageReference Include="System.IO.Pipelines" Version="[4.7.0, )" /> <BaselinePackageReference Include="System.IO.Pipelines" Version="[4.7.0, )" />
</ItemGroup> </ItemGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Http.Features' AND '$(TargetFramework)' == 'netstandard2.0' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Http.Features' AND '$(TargetFramework)' == 'netstandard2.0' ">
<BaselinePackageReference Include="Microsoft.Extensions.Primitives" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.Primitives" Version="[3.1.1, )" />
<BaselinePackageReference Include="System.IO.Pipelines" Version="[4.7.0, )" /> <BaselinePackageReference Include="System.IO.Pipelines" Version="[4.7.0, )" />
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.AspNetCore.Identity.EntityFrameworkCore--> <!-- Package: Microsoft.AspNetCore.Identity.EntityFrameworkCore-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Identity.EntityFrameworkCore' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Identity.EntityFrameworkCore' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Identity.EntityFrameworkCore' AND '$(TargetFramework)' == 'netcoreapp3.1' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Identity.EntityFrameworkCore' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
<BaselinePackageReference Include="Microsoft.Extensions.Identity.Stores" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.Identity.Stores" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="[3.1.1, )" />
</ItemGroup> </ItemGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Identity.EntityFrameworkCore' AND '$(TargetFramework)' == 'netstandard2.1' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Identity.EntityFrameworkCore' AND '$(TargetFramework)' == 'netstandard2.1' ">
<BaselinePackageReference Include="Microsoft.Extensions.Identity.Stores" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.Identity.Stores" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="[3.1.1, )" />
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.AspNetCore.Identity.Specification.Tests--> <!-- Package: Microsoft.AspNetCore.Identity.Specification.Tests-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Identity.Specification.Tests' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Identity.Specification.Tests' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Identity.Specification.Tests' AND '$(TargetFramework)' == 'netcoreapp3.1' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Identity.Specification.Tests' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
<BaselinePackageReference Include="Microsoft.AspNetCore.Testing" Version="[3.1.0-rtm.19565.4, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.Testing" Version="[3.1.1-servicing.19614.4, )" />
<BaselinePackageReference Include="Microsoft.Extensions.Configuration" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.Configuration" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Extensions.Logging" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.Logging" Version="[3.1.1, )" />
<BaselinePackageReference Include="xunit.assert" Version="[2.4.1, )" /> <BaselinePackageReference Include="xunit.assert" Version="[2.4.1, )" />
<BaselinePackageReference Include="xunit.extensibility.core" Version="[2.4.1, )" /> <BaselinePackageReference Include="xunit.extensibility.core" Version="[2.4.1, )" />
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.AspNetCore.Identity.UI--> <!-- Package: Microsoft.AspNetCore.Identity.UI-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Identity.UI' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Identity.UI' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Identity.UI' AND '$(TargetFramework)' == 'netcoreapp3.1' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Identity.UI' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
<BaselinePackageReference Include="Microsoft.Extensions.Identity.Stores" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.Identity.Stores" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="[3.1.1, )" />
<BaselinePackageReference Include="Newtonsoft.Json" Version="[12.0.2, )" /> <BaselinePackageReference Include="Newtonsoft.Json" Version="[12.0.2, )" />
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.AspNetCore.JsonPatch--> <!-- Package: Microsoft.AspNetCore.JsonPatch-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.JsonPatch' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.JsonPatch' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.JsonPatch' AND '$(TargetFramework)' == 'netstandard2.0' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.JsonPatch' AND '$(TargetFramework)' == 'netstandard2.0' ">
<BaselinePackageReference Include="Microsoft.CSharp" Version="[4.7.0, )" /> <BaselinePackageReference Include="Microsoft.CSharp" Version="[4.7.0, )" />
@ -460,236 +460,238 @@
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.AspNetCore.Metadata--> <!-- Package: Microsoft.AspNetCore.Metadata-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Metadata' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Metadata' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Metadata' AND '$(TargetFramework)' == 'netstandard2.0' " /> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Metadata' AND '$(TargetFramework)' == 'netstandard2.0' " />
<!-- Package: Microsoft.AspNetCore.MiddlewareAnalysis--> <!-- Package: Microsoft.AspNetCore.MiddlewareAnalysis-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.MiddlewareAnalysis' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.MiddlewareAnalysis' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.MiddlewareAnalysis' AND '$(TargetFramework)' == 'netcoreapp3.1' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.MiddlewareAnalysis' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="[3.1.1, )" />
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.AspNetCore.Mvc.NewtonsoftJson--> <!-- Package: Microsoft.AspNetCore.Mvc.NewtonsoftJson-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Mvc.NewtonsoftJson' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Mvc.NewtonsoftJson' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Mvc.NewtonsoftJson' AND '$(TargetFramework)' == 'netcoreapp3.1' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Mvc.NewtonsoftJson' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
<BaselinePackageReference Include="Microsoft.AspNetCore.JsonPatch" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.JsonPatch" Version="[3.1.1, )" />
<BaselinePackageReference Include="Newtonsoft.Json" Version="[12.0.2, )" /> <BaselinePackageReference Include="Newtonsoft.Json" Version="[12.0.2, )" />
<BaselinePackageReference Include="Newtonsoft.Json.Bson" Version="[1.0.2, )" /> <BaselinePackageReference Include="Newtonsoft.Json.Bson" Version="[1.0.2, )" />
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation--> <!-- Package: Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation' AND '$(TargetFramework)' == 'netcoreapp3.1' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
<BaselinePackageReference Include="Microsoft.AspNetCore.Mvc.Razor.Extensions" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.Mvc.Razor.Extensions" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.CodeAnalysis.Razor" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.CodeAnalysis.Razor" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Extensions.DependencyModel" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.DependencyModel" Version="[3.1.1, )" />
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.AspNetCore.Mvc.Testing--> <!-- Package: Microsoft.AspNetCore.Mvc.Testing-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Mvc.Testing' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Mvc.Testing' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Mvc.Testing' AND '$(TargetFramework)' == 'netcoreapp3.1' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Mvc.Testing' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
<BaselinePackageReference Include="Microsoft.AspNetCore.TestHost" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.TestHost" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Extensions.DependencyModel" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.DependencyModel" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Extensions.Hosting" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.Hosting" Version="[3.1.1, )" />
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.AspNetCore.NodeServices--> <!-- Package: Microsoft.AspNetCore.NodeServices-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.NodeServices' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.NodeServices' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.NodeServices' AND '$(TargetFramework)' == 'netcoreapp3.1' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.NodeServices' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
<BaselinePackageReference Include="Microsoft.Extensions.Logging.Console" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.Logging.Console" Version="[3.1.1, )" />
<BaselinePackageReference Include="Newtonsoft.Json" Version="[12.0.2, )" /> <BaselinePackageReference Include="Newtonsoft.Json" Version="[12.0.2, )" />
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.AspNetCore.Owin--> <!-- Package: Microsoft.AspNetCore.Owin-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Owin' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Owin' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Owin' AND '$(TargetFramework)' == 'netcoreapp3.1' " /> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Owin' AND '$(TargetFramework)' == 'netcoreapp3.1' " />
<!-- Package: Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv--> <!-- Package: Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv' AND '$(TargetFramework)' == 'netcoreapp3.1' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
<BaselinePackageReference Include="Microsoft.AspNetCore.Connections.Abstractions" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.Connections.Abstractions" Version="[3.1.1, )" />
<BaselinePackageReference Include="Libuv" Version="[1.10.0, )" /> <BaselinePackageReference Include="Libuv" Version="[1.10.0, )" />
<BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.1, )" />
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.AspNetCore.SignalR.Client--> <!-- Package: Microsoft.AspNetCore.SignalR.Client-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Client' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Client' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Client' AND '$(TargetFramework)' == 'netstandard2.0' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Client' AND '$(TargetFramework)' == 'netstandard2.0' ">
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Client.Core" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Client.Core" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.AspNetCore.Http.Connections.Client" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.Http.Connections.Client" Version="[3.1.1, )" />
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.AspNetCore.SignalR.Client.Core--> <!-- Package: Microsoft.AspNetCore.SignalR.Client.Core-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Client.Core' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Client.Core' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Client.Core' AND '$(TargetFramework)' == 'netstandard2.0' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Client.Core' AND '$(TargetFramework)' == 'netstandard2.0' ">
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.Json" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.Json" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Common" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Common" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="[1.1.0, )" /> <BaselinePackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="[1.1.0, )" />
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Extensions.Logging" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.Logging" Version="[3.1.1, )" />
<BaselinePackageReference Include="System.Threading.Channels" Version="[4.7.0, )" /> <BaselinePackageReference Include="System.Threading.Channels" Version="[4.7.0, )" />
</ItemGroup> </ItemGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Client.Core' AND '$(TargetFramework)' == 'netstandard2.1' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Client.Core' AND '$(TargetFramework)' == 'netstandard2.1' ">
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.Json" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.Json" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Common" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Common" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Extensions.Logging" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.Logging" Version="[3.1.1, )" />
<BaselinePackageReference Include="System.Threading.Channels" Version="[4.7.0, )" /> <BaselinePackageReference Include="System.Threading.Channels" Version="[4.7.0, )" />
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.AspNetCore.SignalR.Common--> <!-- Package: Microsoft.AspNetCore.SignalR.Common-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Common' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Common' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Common' AND '$(TargetFramework)' == 'netcoreapp3.1' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Common' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
<BaselinePackageReference Include="Microsoft.AspNetCore.Connections.Abstractions" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.Connections.Abstractions" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.1, )" />
</ItemGroup> </ItemGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Common' AND '$(TargetFramework)' == 'netstandard2.0' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Common' AND '$(TargetFramework)' == 'netstandard2.0' ">
<BaselinePackageReference Include="Microsoft.AspNetCore.Connections.Abstractions" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.Connections.Abstractions" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.1, )" />
<BaselinePackageReference Include="System.Text.Json" Version="[4.7.0, )" /> <BaselinePackageReference Include="System.Text.Json" Version="[4.7.0, )" />
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.AspNetCore.SignalR.Protocols.Json--> <!-- Package: Microsoft.AspNetCore.SignalR.Protocols.Json-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Protocols.Json' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Protocols.Json' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Protocols.Json' AND '$(TargetFramework)' == 'netcoreapp3.1' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Protocols.Json' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Common" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Common" Version="[3.1.1, )" />
</ItemGroup> </ItemGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Protocols.Json' AND '$(TargetFramework)' == 'netstandard2.0' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Protocols.Json' AND '$(TargetFramework)' == 'netstandard2.0' ">
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Common" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Common" Version="[3.1.1, )" />
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.AspNetCore.SignalR.Protocols.MessagePack--> <!-- Package: Microsoft.AspNetCore.SignalR.Protocols.MessagePack-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Protocols.MessagePack' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Protocols.MessagePack' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Protocols.MessagePack' AND '$(TargetFramework)' == 'netstandard2.0' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Protocols.MessagePack' AND '$(TargetFramework)' == 'netstandard2.0' ">
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Common" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Common" Version="[3.1.1, )" />
<BaselinePackageReference Include="MessagePack" Version="[1.7.3.7, )" /> <BaselinePackageReference Include="MessagePack" Version="[1.7.3.7, )" />
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson--> <!-- Package: Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson' AND '$(TargetFramework)' == 'netstandard2.0' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson' AND '$(TargetFramework)' == 'netstandard2.0' ">
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Common" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Common" Version="[3.1.1, )" />
<BaselinePackageReference Include="Newtonsoft.Json" Version="[12.0.2, )" /> <BaselinePackageReference Include="Newtonsoft.Json" Version="[12.0.2, )" />
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.AspNetCore.SignalR.Specification.Tests--> <!-- Package: Microsoft.AspNetCore.SignalR.Specification.Tests-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Specification.Tests' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Specification.Tests' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Specification.Tests' AND '$(TargetFramework)' == 'netcoreapp3.1' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Specification.Tests' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.Json" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.Json" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.MessagePack" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.MessagePack" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Common" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Common" Version="[3.1.1, )" />
<BaselinePackageReference Include="xunit.assert" Version="[2.4.1, )" /> <BaselinePackageReference Include="xunit.assert" Version="[2.4.1, )" />
<BaselinePackageReference Include="xunit.extensibility.core" Version="[2.4.1, )" /> <BaselinePackageReference Include="xunit.extensibility.core" Version="[2.4.1, )" />
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.AspNetCore.SignalR.StackExchangeRedis--> <!-- Package: Microsoft.AspNetCore.SignalR.StackExchangeRedis-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.StackExchangeRedis' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.StackExchangeRedis' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.StackExchangeRedis' AND '$(TargetFramework)' == 'netcoreapp3.1' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.StackExchangeRedis' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
<BaselinePackageReference Include="MessagePack" Version="[1.7.3.7, )" /> <BaselinePackageReference Include="MessagePack" Version="[1.7.3.7, )" />
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.1, )" />
<BaselinePackageReference Include="StackExchange.Redis" Version="[2.0.593, )" /> <BaselinePackageReference Include="StackExchange.Redis" Version="[2.0.593, )" />
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.AspNetCore.SpaServices--> <!-- Package: Microsoft.AspNetCore.SpaServices-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SpaServices' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SpaServices' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SpaServices' AND '$(TargetFramework)' == 'netcoreapp3.1' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SpaServices' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
<BaselinePackageReference Include="Microsoft.AspNetCore.NodeServices" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.NodeServices" Version="[3.1.1, )" />
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.AspNetCore.SpaServices.Extensions--> <!-- Package: Microsoft.AspNetCore.SpaServices.Extensions-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SpaServices.Extensions' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SpaServices.Extensions' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SpaServices.Extensions' AND '$(TargetFramework)' == 'netcoreapp3.1' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SpaServices.Extensions' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
<BaselinePackageReference Include="Microsoft.AspNetCore.SpaServices" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.SpaServices" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Extensions.FileProviders.Physical" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.FileProviders.Physical" Version="[3.1.1, )" />
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.AspNetCore.TestHost--> <!-- Package: Microsoft.AspNetCore.TestHost-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.TestHost' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.TestHost' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.TestHost' AND '$(TargetFramework)' == 'netcoreapp3.1' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.TestHost' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
<BaselinePackageReference Include="System.IO.Pipelines" Version="[4.7.0, )" /> <BaselinePackageReference Include="System.IO.Pipelines" Version="[4.7.0, )" />
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.dotnet-openapi--> <!-- Package: Microsoft.dotnet-openapi-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.dotnet-openapi' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.dotnet-openapi' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<!-- Package: Microsoft.DotNet.Web.Client.ItemTemplates--> <!-- Package: Microsoft.DotNet.Web.Client.ItemTemplates-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.DotNet.Web.Client.ItemTemplates' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.DotNet.Web.Client.ItemTemplates' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<!-- Package: Microsoft.DotNet.Web.ItemTemplates--> <!-- Package: Microsoft.DotNet.Web.ItemTemplates-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.DotNet.Web.ItemTemplates' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.DotNet.Web.ItemTemplates' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<!-- Package: Microsoft.DotNet.Web.ProjectTemplates.3.1--> <!-- Package: Microsoft.DotNet.Web.ProjectTemplates.3.1-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.DotNet.Web.ProjectTemplates.3.1' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.DotNet.Web.ProjectTemplates.3.1' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<!-- Package: Microsoft.DotNet.Web.Spa.ProjectTemplates.3.1--> <!-- Package: Microsoft.DotNet.Web.Spa.ProjectTemplates.3.1-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.DotNet.Web.Spa.ProjectTemplates.3.1' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.DotNet.Web.Spa.ProjectTemplates.3.1' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<!-- Package: Microsoft.Extensions.ApiDescription.Client--> <!-- Package: Microsoft.Extensions.ApiDescription.Client-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.ApiDescription.Client' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.ApiDescription.Client' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<!-- Package: Microsoft.Extensions.ApiDescription.Server--> <!-- Package: Microsoft.Extensions.ApiDescription.Server-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.ApiDescription.Server' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.ApiDescription.Server' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<!-- Package: Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore--> <!-- Package: Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore' AND '$(TargetFramework)' == 'netstandard2.1' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore' AND '$(TargetFramework)' == 'netstandard2.1' ">
<BaselinePackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions" Version="[3.1.1, )" />
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.Extensions.Identity.Core--> <!-- Package: Microsoft.Extensions.Identity.Core-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.Identity.Core' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.Identity.Core' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.Identity.Core' AND '$(TargetFramework)' == 'netcoreapp3.1' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.Identity.Core' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
<BaselinePackageReference Include="Microsoft.AspNetCore.Cryptography.KeyDerivation" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.Cryptography.KeyDerivation" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Extensions.Logging" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.Logging" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.1, )" />
</ItemGroup> </ItemGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.Identity.Core' AND '$(TargetFramework)' == 'netstandard2.0' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.Identity.Core' AND '$(TargetFramework)' == 'netstandard2.0' ">
<BaselinePackageReference Include="Microsoft.AspNetCore.Cryptography.KeyDerivation" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.AspNetCore.Cryptography.KeyDerivation" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Extensions.Logging" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.Logging" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.1, )" />
</ItemGroup> </ItemGroup>
<!-- Package: Microsoft.Extensions.Identity.Stores--> <!-- Package: Microsoft.Extensions.Identity.Stores-->
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.Identity.Stores' "> <PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.Identity.Stores' ">
<BaselinePackageVersion>3.1.0</BaselinePackageVersion> <BaselinePackageVersion>3.1.1</BaselinePackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.Identity.Stores' AND '$(TargetFramework)' == 'netcoreapp3.1' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.Identity.Stores' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
<BaselinePackageReference Include="Microsoft.Extensions.Identity.Core" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.Identity.Core" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Extensions.Logging" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Extensions.Logging" Version="[3.1.1, )" />
</ItemGroup> </ItemGroup>
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.Identity.Stores' AND '$(TargetFramework)' == 'netstandard2.0' "> <ItemGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.Identity.Stores' AND '$(TargetFramework)' == 'netstandard2.0' ">
<BaselinePackageReference Include="Microsoft.Extensions.Identity.Core" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.Identity.Core" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Extensions.Logging" Version="[3.1.0, )" /> <BaselinePackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="[3.1.1, )" />
<BaselinePackageReference Include="Microsoft.Extensions.Logging" Version="[3.1.1, )" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -4,86 +4,86 @@ This file contains a list of all the packages and their versions which were rele
Update this list when preparing for a new patch. Update this list when preparing for a new patch.
--> -->
<Baseline Version="3.1.0"> <Baseline Version="3.1.1">
<Package Id="AspNetCoreRuntime.3.0.x64" Version="3.0.0" /> <Package Id="AspNetCoreRuntime.3.0.x64" Version="3.0.2" />
<Package Id="AspNetCoreRuntime.3.0.x86" Version="3.0.0" /> <Package Id="AspNetCoreRuntime.3.0.x86" Version="3.0.2" />
<Package Id="dotnet-sql-cache" Version="3.1.0" /> <Package Id="dotnet-sql-cache" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.ApiAuthorization.IdentityServer" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.ApiAuthorization.IdentityServer" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.App.Runtime.win-x64" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.App.Runtime.win-x64" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.Authentication.AzureAD.UI" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.Authentication.AzureAD.UI" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.Authentication.AzureADB2C.UI" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.Authentication.AzureADB2C.UI" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.Authentication.Certificate" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.Authentication.Certificate" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.Authentication.Facebook" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.Authentication.Facebook" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.Authentication.Google" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.Authentication.Google" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.Authentication.JwtBearer" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.Authentication.JwtBearer" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.Authentication.MicrosoftAccount" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.Authentication.MicrosoftAccount" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.Authentication.Negotiate" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.Authentication.Negotiate" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.Authentication.Twitter" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.Authentication.Twitter" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.Authentication.WsFederation" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.Authentication.WsFederation" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.Authorization" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.Authorization" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.AzureAppServices.HostingStartup" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.AzureAppServices.HostingStartup" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.AzureAppServices.SiteExtension" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.AzureAppServices.SiteExtension" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.AzureAppServicesIntegration" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.AzureAppServicesIntegration" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.Blazor" Version="3.0.0-preview9.19465.2" /> <Package Id="Microsoft.AspNetCore.Blazor" Version="3.0.0-preview9.19465.2" />
<Package Id="Microsoft.AspNetCore.Blazor.Build" Version="3.0.0-preview9.19465.2" /> <Package Id="Microsoft.AspNetCore.Blazor.Build" Version="3.0.0-preview9.19465.2" />
<Package Id="Microsoft.AspNetCore.Blazor.DevServer" Version="3.0.0-preview9.19465.2" /> <Package Id="Microsoft.AspNetCore.Blazor.DevServer" Version="3.0.0-preview9.19465.2" />
<Package Id="Microsoft.AspNetCore.Blazor.HttpClient" Version="3.0.0-preview9.19465.2" /> <Package Id="Microsoft.AspNetCore.Blazor.HttpClient" Version="3.0.0-preview9.19465.2" />
<Package Id="Microsoft.AspNetCore.Blazor.Server" Version="3.0.0-preview9.19465.2" /> <Package Id="Microsoft.AspNetCore.Blazor.Server" Version="3.0.0-preview9.19465.2" />
<Package Id="Microsoft.AspNetCore.Blazor.Templates" Version="3.0.0-preview9.19465.2" /> <Package Id="Microsoft.AspNetCore.Blazor.Templates" Version="3.0.0-preview9.19465.2" />
<Package Id="Microsoft.AspNetCore.Components" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.Components" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.Components.Analyzers" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.Components.Analyzers" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.Components.Authorization" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.Components.Authorization" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.Components.Forms" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.Components.Forms" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.Components.Web" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.Components.Web" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.ConcurrencyLimiter" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.ConcurrencyLimiter" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.Connections.Abstractions" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.Connections.Abstractions" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.Cryptography.Internal" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.Cryptography.Internal" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.Cryptography.KeyDerivation" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.Cryptography.KeyDerivation" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.DataProtection" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.DataProtection" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.DataProtection.Abstractions" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.DataProtection.Abstractions" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.DataProtection.AzureKeyVault" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.DataProtection.AzureKeyVault" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.DataProtection.AzureStorage" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.DataProtection.AzureStorage" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.DataProtection.EntityFrameworkCore" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.DataProtection.EntityFrameworkCore" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.DataProtection.Extensions" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.DataProtection.Extensions" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.HeaderPropagation" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.HeaderPropagation" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.Hosting.WindowsServices" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.Hosting.WindowsServices" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.Http.Connections.Client" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.Http.Connections.Client" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.Http.Connections.Common" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.Http.Connections.Common" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.Http.Features" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.Http.Features" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.Identity.Specification.Tests" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.Identity.Specification.Tests" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.Identity.UI" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.Identity.UI" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.JsonPatch" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.JsonPatch" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.Metadata" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.Metadata" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.MiddlewareAnalysis" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.MiddlewareAnalysis" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.Mvc.Testing" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.Mvc.Testing" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.NodeServices" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.NodeServices" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.Owin" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.Owin" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.SignalR.Client" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.SignalR.Client" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.SignalR.Client.Core" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.SignalR.Client.Core" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.SignalR.Common" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.SignalR.Common" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.SignalR.Protocols.Json" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.SignalR.Protocols.Json" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.SignalR.Protocols.MessagePack" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.SignalR.Protocols.MessagePack" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.SignalR.Specification.Tests" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.SignalR.Specification.Tests" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.SignalR.StackExchangeRedis" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.SignalR.StackExchangeRedis" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.SpaServices" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.SpaServices" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.SpaServices.Extensions" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.SpaServices.Extensions" Version="3.1.1" />
<Package Id="Microsoft.AspNetCore.TestHost" Version="3.1.0" /> <Package Id="Microsoft.AspNetCore.TestHost" Version="3.1.1" />
<Package Id="Microsoft.dotnet-openapi" Version="3.1.0" /> <Package Id="Microsoft.dotnet-openapi" Version="3.1.1" />
<Package Id="Microsoft.DotNet.Web.Client.ItemTemplates" Version="3.1.0" /> <Package Id="Microsoft.DotNet.Web.Client.ItemTemplates" Version="3.1.1" />
<Package Id="Microsoft.DotNet.Web.ItemTemplates" Version="3.1.0" /> <Package Id="Microsoft.DotNet.Web.ItemTemplates" Version="3.1.1" />
<Package Id="Microsoft.DotNet.Web.ProjectTemplates.3.1" Version="3.1.0" /> <Package Id="Microsoft.DotNet.Web.ProjectTemplates.3.1" Version="3.1.1" />
<Package Id="Microsoft.DotNet.Web.Spa.ProjectTemplates.3.1" Version="3.1.0" /> <Package Id="Microsoft.DotNet.Web.Spa.ProjectTemplates.3.1" Version="3.1.1" />
<Package Id="Microsoft.Extensions.ApiDescription.Client" Version="3.1.0" /> <Package Id="Microsoft.Extensions.ApiDescription.Client" Version="3.1.1" />
<Package Id="Microsoft.Extensions.ApiDescription.Server" Version="3.1.0" /> <Package Id="Microsoft.Extensions.ApiDescription.Server" Version="3.1.1" />
<Package Id="Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore" Version="3.1.0" /> <Package Id="Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore" Version="3.1.1" />
<Package Id="Microsoft.Extensions.Identity.Core" Version="3.1.0" /> <Package Id="Microsoft.Extensions.Identity.Core" Version="3.1.1" />
<Package Id="Microsoft.Extensions.Identity.Stores" Version="3.1.0" /> <Package Id="Microsoft.Extensions.Identity.Stores" Version="3.1.1" />
</Baseline> </Baseline>

View File

@ -13,281 +13,281 @@
<Uri>https://github.com/aspnet/Blazor</Uri> <Uri>https://github.com/aspnet/Blazor</Uri>
<Sha>7868699de745fd30a654c798a99dc541b77b95c0</Sha> <Sha>7868699de745fd30a654c798a99dc541b77b95c0</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.AspNetCore.Razor.Language" Version="3.1.1-servicing.19605.6"> <Dependency Name="Microsoft.AspNetCore.Razor.Language" Version="3.1.1">
<Uri>https://github.com/aspnet/AspNetCore-Tooling</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-AspNetCore-Tooling</Uri>
<Sha>9cf15bed711983d35362d62972ab87ccc88ba8ca</Sha> <Sha>07f16c89db55ab6f9f773cc3db6eb5a52908065e</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.AspNetCore.Mvc.Razor.Extensions" Version="3.1.1-servicing.19605.6"> <Dependency Name="Microsoft.AspNetCore.Mvc.Razor.Extensions" Version="3.1.1">
<Uri>https://github.com/aspnet/AspNetCore-Tooling</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-AspNetCore-Tooling</Uri>
<Sha>9cf15bed711983d35362d62972ab87ccc88ba8ca</Sha> <Sha>07f16c89db55ab6f9f773cc3db6eb5a52908065e</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.CodeAnalysis.Razor" Version="3.1.1-servicing.19605.6"> <Dependency Name="Microsoft.CodeAnalysis.Razor" Version="3.1.1">
<Uri>https://github.com/aspnet/AspNetCore-Tooling</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-AspNetCore-Tooling</Uri>
<Sha>9cf15bed711983d35362d62972ab87ccc88ba8ca</Sha> <Sha>07f16c89db55ab6f9f773cc3db6eb5a52908065e</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.NET.Sdk.Razor" Version="3.1.1-servicing.19605.6"> <Dependency Name="Microsoft.NET.Sdk.Razor" Version="3.1.1">
<Uri>https://github.com/aspnet/AspNetCore-Tooling</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-AspNetCore-Tooling</Uri>
<Sha>9cf15bed711983d35362d62972ab87ccc88ba8ca</Sha> <Sha>07f16c89db55ab6f9f773cc3db6eb5a52908065e</Sha>
</Dependency> </Dependency>
<Dependency Name="dotnet-ef" Version="3.1.1-servicing.19605.1"> <Dependency Name="dotnet-ef" Version="3.1.1">
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-EntityFrameworkCore</Uri>
<Sha>7f59c0bb92fb33698232f0d7007ebcb0a428b543</Sha> <Sha>fde8a73d63ea11e1f2bdc690cf1b16ba0a449649</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.EntityFrameworkCore.InMemory" Version="3.1.1-servicing.19605.1"> <Dependency Name="Microsoft.EntityFrameworkCore.InMemory" Version="3.1.1">
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-EntityFrameworkCore</Uri>
<Sha>7f59c0bb92fb33698232f0d7007ebcb0a428b543</Sha> <Sha>fde8a73d63ea11e1f2bdc690cf1b16ba0a449649</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.EntityFrameworkCore.Relational" Version="3.1.1-servicing.19605.1"> <Dependency Name="Microsoft.EntityFrameworkCore.Relational" Version="3.1.1">
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-EntityFrameworkCore</Uri>
<Sha>7f59c0bb92fb33698232f0d7007ebcb0a428b543</Sha> <Sha>fde8a73d63ea11e1f2bdc690cf1b16ba0a449649</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.EntityFrameworkCore.Sqlite" Version="3.1.1-servicing.19605.1"> <Dependency Name="Microsoft.EntityFrameworkCore.Sqlite" Version="3.1.1">
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-EntityFrameworkCore</Uri>
<Sha>7f59c0bb92fb33698232f0d7007ebcb0a428b543</Sha> <Sha>fde8a73d63ea11e1f2bdc690cf1b16ba0a449649</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.1-servicing.19605.1"> <Dependency Name="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.1">
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-EntityFrameworkCore</Uri>
<Sha>7f59c0bb92fb33698232f0d7007ebcb0a428b543</Sha> <Sha>fde8a73d63ea11e1f2bdc690cf1b16ba0a449649</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.EntityFrameworkCore.Tools" Version="3.1.1-servicing.19605.1"> <Dependency Name="Microsoft.EntityFrameworkCore.Tools" Version="3.1.1">
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-EntityFrameworkCore</Uri>
<Sha>7f59c0bb92fb33698232f0d7007ebcb0a428b543</Sha> <Sha>fde8a73d63ea11e1f2bdc690cf1b16ba0a449649</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.EntityFrameworkCore" Version="3.1.1-servicing.19605.1"> <Dependency Name="Microsoft.EntityFrameworkCore" Version="3.1.1">
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-EntityFrameworkCore</Uri>
<Sha>7f59c0bb92fb33698232f0d7007ebcb0a428b543</Sha> <Sha>fde8a73d63ea11e1f2bdc690cf1b16ba0a449649</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.AspNetCore.Analyzer.Testing" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.AspNetCore.Analyzer.Testing" Version="3.1.1-servicing.19614.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.AspNetCore.BenchmarkRunner.Sources" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.AspNetCore.BenchmarkRunner.Sources" Version="3.1.1-servicing.19614.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.ActivatorUtilities.Sources" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.ActivatorUtilities.Sources" Version="3.1.1-servicing.19614.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Caching.Abstractions" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Caching.Abstractions" Version="3.1.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Caching.Memory" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Caching.Memory" Version="3.1.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Caching.SqlServer" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Caching.SqlServer" Version="3.1.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Caching.StackExchangeRedis" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Caching.StackExchangeRedis" Version="3.1.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.CommandLineUtils.Sources" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.CommandLineUtils.Sources" Version="3.1.1-servicing.19614.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.Abstractions" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Configuration.Abstractions" Version="3.1.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.AzureKeyVault" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Configuration.AzureKeyVault" Version="3.1.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.Binder" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Configuration.Binder" Version="3.1.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.CommandLine" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Configuration.CommandLine" Version="3.1.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="3.1.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.FileExtensions" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Configuration.FileExtensions" Version="3.1.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.Ini" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Configuration.Ini" Version="3.1.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.Json" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Configuration.Json" Version="3.1.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.KeyPerFile" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Configuration.KeyPerFile" Version="3.1.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.UserSecrets" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Configuration.UserSecrets" Version="3.1.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.Xml" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Configuration.Xml" Version="3.1.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Configuration" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Configuration" Version="3.1.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.DependencyInjection.Abstractions" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.DependencyInjection.Abstractions" Version="3.1.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.DependencyInjection" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.DependencyInjection" Version="3.1.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.DiagnosticAdapter" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.DiagnosticAdapter" Version="3.1.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions" Version="3.1.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Diagnostics.HealthChecks" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Diagnostics.HealthChecks" Version="3.1.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.FileProviders.Abstractions" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.FileProviders.Abstractions" Version="3.1.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.FileProviders.Composite" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.FileProviders.Composite" Version="3.1.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.FileProviders.Embedded" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.FileProviders.Embedded" Version="3.1.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.FileProviders.Physical" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.FileProviders.Physical" Version="3.1.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.FileSystemGlobbing" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.FileSystemGlobbing" Version="3.1.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.HashCodeCombiner.Sources" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.HashCodeCombiner.Sources" Version="3.1.1-servicing.19614.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Hosting.Abstractions" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Hosting.Abstractions" Version="3.1.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Hosting" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Hosting" Version="3.1.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.HostFactoryResolver.Sources" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.HostFactoryResolver.Sources" Version="3.1.1-servicing.19614.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Http" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Http" Version="3.1.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Localization.Abstractions" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Localization.Abstractions" Version="3.1.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Localization" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Localization" Version="3.1.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Logging.Abstractions" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Logging.Abstractions" Version="3.1.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Logging.AzureAppServices" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Logging.AzureAppServices" Version="3.1.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Logging.Configuration" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Logging.Configuration" Version="3.1.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Logging.Console" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Logging.Console" Version="3.1.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Logging.Debug" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Logging.Debug" Version="3.1.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Logging.EventSource" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Logging.EventSource" Version="3.1.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Logging.EventLog" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Logging.EventLog" Version="3.1.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Logging.TraceSource" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Logging.TraceSource" Version="3.1.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Logging.Testing" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Logging.Testing" Version="3.1.1-servicing.19614.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Logging" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Logging" Version="3.1.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.ObjectPool" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.ObjectPool" Version="3.1.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Options.ConfigurationExtensions" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Options.ConfigurationExtensions" Version="3.1.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Options.DataAnnotations" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Options.DataAnnotations" Version="3.1.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Options" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Options" Version="3.1.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.ParameterDefaultValue.Sources" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.ParameterDefaultValue.Sources" Version="3.1.1-servicing.19614.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.Primitives" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.Primitives" Version="3.1.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.TypeNameHelper.Sources" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.TypeNameHelper.Sources" Version="3.1.1-servicing.19614.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.ValueStopwatch.Sources" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.ValueStopwatch.Sources" Version="3.1.1-servicing.19614.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.WebEncoders" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.Extensions.WebEncoders" Version="3.1.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.JSInterop" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.JSInterop" Version="3.1.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Mono.WebAssembly.Interop" Version="3.1.1-preview4.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Mono.WebAssembly.Interop" Version="3.1.1-preview4.19614.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Bcl.AsyncInterfaces" Version="1.1.0" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64"> <Dependency Name="Microsoft.Bcl.AsyncInterfaces" Version="1.1.0" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/corefx</Uri> <Uri>https://github.com/dotnet/corefx</Uri>
@ -377,25 +377,25 @@
<Uri>https://github.com/dotnet/corefx</Uri> <Uri>https://github.com/dotnet/corefx</Uri>
<Sha>0f7f38c4fd323b26da10cce95f857f77f0f09b48</Sha> <Sha>0f7f38c4fd323b26da10cce95f857f77f0f09b48</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Extensions.DependencyModel" Version="3.1.1-servicing.19576.9" CoherentParentDependency="Microsoft.Extensions.Logging"> <Dependency Name="Microsoft.Extensions.DependencyModel" Version="3.1.1" CoherentParentDependency="Microsoft.Extensions.Logging">
<Uri>https://github.com/dotnet/core-setup</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/dotnet-core-setup</Uri>
<Sha>f3f2dd583fffa254015fc21ff0e45784b333256d</Sha> <Sha>a1388f194c30cb21b36b75982962cb5e35954e4e</Sha>
</Dependency> </Dependency>
<!-- <!--
Win-x64 is used here because we have picked an arbitrary runtime identifier to flow the version of the latest NETCore.App runtime. Win-x64 is used here because we have picked an arbitrary runtime identifier to flow the version of the latest NETCore.App runtime.
All Runtime.$rid packages should have the same version. All Runtime.$rid packages should have the same version.
--> -->
<Dependency Name="Microsoft.NETCore.App.Runtime.win-x64" Version="3.1.1-servicing.19576.9" CoherentParentDependency="Microsoft.Extensions.Logging"> <Dependency Name="Microsoft.NETCore.App.Runtime.win-x64" Version="3.1.1" CoherentParentDependency="Microsoft.Extensions.Logging">
<Uri>https://github.com/dotnet/core-setup</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/dotnet-core-setup</Uri>
<Sha>f3f2dd583fffa254015fc21ff0e45784b333256d</Sha> <Sha>a1388f194c30cb21b36b75982962cb5e35954e4e</Sha>
</Dependency> </Dependency>
<Dependency Name="NETStandard.Library.Ref" Version="2.1.0" Pinned="true"> <Dependency Name="NETStandard.Library.Ref" Version="2.1.0" Pinned="true">
<Uri>https://github.com/dotnet/core-setup</Uri> <Uri>https://github.com/dotnet/core-setup</Uri>
<Sha>7d57652f33493fa022125b7f63aad0d70c52d810</Sha> <Sha>7d57652f33493fa022125b7f63aad0d70c52d810</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.NETCore.App.Internal" Version="3.1.1-servicing.19576.9" CoherentParentDependency="Microsoft.Extensions.Logging"> <Dependency Name="Microsoft.NETCore.App.Internal" Version="3.1.1-servicing.19608.4" CoherentParentDependency="Microsoft.Extensions.Logging">
<Uri>https://github.com/dotnet/core-setup</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/dotnet-core-setup</Uri>
<Sha>f3f2dd583fffa254015fc21ff0e45784b333256d</Sha> <Sha>a1388f194c30cb21b36b75982962cb5e35954e4e</Sha>
</Dependency> </Dependency>
<!-- Keep these dependencies at the bottom of ProductDependencies, else they will be picked as the parent for CoherentParentDependencies --> <!-- Keep these dependencies at the bottom of ProductDependencies, else they will be picked as the parent for CoherentParentDependencies -->
<Dependency Name="Microsoft.NETCore.App.Ref" Version="3.1.0" Pinned="true"> <Dependency Name="Microsoft.NETCore.App.Ref" Version="3.1.0" Pinned="true">
@ -413,9 +413,9 @@
<Uri>https://github.com/dotnet/corefx</Uri> <Uri>https://github.com/dotnet/corefx</Uri>
<Sha>0f7f38c4fd323b26da10cce95f857f77f0f09b48</Sha> <Sha>0f7f38c4fd323b26da10cce95f857f77f0f09b48</Sha>
</Dependency> </Dependency>
<Dependency Name="Internal.AspNetCore.Analyzers" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Internal.AspNetCore.Analyzers" Version="3.1.1-servicing.19614.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.DotNet.GenAPI" Version="1.0.0-beta.19607.3"> <Dependency Name="Microsoft.DotNet.GenAPI" Version="1.0.0-beta.19607.3">
<Uri>https://github.com/dotnet/arcade</Uri> <Uri>https://github.com/dotnet/arcade</Uri>
@ -429,9 +429,9 @@
<Uri>https://github.com/dotnet/arcade</Uri> <Uri>https://github.com/dotnet/arcade</Uri>
<Sha>4d80b9cfa53e309c8f685abff3512f60c3d8a3d1</Sha> <Sha>4d80b9cfa53e309c8f685abff3512f60c3d8a3d1</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.AspNetCore.Testing" Version="3.1.1-servicing.19604.6" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.AspNetCore.Testing" Version="3.1.1-servicing.19614.4" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri> <Uri>https://dev.azure.com/dnceng/internal/_git/aspnet-Extensions</Uri>
<Sha>d40e21ccc14908a054b2181b1d6aeb22c49c630d</Sha> <Sha>d00c382ec5d68a85d2eb4a49ab4559b8db7a2390</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.Net.Compilers.Toolset" Version="3.4.0-beta4-19569-03" CoherentParentDependency="Microsoft.Extensions.Logging"> <Dependency Name="Microsoft.Net.Compilers.Toolset" Version="3.4.0-beta4-19569-03" CoherentParentDependency="Microsoft.Extensions.Logging">
<Uri>https://github.com/dotnet/roslyn</Uri> <Uri>https://github.com/dotnet/roslyn</Uri>

View File

@ -8,12 +8,12 @@
<PropertyGroup Label="Version settings"> <PropertyGroup Label="Version settings">
<AspNetCoreMajorVersion>3</AspNetCoreMajorVersion> <AspNetCoreMajorVersion>3</AspNetCoreMajorVersion>
<AspNetCoreMinorVersion>1</AspNetCoreMinorVersion> <AspNetCoreMinorVersion>1</AspNetCoreMinorVersion>
<AspNetCorePatchVersion>1</AspNetCorePatchVersion> <AspNetCorePatchVersion>2</AspNetCorePatchVersion>
<PreReleasePreviewNumber>0</PreReleasePreviewNumber> <PreReleasePreviewNumber>0</PreReleasePreviewNumber>
<!-- <!--
When StabilizePackageVersion is set to 'true', this branch will produce stable outputs for 'Shipping' packages When StabilizePackageVersion is set to 'true', this branch will produce stable outputs for 'Shipping' packages
--> -->
<StabilizePackageVersion Condition="'$(StabilizePackageVersion)' == ''">false</StabilizePackageVersion> <StabilizePackageVersion Condition="'$(StabilizePackageVersion)' == ''">true</StabilizePackageVersion>
<DotNetFinalVersionKind Condition="'$(StabilizePackageVersion)' == 'true'">release</DotNetFinalVersionKind> <DotNetFinalVersionKind Condition="'$(StabilizePackageVersion)' == 'true'">release</DotNetFinalVersionKind>
<IncludePreReleaseLabelInPackageVersion>true</IncludePreReleaseLabelInPackageVersion> <IncludePreReleaseLabelInPackageVersion>true</IncludePreReleaseLabelInPackageVersion>
<IncludePreReleaseLabelInPackageVersion Condition=" '$(DotNetFinalVersionKind)' == 'release' ">false</IncludePreReleaseLabelInPackageVersion> <IncludePreReleaseLabelInPackageVersion Condition=" '$(DotNetFinalVersionKind)' == 'release' ">false</IncludePreReleaseLabelInPackageVersion>
@ -66,10 +66,10 @@
<!-- Packages from dotnet/roslyn --> <!-- Packages from dotnet/roslyn -->
<MicrosoftNetCompilersToolsetPackageVersion>3.4.0-beta4-19569-03</MicrosoftNetCompilersToolsetPackageVersion> <MicrosoftNetCompilersToolsetPackageVersion>3.4.0-beta4-19569-03</MicrosoftNetCompilersToolsetPackageVersion>
<!-- Packages from dotnet/core-setup --> <!-- Packages from dotnet/core-setup -->
<MicrosoftExtensionsDependencyModelPackageVersion>3.1.1-servicing.19576.9</MicrosoftExtensionsDependencyModelPackageVersion> <MicrosoftExtensionsDependencyModelPackageVersion>3.1.1</MicrosoftExtensionsDependencyModelPackageVersion>
<MicrosoftNETCoreAppInternalPackageVersion>3.1.1-servicing.19576.9</MicrosoftNETCoreAppInternalPackageVersion> <MicrosoftNETCoreAppInternalPackageVersion>3.1.1-servicing.19608.4</MicrosoftNETCoreAppInternalPackageVersion>
<MicrosoftNETCoreAppRefPackageVersion>3.1.0</MicrosoftNETCoreAppRefPackageVersion> <MicrosoftNETCoreAppRefPackageVersion>3.1.0</MicrosoftNETCoreAppRefPackageVersion>
<MicrosoftNETCoreAppRuntimewinx64PackageVersion>3.1.1-servicing.19576.9</MicrosoftNETCoreAppRuntimewinx64PackageVersion> <MicrosoftNETCoreAppRuntimewinx64PackageVersion>3.1.1</MicrosoftNETCoreAppRuntimewinx64PackageVersion>
<NETStandardLibraryRefPackageVersion>2.1.0</NETStandardLibraryRefPackageVersion> <NETStandardLibraryRefPackageVersion>2.1.0</NETStandardLibraryRefPackageVersion>
<!-- Packages from dotnet/corefx --> <!-- Packages from dotnet/corefx -->
<MicrosoftBclAsyncInterfacesPackageVersion>1.1.0</MicrosoftBclAsyncInterfacesPackageVersion> <MicrosoftBclAsyncInterfacesPackageVersion>1.1.0</MicrosoftBclAsyncInterfacesPackageVersion>
@ -99,80 +99,80 @@
<!-- Packages from aspnet/Blazor --> <!-- Packages from aspnet/Blazor -->
<MicrosoftAspNetCoreBlazorMonoPackageVersion>3.1.0-preview4.19605.1</MicrosoftAspNetCoreBlazorMonoPackageVersion> <MicrosoftAspNetCoreBlazorMonoPackageVersion>3.1.0-preview4.19605.1</MicrosoftAspNetCoreBlazorMonoPackageVersion>
<!-- Packages from aspnet/Extensions --> <!-- Packages from aspnet/Extensions -->
<InternalAspNetCoreAnalyzersPackageVersion>3.1.1-servicing.19604.6</InternalAspNetCoreAnalyzersPackageVersion> <InternalAspNetCoreAnalyzersPackageVersion>3.1.1-servicing.19614.4</InternalAspNetCoreAnalyzersPackageVersion>
<MicrosoftAspNetCoreAnalyzerTestingPackageVersion>3.1.1-servicing.19604.6</MicrosoftAspNetCoreAnalyzerTestingPackageVersion> <MicrosoftAspNetCoreAnalyzerTestingPackageVersion>3.1.1-servicing.19614.4</MicrosoftAspNetCoreAnalyzerTestingPackageVersion>
<MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>3.1.1-servicing.19604.6</MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion> <MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>3.1.1-servicing.19614.4</MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>
<MicrosoftAspNetCoreTestingPackageVersion>3.1.1-servicing.19604.6</MicrosoftAspNetCoreTestingPackageVersion> <MicrosoftAspNetCoreTestingPackageVersion>3.1.1-servicing.19614.4</MicrosoftAspNetCoreTestingPackageVersion>
<MicrosoftExtensionsActivatorUtilitiesSourcesPackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsActivatorUtilitiesSourcesPackageVersion> <MicrosoftExtensionsActivatorUtilitiesSourcesPackageVersion>3.1.1-servicing.19614.4</MicrosoftExtensionsActivatorUtilitiesSourcesPackageVersion>
<MicrosoftExtensionsCachingAbstractionsPackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsCachingAbstractionsPackageVersion> <MicrosoftExtensionsCachingAbstractionsPackageVersion>3.1.1</MicrosoftExtensionsCachingAbstractionsPackageVersion>
<MicrosoftExtensionsCachingMemoryPackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsCachingMemoryPackageVersion> <MicrosoftExtensionsCachingMemoryPackageVersion>3.1.1</MicrosoftExtensionsCachingMemoryPackageVersion>
<MicrosoftExtensionsCachingSqlServerPackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsCachingSqlServerPackageVersion> <MicrosoftExtensionsCachingSqlServerPackageVersion>3.1.1</MicrosoftExtensionsCachingSqlServerPackageVersion>
<MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsCachingStackExchangeRedisPackageVersion> <MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>3.1.1</MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>
<MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion> <MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>3.1.1-servicing.19614.4</MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>
<MicrosoftExtensionsConfigurationAbstractionsPackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsConfigurationAbstractionsPackageVersion> <MicrosoftExtensionsConfigurationAbstractionsPackageVersion>3.1.1</MicrosoftExtensionsConfigurationAbstractionsPackageVersion>
<MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion> <MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>3.1.1</MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>
<MicrosoftExtensionsConfigurationBinderPackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsConfigurationBinderPackageVersion> <MicrosoftExtensionsConfigurationBinderPackageVersion>3.1.1</MicrosoftExtensionsConfigurationBinderPackageVersion>
<MicrosoftExtensionsConfigurationCommandLinePackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsConfigurationCommandLinePackageVersion> <MicrosoftExtensionsConfigurationCommandLinePackageVersion>3.1.1</MicrosoftExtensionsConfigurationCommandLinePackageVersion>
<MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion> <MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>3.1.1</MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>
<MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsConfigurationFileExtensionsPackageVersion> <MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>3.1.1</MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>
<MicrosoftExtensionsConfigurationIniPackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsConfigurationIniPackageVersion> <MicrosoftExtensionsConfigurationIniPackageVersion>3.1.1</MicrosoftExtensionsConfigurationIniPackageVersion>
<MicrosoftExtensionsConfigurationJsonPackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsConfigurationJsonPackageVersion> <MicrosoftExtensionsConfigurationJsonPackageVersion>3.1.1</MicrosoftExtensionsConfigurationJsonPackageVersion>
<MicrosoftExtensionsConfigurationKeyPerFilePackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsConfigurationKeyPerFilePackageVersion> <MicrosoftExtensionsConfigurationKeyPerFilePackageVersion>3.1.1</MicrosoftExtensionsConfigurationKeyPerFilePackageVersion>
<MicrosoftExtensionsConfigurationPackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsConfigurationPackageVersion> <MicrosoftExtensionsConfigurationPackageVersion>3.1.1</MicrosoftExtensionsConfigurationPackageVersion>
<MicrosoftExtensionsConfigurationUserSecretsPackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsConfigurationUserSecretsPackageVersion> <MicrosoftExtensionsConfigurationUserSecretsPackageVersion>3.1.1</MicrosoftExtensionsConfigurationUserSecretsPackageVersion>
<MicrosoftExtensionsConfigurationXmlPackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsConfigurationXmlPackageVersion> <MicrosoftExtensionsConfigurationXmlPackageVersion>3.1.1</MicrosoftExtensionsConfigurationXmlPackageVersion>
<MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion> <MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>3.1.1</MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>
<MicrosoftExtensionsDependencyInjectionPackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsDependencyInjectionPackageVersion> <MicrosoftExtensionsDependencyInjectionPackageVersion>3.1.1</MicrosoftExtensionsDependencyInjectionPackageVersion>
<MicrosoftExtensionsDiagnosticAdapterPackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsDiagnosticAdapterPackageVersion> <MicrosoftExtensionsDiagnosticAdapterPackageVersion>3.1.1</MicrosoftExtensionsDiagnosticAdapterPackageVersion>
<MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsPackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsPackageVersion> <MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsPackageVersion>3.1.1</MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsPackageVersion>
<MicrosoftExtensionsDiagnosticsHealthChecksPackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsDiagnosticsHealthChecksPackageVersion> <MicrosoftExtensionsDiagnosticsHealthChecksPackageVersion>3.1.1</MicrosoftExtensionsDiagnosticsHealthChecksPackageVersion>
<MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsFileProvidersAbstractionsPackageVersion> <MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>3.1.1</MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>
<MicrosoftExtensionsFileProvidersCompositePackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsFileProvidersCompositePackageVersion> <MicrosoftExtensionsFileProvidersCompositePackageVersion>3.1.1</MicrosoftExtensionsFileProvidersCompositePackageVersion>
<MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsFileProvidersEmbeddedPackageVersion> <MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>3.1.1</MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>
<MicrosoftExtensionsFileProvidersPhysicalPackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsFileProvidersPhysicalPackageVersion> <MicrosoftExtensionsFileProvidersPhysicalPackageVersion>3.1.1</MicrosoftExtensionsFileProvidersPhysicalPackageVersion>
<MicrosoftExtensionsFileSystemGlobbingPackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsFileSystemGlobbingPackageVersion> <MicrosoftExtensionsFileSystemGlobbingPackageVersion>3.1.1</MicrosoftExtensionsFileSystemGlobbingPackageVersion>
<MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion> <MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion>3.1.1-servicing.19614.4</MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion>
<MicrosoftExtensionsHostingAbstractionsPackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsHostingAbstractionsPackageVersion> <MicrosoftExtensionsHostingAbstractionsPackageVersion>3.1.1</MicrosoftExtensionsHostingAbstractionsPackageVersion>
<MicrosoftExtensionsHostingPackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsHostingPackageVersion> <MicrosoftExtensionsHostingPackageVersion>3.1.1</MicrosoftExtensionsHostingPackageVersion>
<MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion> <MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion>3.1.1-servicing.19614.4</MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion>
<MicrosoftExtensionsHttpPackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsHttpPackageVersion> <MicrosoftExtensionsHttpPackageVersion>3.1.1</MicrosoftExtensionsHttpPackageVersion>
<MicrosoftExtensionsLocalizationAbstractionsPackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsLocalizationAbstractionsPackageVersion> <MicrosoftExtensionsLocalizationAbstractionsPackageVersion>3.1.1</MicrosoftExtensionsLocalizationAbstractionsPackageVersion>
<MicrosoftExtensionsLocalizationPackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsLocalizationPackageVersion> <MicrosoftExtensionsLocalizationPackageVersion>3.1.1</MicrosoftExtensionsLocalizationPackageVersion>
<MicrosoftExtensionsLoggingAbstractionsPackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsLoggingAbstractionsPackageVersion> <MicrosoftExtensionsLoggingAbstractionsPackageVersion>3.1.1</MicrosoftExtensionsLoggingAbstractionsPackageVersion>
<MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsLoggingAzureAppServicesPackageVersion> <MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>3.1.1</MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>
<MicrosoftExtensionsLoggingConfigurationPackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsLoggingConfigurationPackageVersion> <MicrosoftExtensionsLoggingConfigurationPackageVersion>3.1.1</MicrosoftExtensionsLoggingConfigurationPackageVersion>
<MicrosoftExtensionsLoggingConsolePackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsLoggingConsolePackageVersion> <MicrosoftExtensionsLoggingConsolePackageVersion>3.1.1</MicrosoftExtensionsLoggingConsolePackageVersion>
<MicrosoftExtensionsLoggingDebugPackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsLoggingDebugPackageVersion> <MicrosoftExtensionsLoggingDebugPackageVersion>3.1.1</MicrosoftExtensionsLoggingDebugPackageVersion>
<MicrosoftExtensionsLoggingEventSourcePackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsLoggingEventSourcePackageVersion> <MicrosoftExtensionsLoggingEventSourcePackageVersion>3.1.1</MicrosoftExtensionsLoggingEventSourcePackageVersion>
<MicrosoftExtensionsLoggingEventLogPackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsLoggingEventLogPackageVersion> <MicrosoftExtensionsLoggingEventLogPackageVersion>3.1.1</MicrosoftExtensionsLoggingEventLogPackageVersion>
<MicrosoftExtensionsLoggingPackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsLoggingPackageVersion> <MicrosoftExtensionsLoggingPackageVersion>3.1.1</MicrosoftExtensionsLoggingPackageVersion>
<MicrosoftExtensionsLoggingTestingPackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsLoggingTestingPackageVersion> <MicrosoftExtensionsLoggingTestingPackageVersion>3.1.1-servicing.19614.4</MicrosoftExtensionsLoggingTestingPackageVersion>
<MicrosoftExtensionsLoggingTraceSourcePackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsLoggingTraceSourcePackageVersion> <MicrosoftExtensionsLoggingTraceSourcePackageVersion>3.1.1</MicrosoftExtensionsLoggingTraceSourcePackageVersion>
<MicrosoftExtensionsObjectPoolPackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsObjectPoolPackageVersion> <MicrosoftExtensionsObjectPoolPackageVersion>3.1.1</MicrosoftExtensionsObjectPoolPackageVersion>
<MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion> <MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>3.1.1</MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>
<MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsOptionsDataAnnotationsPackageVersion> <MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>3.1.1</MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>
<MicrosoftExtensionsOptionsPackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsOptionsPackageVersion> <MicrosoftExtensionsOptionsPackageVersion>3.1.1</MicrosoftExtensionsOptionsPackageVersion>
<MicrosoftExtensionsParameterDefaultValueSourcesPackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsParameterDefaultValueSourcesPackageVersion> <MicrosoftExtensionsParameterDefaultValueSourcesPackageVersion>3.1.1-servicing.19614.4</MicrosoftExtensionsParameterDefaultValueSourcesPackageVersion>
<MicrosoftExtensionsPrimitivesPackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsPrimitivesPackageVersion> <MicrosoftExtensionsPrimitivesPackageVersion>3.1.1</MicrosoftExtensionsPrimitivesPackageVersion>
<MicrosoftExtensionsTypeNameHelperSourcesPackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsTypeNameHelperSourcesPackageVersion> <MicrosoftExtensionsTypeNameHelperSourcesPackageVersion>3.1.1-servicing.19614.4</MicrosoftExtensionsTypeNameHelperSourcesPackageVersion>
<MicrosoftExtensionsValueStopwatchSourcesPackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsValueStopwatchSourcesPackageVersion> <MicrosoftExtensionsValueStopwatchSourcesPackageVersion>3.1.1-servicing.19614.4</MicrosoftExtensionsValueStopwatchSourcesPackageVersion>
<MicrosoftExtensionsWebEncodersPackageVersion>3.1.1-servicing.19604.6</MicrosoftExtensionsWebEncodersPackageVersion> <MicrosoftExtensionsWebEncodersPackageVersion>3.1.1</MicrosoftExtensionsWebEncodersPackageVersion>
<MicrosoftInternalExtensionsRefsPackageVersion>3.1.0-rtm.19565.4</MicrosoftInternalExtensionsRefsPackageVersion> <MicrosoftInternalExtensionsRefsPackageVersion>3.1.0-rtm.19565.4</MicrosoftInternalExtensionsRefsPackageVersion>
<MicrosoftJSInteropPackageVersion>3.1.1-servicing.19604.6</MicrosoftJSInteropPackageVersion> <MicrosoftJSInteropPackageVersion>3.1.1</MicrosoftJSInteropPackageVersion>
<MonoWebAssemblyInteropPackageVersion>3.1.1-preview4.19604.6</MonoWebAssemblyInteropPackageVersion> <MonoWebAssemblyInteropPackageVersion>3.1.1-preview4.19614.4</MonoWebAssemblyInteropPackageVersion>
<!-- Packages from aspnet/EntityFrameworkCore --> <!-- Packages from aspnet/EntityFrameworkCore -->
<dotnetefPackageVersion>3.1.1-servicing.19605.1</dotnetefPackageVersion> <dotnetefPackageVersion>3.1.1</dotnetefPackageVersion>
<MicrosoftEntityFrameworkCoreInMemoryPackageVersion>3.1.1-servicing.19605.1</MicrosoftEntityFrameworkCoreInMemoryPackageVersion> <MicrosoftEntityFrameworkCoreInMemoryPackageVersion>3.1.1</MicrosoftEntityFrameworkCoreInMemoryPackageVersion>
<MicrosoftEntityFrameworkCoreRelationalPackageVersion>3.1.1-servicing.19605.1</MicrosoftEntityFrameworkCoreRelationalPackageVersion> <MicrosoftEntityFrameworkCoreRelationalPackageVersion>3.1.1</MicrosoftEntityFrameworkCoreRelationalPackageVersion>
<MicrosoftEntityFrameworkCoreSqlitePackageVersion>3.1.1-servicing.19605.1</MicrosoftEntityFrameworkCoreSqlitePackageVersion> <MicrosoftEntityFrameworkCoreSqlitePackageVersion>3.1.1</MicrosoftEntityFrameworkCoreSqlitePackageVersion>
<MicrosoftEntityFrameworkCoreSqlServerPackageVersion>3.1.1-servicing.19605.1</MicrosoftEntityFrameworkCoreSqlServerPackageVersion> <MicrosoftEntityFrameworkCoreSqlServerPackageVersion>3.1.1</MicrosoftEntityFrameworkCoreSqlServerPackageVersion>
<MicrosoftEntityFrameworkCoreToolsPackageVersion>3.1.1-servicing.19605.1</MicrosoftEntityFrameworkCoreToolsPackageVersion> <MicrosoftEntityFrameworkCoreToolsPackageVersion>3.1.1</MicrosoftEntityFrameworkCoreToolsPackageVersion>
<MicrosoftEntityFrameworkCorePackageVersion>3.1.1-servicing.19605.1</MicrosoftEntityFrameworkCorePackageVersion> <MicrosoftEntityFrameworkCorePackageVersion>3.1.1</MicrosoftEntityFrameworkCorePackageVersion>
<!-- Packages from aspnet/AspNetCore-Tooling --> <!-- Packages from aspnet/AspNetCore-Tooling -->
<MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>3.1.1-servicing.19605.6</MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion> <MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>3.1.1</MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>
<MicrosoftAspNetCoreRazorLanguagePackageVersion>3.1.1-servicing.19605.6</MicrosoftAspNetCoreRazorLanguagePackageVersion> <MicrosoftAspNetCoreRazorLanguagePackageVersion>3.1.1</MicrosoftAspNetCoreRazorLanguagePackageVersion>
<MicrosoftCodeAnalysisRazorPackageVersion>3.1.1-servicing.19605.6</MicrosoftCodeAnalysisRazorPackageVersion> <MicrosoftCodeAnalysisRazorPackageVersion>3.1.1</MicrosoftCodeAnalysisRazorPackageVersion>
<MicrosoftNETSdkRazorPackageVersion>3.1.1-servicing.19605.6</MicrosoftNETSdkRazorPackageVersion> <MicrosoftNETSdkRazorPackageVersion>3.1.1</MicrosoftNETSdkRazorPackageVersion>
</PropertyGroup> </PropertyGroup>
<!-- <!--
@ -269,5 +269,6 @@
<PropertyGroup Label="Restore feeds"> <PropertyGroup Label="Restore feeds">
<!-- In an orchestrated build, this may be overridden to other Azure feeds. --> <!-- In an orchestrated build, this may be overridden to other Azure feeds. -->
<DotNetAssetRootUrl Condition="'$(DotNetAssetRootUrl)'==''">https://dotnetcli.blob.core.windows.net/dotnet/</DotNetAssetRootUrl> <DotNetAssetRootUrl Condition="'$(DotNetAssetRootUrl)'==''">https://dotnetcli.blob.core.windows.net/dotnet/</DotNetAssetRootUrl>
<DotNetPrivateAssetRootUrl Condition="'$(DotNetPrivateAssetRootUrl)'==''">https://dotnetclimsrc.blob.core.windows.net/dotnet/</DotNetPrivateAssetRootUrl>
</PropertyGroup> </PropertyGroup>
</Project> </Project>

View File

@ -210,7 +210,15 @@ function InstallDotNet {
local runtimeSourceFeedKey='' local runtimeSourceFeedKey=''
if [[ -n "${7:-}" ]]; then if [[ -n "${7:-}" ]]; then
decodedFeedKey=`echo $7 | base64 --decode` # The 'base64' binary on alpine uses '-d' and doesn't support '--decode'
# like the rest of the unix variants. At the same time, MacOS doesn't support
# '-d'. To work around this, do a simple detection and switch the parameter
# accordingly.
decodeArg="--decode"
if base64 --help 2>&1 | grep -q "BusyBox"; then
decodeArg="-d"
fi
decodedFeedKey=`echo $7 | base64 $decodeArg`
runtimeSourceFeedKey="--feed-credential $decodedFeedKey" runtimeSourceFeedKey="--feed-credential $decodedFeedKey"
fi fi

View File

@ -4,7 +4,11 @@
This script runs a quick check for common errors, such as checking that Visual Studio solutions are up to date or that generated code has been committed to source. This script runs a quick check for common errors, such as checking that Visual Studio solutions are up to date or that generated code has been committed to source.
#> #>
param( param(
[switch]$ci [switch]$ci,
# Optional arguments that enable downloading an internal
# runtime or runtime from a non-default location
[string]$DotNetRuntimeSourceFeed,
[string]$DotNetRuntimeSourceFeedKey
) )
$ErrorActionPreference = 'Stop' $ErrorActionPreference = 'Stop'
@ -43,7 +47,12 @@ function LogError {
try { try {
if ($ci) { if ($ci) {
# Install dotnet.exe # Install dotnet.exe
& $repoRoot/restore.cmd -ci -NoBuildNodeJS if ($DotNetRuntimeSourceFeed -or $DotNetRuntimeSourceFeedKey) {
& $repoRoot/restore.cmd -ci -NoBuildNodeJS -DotNetRuntimeSourceFeed $DotNetRuntimeSourceFeed -DotNetRuntimeSourceFeedKey $DotNetRuntimeSourceFeedKey
}
else{
& $repoRoot/restore.cmd -ci -NoBuildNodeJS
}
} }
. "$repoRoot/activate.ps1" . "$repoRoot/activate.ps1"
@ -171,12 +180,13 @@ try {
# Redirect stderr to stdout because PowerShell does not consistently handle output to stderr # Redirect stderr to stdout because PowerShell does not consistently handle output to stderr
$changedFiles = & cmd /c 'git --no-pager diff --ignore-space-at-eol --name-only 2>nul' $changedFiles = & cmd /c 'git --no-pager diff --ignore-space-at-eol --name-only 2>nul'
# Temporary: Disable check for blazor js file # Temporary: Disable check for blazor js file and nuget.config (updated automatically for
$changedFilesExclusion = "src/Components/Web.JS/dist/Release/blazor.server.js" # internal builds)
$changedFilesExclusions = @("src/Components/Web.JS/dist/Release/blazor.server.js", "NuGet.config")
if ($changedFiles) { if ($changedFiles) {
foreach ($file in $changedFiles) { foreach ($file in $changedFiles) {
if ($file -eq $changedFilesExclusion) {continue} if ($changedFilesExclusions -contains $file) {continue}
$filePath = Resolve-Path "${repoRoot}/${file}" $filePath = Resolve-Path "${repoRoot}/${file}"
LogError "Generated code is not up to date in $file. You might need to regenerate the reference assemblies or project list (see docs/ReferenceAssemblies.md and docs/ReferenceResolution.md)" -filepath $filePath LogError "Generated code is not up to date in $file. You might need to regenerate the reference assemblies or project list (see docs/ReferenceAssemblies.md and docs/ReferenceResolution.md)" -filepath $filePath

View File

@ -9,10 +9,31 @@ set -euo pipefail
scriptroot="$( cd -P "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" scriptroot="$( cd -P "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
reporoot="$(dirname "$(dirname "$scriptroot")")" reporoot="$(dirname "$(dirname "$scriptroot")")"
# For local development, make a backup copy of this file first
if [ ! -f "$reporoot/global.bak.json" ]; then
mv "$reporoot/global.json" "$reporoot/global.bak.json"
fi
# Detect the current version of .NET Core installed
export SDK_VERSION=$(dotnet --version)
echo "The ambient version of .NET Core SDK version = $SDK_VERSION"
# Update the global.json file to match the current .NET environment
cat "$reporoot/global.bak.json" | \
jq '.sdk.version=env.SDK_VERSION' | \
jq '.tools.dotnet=env.SDK_VERSION' | \
jq 'del(.tools.runtimes)' \
> "$reporoot/global.json"
# Restore the original global.json file
trap "{
mv "$reporoot/global.bak.json" "$reporoot/global.json"
}" EXIT
# Build repo tasks # Build repo tasks
"$reporoot/eng/common/build.sh" --restore --build --ci --configuration Release /p:ProjectToBuild=$reporoot/eng/tools/RepoTasks/RepoTasks.csproj "$reporoot/eng/common/build.sh" --restore --build --ci --configuration Release /p:ProjectToBuild=$reporoot/eng/tools/RepoTasks/RepoTasks.csproj
export DotNetBuildFromSource='true' export DotNetBuildFromSource='true'
# Build projects # Build projects
"$reporoot/eng/common/build.sh" --restore --build --pack "$@" "$reporoot/eng/common/build.sh" --restore --build --pack "$@"

View File

@ -0,0 +1,149 @@
// Copyright (c) .NET Foundation and contributors. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
using System;
using System.IO;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using System.Collections.Generic;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;
namespace RepoTasks
{
public class DownloadFile : Microsoft.Build.Utilities.Task
{
[Required]
public string Uri { get; set; }
/// <summary>
/// If this field is set and the task fail to download the file from `Uri`, with a NotFound
/// status, it will try to download the file from `PrivateUri`.
/// </summary>
public string PrivateUri { get; set; }
/// <summary>
/// Suffix for the private URI in base64 form (for SAS compatibility)
/// </summary>
public string PrivateUriSuffix { get; set; }
public int MaxRetries { get; set; } = 5;
[Required]
public string DestinationPath { get; set; }
public bool Overwrite { get; set; }
public override bool Execute()
{
return ExecuteAsync().GetAwaiter().GetResult();
}
private async System.Threading.Tasks.Task<bool> ExecuteAsync()
{
string destinationDir = Path.GetDirectoryName(DestinationPath);
if (!Directory.Exists(destinationDir))
{
Directory.CreateDirectory(destinationDir);
}
if (File.Exists(DestinationPath) && !Overwrite)
{
return true;
}
const string FileUriProtocol = "file://";
if (Uri.StartsWith(FileUriProtocol, StringComparison.Ordinal))
{
var filePath = Uri.Substring(FileUriProtocol.Length);
Log.LogMessage($"Copying '{filePath}' to '{DestinationPath}'");
File.Copy(filePath, DestinationPath);
return true;
}
List<string> errorMessages = new List<string>();
bool? downloadStatus = await DownloadWithRetriesAsync(Uri, DestinationPath, errorMessages);
if (downloadStatus == false && !string.IsNullOrEmpty(PrivateUri))
{
string uriSuffix = "";
if (!string.IsNullOrEmpty(PrivateUriSuffix))
{
var uriSuffixBytes = System.Convert.FromBase64String(PrivateUriSuffix);
uriSuffix = System.Text.Encoding.UTF8.GetString(uriSuffixBytes);
}
downloadStatus = await DownloadWithRetriesAsync($"{PrivateUri}{uriSuffix}", DestinationPath, errorMessages);
}
if (downloadStatus != true)
{
foreach (var error in errorMessages)
{
Log.LogError(error);
}
}
return downloadStatus == true;
}
/// <summary>
/// Attempt to download file from `source` with retries when response error is different of FileNotFound and Success.
/// </summary>
/// <param name="source">URL to the file to be downloaded.</param>
/// <param name="target">Local path where to put the downloaded file.</param>
/// <returns>true: Download Succeeded. false: Download failed with 404. null: Download failed but is retriable.</returns>
private async Task<bool?> DownloadWithRetriesAsync(string source, string target, List<string> errorMessages)
{
Random rng = new Random();
Log.LogMessage(MessageImportance.High, $"Attempting download '{source}' to '{target}'");
using (var httpClient = new HttpClient())
{
for (int retryNumber = 0; retryNumber < MaxRetries; retryNumber++)
{
try
{
var httpResponse = await httpClient.GetAsync(source);
Log.LogMessage(MessageImportance.High, $"{source} -> {httpResponse.StatusCode}");
// The Azure Storage REST API returns '400 - Bad Request' in some cases
// where the resource is not found on the storage.
// https://docs.microsoft.com/en-us/rest/api/storageservices/common-rest-api-error-codes
if (httpResponse.StatusCode == HttpStatusCode.NotFound ||
httpResponse.ReasonPhrase.IndexOf("The requested URI does not represent any resource on the server.", StringComparison.OrdinalIgnoreCase) == 0)
{
errorMessages.Add($"Problems downloading file from '{source}'. Does the resource exist on the storage? {httpResponse.StatusCode} : {httpResponse.ReasonPhrase}");
return false;
}
httpResponse.EnsureSuccessStatusCode();
using (var outStream = File.Create(target))
{
await httpResponse.Content.CopyToAsync(outStream);
}
Log.LogMessage(MessageImportance.High, $"returning true {source} -> {httpResponse.StatusCode}");
return true;
}
catch (Exception e)
{
Log.LogMessage(MessageImportance.High, $"returning error in {source} ");
errorMessages.Add($"Problems downloading file from '{source}'. {e.Message} {e.StackTrace}");
File.Delete(target);
}
await System.Threading.Tasks.Task.Delay(rng.Next(1000, 10000));
}
}
Log.LogMessage(MessageImportance.High, $"giving up {source} ");
errorMessages.Add($"Giving up downloading the file from '{source}' after {MaxRetries} retries.");
return null;
}
}
}

View File

@ -10,4 +10,5 @@
<UsingTask TaskName="RepoTasks.GenerateSharedFrameworkDepsFile" AssemblyFile="$(_RepoTaskAssembly)" /> <UsingTask TaskName="RepoTasks.GenerateSharedFrameworkDepsFile" AssemblyFile="$(_RepoTaskAssembly)" />
<UsingTask TaskName="RepoTasks.CreateFrameworkListFile" AssemblyFile="$(_RepoTaskAssembly)" /> <UsingTask TaskName="RepoTasks.CreateFrameworkListFile" AssemblyFile="$(_RepoTaskAssembly)" />
<UsingTask TaskName="RepoTasks.RemoveSharedFrameworkDependencies" AssemblyFile="$(_RepoTaskAssembly)" /> <UsingTask TaskName="RepoTasks.RemoveSharedFrameworkDependencies" AssemblyFile="$(_RepoTaskAssembly)" />
<UsingTask TaskName="RepoTasks.DownloadFile" AssemblyFile="$(_RepoTaskAssembly)" />
</Project> </Project>

View File

@ -38,6 +38,7 @@ This package is an internal implementation of the .NET Core SDK and is not meant
<DotNetRuntimeArchiveFileName>dotnet-runtime-$(MicrosoftNETCoreAppRuntimeVersion)-$(TargetRuntimeIdentifier)$(ArchiveExtension)</DotNetRuntimeArchiveFileName> <DotNetRuntimeArchiveFileName>dotnet-runtime-$(MicrosoftNETCoreAppRuntimeVersion)-$(TargetRuntimeIdentifier)$(ArchiveExtension)</DotNetRuntimeArchiveFileName>
<DotNetRuntimeDownloadUrl>$(DotNetAssetRootUrl)Runtime/$(MicrosoftNETCoreAppInternalPackageVersion)/$(DotNetRuntimeArchiveFileName)</DotNetRuntimeDownloadUrl> <DotNetRuntimeDownloadUrl>$(DotNetAssetRootUrl)Runtime/$(MicrosoftNETCoreAppInternalPackageVersion)/$(DotNetRuntimeArchiveFileName)</DotNetRuntimeDownloadUrl>
<DotNetRuntimePrivateDownloadUrl>$(DotNetPrivateAssetRootUrl)Runtime/$(MicrosoftNETCoreAppInternalPackageVersion)/$(DotNetRuntimeArchiveFileName)</DotNetRuntimePrivateDownloadUrl>
<DotNetRuntimeArchive>$(BaseIntermediateOutputPath)$(DotNetRuntimeArchiveFileName)</DotNetRuntimeArchive> <DotNetRuntimeArchive>$(BaseIntermediateOutputPath)$(DotNetRuntimeArchiveFileName)</DotNetRuntimeArchive>
<!-- Setting this suppresses getting documentation .xml files in the shared runtime output. --> <!-- Setting this suppresses getting documentation .xml files in the shared runtime output. -->
@ -379,9 +380,10 @@ This package is an internal implementation of the .NET Core SDK and is not meant
--> -->
<Target Name="_DownloadAndExtractDotNetRuntime" Condition="'$(DotNetBuildFromSource)' != 'true'"> <Target Name="_DownloadAndExtractDotNetRuntime" Condition="'$(DotNetBuildFromSource)' != 'true'">
<DownloadFile Condition=" ! Exists('$(DotNetRuntimeArchive)')" <DownloadFile Condition=" ! Exists('$(DotNetRuntimeArchive)')"
SourceUrl="$(DotNetRuntimeDownloadUrl)$(DotNetAssetRootAccessTokenSuffix)" Uri="$(DotNetRuntimeDownloadUrl)"
DestinationFolder="$(BaseIntermediateOutputPath)" PrivateUri="$(DotNetRuntimePrivateDownloadUrl)"
DestinationFileName="$(DotNetRuntimeArchiveFileName)" /> PrivateUriSuffix="$(DotNetAssetRootAccessTokenSuffix)"
DestinationPath="$(DotNetRuntimeArchive)" />
<!-- Extract the dotnet-runtime archive --> <!-- Extract the dotnet-runtime archive -->
<Exec Condition="'$(ArchiveExtension)' == '.tar.gz'" <Exec Condition="'$(ArchiveExtension)' == '.tar.gz'"

View File

@ -23,13 +23,15 @@
<PropertyGroup> <PropertyGroup>
<DotNetAssetRootUrl Condition=" '$(DotNetAssetRootUrl)' == '' ">https://dotnetcli.azureedge.net/dotnet/</DotNetAssetRootUrl> <DotNetAssetRootUrl Condition=" '$(DotNetAssetRootUrl)' == '' ">https://dotnetcli.azureedge.net/dotnet/</DotNetAssetRootUrl>
<DotNetAssetRootUrl Condition=" ! $(DotNetAssetRootUrl.EndsWith('/'))">$(DotNetAssetRootUrl)/</DotNetAssetRootUrl> <DotNetAssetRootUrl Condition=" ! $(DotNetAssetRootUrl.EndsWith('/'))">$(DotNetAssetRootUrl)/</DotNetAssetRootUrl>
<DotNetPrivateAssetRootUrl Condition=" '$(DotNetPrivateAssetRootUrl)' == '' ">https://dotnetclimsrc.azureedge.net/dotnet/</DotNetPrivateAssetRootUrl>
<DotNetPrivateAssetRootUrl Condition=" ! $(DotNetPrivateAssetRootUrl.EndsWith('/'))">$(DotNetPrivateAssetRootUrl)/</DotNetPrivateAssetRootUrl>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<RemoteAsset Include="$(DotNetAssetRootUrl)Runtime/$(MicrosoftNETCoreAppInternalPackageVersion)/dotnet-runtime-$(MicrosoftNETCoreAppRuntimeVersion)-win-x64.exe$(DotNetAssetRootAccessTokenSuffix)"> <RemoteAsset Include="Runtime/$(MicrosoftNETCoreAppInternalPackageVersion)/dotnet-runtime-$(MicrosoftNETCoreAppRuntimeVersion)-win-x64.exe">
<TargetFileName>dotnet-runtime-$(MicrosoftNETCoreAppRuntimeVersion)-win-x64.exe</TargetFileName> <TargetFileName>dotnet-runtime-$(MicrosoftNETCoreAppRuntimeVersion)-win-x64.exe</TargetFileName>
</RemoteAsset> </RemoteAsset>
<RemoteAsset Include="$(DotNetAssetRootUrl)Runtime/$(MicrosoftNETCoreAppInternalPackageVersion)/dotnet-runtime-$(MicrosoftNETCoreAppRuntimeVersion)-win-x86.exe$(DotNetAssetRootAccessTokenSuffix)"> <RemoteAsset Include="Runtime/$(MicrosoftNETCoreAppInternalPackageVersion)/dotnet-runtime-$(MicrosoftNETCoreAppRuntimeVersion)-win-x86.exe">
<TargetFileName>dotnet-runtime-$(MicrosoftNETCoreAppRuntimeVersion)-win-x86.exe</TargetFileName> <TargetFileName>dotnet-runtime-$(MicrosoftNETCoreAppRuntimeVersion)-win-x86.exe</TargetFileName>
</RemoteAsset> </RemoteAsset>
</ItemGroup> </ItemGroup>
@ -37,7 +39,10 @@
<MakeDir Directories="$(DepsPath)" /> <MakeDir Directories="$(DepsPath)" />
<DownloadFile Condition=" ! Exists('$(DepsPath)%(RemoteAsset.TargetFileName)') " <DownloadFile Condition=" ! Exists('$(DepsPath)%(RemoteAsset.TargetFileName)') "
SourceUrl="%(RemoteAsset.Identity)" DestinationFolder="$(DepsPath)" DestinationFileName="%(RemoteAsset.TargetFileName)" /> Uri="$(DotNetAssetRootUrl)%(RemoteAsset.Identity)"
PrivateUri="$(DotNetPrivateAssetRootUrl)%(RemoteAsset.Identity)"
PrivateUriSuffix="$(DotNetAssetRootAccessTokenSuffix)"
DestinationPath="$(DepsPath)%(RemoteAsset.TargetFileName)" />
</Target> </Target>
<Target Name="ExtractPropertiesFromDotNetMsi" DependsOnTargets="FetchDependencies" BeforeTargets="BeforeBuild"> <Target Name="ExtractPropertiesFromDotNetMsi" DependsOnTargets="FetchDependencies" BeforeTargets="BeforeBuild">

View File

@ -15,7 +15,7 @@
<!-- Targeting pack version should be the one we just built, if we're building it. Otherwise we use the baseline version --> <!-- Targeting pack version should be the one we just built, if we're building it. Otherwise we use the baseline version -->
<PropertyGroup> <PropertyGroup>
<MicrosoftAspNetCoreAppRefPackageVersion Condition="'$(IsTargetingPackBuilding)' != 'false'">%(_TargetingPackVersionInfo.PackageVersion)</MicrosoftAspNetCoreAppRefPackageVersion> <MicrosoftAspNetCoreAppRefPackageVersion Condition="'$(IsTargetingPackBuilding)' != 'false'">%(_TargetingPackVersionInfo.PackageVersion)</MicrosoftAspNetCoreAppRefPackageVersion>
<MicrosoftAspNetCoreAppRefPackageVersion Condition="'$(IsTargetingPackBuilding)' == 'false'">$(AspNetCoreBaselineVersion)</MicrosoftAspNetCoreAppRefPackageVersion> <MicrosoftAspNetCoreAppRefPackageVersion Condition="'$(IsTargetingPackBuilding)' == 'false'">$(TargetingPackVersionPrefix)</MicrosoftAspNetCoreAppRefPackageVersion>
</PropertyGroup> </PropertyGroup>
<!-- Runtime and Ref packs may have separate versions. --> <!-- Runtime and Ref packs may have separate versions. -->

View File

@ -31,6 +31,8 @@ namespace Microsoft.AspNetCore.Http.Connections.Internal
IHttpTransportFeature, IHttpTransportFeature,
IConnectionInherentKeepAliveFeature IConnectionInherentKeepAliveFeature
{ {
private static long _tenSeconds = TimeSpan.FromSeconds(10).Ticks;
private readonly object _stateLock = new object(); private readonly object _stateLock = new object();
private readonly object _itemsLock = new object(); private readonly object _itemsLock = new object();
private readonly object _heartbeatLock = new object(); private readonly object _heartbeatLock = new object();
@ -40,6 +42,12 @@ namespace Microsoft.AspNetCore.Http.Connections.Internal
private IDuplexPipe _application; private IDuplexPipe _application;
private IDictionary<object, object> _items; private IDictionary<object, object> _items;
private CancellationTokenSource _sendCts;
private bool _activeSend;
private long _startedSendTime;
private readonly object _sendingLock = new object();
internal CancellationToken SendingToken { get; private set; }
// This tcs exists so that multiple calls to DisposeAsync all wait asynchronously // This tcs exists so that multiple calls to DisposeAsync all wait asynchronously
// on the same task // on the same task
private readonly TaskCompletionSource<object> _disposeTcs = new TaskCompletionSource<object>(TaskCreationOptions.RunContinuationsAsynchronously); private readonly TaskCompletionSource<object> _disposeTcs = new TaskCompletionSource<object>(TaskCreationOptions.RunContinuationsAsynchronously);
@ -258,8 +266,26 @@ namespace Microsoft.AspNetCore.Http.Connections.Internal
} }
else else
{ {
// The other transports don't close their own output, so we can do it here safely // Normally it isn't safe to try and acquire this lock because the Send can hold onto it for a long time if there is backpressure
Application?.Output.Complete(); // It is safe to wait for this lock now because the Send will be in one of 4 states
// 1. In the middle of a write which is in the middle of being canceled by the CancelPendingFlush above, when it throws
// an OperationCanceledException it will complete the PipeWriter which will make any other Send waiting on the lock
// throw an InvalidOperationException if they call Write
// 2. About to write and see that there is a pending cancel from the CancelPendingFlush, go to 1 to see what happens
// 3. Enters the Send and sees the Dispose state from DisposeAndRemoveAsync and releases the lock
// 4. No Send in progress
await WriteLock.WaitAsync();
try
{
// Complete the applications read loop
Application?.Output.Complete();
}
finally
{
WriteLock.Release();
}
Application?.Input.CancelPendingRead();
} }
} }
@ -401,7 +427,7 @@ namespace Microsoft.AspNetCore.Http.Connections.Internal
nonClonedContext.Response.RegisterForDispose(timeoutSource); nonClonedContext.Response.RegisterForDispose(timeoutSource);
nonClonedContext.Response.RegisterForDispose(tokenSource); nonClonedContext.Response.RegisterForDispose(tokenSource);
var longPolling = new LongPollingServerTransport(timeoutSource.Token, Application.Input, loggerFactory); var longPolling = new LongPollingServerTransport(timeoutSource.Token, Application.Input, loggerFactory, this);
// Start the transport // Start the transport
TransportTask = longPolling.ProcessRequestAsync(nonClonedContext, tokenSource.Token); TransportTask = longPolling.ProcessRequestAsync(nonClonedContext, tokenSource.Token);
@ -507,6 +533,40 @@ namespace Microsoft.AspNetCore.Http.Connections.Internal
await connectionDelegate(this); await connectionDelegate(this);
} }
internal void StartSendCancellation()
{
lock (_sendingLock)
{
if (_sendCts == null || _sendCts.IsCancellationRequested)
{
_sendCts = new CancellationTokenSource();
SendingToken = _sendCts.Token;
}
_startedSendTime = DateTime.UtcNow.Ticks;
_activeSend = true;
}
}
internal void TryCancelSend(long currentTicks)
{
lock (_sendingLock)
{
if (_activeSend)
{
if (currentTicks - _startedSendTime > _tenSeconds)
{
_sendCts.Cancel();
}
}
}
}
internal void StopSendCancellation()
{
lock (_sendingLock)
{
_activeSend = false;
}
}
private static class Log private static class Log
{ {
private static readonly Action<ILogger, string, Exception> _disposingConnection = private static readonly Action<ILogger, string, Exception> _disposingConnection =

View File

@ -142,7 +142,7 @@ namespace Microsoft.AspNetCore.Http.Connections.Internal
connection.SupportedFormats = TransferFormat.Text; connection.SupportedFormats = TransferFormat.Text;
// We only need to provide the Input channel since writing to the application is handled through /send. // We only need to provide the Input channel since writing to the application is handled through /send.
var sse = new ServerSentEventsServerTransport(connection.Application.Input, connection.ConnectionId, _loggerFactory); var sse = new ServerSentEventsServerTransport(connection.Application.Input, connection.ConnectionId, connection, _loggerFactory);
await DoPersistentConnection(connectionDelegate, sse, context, connection); await DoPersistentConnection(connectionDelegate, sse, context, connection);
} }
@ -216,7 +216,9 @@ namespace Microsoft.AspNetCore.Http.Connections.Internal
connection.Transport.Output.Complete(connection.ApplicationTask.Exception); connection.Transport.Output.Complete(connection.ApplicationTask.Exception);
// Wait for the transport to run // Wait for the transport to run
await connection.TransportTask; // Ignore exceptions, it has been logged if there is one and the application has finished
// So there is no one to give the exception to
await connection.TransportTask.NoThrow();
// If the status code is a 204 it means the connection is done // If the status code is a 204 it means the connection is done
if (context.Response.StatusCode == StatusCodes.Status204NoContent) if (context.Response.StatusCode == StatusCodes.Status204NoContent)
@ -234,12 +236,12 @@ namespace Microsoft.AspNetCore.Http.Connections.Internal
connection.MarkInactive(); connection.MarkInactive();
} }
} }
else if (resultTask.IsFaulted) else if (resultTask.IsFaulted || resultTask.IsCanceled)
{ {
// Cancel current request to release any waiting poll and let dispose acquire the lock // Cancel current request to release any waiting poll and let dispose acquire the lock
currentRequestTcs.TrySetCanceled(); currentRequestTcs.TrySetCanceled();
// We should be able to safely dispose because there's no more data being written
// transport task was faulted, we should remove the connection // We don't need to wait for close here since we've already waited for both sides
await _manager.DisposeAndRemoveAsync(connection, closeGracefully: false); await _manager.DisposeAndRemoveAsync(connection, closeGracefully: false);
} }
else else
@ -434,6 +436,14 @@ namespace Microsoft.AspNetCore.Http.Connections.Internal
context.Response.StatusCode = StatusCodes.Status404NotFound; context.Response.StatusCode = StatusCodes.Status404NotFound;
context.Response.ContentType = "text/plain"; context.Response.ContentType = "text/plain";
// There are no writes anymore (since this is the write "loop")
// So it is safe to complete the writer
// We complete the writer here because we already have the WriteLock acquired
// and it's unsafe to complete outside of the lock
// Other code isn't guaranteed to be able to acquire the lock before another write
// even if CancelPendingFlush is called, and the other write could hang if there is backpressure
connection.Application.Output.Complete();
return; return;
} }
catch (IOException ex) catch (IOException ex)
@ -481,11 +491,8 @@ namespace Microsoft.AspNetCore.Http.Connections.Internal
Log.TerminatingConection(_logger); Log.TerminatingConection(_logger);
// Complete the receiving end of the pipe // Dispose the connection, but don't wait for it. We assign it here so we can wait in tests
connection.Application.Output.Complete(); connection.DisposeAndRemoveTask = _manager.DisposeAndRemoveAsync(connection, closeGracefully: false);
// Dispose the connection gracefully, but don't wait for it. We assign it here so we can wait in tests
connection.DisposeAndRemoveTask = _manager.DisposeAndRemoveAsync(connection, closeGracefully: true);
context.Response.StatusCode = StatusCodes.Status202Accepted; context.Response.StatusCode = StatusCodes.Status202Accepted;
context.Response.ContentType = "text/plain"; context.Response.ContentType = "text/plain";

View File

@ -31,6 +31,7 @@ namespace Microsoft.AspNetCore.Http.Connections.Internal
private readonly TimerAwaitable _nextHeartbeat; private readonly TimerAwaitable _nextHeartbeat;
private readonly ILogger<HttpConnectionManager> _logger; private readonly ILogger<HttpConnectionManager> _logger;
private readonly ILogger<HttpConnectionContext> _connectionLogger; private readonly ILogger<HttpConnectionContext> _connectionLogger;
private readonly bool _useSendTimeout = true;
private readonly TimeSpan _disconnectTimeout; private readonly TimeSpan _disconnectTimeout;
public HttpConnectionManager(ILoggerFactory loggerFactory, IHostApplicationLifetime appLifetime) public HttpConnectionManager(ILoggerFactory loggerFactory, IHostApplicationLifetime appLifetime)
@ -44,6 +45,11 @@ namespace Microsoft.AspNetCore.Http.Connections.Internal
_connectionLogger = loggerFactory.CreateLogger<HttpConnectionContext>(); _connectionLogger = loggerFactory.CreateLogger<HttpConnectionContext>();
_nextHeartbeat = new TimerAwaitable(_heartbeatTickRate, _heartbeatTickRate); _nextHeartbeat = new TimerAwaitable(_heartbeatTickRate, _heartbeatTickRate);
_disconnectTimeout = connectionOptions.Value.DisconnectTimeout ?? ConnectionOptionsSetup.DefaultDisconectTimeout; _disconnectTimeout = connectionOptions.Value.DisconnectTimeout ?? ConnectionOptionsSetup.DefaultDisconectTimeout;
if (AppContext.TryGetSwitch("Microsoft.AspNetCore.Http.Connections.DoNotUseSendTimeout", out var timeoutDisabled))
{
_useSendTimeout = !timeoutDisabled;
}
// Register these last as the callbacks could run immediately // Register these last as the callbacks could run immediately
appLifetime.ApplicationStarted.Register(() => Start()); appLifetime.ApplicationStarted.Register(() => Start());
appLifetime.ApplicationStopping.Register(() => CloseConnections()); appLifetime.ApplicationStopping.Register(() => CloseConnections());
@ -155,20 +161,26 @@ namespace Microsoft.AspNetCore.Http.Connections.Internal
// Capture the connection state // Capture the connection state
var lastSeenUtc = connection.LastSeenUtcIfInactive; var lastSeenUtc = connection.LastSeenUtcIfInactive;
var utcNow = DateTimeOffset.UtcNow;
// Once the decision has been made to dispose we don't check the status again // Once the decision has been made to dispose we don't check the status again
// But don't clean up connections while the debugger is attached. // But don't clean up connections while the debugger is attached.
if (!Debugger.IsAttached && lastSeenUtc.HasValue && (DateTimeOffset.UtcNow - lastSeenUtc.Value).TotalSeconds > _disconnectTimeout.TotalSeconds) if (!Debugger.IsAttached && lastSeenUtc.HasValue && (utcNow - lastSeenUtc.Value).TotalSeconds > _disconnectTimeout.TotalSeconds)
{ {
Log.ConnectionTimedOut(_logger, connection.ConnectionId); Log.ConnectionTimedOut(_logger, connection.ConnectionId);
HttpConnectionsEventSource.Log.ConnectionTimedOut(connection.ConnectionId); HttpConnectionsEventSource.Log.ConnectionTimedOut(connection.ConnectionId);
// This is most likely a long polling connection. The transport here ends because // This is most likely a long polling connection. The transport here ends because
// a poll completed and has been inactive for > 5 seconds so we wait for the // a poll completed and has been inactive for > 5 seconds so we wait for the
// application to finish gracefully // application to finish gracefully
_ = DisposeAndRemoveAsync(connection, closeGracefully: true); _ = DisposeAndRemoveAsync(connection, closeGracefully: true);
} }
else else
{ {
if (!Debugger.IsAttached && _useSendTimeout)
{
connection.TryCancelSend(utcNow.Ticks);
}
// Tick the heartbeat, if the connection is still active // Tick the heartbeat, if the connection is still active
connection.TickHeartbeat(); connection.TickHeartbeat();
} }

View File

@ -0,0 +1,24 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Runtime.CompilerServices;
namespace System.Threading.Tasks
{
internal static class TaskExtensions
{
public static async Task NoThrow(this Task task)
{
await new NoThrowAwaiter(task);
}
}
internal readonly struct NoThrowAwaiter : ICriticalNotifyCompletion
{
private readonly Task _task;
public NoThrowAwaiter(Task task) { _task = task; }
public NoThrowAwaiter GetAwaiter() => this;
public bool IsCompleted => _task.IsCompleted;
// Observe exception
public void GetResult() { _ = _task.Exception; }
public void OnCompleted(Action continuation) => _task.GetAwaiter().OnCompleted(continuation);
public void UnsafeOnCompleted(Action continuation) => OnCompleted(continuation);
}
}

View File

@ -16,12 +16,19 @@ namespace Microsoft.AspNetCore.Http.Connections.Internal.Transports
private readonly PipeReader _application; private readonly PipeReader _application;
private readonly ILogger _logger; private readonly ILogger _logger;
private readonly CancellationToken _timeoutToken; private readonly CancellationToken _timeoutToken;
private readonly HttpConnectionContext _connection;
public LongPollingServerTransport(CancellationToken timeoutToken, PipeReader application, ILoggerFactory loggerFactory) public LongPollingServerTransport(CancellationToken timeoutToken, PipeReader application, ILoggerFactory loggerFactory)
: this(timeoutToken, application, loggerFactory, connection: null)
{ }
public LongPollingServerTransport(CancellationToken timeoutToken, PipeReader application, ILoggerFactory loggerFactory, HttpConnectionContext connection)
{ {
_timeoutToken = timeoutToken; _timeoutToken = timeoutToken;
_application = application; _application = application;
_connection = connection;
// We create the logger with a string to preserve the logging namespace after the server side transport renames. // We create the logger with a string to preserve the logging namespace after the server side transport renames.
_logger = loggerFactory.CreateLogger("Microsoft.AspNetCore.Http.Connections.Internal.Transports.LongPollingTransport"); _logger = loggerFactory.CreateLogger("Microsoft.AspNetCore.Http.Connections.Internal.Transports.LongPollingTransport");
} }
@ -33,7 +40,7 @@ namespace Microsoft.AspNetCore.Http.Connections.Internal.Transports
var result = await _application.ReadAsync(token); var result = await _application.ReadAsync(token);
var buffer = result.Buffer; var buffer = result.Buffer;
if (buffer.IsEmpty && result.IsCompleted) if (buffer.IsEmpty && (result.IsCompleted || result.IsCanceled))
{ {
Log.LongPolling204(_logger); Log.LongPolling204(_logger);
context.Response.ContentType = "text/plain"; context.Response.ContentType = "text/plain";
@ -51,19 +58,22 @@ namespace Microsoft.AspNetCore.Http.Connections.Internal.Transports
try try
{ {
await context.Response.Body.WriteAsync(buffer); _connection?.StartSendCancellation();
await context.Response.Body.WriteAsync(buffer, _connection?.SendingToken ?? default);
} }
finally finally
{ {
_connection?.StopSendCancellation();
_application.AdvanceTo(buffer.End); _application.AdvanceTo(buffer.End);
} }
} }
catch (OperationCanceledException) catch (OperationCanceledException)
{ {
// 3 cases: // 4 cases:
// 1 - Request aborted, the client disconnected (no response) // 1 - Request aborted, the client disconnected (no response)
// 2 - The poll timeout is hit (200) // 2 - The poll timeout is hit (200)
// 3 - A new request comes in and cancels this request (204) // 3 - SendingToken was canceled, abort the connection
// 4 - A new request comes in and cancels this request (204)
// Case 1 // Case 1
if (context.RequestAborted.IsCancellationRequested) if (context.RequestAborted.IsCancellationRequested)
@ -81,9 +91,16 @@ namespace Microsoft.AspNetCore.Http.Connections.Internal.Transports
context.Response.ContentType = "text/plain"; context.Response.ContentType = "text/plain";
context.Response.StatusCode = StatusCodes.Status200OK; context.Response.StatusCode = StatusCodes.Status200OK;
} }
else else if (_connection?.SendingToken.IsCancellationRequested == true)
{ {
// Case 3 // Case 3
context.Response.ContentType = "text/plain";
context.Response.StatusCode = StatusCodes.Status204NoContent;
throw;
}
else
{
// Case 4
Log.LongPolling204(_logger); Log.LongPolling204(_logger);
context.Response.ContentType = "text/plain"; context.Response.ContentType = "text/plain";
context.Response.StatusCode = StatusCodes.Status204NoContent; context.Response.StatusCode = StatusCodes.Status204NoContent;

View File

@ -16,11 +16,17 @@ namespace Microsoft.AspNetCore.Http.Connections.Internal.Transports
private readonly PipeReader _application; private readonly PipeReader _application;
private readonly string _connectionId; private readonly string _connectionId;
private readonly ILogger _logger; private readonly ILogger _logger;
private readonly HttpConnectionContext _connection;
public ServerSentEventsServerTransport(PipeReader application, string connectionId, ILoggerFactory loggerFactory) public ServerSentEventsServerTransport(PipeReader application, string connectionId, ILoggerFactory loggerFactory)
: this(application, connectionId, connection: null, loggerFactory)
{ }
public ServerSentEventsServerTransport(PipeReader application, string connectionId, HttpConnectionContext connection, ILoggerFactory loggerFactory)
{ {
_application = application; _application = application;
_connectionId = connectionId; _connectionId = connectionId;
_connection = connection;
// We create the logger with a string to preserve the logging namespace after the server side transport renames. // We create the logger with a string to preserve the logging namespace after the server side transport renames.
_logger = loggerFactory.CreateLogger("Microsoft.AspNetCore.Http.Connections.Internal.Transports.ServerSentEventsTransport"); _logger = loggerFactory.CreateLogger("Microsoft.AspNetCore.Http.Connections.Internal.Transports.ServerSentEventsTransport");
@ -51,11 +57,17 @@ namespace Microsoft.AspNetCore.Http.Connections.Internal.Transports
try try
{ {
if (result.IsCanceled)
{
break;
}
if (!buffer.IsEmpty) if (!buffer.IsEmpty)
{ {
Log.SSEWritingMessage(_logger, buffer.Length); Log.SSEWritingMessage(_logger, buffer.Length);
await ServerSentEventsMessageFormatter.WriteMessageAsync(buffer, context.Response.Body); _connection?.StartSendCancellation();
await ServerSentEventsMessageFormatter.WriteMessageAsync(buffer, context.Response.Body, _connection?.SendingToken ?? default);
} }
else if (result.IsCompleted) else if (result.IsCompleted)
{ {
@ -64,6 +76,7 @@ namespace Microsoft.AspNetCore.Http.Connections.Internal.Transports
} }
finally finally
{ {
_connection?.StopSendCancellation();
_application.AdvanceTo(buffer.End); _application.AdvanceTo(buffer.End);
} }
} }

View File

@ -231,7 +231,8 @@ namespace Microsoft.AspNetCore.Http.Connections.Internal.Transports
if (WebSocketCanSend(socket)) if (WebSocketCanSend(socket))
{ {
await socket.SendAsync(buffer, webSocketMessageType); _connection.StartSendCancellation();
await socket.SendAsync(buffer, webSocketMessageType, _connection.SendingToken);
} }
else else
{ {
@ -254,6 +255,7 @@ namespace Microsoft.AspNetCore.Http.Connections.Internal.Transports
} }
finally finally
{ {
_connection.StopSendCancellation();
_application.Input.AdvanceTo(buffer.End); _application.Input.AdvanceTo(buffer.End);
} }
} }

View File

@ -4,6 +4,7 @@
using System; using System;
using System.Buffers; using System.Buffers;
using System.IO; using System.IO;
using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace Microsoft.AspNetCore.Http.Connections namespace Microsoft.AspNetCore.Http.Connections
@ -15,19 +16,19 @@ namespace Microsoft.AspNetCore.Http.Connections
private const byte LineFeed = (byte)'\n'; private const byte LineFeed = (byte)'\n';
public static async Task WriteMessageAsync(ReadOnlySequence<byte> payload, Stream output) public static async Task WriteMessageAsync(ReadOnlySequence<byte> payload, Stream output, CancellationToken token)
{ {
// Payload does not contain a line feed so write it directly to output // Payload does not contain a line feed so write it directly to output
if (payload.PositionOf(LineFeed) == null) if (payload.PositionOf(LineFeed) == null)
{ {
if (payload.Length > 0) if (payload.Length > 0)
{ {
await output.WriteAsync(DataPrefix, 0, DataPrefix.Length); await output.WriteAsync(DataPrefix, 0, DataPrefix.Length, token);
await output.WriteAsync(payload); await output.WriteAsync(payload, token);
await output.WriteAsync(Newline, 0, Newline.Length); await output.WriteAsync(Newline, 0, Newline.Length, token);
} }
await output.WriteAsync(Newline, 0, Newline.Length); await output.WriteAsync(Newline, 0, Newline.Length, token);
return; return;
} }
@ -37,7 +38,7 @@ namespace Microsoft.AspNetCore.Http.Connections
await WriteMessageToMemory(ms, payload); await WriteMessageToMemory(ms, payload);
ms.Position = 0; ms.Position = 0;
await ms.CopyToAsync(output); await ms.CopyToAsync(output, token);
} }
/// <summary> /// <summary>

View File

@ -1050,6 +1050,178 @@ namespace Microsoft.AspNetCore.Http.Connections.Tests
} }
} }
private class BlockingStream : Stream
{
private readonly SyncPoint _sync;
private bool _isSSE;
public BlockingStream(SyncPoint sync, bool isSSE = false)
{
_sync = sync;
_isSSE = isSSE;
}
public override bool CanRead => throw new NotImplementedException();
public override bool CanSeek => throw new NotImplementedException();
public override bool CanWrite => throw new NotImplementedException();
public override long Length => throw new NotImplementedException();
public override long Position { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
public override Task CopyToAsync(Stream destination, int bufferSize, CancellationToken cancellationToken)
{
throw new NotImplementedException();
}
public override void Flush()
{
}
public override int Read(byte[] buffer, int offset, int count)
{
throw new NotImplementedException();
}
public override long Seek(long offset, SeekOrigin origin)
{
throw new NotImplementedException();
}
public override void SetLength(long value)
{
throw new NotImplementedException();
}
public override void Write(byte[] buffer, int offset, int count)
{
throw new NotImplementedException();
}
public override async Task WriteAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken)
{
if (_isSSE)
{
// SSE does an initial write of :\r\n that we want to ignore in testing
_isSSE = false;
return;
}
await _sync.WaitToContinue();
cancellationToken.ThrowIfCancellationRequested();
}
#if NETCOREAPP2_1
public override async ValueTask WriteAsync(ReadOnlyMemory<byte> buffer, CancellationToken cancellationToken = default)
{
if (_isSSE)
{
// SSE does an initial write of :\r\n that we want to ignore in testing
_isSSE = false;
return;
}
await _sync.WaitToContinue();
cancellationToken.ThrowIfCancellationRequested();
}
#endif
}
[Fact]
[LogLevel(LogLevel.Debug)]
public async Task LongPollingConnectionClosesWhenSendTimeoutReached()
{
bool ExpectedErrors(WriteContext writeContext)
{
return (writeContext.LoggerName == typeof(Internal.Transports.LongPollingServerTransport).FullName &&
writeContext.EventId.Name == "LongPollingTerminated") ||
(writeContext.LoggerName == typeof(HttpConnectionManager).FullName && writeContext.EventId.Name == "FailedDispose");
}
using (StartVerifiableLog(expectedErrorsFilter: ExpectedErrors))
{
var manager = CreateConnectionManager(LoggerFactory);
var connection = manager.CreateConnection();
connection.TransportType = HttpTransportType.LongPolling;
var dispatcher = new HttpConnectionDispatcher(manager, LoggerFactory);
var context = MakeRequest("/foo", connection);
var services = new ServiceCollection();
services.AddSingleton<TestConnectionHandler>();
var builder = new ConnectionBuilder(services.BuildServiceProvider());
builder.UseConnectionHandler<TestConnectionHandler>();
var app = builder.Build();
var options = new HttpConnectionDispatcherOptions();
// First poll completes immediately
await dispatcher.ExecuteAsync(context, options, app).OrTimeout();
var sync = new SyncPoint();
context.Response.Body = new BlockingStream(sync);
var dispatcherTask = dispatcher.ExecuteAsync(context, options, app);
await connection.Transport.Output.WriteAsync(new byte[] { 1 }).OrTimeout();
await sync.WaitForSyncPoint().OrTimeout();
// Cancel write to response body
connection.TryCancelSend(long.MaxValue);
sync.Continue();
await dispatcherTask.OrTimeout();
// Connection should be removed on canceled write
Assert.False(manager.TryGetConnection(connection.ConnectionId, out var _));
}
}
[Fact]
[LogLevel(LogLevel.Debug)]
public async Task SSEConnectionClosesWhenSendTimeoutReached()
{
using (StartVerifiableLog())
{
var manager = CreateConnectionManager(LoggerFactory);
var connection = manager.CreateConnection();
connection.TransportType = HttpTransportType.ServerSentEvents;
var dispatcher = new HttpConnectionDispatcher(manager, LoggerFactory);
var context = MakeRequest("/foo", connection);
SetTransport(context, connection.TransportType);
var services = new ServiceCollection();
services.AddSingleton<TestConnectionHandler>();
var builder = new ConnectionBuilder(services.BuildServiceProvider());
builder.UseConnectionHandler<TestConnectionHandler>();
var app = builder.Build();
var sync = new SyncPoint();
context.Response.Body = new BlockingStream(sync, isSSE: true);
var options = new HttpConnectionDispatcherOptions();
var dispatcherTask = dispatcher.ExecuteAsync(context, options, app);
await connection.Transport.Output.WriteAsync(new byte[] { 1 }).OrTimeout();
await sync.WaitForSyncPoint().OrTimeout();
// Cancel write to response body
connection.TryCancelSend(long.MaxValue);
sync.Continue();
await dispatcherTask.OrTimeout();
// Connection should be removed on canceled write
Assert.False(manager.TryGetConnection(connection.ConnectionId, out var _));
}
}
[Fact]
[LogLevel(LogLevel.Debug)]
public async Task WebSocketConnectionClosesWhenSendTimeoutReached()
{
bool ExpectedErrors(WriteContext writeContext)
{
return writeContext.LoggerName == typeof(Internal.Transports.WebSocketsServerTransport).FullName &&
writeContext.EventId.Name == "ErrorWritingFrame";
}
using (StartVerifiableLog(expectedErrorsFilter: ExpectedErrors))
{
var manager = CreateConnectionManager(LoggerFactory);
var connection = manager.CreateConnection();
connection.TransportType = HttpTransportType.WebSockets;
var dispatcher = new HttpConnectionDispatcher(manager, LoggerFactory);
var sync = new SyncPoint();
var context = MakeRequest("/foo", connection);
SetTransport(context, connection.TransportType, sync);
var services = new ServiceCollection();
services.AddSingleton<TestConnectionHandler>();
var builder = new ConnectionBuilder(services.BuildServiceProvider());
builder.UseConnectionHandler<TestConnectionHandler>();
var app = builder.Build();
var options = new HttpConnectionDispatcherOptions();
options.WebSockets.CloseTimeout = TimeSpan.FromSeconds(0);
var dispatcherTask = dispatcher.ExecuteAsync(context, options, app);
await connection.Transport.Output.WriteAsync(new byte[] { 1 }).OrTimeout();
await sync.WaitForSyncPoint().OrTimeout();
// Cancel write to response body
connection.TryCancelSend(long.MaxValue);
sync.Continue();
await dispatcherTask.OrTimeout();
// Connection should be removed on canceled write
Assert.False(manager.TryGetConnection(connection.ConnectionId, out var _));
}
}
[Fact] [Fact]
[LogLevel(LogLevel.Trace)] [LogLevel(LogLevel.Trace)]
public async Task WebSocketTransportTimesOutWhenCloseFrameNotReceived() public async Task WebSocketTransportTimesOutWhenCloseFrameNotReceived()
@ -1622,6 +1794,8 @@ namespace Microsoft.AspNetCore.Http.Connections.Tests
Assert.Equal(StatusCodes.Status202Accepted, deleteContext.Response.StatusCode); Assert.Equal(StatusCodes.Status202Accepted, deleteContext.Response.StatusCode);
Assert.Equal("text/plain", deleteContext.Response.ContentType); Assert.Equal("text/plain", deleteContext.Response.ContentType);
await connection.DisposeAndRemoveTask.OrTimeout();
// Verify the connection was removed from the manager // Verify the connection was removed from the manager
Assert.False(manager.TryGetConnection(connection.ConnectionToken, out _)); Assert.False(manager.TryGetConnection(connection.ConnectionToken, out _));
} }
@ -1675,6 +1849,110 @@ namespace Microsoft.AspNetCore.Http.Connections.Tests
} }
} }
[Fact]
public async Task DeleteEndpointTerminatesLongPollingWithHangingApplication()
{
using (StartVerifiableLog())
{
var manager = CreateConnectionManager(LoggerFactory);
var pipeOptions = new PipeOptions(pauseWriterThreshold: 2, resumeWriterThreshold: 1);
var connection = manager.CreateConnection(pipeOptions, pipeOptions);
connection.TransportType = HttpTransportType.LongPolling;
var dispatcher = new HttpConnectionDispatcher(manager, LoggerFactory);
var context = MakeRequest("/foo", connection);
var services = new ServiceCollection();
services.AddSingleton<NeverEndingConnectionHandler>();
var builder = new ConnectionBuilder(services.BuildServiceProvider());
builder.UseConnectionHandler<NeverEndingConnectionHandler>();
var app = builder.Build();
var options = new HttpConnectionDispatcherOptions();
var pollTask = dispatcher.ExecuteAsync(context, options, app);
Assert.True(pollTask.IsCompleted);
// Now send the second poll
pollTask = dispatcher.ExecuteAsync(context, options, app);
// Issue the delete request and make sure the poll completes
var deleteContext = new DefaultHttpContext();
deleteContext.Request.Path = "/foo";
deleteContext.Request.QueryString = new QueryString($"?id={connection.ConnectionId}");
deleteContext.Request.Method = "DELETE";
Assert.False(pollTask.IsCompleted);
await dispatcher.ExecuteAsync(deleteContext, options, app).OrTimeout();
await pollTask.OrTimeout();
// Verify that transport shuts down
await connection.TransportTask.OrTimeout();
// Verify the response from the DELETE request
Assert.Equal(StatusCodes.Status202Accepted, deleteContext.Response.StatusCode);
Assert.Equal("text/plain", deleteContext.Response.ContentType);
Assert.Equal(HttpConnectionStatus.Disposed, connection.Status);
// Verify the connection not removed because application is hanging
Assert.True(manager.TryGetConnection(connection.ConnectionId, out _));
}
}
[Fact]
public async Task PollCanReceiveFinalMessageAfterAppCompletes()
{
using (StartVerifiableLog())
{
var transportType = HttpTransportType.LongPolling;
var manager = CreateConnectionManager(LoggerFactory);
var dispatcher = new HttpConnectionDispatcher(manager, LoggerFactory);
var connection = manager.CreateConnection();
connection.TransportType = transportType;
var waitForMessageTcs1 = new TaskCompletionSource<object>();
var messageTcs1 = new TaskCompletionSource<object>();
var waitForMessageTcs2 = new TaskCompletionSource<object>();
var messageTcs2 = new TaskCompletionSource<object>();
ConnectionDelegate connectionDelegate = async c =>
{
await waitForMessageTcs1.Task.OrTimeout();
await c.Transport.Output.WriteAsync(Encoding.UTF8.GetBytes("Message1")).OrTimeout();
messageTcs1.TrySetResult(null);
await waitForMessageTcs2.Task.OrTimeout();
await c.Transport.Output.WriteAsync(Encoding.UTF8.GetBytes("Message2")).OrTimeout();
messageTcs2.TrySetResult(null);
};
{
var options = new HttpConnectionDispatcherOptions();
var context = MakeRequest("/foo", connection);
await dispatcher.ExecuteAsync(context, options, connectionDelegate).OrTimeout();
// second poll should have data
waitForMessageTcs1.SetResult(null);
await messageTcs1.Task.OrTimeout();
var ms = new MemoryStream();
context.Response.Body = ms;
// Now send the second poll
await dispatcher.ExecuteAsync(context, options, connectionDelegate).OrTimeout();
Assert.Equal("Message1", Encoding.UTF8.GetString(ms.ToArray()));
waitForMessageTcs2.SetResult(null);
await messageTcs2.Task.OrTimeout();
context = MakeRequest("/foo", connection);
ms.Seek(0, SeekOrigin.Begin);
context.Response.Body = ms;
// This is the third poll which gets the final message after the app is complete
await dispatcher.ExecuteAsync(context, options, connectionDelegate).OrTimeout();
Assert.Equal("Message2", Encoding.UTF8.GetString(ms.ToArray()));
}
}
}
[Fact] [Fact]
public async Task NegotiateDoesNotReturnWebSocketsWhenNotAvailable() public async Task NegotiateDoesNotReturnWebSocketsWhenNotAvailable()
{ {
@ -1987,12 +2265,12 @@ namespace Microsoft.AspNetCore.Http.Connections.Tests
return context; return context;
} }
private static void SetTransport(HttpContext context, HttpTransportType transportType) private static void SetTransport(HttpContext context, HttpTransportType transportType, SyncPoint sync = null)
{ {
switch (transportType) switch (transportType)
{ {
case HttpTransportType.WebSockets: case HttpTransportType.WebSockets:
context.Features.Set<IHttpWebSocketFeature>(new TestWebSocketConnectionFeature()); context.Features.Set<IHttpWebSocketFeature>(new TestWebSocketConnectionFeature(sync));
break; break;
case HttpTransportType.ServerSentEvents: case HttpTransportType.ServerSentEvents:
context.Request.Headers["Accept"] = "text/event-stream"; context.Request.Headers["Accept"] = "text/event-stream";

View File

@ -235,9 +235,6 @@ namespace Microsoft.AspNetCore.Http.Connections.Tests
try try
{ {
Assert.True(result.IsCompleted); Assert.True(result.IsCompleted);
// We should be able to write
await connection.Transport.Output.WriteAsync(new byte[] { 1 });
} }
finally finally
{ {
@ -248,13 +245,9 @@ namespace Microsoft.AspNetCore.Http.Connections.Tests
connection.TransportTask = Task.Run(async () => connection.TransportTask = Task.Run(async () =>
{ {
var result = await connection.Application.Input.ReadAsync(); var result = await connection.Application.Input.ReadAsync();
Assert.Equal(new byte[] { 1 }, result.Buffer.ToArray());
connection.Application.Input.AdvanceTo(result.Buffer.End);
result = await connection.Application.Input.ReadAsync();
try try
{ {
Assert.True(result.IsCompleted); Assert.True(result.IsCanceled);
} }
finally finally
{ {

View File

@ -20,7 +20,7 @@ namespace Microsoft.AspNetCore.Http.Connections.Tests
var buffer = new ReadOnlySequence<byte>(Encoding.UTF8.GetBytes(payload)); var buffer = new ReadOnlySequence<byte>(Encoding.UTF8.GetBytes(payload));
var output = new MemoryStream(); var output = new MemoryStream();
await ServerSentEventsMessageFormatter.WriteMessageAsync(buffer, output); await ServerSentEventsMessageFormatter.WriteMessageAsync(buffer, output, default);
Assert.Equal(encoded, Encoding.UTF8.GetString(output.ToArray())); Assert.Equal(encoded, Encoding.UTF8.GetString(output.ToArray()));
} }
@ -32,7 +32,7 @@ namespace Microsoft.AspNetCore.Http.Connections.Tests
var buffer = ReadOnlySequenceFactory.SegmentPerByteFactory.CreateWithContent(Encoding.UTF8.GetBytes(payload)); var buffer = ReadOnlySequenceFactory.SegmentPerByteFactory.CreateWithContent(Encoding.UTF8.GetBytes(payload));
var output = new MemoryStream(); var output = new MemoryStream();
await ServerSentEventsMessageFormatter.WriteMessageAsync(buffer, output); await ServerSentEventsMessageFormatter.WriteMessageAsync(buffer, output, default);
Assert.Equal(encoded, Encoding.UTF8.GetString(output.ToArray())); Assert.Equal(encoded, Encoding.UTF8.GetString(output.ToArray()));
} }

View File

@ -5,11 +5,21 @@ using System.Threading;
using System.Threading.Channels; using System.Threading.Channels;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Http.Features; using Microsoft.AspNetCore.Http.Features;
using Microsoft.AspNetCore.Internal;
using Microsoft.AspNetCore.SignalR.Tests;
namespace Microsoft.AspNetCore.Http.Connections.Tests namespace Microsoft.AspNetCore.Http.Connections.Tests
{ {
internal class TestWebSocketConnectionFeature : IHttpWebSocketFeature, IDisposable internal class TestWebSocketConnectionFeature : IHttpWebSocketFeature, IDisposable
{ {
public TestWebSocketConnectionFeature()
{ }
public TestWebSocketConnectionFeature(SyncPoint sync)
{
_sync = sync;
}
private readonly SyncPoint _sync;
private readonly TaskCompletionSource<object> _accepted = new TaskCompletionSource<object>(); private readonly TaskCompletionSource<object> _accepted = new TaskCompletionSource<object>();
public bool IsWebSocketRequest => true; public bool IsWebSocketRequest => true;
@ -27,8 +37,8 @@ namespace Microsoft.AspNetCore.Http.Connections.Tests
var clientToServer = Channel.CreateUnbounded<WebSocketMessage>(); var clientToServer = Channel.CreateUnbounded<WebSocketMessage>();
var serverToClient = Channel.CreateUnbounded<WebSocketMessage>(); var serverToClient = Channel.CreateUnbounded<WebSocketMessage>();
var clientSocket = new WebSocketChannel(serverToClient.Reader, clientToServer.Writer); var clientSocket = new WebSocketChannel(serverToClient.Reader, clientToServer.Writer, _sync);
var serverSocket = new WebSocketChannel(clientToServer.Reader, serverToClient.Writer); var serverSocket = new WebSocketChannel(clientToServer.Reader, serverToClient.Writer, _sync);
Client = clientSocket; Client = clientSocket;
SubProtocol = context.SubProtocol; SubProtocol = context.SubProtocol;
@ -45,16 +55,18 @@ namespace Microsoft.AspNetCore.Http.Connections.Tests
{ {
private readonly ChannelReader<WebSocketMessage> _input; private readonly ChannelReader<WebSocketMessage> _input;
private readonly ChannelWriter<WebSocketMessage> _output; private readonly ChannelWriter<WebSocketMessage> _output;
private readonly SyncPoint _sync;
private WebSocketCloseStatus? _closeStatus; private WebSocketCloseStatus? _closeStatus;
private string _closeStatusDescription; private string _closeStatusDescription;
private WebSocketState _state; private WebSocketState _state;
private WebSocketMessage _internalBuffer = new WebSocketMessage(); private WebSocketMessage _internalBuffer = new WebSocketMessage();
public WebSocketChannel(ChannelReader<WebSocketMessage> input, ChannelWriter<WebSocketMessage> output) public WebSocketChannel(ChannelReader<WebSocketMessage> input, ChannelWriter<WebSocketMessage> output, SyncPoint sync = null)
{ {
_input = input; _input = input;
_output = output; _output = output;
_sync = sync;
} }
public override WebSocketCloseStatus? CloseStatus => _closeStatus; public override WebSocketCloseStatus? CloseStatus => _closeStatus;
@ -173,11 +185,17 @@ namespace Microsoft.AspNetCore.Http.Connections.Tests
throw new InvalidOperationException("Unexpected close"); throw new InvalidOperationException("Unexpected close");
} }
public override Task SendAsync(ArraySegment<byte> buffer, WebSocketMessageType messageType, bool endOfMessage, CancellationToken cancellationToken) public override async Task SendAsync(ArraySegment<byte> buffer, WebSocketMessageType messageType, bool endOfMessage, CancellationToken cancellationToken)
{ {
if (_sync != null)
{
await _sync.WaitToContinue();
}
cancellationToken.ThrowIfCancellationRequested();
var copy = new byte[buffer.Count]; var copy = new byte[buffer.Count];
Buffer.BlockCopy(buffer.Array, buffer.Offset, copy, 0, buffer.Count); Buffer.BlockCopy(buffer.Array, buffer.Offset, copy, 0, buffer.Count);
return SendMessageAsync(new WebSocketMessage await SendMessageAsync(new WebSocketMessage
{ {
Buffer = copy, Buffer = copy,
MessageType = messageType, MessageType = messageType,

View File

@ -74,7 +74,16 @@ namespace System.IO.Pipelines
_length += source.Length; _length += source.Length;
var task = _pipeWriter.WriteAsync(source); var task = _pipeWriter.WriteAsync(source);
if (!task.IsCompletedSuccessfully)
if (task.IsCompletedSuccessfully)
{
// Cancellation can be triggered by PipeWriter.CancelPendingFlush
if (task.Result.IsCanceled)
{
throw new OperationCanceledException();
}
}
else
{ {
return WriteSlowAsync(task); return WriteSlowAsync(task);
} }

View File

@ -37,9 +37,10 @@ namespace Microsoft.AspNetCore.SignalR.Tests
public TransferFormat ActiveFormat { get; set; } public TransferFormat ActiveFormat { get; set; }
public TestClient(IHubProtocol protocol = null, IInvocationBinder invocationBinder = null, string userIdentifier = null) public TestClient(IHubProtocol protocol = null, IInvocationBinder invocationBinder = null, string userIdentifier = null, long pauseWriterThreshold = 32768)
{ {
var options = new PipeOptions(readerScheduler: PipeScheduler.Inline, writerScheduler: PipeScheduler.Inline, useSynchronizationContext: false); var options = new PipeOptions(readerScheduler: PipeScheduler.Inline, writerScheduler: PipeScheduler.Inline, useSynchronizationContext: false,
pauseWriterThreshold: pauseWriterThreshold, resumeWriterThreshold: pauseWriterThreshold / 2);
var pair = DuplexPipe.CreateConnectionPair(options, options); var pair = DuplexPipe.CreateConnectionPair(options, options);
Connection = new DefaultConnectionContext(Guid.NewGuid().ToString(), pair.Transport, pair.Application); Connection = new DefaultConnectionContext(Guid.NewGuid().ToString(), pair.Transport, pair.Application);
@ -70,16 +71,7 @@ namespace Microsoft.AspNetCore.SignalR.Tests
{ {
if (sendHandshakeRequestMessage) if (sendHandshakeRequestMessage)
{ {
var memoryBufferWriter = MemoryBufferWriter.Get(); await Connection.Application.Output.WriteAsync(GetHandshakeRequestMessage());
try
{
HandshakeProtocol.WriteRequestMessage(new HandshakeRequestMessage(_protocol.Name, _protocol.Version), memoryBufferWriter);
await Connection.Application.Output.WriteAsync(memoryBufferWriter.ToArray());
}
finally
{
MemoryBufferWriter.Return(memoryBufferWriter);
}
} }
var connection = handler.OnConnectedAsync(Connection); var connection = handler.OnConnectedAsync(Connection);
@ -257,7 +249,7 @@ namespace Microsoft.AspNetCore.SignalR.Tests
} }
else else
{ {
// read first message out of the incoming data // read first message out of the incoming data
if (HandshakeProtocol.TryParseResponseMessage(ref buffer, out var responseMessage)) if (HandshakeProtocol.TryParseResponseMessage(ref buffer, out var responseMessage))
{ {
return responseMessage; return responseMessage;
@ -312,6 +304,20 @@ namespace Microsoft.AspNetCore.SignalR.Tests
} }
} }
public byte[] GetHandshakeRequestMessage()
{
var memoryBufferWriter = MemoryBufferWriter.Get();
try
{
HandshakeProtocol.WriteRequestMessage(new HandshakeRequestMessage(_protocol.Name, _protocol.Version), memoryBufferWriter);
return memoryBufferWriter.ToArray();
}
finally
{
MemoryBufferWriter.Return(memoryBufferWriter);
}
}
private class DefaultInvocationBinder : IInvocationBinder private class DefaultInvocationBinder : IInvocationBinder
{ {
public IReadOnlyList<Type> GetParameterTypes(string methodName) public IReadOnlyList<Type> GetParameterTypes(string methodName)

View File

@ -61,7 +61,7 @@ namespace Microsoft.AspNetCore.SignalR.Microbenchmarks
_parser = new ServerSentEventsMessageParser(); _parser = new ServerSentEventsMessageParser();
_rawData = new ReadOnlySequence<byte>(protocol.GetMessageBytes(hubMessage)); _rawData = new ReadOnlySequence<byte>(protocol.GetMessageBytes(hubMessage));
var ms = new MemoryStream(); var ms = new MemoryStream();
ServerSentEventsMessageFormatter.WriteMessageAsync(_rawData, ms).GetAwaiter().GetResult(); ServerSentEventsMessageFormatter.WriteMessageAsync(_rawData, ms, default).GetAwaiter().GetResult();
_sseFormattedData = ms.ToArray(); _sseFormattedData = ms.ToArray();
} }
@ -81,7 +81,7 @@ namespace Microsoft.AspNetCore.SignalR.Microbenchmarks
[Benchmark] [Benchmark]
public Task WriteSingleMessage() public Task WriteSingleMessage()
{ {
return ServerSentEventsMessageFormatter.WriteMessageAsync(_rawData, Stream.Null); return ServerSentEventsMessageFormatter.WriteMessageAsync(_rawData, Stream.Null, default);
} }
public enum Message public enum Message

View File

@ -82,10 +82,10 @@ namespace Microsoft.AspNetCore.SignalR
/// <inheritdoc /> /// <inheritdoc />
public override Task SendAllAsync(string methodName, object[] args, CancellationToken cancellationToken = default) public override Task SendAllAsync(string methodName, object[] args, CancellationToken cancellationToken = default)
{ {
return SendToAllConnections(methodName, args, null); return SendToAllConnections(methodName, args, include: null, cancellationToken);
} }
private Task SendToAllConnections(string methodName, object[] args, Func<HubConnectionContext, bool> include) private Task SendToAllConnections(string methodName, object[] args, Func<HubConnectionContext, bool> include, CancellationToken cancellationToken)
{ {
List<Task> tasks = null; List<Task> tasks = null;
SerializedHubMessage message = null; SerializedHubMessage message = null;
@ -103,7 +103,7 @@ namespace Microsoft.AspNetCore.SignalR
message = CreateSerializedInvocationMessage(methodName, args); message = CreateSerializedInvocationMessage(methodName, args);
} }
var task = connection.WriteAsync(message); var task = connection.WriteAsync(message, cancellationToken);
if (!task.IsCompletedSuccessfully) if (!task.IsCompletedSuccessfully)
{ {
@ -127,7 +127,8 @@ namespace Microsoft.AspNetCore.SignalR
// Tasks and message are passed by ref so they can be lazily created inside the method post-filtering, // Tasks and message are passed by ref so they can be lazily created inside the method post-filtering,
// while still being re-usable when sending to multiple groups // while still being re-usable when sending to multiple groups
private void SendToGroupConnections(string methodName, object[] args, ConcurrentDictionary<string, HubConnectionContext> connections, Func<HubConnectionContext, bool> include, ref List<Task> tasks, ref SerializedHubMessage message) private void SendToGroupConnections(string methodName, object[] args, ConcurrentDictionary<string, HubConnectionContext> connections, Func<HubConnectionContext, bool> include,
ref List<Task> tasks, ref SerializedHubMessage message, CancellationToken cancellationToken)
{ {
// foreach over ConcurrentDictionary avoids allocating an enumerator // foreach over ConcurrentDictionary avoids allocating an enumerator
foreach (var connection in connections) foreach (var connection in connections)
@ -142,7 +143,7 @@ namespace Microsoft.AspNetCore.SignalR
message = CreateSerializedInvocationMessage(methodName, args); message = CreateSerializedInvocationMessage(methodName, args);
} }
var task = connection.Value.WriteAsync(message); var task = connection.Value.WriteAsync(message, cancellationToken);
if (!task.IsCompletedSuccessfully) if (!task.IsCompletedSuccessfully)
{ {
@ -175,7 +176,7 @@ namespace Microsoft.AspNetCore.SignalR
// Write message directly to connection without caching it in memory // Write message directly to connection without caching it in memory
var message = CreateInvocationMessage(methodName, args); var message = CreateInvocationMessage(methodName, args);
return connection.WriteAsync(message).AsTask(); return connection.WriteAsync(message, cancellationToken).AsTask();
} }
/// <inheritdoc /> /// <inheritdoc />
@ -193,7 +194,7 @@ namespace Microsoft.AspNetCore.SignalR
// group might be modified inbetween checking and sending // group might be modified inbetween checking and sending
List<Task> tasks = null; List<Task> tasks = null;
SerializedHubMessage message = null; SerializedHubMessage message = null;
SendToGroupConnections(methodName, args, group, null, ref tasks, ref message); SendToGroupConnections(methodName, args, group, null, ref tasks, ref message, cancellationToken);
if (tasks != null) if (tasks != null)
{ {
@ -221,7 +222,7 @@ namespace Microsoft.AspNetCore.SignalR
var group = _groups[groupName]; var group = _groups[groupName];
if (group != null) if (group != null)
{ {
SendToGroupConnections(methodName, args, group, null, ref tasks, ref message); SendToGroupConnections(methodName, args, group, null, ref tasks, ref message, cancellationToken);
} }
} }
@ -247,7 +248,7 @@ namespace Microsoft.AspNetCore.SignalR
List<Task> tasks = null; List<Task> tasks = null;
SerializedHubMessage message = null; SerializedHubMessage message = null;
SendToGroupConnections(methodName, args, group, connection => !excludedConnectionIds.Contains(connection.ConnectionId), ref tasks, ref message); SendToGroupConnections(methodName, args, group, connection => !excludedConnectionIds.Contains(connection.ConnectionId), ref tasks, ref message, cancellationToken);
if (tasks != null) if (tasks != null)
{ {
@ -271,7 +272,7 @@ namespace Microsoft.AspNetCore.SignalR
/// <inheritdoc /> /// <inheritdoc />
public override Task SendUserAsync(string userId, string methodName, object[] args, CancellationToken cancellationToken = default) public override Task SendUserAsync(string userId, string methodName, object[] args, CancellationToken cancellationToken = default)
{ {
return SendToAllConnections(methodName, args, connection => string.Equals(connection.UserIdentifier, userId, StringComparison.Ordinal)); return SendToAllConnections(methodName, args, connection => string.Equals(connection.UserIdentifier, userId, StringComparison.Ordinal), cancellationToken);
} }
/// <inheritdoc /> /// <inheritdoc />
@ -292,19 +293,19 @@ namespace Microsoft.AspNetCore.SignalR
/// <inheritdoc /> /// <inheritdoc />
public override Task SendAllExceptAsync(string methodName, object[] args, IReadOnlyList<string> excludedConnectionIds, CancellationToken cancellationToken = default) public override Task SendAllExceptAsync(string methodName, object[] args, IReadOnlyList<string> excludedConnectionIds, CancellationToken cancellationToken = default)
{ {
return SendToAllConnections(methodName, args, connection => !excludedConnectionIds.Contains(connection.ConnectionId)); return SendToAllConnections(methodName, args, connection => !excludedConnectionIds.Contains(connection.ConnectionId), cancellationToken);
} }
/// <inheritdoc /> /// <inheritdoc />
public override Task SendConnectionsAsync(IReadOnlyList<string> connectionIds, string methodName, object[] args, CancellationToken cancellationToken = default) public override Task SendConnectionsAsync(IReadOnlyList<string> connectionIds, string methodName, object[] args, CancellationToken cancellationToken = default)
{ {
return SendToAllConnections(methodName, args, connection => connectionIds.Contains(connection.ConnectionId)); return SendToAllConnections(methodName, args, connection => connectionIds.Contains(connection.ConnectionId), cancellationToken);
} }
/// <inheritdoc /> /// <inheritdoc />
public override Task SendUsersAsync(IReadOnlyList<string> userIds, string methodName, object[] args, CancellationToken cancellationToken = default) public override Task SendUsersAsync(IReadOnlyList<string> userIds, string methodName, object[] args, CancellationToken cancellationToken = default)
{ {
return SendToAllConnections(methodName, args, connection => userIds.Contains(connection.UserIdentifier)); return SendToAllConnections(methodName, args, connection => userIds.Contains(connection.UserIdentifier), cancellationToken);
} }
} }
} }

View File

@ -34,6 +34,8 @@ namespace Microsoft.AspNetCore.SignalR
private readonly long _keepAliveInterval; private readonly long _keepAliveInterval;
private readonly long _clientTimeoutInterval; private readonly long _clientTimeoutInterval;
private readonly SemaphoreSlim _writeLock = new SemaphoreSlim(1); private readonly SemaphoreSlim _writeLock = new SemaphoreSlim(1);
private readonly bool _useAbsoluteClientTimeout;
private readonly object _receiveMessageTimeoutLock = new object();
private StreamTracker _streamTracker; private StreamTracker _streamTracker;
private long _lastSendTimeStamp = DateTime.UtcNow.Ticks; private long _lastSendTimeStamp = DateTime.UtcNow.Ticks;
@ -41,10 +43,13 @@ namespace Microsoft.AspNetCore.SignalR
private bool _receivedMessageThisInterval = false; private bool _receivedMessageThisInterval = false;
private ReadOnlyMemory<byte> _cachedPingMessage; private ReadOnlyMemory<byte> _cachedPingMessage;
private bool _clientTimeoutActive; private bool _clientTimeoutActive;
private bool _connectionAborted; private volatile bool _connectionAborted;
private volatile bool _allowReconnect = true; private volatile bool _allowReconnect = true;
private int _streamBufferCapacity; private int _streamBufferCapacity;
private long? _maxMessageSize; private long? _maxMessageSize;
private bool _receivedMessageTimeoutEnabled = false;
private long _receivedMessageElapsedTicks = 0;
private long _receivedMessageTimestamp;
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="HubConnectionContext"/> class. /// Initializes a new instance of the <see cref="HubConnectionContext"/> class.
@ -64,6 +69,11 @@ namespace Microsoft.AspNetCore.SignalR
ConnectionAborted = _connectionAbortedTokenSource.Token; ConnectionAborted = _connectionAbortedTokenSource.Token;
HubCallerContext = new DefaultHubCallerContext(this); HubCallerContext = new DefaultHubCallerContext(this);
if (AppContext.TryGetSwitch("Microsoft.AspNetCore.SignalR.UseAbsoluteClientTimeout", out var useAbsoluteClientTimeout))
{
_useAbsoluteClientTimeout = useAbsoluteClientTimeout;
}
} }
internal StreamTracker StreamTracker internal StreamTracker StreamTracker
@ -131,7 +141,7 @@ namespace Microsoft.AspNetCore.SignalR
// Try to grab the lock synchronously, if we fail, go to the slower path // Try to grab the lock synchronously, if we fail, go to the slower path
if (!_writeLock.Wait(0)) if (!_writeLock.Wait(0))
{ {
return new ValueTask(WriteSlowAsync(message)); return new ValueTask(WriteSlowAsync(message, cancellationToken));
} }
if (_connectionAborted) if (_connectionAborted)
@ -141,7 +151,7 @@ namespace Microsoft.AspNetCore.SignalR
} }
// This method should never throw synchronously // This method should never throw synchronously
var task = WriteCore(message); var task = WriteCore(message, cancellationToken);
// The write didn't complete synchronously so await completion // The write didn't complete synchronously so await completion
if (!task.IsCompletedSuccessfully) if (!task.IsCompletedSuccessfully)
@ -167,7 +177,7 @@ namespace Microsoft.AspNetCore.SignalR
// Try to grab the lock synchronously, if we fail, go to the slower path // Try to grab the lock synchronously, if we fail, go to the slower path
if (!_writeLock.Wait(0)) if (!_writeLock.Wait(0))
{ {
return new ValueTask(WriteSlowAsync(message)); return new ValueTask(WriteSlowAsync(message, cancellationToken));
} }
if (_connectionAborted) if (_connectionAborted)
@ -177,7 +187,7 @@ namespace Microsoft.AspNetCore.SignalR
} }
// This method should never throw synchronously // This method should never throw synchronously
var task = WriteCore(message); var task = WriteCore(message, cancellationToken);
// The write didn't complete synchronously so await completion // The write didn't complete synchronously so await completion
if (!task.IsCompletedSuccessfully) if (!task.IsCompletedSuccessfully)
@ -191,7 +201,7 @@ namespace Microsoft.AspNetCore.SignalR
return default; return default;
} }
private ValueTask<FlushResult> WriteCore(HubMessage message) private ValueTask<FlushResult> WriteCore(HubMessage message, CancellationToken cancellationToken)
{ {
try try
{ {
@ -199,7 +209,7 @@ namespace Microsoft.AspNetCore.SignalR
// write it without caching. // write it without caching.
Protocol.WriteMessage(message, _connectionContext.Transport.Output); Protocol.WriteMessage(message, _connectionContext.Transport.Output);
return _connectionContext.Transport.Output.FlushAsync(); return _connectionContext.Transport.Output.FlushAsync(cancellationToken);
} }
catch (Exception ex) catch (Exception ex)
{ {
@ -211,14 +221,14 @@ namespace Microsoft.AspNetCore.SignalR
} }
} }
private ValueTask<FlushResult> WriteCore(SerializedHubMessage message) private ValueTask<FlushResult> WriteCore(SerializedHubMessage message, CancellationToken cancellationToken)
{ {
try try
{ {
// Grab a preserialized buffer for this protocol. // Grab a preserialized buffer for this protocol.
var buffer = message.GetSerializedMessage(Protocol); var buffer = message.GetSerializedMessage(Protocol);
return _connectionContext.Transport.Output.WriteAsync(buffer); return _connectionContext.Transport.Output.WriteAsync(buffer, cancellationToken);
} }
catch (Exception ex) catch (Exception ex)
{ {
@ -249,10 +259,10 @@ namespace Microsoft.AspNetCore.SignalR
} }
} }
private async Task WriteSlowAsync(HubMessage message) private async Task WriteSlowAsync(HubMessage message, CancellationToken cancellationToken)
{ {
// Failed to get the lock immediately when entering WriteAsync so await until it is available // Failed to get the lock immediately when entering WriteAsync so await until it is available
await _writeLock.WaitAsync(); await _writeLock.WaitAsync(cancellationToken);
try try
{ {
@ -261,7 +271,7 @@ namespace Microsoft.AspNetCore.SignalR
return; return;
} }
await WriteCore(message); await WriteCore(message, cancellationToken);
} }
catch (Exception ex) catch (Exception ex)
{ {
@ -274,7 +284,7 @@ namespace Microsoft.AspNetCore.SignalR
} }
} }
private async Task WriteSlowAsync(SerializedHubMessage message) private async Task WriteSlowAsync(SerializedHubMessage message, CancellationToken cancellationToken)
{ {
// Failed to get the lock immediately when entering WriteAsync so await until it is available // Failed to get the lock immediately when entering WriteAsync so await until it is available
await _writeLock.WaitAsync(); await _writeLock.WaitAsync();
@ -286,7 +296,7 @@ namespace Microsoft.AspNetCore.SignalR
return; return;
} }
await WriteCore(message); await WriteCore(message, cancellationToken);
} }
catch (Exception ex) catch (Exception ex)
{ {
@ -370,6 +380,9 @@ namespace Microsoft.AspNetCore.SignalR
private void AbortAllowReconnect() private void AbortAllowReconnect()
{ {
_connectionAborted = true; _connectionAborted = true;
// Cancel any current writes or writes that are about to happen and have already gone past the _connectionAborted bool
// We have to do this outside of the lock otherwise it could hang if the write is observing backpressure
_connectionContext.Transport.Output.CancelPendingFlush();
// If we already triggered the token then noop, this isn't thread safe but it's good enough // If we already triggered the token then noop, this isn't thread safe but it's good enough
// to avoid spawning a new task in the most common cases // to avoid spawning a new task in the most common cases
@ -525,9 +538,23 @@ namespace Microsoft.AspNetCore.SignalR
internal Task AbortAsync() internal Task AbortAsync()
{ {
AbortAllowReconnect(); AbortAllowReconnect();
// Acquire lock to make sure all writes are completed
if (!_writeLock.Wait(0))
{
return AbortAsyncSlow();
}
_writeLock.Release();
return _abortCompletedTcs.Task; return _abortCompletedTcs.Task;
} }
private async Task AbortAsyncSlow()
{
await _writeLock.WaitAsync();
_writeLock.Release();
await _abortCompletedTcs.Task;
}
private void KeepAliveTick() private void KeepAliveTick()
{ {
var currentTime = DateTime.UtcNow.Ticks; var currentTime = DateTime.UtcNow.Ticks;
@ -564,17 +591,41 @@ namespace Microsoft.AspNetCore.SignalR
private void CheckClientTimeout() private void CheckClientTimeout()
{ {
// If it's been too long since we've heard from the client, then close this if (Debugger.IsAttached)
if (DateTime.UtcNow.Ticks - Volatile.Read(ref _lastReceivedTimeStamp) > _clientTimeoutInterval)
{ {
if (!_receivedMessageThisInterval) return;
{ }
Log.ClientTimeout(_logger, TimeSpan.FromTicks(_clientTimeoutInterval));
AbortAllowReconnect();
}
_receivedMessageThisInterval = false; if (_useAbsoluteClientTimeout)
Volatile.Write(ref _lastReceivedTimeStamp, DateTime.UtcNow.Ticks); {
// If it's been too long since we've heard from the client, then close this
if (DateTime.UtcNow.Ticks - Volatile.Read(ref _lastReceivedTimeStamp) > _clientTimeoutInterval)
{
if (!_receivedMessageThisInterval)
{
Log.ClientTimeout(_logger, TimeSpan.FromTicks(_clientTimeoutInterval));
AbortAllowReconnect();
}
_receivedMessageThisInterval = false;
Volatile.Write(ref _lastReceivedTimeStamp, DateTime.UtcNow.Ticks);
}
}
else
{
lock (_receiveMessageTimeoutLock)
{
if (_receivedMessageTimeoutEnabled)
{
_receivedMessageElapsedTicks = DateTime.UtcNow.Ticks - _receivedMessageTimestamp;
if (_receivedMessageElapsedTicks >= _clientTimeoutInterval)
{
Log.ClientTimeout(_logger, TimeSpan.FromTicks(_clientTimeoutInterval));
AbortAllowReconnect();
}
}
}
} }
} }
@ -623,6 +674,35 @@ namespace Microsoft.AspNetCore.SignalR
_receivedMessageThisInterval = true; _receivedMessageThisInterval = true;
} }
internal void BeginClientTimeout()
{
// check if new timeout behavior is in use
if (!_useAbsoluteClientTimeout)
{
lock (_receiveMessageTimeoutLock)
{
_receivedMessageTimeoutEnabled = true;
_receivedMessageTimestamp = DateTime.UtcNow.Ticks;
}
}
}
internal void StopClientTimeout()
{
// check if new timeout behavior is in use
if (!_useAbsoluteClientTimeout)
{
lock (_receiveMessageTimeoutLock)
{
// we received a message so stop the timer and reset it
// it will resume after the message has been processed
_receivedMessageElapsedTicks = 0;
_receivedMessageTimestamp = 0;
_receivedMessageTimeoutEnabled = false;
}
}
}
private static class Log private static class Log
{ {
// Category: HubConnectionContext // Category: HubConnectionContext

View File

@ -213,6 +213,8 @@ namespace Microsoft.AspNetCore.SignalR
{ {
var input = connection.Input; var input = connection.Input;
var protocol = connection.Protocol; var protocol = connection.Protocol;
connection.BeginClientTimeout();
var binder = new HubConnectionBinder<THub>(_dispatcher, connection); var binder = new HubConnectionBinder<THub>(_dispatcher, connection);
@ -221,6 +223,8 @@ namespace Microsoft.AspNetCore.SignalR
var result = await input.ReadAsync(); var result = await input.ReadAsync();
var buffer = result.Buffer; var buffer = result.Buffer;
connection.ResetClientTimeout();
try try
{ {
if (result.IsCanceled) if (result.IsCanceled)
@ -230,15 +234,21 @@ namespace Microsoft.AspNetCore.SignalR
if (!buffer.IsEmpty) if (!buffer.IsEmpty)
{ {
connection.ResetClientTimeout(); bool messageReceived = false;
// No message limit, just parse and dispatch // No message limit, just parse and dispatch
if (_maximumMessageSize == null) if (_maximumMessageSize == null)
{ {
while (protocol.TryParseMessage(ref buffer, binder, out var message)) while (protocol.TryParseMessage(ref buffer, binder, out var message))
{ {
messageReceived = true;
connection.StopClientTimeout();
await _dispatcher.DispatchMessageAsync(connection, message); await _dispatcher.DispatchMessageAsync(connection, message);
} }
if (messageReceived)
{
connection.BeginClientTimeout();
}
} }
else else
{ {
@ -258,6 +268,9 @@ namespace Microsoft.AspNetCore.SignalR
if (protocol.TryParseMessage(ref segment, binder, out var message)) if (protocol.TryParseMessage(ref segment, binder, out var message))
{ {
messageReceived = true;
connection.StopClientTimeout();
await _dispatcher.DispatchMessageAsync(connection, message); await _dispatcher.DispatchMessageAsync(connection, message);
} }
else if (overLength) else if (overLength)
@ -273,6 +286,11 @@ namespace Microsoft.AspNetCore.SignalR
// Update the buffer to the remaining segment // Update the buffer to the remaining segment
buffer = buffer.Slice(segment.Start); buffer = buffer.Slice(segment.Start);
} }
if (messageReceived)
{
connection.BeginClientTimeout();
}
} }
} }

View File

@ -105,7 +105,7 @@ namespace Microsoft.AspNetCore.SignalR.Internal
public Task SendCoreAsync(string method, object[] args, CancellationToken cancellationToken = default) public Task SendCoreAsync(string method, object[] args, CancellationToken cancellationToken = default)
{ {
return _lifetimeManager.SendAllAsync(method, args); return _lifetimeManager.SendAllAsync(method, args, cancellationToken);
} }
} }

View File

@ -1,9 +1,14 @@
// Copyright (c) .NET Foundation. All rights reserved. // Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Threading;
using Microsoft.AspNetCore.SignalR.Protocol;
using Microsoft.AspNetCore.SignalR.Specification.Tests;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Logging.Abstractions;
using Microsoft.AspNetCore.SignalR.Specification.Tests; using Xunit;
namespace Microsoft.AspNetCore.SignalR.Tests namespace Microsoft.AspNetCore.SignalR.Tests
{ {
@ -13,5 +18,241 @@ namespace Microsoft.AspNetCore.SignalR.Tests
{ {
return new DefaultHubLifetimeManager<MyHub>(new Logger<DefaultHubLifetimeManager<MyHub>>(NullLoggerFactory.Instance)); return new DefaultHubLifetimeManager<MyHub>(new Logger<DefaultHubLifetimeManager<MyHub>>(NullLoggerFactory.Instance));
} }
[Fact]
public async Task SendAllAsyncWillCancelWithToken()
{
using (var client1 = new TestClient())
using (var client2 = new TestClient(pauseWriterThreshold: 2))
{
var manager = CreateNewHubLifetimeManager();
var connection1 = HubConnectionContextUtils.Create(client1.Connection);
var connection2 = HubConnectionContextUtils.Create(client2.Connection);
await manager.OnConnectedAsync(connection1).OrTimeout();
await manager.OnConnectedAsync(connection2).OrTimeout();
var cts = new CancellationTokenSource();
var sendTask = manager.SendAllAsync("Hello", new object[] { "World" }, cts.Token).OrTimeout();
Assert.False(sendTask.IsCompleted);
cts.Cancel();
await sendTask.OrTimeout();
var message = Assert.IsType<InvocationMessage>(client1.TryRead());
Assert.Equal("Hello", message.Target);
Assert.Single(message.Arguments);
Assert.Equal("World", (string)message.Arguments[0]);
var tcs = new TaskCompletionSource<object>(TaskCreationOptions.RunContinuationsAsynchronously);
connection2.ConnectionAborted.Register(t =>
{
((TaskCompletionSource<object>)t).SetResult(null);
}, tcs);
await tcs.Task.OrTimeout();
Assert.False(connection1.ConnectionAborted.IsCancellationRequested);
}
}
[Fact]
public async Task SendAllExceptAsyncWillCancelWithToken()
{
using (var client1 = new TestClient())
using (var client2 = new TestClient(pauseWriterThreshold: 2))
{
var manager = CreateNewHubLifetimeManager();
var connection1 = HubConnectionContextUtils.Create(client1.Connection);
var connection2 = HubConnectionContextUtils.Create(client2.Connection);
await manager.OnConnectedAsync(connection1).OrTimeout();
await manager.OnConnectedAsync(connection2).OrTimeout();
var cts = new CancellationTokenSource();
var sendTask = manager.SendAllExceptAsync("Hello", new object[] { "World" }, new List<string> { connection1.ConnectionId }, cts.Token).OrTimeout();
Assert.False(sendTask.IsCompleted);
cts.Cancel();
await sendTask.OrTimeout();
var tcs = new TaskCompletionSource<object>(TaskCreationOptions.RunContinuationsAsynchronously);
connection2.ConnectionAborted.Register(t =>
{
((TaskCompletionSource<object>)t).SetResult(null);
}, tcs);
await tcs.Task.OrTimeout();
Assert.False(connection1.ConnectionAborted.IsCancellationRequested);
Assert.Null(client1.TryRead());
}
}
[Fact]
public async Task SendConnectionAsyncWillCancelWithToken()
{
using (var client1 = new TestClient(pauseWriterThreshold: 2))
{
var manager = CreateNewHubLifetimeManager();
var connection1 = HubConnectionContextUtils.Create(client1.Connection);
await manager.OnConnectedAsync(connection1).OrTimeout();
var cts = new CancellationTokenSource();
var sendTask = manager.SendConnectionAsync(connection1.ConnectionId, "Hello", new object[] { "World" }, cts.Token).OrTimeout();
Assert.False(sendTask.IsCompleted);
cts.Cancel();
await sendTask.OrTimeout();
var tcs = new TaskCompletionSource<object>(TaskCreationOptions.RunContinuationsAsynchronously);
connection1.ConnectionAborted.Register(t =>
{
((TaskCompletionSource<object>)t).SetResult(null);
}, tcs);
await tcs.Task.OrTimeout();
}
}
[Fact]
public async Task SendConnectionsAsyncWillCancelWithToken()
{
using (var client1 = new TestClient(pauseWriterThreshold: 2))
{
var manager = CreateNewHubLifetimeManager();
var connection1 = HubConnectionContextUtils.Create(client1.Connection);
await manager.OnConnectedAsync(connection1).OrTimeout();
var cts = new CancellationTokenSource();
var sendTask = manager.SendConnectionsAsync(new List<string> { connection1.ConnectionId }, "Hello", new object[] { "World" }, cts.Token).OrTimeout();
Assert.False(sendTask.IsCompleted);
cts.Cancel();
await sendTask.OrTimeout();
var tcs = new TaskCompletionSource<object>(TaskCreationOptions.RunContinuationsAsynchronously);
connection1.ConnectionAborted.Register(t =>
{
((TaskCompletionSource<object>)t).SetResult(null);
}, tcs);
await tcs.Task.OrTimeout();
}
}
[Fact]
public async Task SendGroupAsyncWillCancelWithToken()
{
using (var client1 = new TestClient(pauseWriterThreshold: 2))
{
var manager = CreateNewHubLifetimeManager();
var connection1 = HubConnectionContextUtils.Create(client1.Connection);
await manager.OnConnectedAsync(connection1).OrTimeout();
await manager.AddToGroupAsync(connection1.ConnectionId, "group").OrTimeout();
var cts = new CancellationTokenSource();
var sendTask = manager.SendGroupAsync("group", "Hello", new object[] { "World" }, cts.Token).OrTimeout();
Assert.False(sendTask.IsCompleted);
cts.Cancel();
await sendTask.OrTimeout();
var tcs = new TaskCompletionSource<object>(TaskCreationOptions.RunContinuationsAsynchronously);
connection1.ConnectionAborted.Register(t =>
{
((TaskCompletionSource<object>)t).SetResult(null);
}, tcs);
await tcs.Task.OrTimeout();
}
}
[Fact]
public async Task SendGroupExceptAsyncWillCancelWithToken()
{
using (var client1 = new TestClient())
using (var client2 = new TestClient(pauseWriterThreshold: 2))
{
var manager = CreateNewHubLifetimeManager();
var connection1 = HubConnectionContextUtils.Create(client1.Connection);
var connection2 = HubConnectionContextUtils.Create(client2.Connection);
await manager.OnConnectedAsync(connection1).OrTimeout();
await manager.OnConnectedAsync(connection2).OrTimeout();
await manager.AddToGroupAsync(connection1.ConnectionId, "group").OrTimeout();
await manager.AddToGroupAsync(connection2.ConnectionId, "group").OrTimeout();
var cts = new CancellationTokenSource();
var sendTask = manager.SendGroupExceptAsync("group", "Hello", new object[] { "World" }, new List<string> { connection1.ConnectionId }, cts.Token).OrTimeout();
Assert.False(sendTask.IsCompleted);
cts.Cancel();
await sendTask.OrTimeout();
var tcs = new TaskCompletionSource<object>(TaskCreationOptions.RunContinuationsAsynchronously);
connection2.ConnectionAborted.Register(t =>
{
((TaskCompletionSource<object>)t).SetResult(null);
}, tcs);
await tcs.Task.OrTimeout();
Assert.False(connection1.ConnectionAborted.IsCancellationRequested);
Assert.Null(client1.TryRead());
}
}
[Fact]
public async Task SendGroupsAsyncWillCancelWithToken()
{
using (var client1 = new TestClient(pauseWriterThreshold: 2))
{
var manager = CreateNewHubLifetimeManager();
var connection1 = HubConnectionContextUtils.Create(client1.Connection);
await manager.OnConnectedAsync(connection1).OrTimeout();
await manager.AddToGroupAsync(connection1.ConnectionId, "group").OrTimeout();
var cts = new CancellationTokenSource();
var sendTask = manager.SendGroupsAsync(new List<string> { "group" }, "Hello", new object[] { "World" }, cts.Token).OrTimeout();
Assert.False(sendTask.IsCompleted);
cts.Cancel();
await sendTask.OrTimeout();
var tcs = new TaskCompletionSource<object>(TaskCreationOptions.RunContinuationsAsynchronously);
connection1.ConnectionAborted.Register(t =>
{
((TaskCompletionSource<object>)t).SetResult(null);
}, tcs);
await tcs.Task.OrTimeout();
}
}
[Fact]
public async Task SendUserAsyncWillCancelWithToken()
{
using (var client1 = new TestClient())
using (var client2 = new TestClient(pauseWriterThreshold: 2))
{
var manager = CreateNewHubLifetimeManager();
var connection1 = HubConnectionContextUtils.Create(client1.Connection, userIdentifier: "user");
var connection2 = HubConnectionContextUtils.Create(client2.Connection, userIdentifier: "user");
await manager.OnConnectedAsync(connection1).OrTimeout();
await manager.OnConnectedAsync(connection2).OrTimeout();
var cts = new CancellationTokenSource();
var sendTask = manager.SendUserAsync("user", "Hello", new object[] { "World" }, cts.Token).OrTimeout();
Assert.False(sendTask.IsCompleted);
cts.Cancel();
await sendTask.OrTimeout();
var message = Assert.IsType<InvocationMessage>(client1.TryRead());
Assert.Equal("Hello", message.Target);
Assert.Single(message.Arguments);
Assert.Equal("World", (string)message.Arguments[0]);
var tcs = new TaskCompletionSource<object>(TaskCreationOptions.RunContinuationsAsynchronously);
connection2.ConnectionAborted.Register(t =>
{
((TaskCompletionSource<object>)t).SetResult(null);
}, tcs);
await tcs.Task.OrTimeout();
Assert.False(connection1.ConnectionAborted.IsCancellationRequested);
}
}
[Fact]
public async Task SendUsersAsyncWillCancelWithToken()
{
using (var client1 = new TestClient())
using (var client2 = new TestClient(pauseWriterThreshold: 2))
{
var manager = CreateNewHubLifetimeManager();
var connection1 = HubConnectionContextUtils.Create(client1.Connection, userIdentifier: "user1");
var connection2 = HubConnectionContextUtils.Create(client2.Connection, userIdentifier: "user2");
await manager.OnConnectedAsync(connection1).OrTimeout();
await manager.OnConnectedAsync(connection2).OrTimeout();
var cts = new CancellationTokenSource();
var sendTask = manager.SendUsersAsync(new List<string> { "user1", "user2" }, "Hello", new object[] { "World" }, cts.Token).OrTimeout();
Assert.False(sendTask.IsCompleted);
cts.Cancel();
await sendTask.OrTimeout();
var message = Assert.IsType<InvocationMessage>(client1.TryRead());
Assert.Equal("Hello", message.Target);
Assert.Single(message.Arguments);
Assert.Equal("World", (string)message.Arguments[0]);
var tcs = new TaskCompletionSource<object>(TaskCreationOptions.RunContinuationsAsynchronously);
connection2.ConnectionAborted.Register(t =>
{
((TaskCompletionSource<object>)t).SetResult(null);
}, tcs);
await tcs.Task.OrTimeout();
Assert.False(connection1.ConnectionAborted.IsCancellationRequested);
}
}
} }
} }

View File

@ -2797,6 +2797,47 @@ namespace Microsoft.AspNetCore.SignalR.Tests
} }
} }
[Fact]
public async Task HubMethodInvokeDoesNotCountTowardsClientTimeout()
{
using (StartVerifiableLog())
{
var tcsService = new TcsService();
var serviceProvider = HubConnectionHandlerTestUtils.CreateServiceProvider(services =>
{
services.Configure<HubOptions>(options =>
options.ClientTimeoutInterval = TimeSpan.FromMilliseconds(0));
services.AddSingleton(tcsService);
}, LoggerFactory);
var connectionHandler = serviceProvider.GetService<HubConnectionHandler<LongRunningHub>>();
using (var client = new TestClient(new JsonHubProtocol()))
{
var connectionHandlerTask = await client.ConnectAsync(connectionHandler);
// This starts the timeout logic
await client.SendHubMessageAsync(PingMessage.Instance);
// Call long running hub method
var hubMethodTask = client.InvokeAsync(nameof(LongRunningHub.LongRunningMethod));
await tcsService.StartedMethod.Task.OrTimeout();
// Tick heartbeat while hub method is running to show that close isn't triggered
client.TickHeartbeat();
// Unblock long running hub method
tcsService.EndMethod.SetResult(null);
await hubMethodTask.OrTimeout();
// Tick heartbeat again now that we're outside of the hub method
client.TickHeartbeat();
// Connection is closed
await connectionHandlerTask.OrTimeout();
}
}
}
[Fact] [Fact]
public async Task EndingConnectionSendsCloseMessageWithNoError() public async Task EndingConnectionSendsCloseMessageWithNoError()
{ {