Merge branch 'master' into merge/release/5.0-preview4-to-master

This commit is contained in:
John Luo 2020-05-08 14:48:06 -07:00 committed by GitHub
commit 81d269d6f3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
339 changed files with 53150 additions and 37881 deletions

View File

@ -19,6 +19,8 @@ pr:
- '*'
variables:
- name: DOTNET_CLI_HOME
value: $(Agent.BuildDirectory)
- name: DOTNET_SKIP_FIRST_TIME_EXPERIENCE
value: true
- name: _TeamName
@ -48,7 +50,7 @@ variables:
- 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
# The code signing doesn't use the aspnet build scripts, so the msbuild parameters 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
@ -78,8 +80,6 @@ variables:
/p:DotNetPublishUsingPipelines=$(_PublishUsingPipelines)
/p:DotNetArtifactsCategory=$(_DotNetArtifactsCategory)
# used for post-build phases, internal builds only
- group: DotNet-AspNet-SDLValidation-Params
- ${{ if in(variables['Build.Reason'], 'PullRequest') }}:
- name: _BuildArgs
value: ''
@ -100,14 +100,6 @@ stages:
jobDisplayName: Code check
agentOs: Windows
steps:
- ${{ 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
artifacts:
@ -135,21 +127,11 @@ stages:
# 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.
# 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
-ci
-arch x64
-pack
-all
-buildNative
/bl:artifacts/log/build.x64.binlog
$(_BuildArgs)
$(_InternalRuntimeDownloadArgs)
@ -162,7 +144,6 @@ stages:
-arch x86
-pack
-all
-buildNative
-noBuildJava
/p:OnlyPackPlatformSpecificPackages=true
/bl:artifacts/log/build.x86.binlog
@ -325,14 +306,6 @@ stages:
agentOs: Linux
useHostedUbuntu: false
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
--ci
--arch x64
@ -492,6 +465,7 @@ stages:
jobName: Linux_musl_arm64_build
jobDisplayName: "Build: Linux Musl ARM64"
agentOs: Linux
useHostedUbuntu: false
buildScript: ./dockerbuild.sh ubuntu-alpine37
buildArgs:
--ci
@ -528,7 +502,7 @@ stages:
jobDisplayName: "Test: Windows Server 2016 x64"
agentOs: Windows
isTestingJob: true
buildArgs: -all -pack -test -BuildNative "/p:SkipHelixReadyTests=true /p:SkipIISNewHandlerTests=true /p:SkipIISTests=true /p:SkipIISExpressTests=true /p:SkipIISNewShimTests=true /p:RunTemplateTests=false" $(_InternalRuntimeDownloadArgs)
buildArgs: -all -pack -test "/p:SkipHelixReadyTests=true /p:SkipIISNewHandlerTests=true /p:SkipIISTests=true /p:SkipIISExpressTests=true /p:SkipIISNewShimTests=true /p:RunTemplateTests=false" $(_InternalRuntimeDownloadArgs)
beforeBuild:
- powershell: "& ./src/Servers/IIS/tools/UpdateIISExpressCertificate.ps1; & ./src/Servers/IIS/tools/update_schema.ps1"
displayName: Setup IISExpress test certificates and schema
@ -564,14 +538,6 @@ stages:
agentOs: Windows
isTestingJob: true
steps:
- ${{ 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
- script: ./src/ProjectTemplates/build.cmd -ci -pack -NoRestore -NoBuilddeps "/p:RunTemplateTests=true /bl:artifacts/log/template.pack.binlog"
@ -675,11 +641,11 @@ stages:
timeoutInMinutes: 180
steps:
# Build the shared framework
- script: ./build.cmd -ci -all -pack -arch x64 -buildNative /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log /bl:artifacts/log/helix.build.x64.binlog
- script: ./build.cmd -ci -all -pack -arch x64 /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log /bl:artifacts/log/helix.build.x64.binlog
displayName: Build shared fx
- script: .\restore.cmd -ci /p:BuildInteropProjects=true
displayName: Restore
- script: .\build.cmd -ci -NoRestore -test -projects eng\helix\helix.proj /p:IsRequiredCheck=true /p:IsHelixJob=true /p:BuildAllProjects=true /p:BuildInteropProjects=true /p:BuildNative=true /p:RunTemplateTests=true /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log -bl
displayName: Restore interop projects
- script: .\build.cmd -ci -NoRestore -test -all -projects eng\helix\helix.proj /p:IsRequiredCheck=true /p:IsHelixJob=true /p:BuildInteropProjects=true /p:RunTemplateTests=true /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log -bl
displayName: Run build.cmd helix target
env:
HelixApiAccessToken: $(HelixApiAccessToken) # Needed for internal queues
@ -699,12 +665,11 @@ stages:
timeoutInMinutes: 180
steps:
# Build the shared framework
- script: ./build.cmd -ci -all -pack -arch x64 -buildNative /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log /bl:artifacts/log/helix.daily.build.x64.binlog
- script: ./build.cmd -ci -all -pack -arch x64 /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log /bl:artifacts/log/helix.daily.build.x64.binlog
displayName: Build shared fx
# Build the x86 shared framework
- script: .\restore.cmd -ci /p:BuildInteropProjects=true
displayName: Restore
- script: .\build.cmd -ci -NoRestore -test -projects eng\helix\helix.proj /p:IsHelixJob=true /p:IsHelixDaily=true /p:BuildAllProjects=true /p:BuildInteropProjects=true /p:BuildNative=true /p:RunTemplateTests=true /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log -bl
displayName: Restore interop projects
- script: .\build.cmd -ci -NoRestore -test -all -projects eng\helix\helix.proj /p:IsHelixJob=true /p:IsHelixDaily=true /p:BuildInteropProjects=true /p:RunTemplateTests=true /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log -bl
displayName: Run build.cmd helix target
env:
HelixApiAccessToken: $(HelixApiAccessToken) # Needed for internal queues
@ -727,7 +692,7 @@ stages:
# Build the shared framework
- script: ./restore.sh -ci
displayName: Restore
- script: ./build.sh -ci --arch arm64 -test --no-build-nodejs -projects $(Build.SourcesDirectory)/eng/helix/helix.proj /p:IsHelixJob=true /p:IsHelixDaily=true /p:BuildAllProjects=true /p:BuildNative=true /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log -bl
- script: ./build.sh -ci --arch arm64 -test --no-build-nodejs --all -projects $(Build.SourcesDirectory)/eng/helix/helix.proj /p:IsHelixJob=true /p:IsHelixDaily=true /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log -bl
displayName: Run build.sh helix arm64 target
env:
HelixApiAccessToken: $(HelixApiAccessToken) # Needed for internal queues
@ -816,18 +781,3 @@ stages:
# See https://github.com/dotnet/arcade/issues/2871
enableSymbolValidation: false
publishInstallersAndChecksums: true
# This is to enable SDL runs part of Post-Build Validation Stage
SDLValidationParameters:
enable: false
continueOnError: false
params: ' -SourceToolsList @("policheck","credscan")
-TsaInstanceURL $(_TsaInstanceURL)
-TsaProjectName $(_TsaProjectName)
-TsaNotificationEmail $(_TsaNotificationEmail)
-TsaCodebaseAdmin $(_TsaCodebaseAdmin)
-TsaBugAreaPath $(_TsaBugAreaPath)
-TsaIterationPath $(_TsaIterationPath)
-TsaRepositoryName "AspNetCore"
-TsaCodebaseName "AspNetCore"
-TsaPublish $True
-PoliCheckAdditionalRunConfigParams @("UserExclusionPath < $(Build.SourcesDirectory)/eng/PoliCheckExclusions.xml")'

View File

@ -31,12 +31,12 @@ stages:
steps:
- script: git submodule init
- script: git submodule update --recursive
- script: cd ./src/Components
- script: ./build.cmd
-ci
-arch x64
/bl:artifacts/log/build.components.x64.binlog
displayName: Build x64
workingDirectory: ./src/Components
artifacts:
- name: Windows_Logs
path: artifacts/log/
@ -56,12 +56,12 @@ stages:
steps:
- script: git submodule init
- script: git submodule update --recursive
- script: cd ./src/Servers
- script: ./build.cmd
-ci
-arch x64
/bl:artifacts/log/build.servers.x64.binlog
displayName: Build x64
workingDirectory: ./src/Servers
artifacts:
- name: Windows_Logs
path: artifacts/log/
@ -81,12 +81,12 @@ stages:
steps:
- script: git submodule init
- script: git submodule update --recursive
- script: cd ./src/ProjectTemplates
- script: ./build.cmd
-ci
-arch x64
/bl:artifacts/log/build.projectTemplates.x64.binlog
displayName: Build x64
workingDirectory: ./src/ProjectTemplates
artifacts:
- name: Windows_Logs
path: artifacts/log/

View File

@ -28,14 +28,6 @@ jobs:
contents: '**/*.nupkg'
targetFolder: $(Build.SourcesDirectory)/artifacts/packages/$(BuildConfiguration)/shipping/
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
-ci
-restore

View File

@ -122,6 +122,7 @@ jobs:
- _BuildConfig: ${{ parameters.configuration }}
- BuildConfiguration: ${{ parameters.configuration }}
- BuildDirectory: ${{ parameters.buildDirectory }}
- DOTNET_CLI_HOME: $(Agent.BuildDirectory)
- DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true
- TeamName: AspNetCore
- ${{ if and(eq(parameters.installJdk, 'true'), eq(parameters.agentOs, 'Windows')) }}:
@ -171,27 +172,28 @@ jobs:
- ${{ parameters.beforeBuild }}
- ${{ 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 ne(parameters.steps, '')}}:
- ${{ 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.agentOs, 'Windows') }}:
- script: .\$(BuildDirectory)\build.cmd -ci /p:DotNetSignType=$(_SignType) -Configuration $(BuildConfiguration) $(BuildScriptArgs)

View File

@ -31,11 +31,11 @@ jobs:
timeoutInMinutes: 240
steps:
# Build the shared framework
- script: ./build.cmd -ci -all -pack -arch x64 -buildNative /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log /bl:artifacts/log/helix.build.x64.binlog
- script: ./build.cmd -ci -all -pack -arch x64 /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log /bl:artifacts/log/helix.build.x64.binlog
displayName: Build shared fx
- script: .\restore.cmd -ci /p:BuildInteropProjects=true
displayName: Restore
- script: .\build.cmd -ci -NoRestore -test -noBuildJava -projects eng\helix\helix.proj /p:RunQuarantinedTests=true /p:IsRequiredCheck=true /p:IsHelixJob=true /p:BuildAllProjects=true /p:BuildInteropProjects=true /p:BuildNative=true /p:RunTemplateTests=true /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log -bl
displayName: Restore interop projects
- script: .\build.cmd -ci -NoRestore -test -noBuildJava -all -projects eng\helix\helix.proj /p:RunQuarantinedTests=true /p:IsRequiredCheck=true /p:IsHelixJob=true /p:BuildInteropProjects=true /p:RunTemplateTests=true /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log -bl
displayName: Run build.cmd helix target
env:
HelixApiAccessToken: $(HelixApiAccessToken) # Needed for internal queues

18
.github/CODEOWNERS vendored
View File

@ -10,15 +10,15 @@
/eng/Versions.props @dotnet-maestro-bot @dougbu
/eng/Version.Details.xml @dotnet-maestro-bot @dougbu
/src/Components/ @SteveSandersonMS
/src/DefaultBuilder/ @tratcher @anurse
/src/Hosting/ @tratcher @anurse
/src/Http/ @tratcher @jkotalik @anurse
/src/Middleware/ @tratcher @anurse
/src/Middleware/HttpsPolicy/ @jkotalik @anurse
/src/Middleware/Rewrite/ @jkotalik @anurse
/src/DefaultBuilder/ @tratcher
/src/Hosting/ @tratcher
/src/Http/ @tratcher @jkotalik
/src/Middleware/ @tratcher
/src/Middleware/HttpsPolicy/ @jkotalik
/src/Middleware/Rewrite/ @jkotalik
# /src/ProjectTemplates/ @ryanbrandenburg
/src/Security/ @tratcher @anurse
/src/Servers/ @tratcher @jkotalik @anurse @halter73
/src/Security/ @tratcher
/src/Servers/ @tratcher @jkotalik @halter73
/src/Shared/runtime/ @dotnet/http
/src/Shared/test/Shared.Tests/runtime/ @dotnet/http
/src/SignalR/ @BrennanConroy @halter73 @anurse
/src/SignalR/ @BrennanConroy @halter73

View File

@ -1,4 +1,6 @@
<Project>
<Import Project="eng\Common.props" />
<PropertyGroup>
<RepoRoot>$(MSBuildThisFileDirectory)</RepoRoot>
<RepositoryUrl>https://github.com/dotnet/aspnetcore</RepositoryUrl>
@ -121,12 +123,7 @@
<!-- Compilation options which apply to all languages. Language-specific options should be set in eng/targets/$(lang).Common.props -->
<PropertyGroup>
<TargetOsName Condition=" '$(TargetOsName)' == '' AND $([MSBuild]::IsOSPlatform('Windows'))">win</TargetOsName>
<TargetOsName Condition=" '$(TargetOsName)' == '' AND $([MSBuild]::IsOSPlatform('OSX'))">osx</TargetOsName>
<TargetOsName Condition=" '$(TargetOsName)' == '' AND $([MSBuild]::IsOSPlatform('Linux'))">linux</TargetOsName>
<BuildArchitecture>$([System.Runtime.InteropServices.RuntimeInformation]::ProcessArchitecture.ToString().ToLowerInvariant())</BuildArchitecture>
<TargetArchitecture Condition="'$(TargetArchitecture)' == ''">x64</TargetArchitecture>
<TargetRuntimeIdentifier>$(TargetOsName)-$(TargetArchitecture)</TargetRuntimeIdentifier>
<!-- This defines the list of RIDs supported by the ASP.NET Core shared framework. -->
<SupportedRuntimeIdentifiers>
@ -179,7 +176,7 @@
<!-- Projects which reference Microsoft.AspNetCore.Mvc.Testing should import this targets file to ensure dependency .deps.json files are copied into test output. -->
<MvcTestingTargets>$(MSBuildThisFileDirectory)src\Mvc\Mvc.Testing\src\Microsoft.AspNetCore.Mvc.Testing.targets</MvcTestingTargets>
<!-- IIS native projects can only be built on Windows for x86 and x64. -->
<BuildIisNativeProjects Condition="'$(BuildNative)' == 'true' AND '$(TargetOsName)' == 'win' AND ('$(TargetArchitecture)' == 'x86' OR '$(TargetArchitecture)' == 'x64')">true</BuildIisNativeProjects>
<BuildIisNativeProjects Condition=" $(BuildNative) AND ('$(TargetArchitecture)' == 'x86' OR '$(TargetArchitecture)' == 'x64') ">true</BuildIisNativeProjects>
<!-- This property is shared by several projects to layout the AspNetCore.App targeting pack for installers -->
<TargetingPackLayoutRoot>$(ArtifactsObjDir)TargetingPack.Layout\$(Configuration)\</TargetingPackLayoutRoot>
<!-- This property is shared by several projects to layout the AspNetCore.App shared framework for installers -->

View File

@ -11,5 +11,7 @@
<add key="aspnetcore-dev" value="https://dotnet.myget.org/F/aspnetcore-dev/api/v3/index.json" />
<add key="aspnetcore-tools" value="https://dotnet.myget.org/F/aspnetcore-tools/api/v3/index.json" />
<add key="roslyn-tools" value="https://dotnet.myget.org/F/roslyn-tools/api/v3/index.json" />
<!-- Used for the SiteExtension 3.1 bits that are included in the 5.0 build -->
<add key="dotnet31-transport" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3.1-transport/nuget/v3/index.json" />
</packageSources>
</configuration>

View File

@ -185,7 +185,8 @@ if ($DumpProcesses -or $CI) {
if ($All) {
$MSBuildArguments += '/p:BuildAllProjects=true'
}
elseif ($Projects) {
if ($Projects) {
if (![System.IO.Path]::IsPathRooted($Projects))
{
$Projects = Join-Path (Get-Location) $Projects
@ -193,7 +194,7 @@ elseif ($Projects) {
$MSBuildArguments += "/p:ProjectToBuild=$Projects"
}
# When adding new sub-group build flags, add them to this check.
elseif((-not $BuildNative) -and (-not $BuildManaged) -and (-not $BuildNodeJS) -and (-not $BuildInstallers) -and (-not $BuildJava)) {
elseif (-not ($All -or $BuildNative -or $BuildManaged -or $BuildNodeJS -or $BuildInstallers -or $BuildJava)) {
Write-Warning "No default group of projects was specified, so building the 'managed' and its dependent subsets of projects. Run ``build.cmd -help`` for more details."
# This goal of this is to pick a sensible default for `build.cmd` with zero arguments.
@ -203,7 +204,7 @@ elseif((-not $BuildNative) -and (-not $BuildManaged) -and (-not $BuildNodeJS) -a
}
if ($BuildManaged -or ($All -and (-not $NoBuildManaged))) {
if ((-not $BuildNodeJS) -and (-not $NoBuildNodeJS)) {
if (-not ($BuildNodeJS -or $NoBuildNodeJS)) {
$node = Get-Command node -ErrorAction Ignore -CommandType Application
if ($node) {

View File

@ -65,7 +65,7 @@ Options:
--no-build-repo-tasks Suppress building RepoTasks.
--all Build all project types.
--[no-]build-native Build native projects (C, C++).
--[no-]build-native Build native projects (C, C++). Ignored in most cases i.e. with `dotnet msbuild`.
--[no-]build-managed Build managed projects (C#, F#, VB).
--[no-]build-nodejs Build NodeJS projects (TypeScript, JS).
--[no-]build-java Build Java projects.
@ -74,7 +74,7 @@ Options:
--ci Apply CI specific settings and environment variables.
--binarylog|-bl Use a binary logger
--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
@ -223,9 +223,11 @@ done
if [ "$build_all" = true ]; then
msbuild_args[${#msbuild_args[*]}]="-p:BuildAllProjects=true"
elif [ ! -z "$build_projects" ]; then
fi
if [ ! -z "$build_projects" ]; then
msbuild_args[${#msbuild_args[*]}]="-p:ProjectToBuild=$build_projects"
elif [ -z "$build_managed" ] && [ -z "$build_nodejs" ] && [ -z "$build_java" ] && [ -z "$build_native" ] && [ -z "$build_installers" ]; then
elif [ "$build_all" != true ] && [ -z "$build_managed$build_nodejs$build_java$build_native$build_installers" ]; then
# This goal of this is to pick a sensible default for `build.sh` with zero arguments.
# We believe the most common thing our contributors will work on is C#, so if no other build group was picked, build the C# projects.
__warn "No default group of projects was specified, so building the 'managed' and its dependent subset of projects. Run ``build.sh --help`` for more details."
@ -287,7 +289,7 @@ 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
if [ ! -z "$dotnet_runtime_source_feed$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

View File

@ -42,6 +42,7 @@ Building ASP.NET Core on macOS or Linux requires:
* If using macOS, you need macOS Sierra or newer.
* If using Linux, you need a machine with all .NET Core Linux prerequisites: <https://docs.microsoft.com/en-us/dotnet/core/linux-prerequisites>
* At least 10 GB of disk space and a good internet connection (our build scripts download a lot of tools and dependencies)
* curl <https://curl.haxx.se> or Wget <https://www.gnu.org/software/wget>
* Git <https://git-scm.org>
* NodeJS. LTS version of 10.14.2 or newer <https://nodejs.org>
* Java Development Kit 11 or newer. Either:
@ -160,7 +161,7 @@ On macOS/Linux:
./build.sh
```
By default, all of the C# projects are built. Some C# projects require NodeJS to be installed to compile JavaScript assets which are then checked in as source. If NodeJS is detected on the path, the NodeJS projects will be compiled as part of building C# projects. If NodeJS is not detected on the path, the JavaScript assets checked in previously will be used instead. To disable building NodeJS projects, specify /p:BuildNodeJs=false on the command line.
By default, all of the C# projects are built. Some C# projects require NodeJS to be installed to compile JavaScript assets which are then checked in as source. If NodeJS is detected on the path, the NodeJS projects will be compiled as part of building C# projects. If NodeJS is not detected on the path, the JavaScript assets checked in previously will be used instead. To disable building NodeJS projects, specify `-noBuildNodeJS` or `--no-build-nodejs` on the command line.
### Using `dotnet` on command line in this repo

View File

@ -0,0 +1,104 @@
# AspNetCore Tooling Consolidation
## Objectives
We want to consolidate dotnet/aspnetcore-tooling into dotnet/aspnetcore to achieve 3 goals
1. Reduce overall build time end to end for the .NET Core SDK
2. Reduce the complexity of maintaining multiple repositories.
3. Maintain, or if possible, improve, developer productivity
We are prioritizing the first objective since it is part of a cross-team efforct to reduce the SDK build time. To ensure we are able to achieve this goal quickly and with minimal risk, we plan to take a multi-phase approach. The first phase will involve moving the language components from aspnetcore-tooling to aspnetcore which is required for the SDK build. The second phase will involve a more gradual migration for the remaining tooling components with an emphasis on maintaining developer productivity.
## Phase one: Migration of language components
In this phase, we are primarily concerned with the overall goals of repo consolidation to reduce the number of repository required to build the SDK while keeping the build in aspnetcore as simple as possible without needing to support build/test for tooling scenarios such as testing on VSCode. As such, we will not require all of aspnetcore-tooling to be merged into aspnetcore. For example, tooling for VSMac and VSCode will remain in aspnetcore-tooling. There is also an added benefit of maintaining the current development and release workflow for aspnetcore-tooling which is more "agile" than aspnetcore (e.g. faster PR builds, release cycles that synchronize with VS releases).
To achieve this we will be migrating the following (and associated tests) from aspnetcore-tooling to aspnetcore:
```
Microsoft.AspNetCore.Mvc.Razor.Extensions.Version1_X
Microsoft.AspNetCore.Mvc.Razor.Extensions.Version2_X
Microsoft.AspNetCore.Mvc.Razor.Extensions
Microsoft.AspNetCore.Razor.Language
Microsoft.AspNetCore.Razor.Tools
Microsoft.CodeAnalysis.Razor
Microsoft.NET.Sdk.Razor
````
The following (and associated tests) will remain in aspnetcore-tooling:
```
Microsoft.AspNetCore.Razor.LanguageServer.Common
Microsoft.AspNetCore.Razor.LanguageServer
Microsoft.AspNetCore.Razor.OmniSharpPlugin.StrongNamed
Microsoft.AspNetCore.Razor.OmniSharpPlugin
Microsoft.AspNetCore.Razor.VSCode.Extension
Microsoft.AspNetCore.Razor.VSCode
Microsoft.CodeAnalysis.Razor.Workspaces
Microsoft.CodeAnalysis.Remote.Razor
Microsoft.VisualStudio.Editor.Razor
Microsoft.VisualStudio.LanguageServerClient.Razor
Microsoft.VisualStudio.LanguageServices.Razor
Microsoft.VisualStudio.LiveShare.Razor
Microsoft.VisualStudio.Mac.LanguageServices.Razor
Microsoft.VisualStudio.Mac.RazorAddin
Microsoft.VisualStudio.RazorExtension
RazorDeveloperTools
rzls
````
THe following will be deleted:
```
RazorPageGenerator
```
Due to the separation of tooling projects, the new dependency flow will be:
```
runtime +--> aspnetcore +--> SDK
\ \
+-> extensions -+-> aspnetcore-tooling
```
### Known action items
1. Migrate source with `git filter-branch`, preserving commit history
2. Migration of pending PRs to aspnetcore after source migration.
1. Alternatively, we can freeze checkins during source migration especially since there isn't much source code that requires migration
3. It seems like we do not need a pre-build step to build the Razor SDK for consumption elsewhere in the repo. It is possible to add a project dependency along with appropriate props/target imports
4. Invert darc subscriptions so aspnetcore flows into aspnetcore-tooling
## Phase two: Migration of tooling components
After phase one is completed, we will migrate the tooling components remaining in aspnetcore-tooling piecemeal at a time as required. Our current understanding is that we will eventually be moving all of aspnetcore-tooling into aspnetcore but this can be scoped as appropriate given time/resource constraints. The overall goal here is to reduce build complexity in our repos and maintain developer productivity. As such, more discussion will be made with area owners to identify workflow impacts.
## Major considerations
### Pinning Roslyn dependencies
Due to runtime and tooling divergence of Roslyn packages, we may need to pin multiple versions of Roslyn dependencies for the migrated packages.
### Assets
The migrated projects are C# only in phase one so we will use existing infrastructure in aspnetcore to handle signing and publishing of these packages. Phase two will involve additional asset types including vsix, zips, npm packages and mpacks. We have asset publishing mechanisms for most of these asset types but may need to add addtional asset publishing mechanisms and/or release management for some assets (mpacks for example). We will evaluate the additional requirements when phase two is discussed.
### Developer efficiency (PR builds)
A concern that has been voiced is that working in aspnetcore would be significantly slower than in aspnetcore-tooling given that the PR validation in aspnetcore takes longer. For comparison, it takes about 30 mins to run builds and tests in aspnetcore-tooling whereas builds and tests in aspnetcore takes about 1.5 - 2 hours. We are making efforts in improving this experience but it will be out of scope of aspnetcore-tooling consolidation.
Note that this will only apply to the migrated language projects in phase one. In phase two, we will explore several approaches to improve this area. We are considering adopting additiona logic (from dotnet/runtime) that will allow us to run only portions of tests based on what source changes were detected. However, we will always build the entire repository regardless of what source changes were made.
### Testing
In phase one, the migrated projects are C# only so there are no test infrasture changes needed in aspnetcore. The existing vscode jest, and node tests will remain in aspnetcore-tooling during phase one and will be migrated in phase two.
### Reliability
There is concern that there is test reliability issues in both repos and combining them would aggravate the problem in aspnetcore. This has been deemed a non-issue in phase one since the test to be migrated are found to be very reliable. For phase two, we will ensure tests are reliable before we migrate each tooling component over to aspnetcore.
### Release cycles
Tooling release cycles is a cross product of .NET Core (2.1, 3.1, 5.0) and VS (vs-mac, vscode, vs) release cycles. In phase one, the packages we are migrating are only released on .NET Core cycles so it should not add any complexity to servicing in aspnetcore. We will follow the existing branching and servicing strategies. In phase two, we will evaluate branching and release policies for tooling components.
### Cross-repo changes
Given that some of the work in tooling scenarios may involve projects in both aspnetcore and aspnetcore-tooling, there is added complexity here to coordinate cross-repo changes. However, this concern is already present due to the dependency of aspnetcore on aspnetcore-tooling. This problem is not new but will affect different projects after the migration; some current cross-repo changes will be easier while some changes between language and tooling packages will be more burdensome.
## Timeline and costs
Phase one can begin as soon as possible and will likely take about 1 week. Phase two's schedule and costs are TBD.

View File

@ -1,14 +1,5 @@
<Project>
<PropertyGroup>
<TargetRuntimeIdentifier Condition="'$(TargetRuntimeIdentifier)' == ''">$(TargetOsName)-$(TargetArchitecture)</TargetRuntimeIdentifier>
</PropertyGroup>
<PropertyGroup Condition=" '$(BuildAllProjects)' == 'true' ">
<BuildNative Condition="'$(BuildNative)' == ''">true</BuildNative>
<BuildManaged Condition="'$(BuildManaged)' == ''">true</BuildManaged>
<BuildNodeJS Condition="'$(BuildNodeJS)' == ''">true</BuildNodeJS>
<BuildJava Condition="'$(BuildJava)' == ''">true</BuildJava>
</PropertyGroup>
<Import Project="Common.props" />
<!-- These projects are always excluded, even when -projects is specified on command line. -->
<ItemGroup>
@ -102,8 +93,8 @@
<AdditionalProperties Condition="'$(TargetArchitecture)' == 'x86'">Platform=Win32</AdditionalProperties>
</NativeProjects>
<ProjectToBuild Condition=" '$(BuildNative)' == 'true'" Include="@(NativeProjects)" Exclude="@(ProjectToExclude)" />
<ProjectToExclude Condition=" '$(BuildNative)' != 'true'" Include="@(NativeProjects)" />
<ProjectToBuild Condition=" $(BuildNative) " Include="@(NativeProjects)" Exclude="@(ProjectToExclude)" />
<ProjectToExclude Condition=" !$(BuildNative) " Include="@(NativeProjects)" />
<NodeJsProjects Include="
$(RepoRoot)src\Components\Web.JS\Microsoft.AspNetCore.Components.Web.JS.npmproj;

25
eng/Common.props Normal file
View File

@ -0,0 +1,25 @@
<Project>
<PropertyGroup>
<TargetOsName Condition=" '$(TargetOsName)' == '' AND $([MSBuild]::IsOSPlatform('Windows'))">win</TargetOsName>
<TargetOsName Condition=" '$(TargetOsName)' == '' AND $([MSBuild]::IsOSPlatform('OSX'))">osx</TargetOsName>
<TargetOsName Condition=" '$(TargetOsName)' == '' AND $([MSBuild]::IsOSPlatform('Linux'))">linux</TargetOsName>
<TargetArchitecture Condition="'$(TargetArchitecture)' == ''">x64</TargetArchitecture>
<TargetRuntimeIdentifier Condition="'$(TargetRuntimeIdentifier)' == ''">$(TargetOsName)-$(TargetArchitecture)</TargetRuntimeIdentifier>
</PropertyGroup>
<PropertyGroup Condition=" '$(BuildAllProjects)' == 'true' ">
<!-- Ignore $(BuildNative) when using MSBuild Core, on non-Windows platforms, or when C++ bits are missing. -->
<BuildNative Condition=" '$(MSBuildRuntimeType)' == 'Core' ">false</BuildNative>
<BuildNative Condition=" '$(TargetOsName)' != 'win' ">false</BuildNative>
<BuildNative Condition=" '$(VCTargetsPath)' == '' ">false</BuildNative>
<BuildNative Condition=" '$(BuildNative)' == '' ">true</BuildNative>
<BuildManaged Condition="'$(BuildManaged)' == ''">true</BuildManaged>
<BuildNodeJS Condition="'$(BuildNodeJS)' == ''">true</BuildNodeJS>
<BuildJava Condition="'$(BuildJava)' == ''">true</BuildJava>
</PropertyGroup>
<PropertyGroup>
<BuildNative Condition=" '$(BuildNative)' == '' ">false</BuildNative>
</PropertyGroup>
</Project>

View File

@ -182,7 +182,6 @@ and are generated based on the last package release.
<LatestPackageReference Include="xunit.assert" Version="$(XunitAssertPackageVersion)" />
<LatestPackageReference Include="xunit.extensibility.core" Version="$(XunitExtensibilityCorePackageVersion)" />
<LatestPackageReference Include="xunit.extensibility.execution" Version="$(XunitExtensibilityExecutionPackageVersion)" />
<LatestPackageReference Include="xunit.extensibility.execution" Version="$(XunitExtensibilityExecutionPackageVersion)" />
<LatestPackageReference Include="Microsoft.Data.SqlClient" Version="$(MicrosoftDataSqlClientPackageVersion)" />
</ItemGroup>

View File

@ -1,6 +1,6 @@
<Project>
<!-- See https://github.com/dotnet/arcade/blob/master/Documentation/CorePackages/Signing.md for details. -->
<Import Project="Common.props" />
<ItemGroup>
<!-- Reset Arcade's defaults. -->
@ -69,7 +69,6 @@
</ItemGroup>
<PropertyGroup>
<TargetRuntimeIdentifier Condition="'$(TargetRuntimeIdentifier)' == ''">$(TargetOsName)-$(TargetArchitecture)</TargetRuntimeIdentifier>
<BaseRedistNetCorePath>$(ArtifactsObjDir)RedistSharedFx.Layout\$(Configuration)\</BaseRedistNetCorePath>
<RedistNetCorePath>$(BaseRedistNetCorePath)$(TargetRuntimeIdentifier)\</RedistNetCorePath>
</PropertyGroup>

View File

@ -13,308 +13,308 @@
<Uri>https://github.com/dotnet/blazor</Uri>
<Sha>dd7fb4d3931d556458f62642c2edfc59f6295bfb</Sha>
</Dependency>
<Dependency Name="Microsoft.AspNetCore.Razor.Language" Version="5.0.0-preview.4.20251.2">
<Dependency Name="Microsoft.AspNetCore.Razor.Language" Version="5.0.0-preview.5.20258.1">
<Uri>https://github.com/dotnet/aspnetcore-tooling</Uri>
<Sha>56c0dbb97a3c542fa9865aad33fe442341786a09</Sha>
<Sha>84b5b3c547722b81e4c0f480edfca4de3da1a8e5</Sha>
</Dependency>
<Dependency Name="Microsoft.AspNetCore.Mvc.Razor.Extensions" Version="5.0.0-preview.4.20251.2">
<Dependency Name="Microsoft.AspNetCore.Mvc.Razor.Extensions" Version="5.0.0-preview.5.20258.1">
<Uri>https://github.com/dotnet/aspnetcore-tooling</Uri>
<Sha>56c0dbb97a3c542fa9865aad33fe442341786a09</Sha>
<Sha>84b5b3c547722b81e4c0f480edfca4de3da1a8e5</Sha>
</Dependency>
<Dependency Name="Microsoft.CodeAnalysis.Razor" Version="5.0.0-preview.4.20251.2">
<Dependency Name="Microsoft.CodeAnalysis.Razor" Version="5.0.0-preview.5.20258.1">
<Uri>https://github.com/dotnet/aspnetcore-tooling</Uri>
<Sha>56c0dbb97a3c542fa9865aad33fe442341786a09</Sha>
<Sha>84b5b3c547722b81e4c0f480edfca4de3da1a8e5</Sha>
</Dependency>
<Dependency Name="Microsoft.NET.Sdk.Razor" Version="5.0.0-preview.4.20251.2">
<Dependency Name="Microsoft.NET.Sdk.Razor" Version="5.0.0-preview.5.20258.1">
<Uri>https://github.com/dotnet/aspnetcore-tooling</Uri>
<Sha>56c0dbb97a3c542fa9865aad33fe442341786a09</Sha>
<Sha>84b5b3c547722b81e4c0f480edfca4de3da1a8e5</Sha>
</Dependency>
<Dependency Name="dotnet-ef" Version="5.0.0-preview.4.20220.10">
<Dependency Name="dotnet-ef" Version="5.0.0-preview.5.20227.5">
<Uri>https://github.com/dotnet/efcore</Uri>
<Sha>df113b75096223f66dc96a52ca71eaef2556a987</Sha>
<Sha>818c93aa44ab51397551e128e5f574ea25214b59</Sha>
</Dependency>
<Dependency Name="Microsoft.EntityFrameworkCore.InMemory" Version="5.0.0-preview.4.20220.10">
<Dependency Name="Microsoft.EntityFrameworkCore.InMemory" Version="5.0.0-preview.5.20227.5">
<Uri>https://github.com/dotnet/efcore</Uri>
<Sha>df113b75096223f66dc96a52ca71eaef2556a987</Sha>
<Sha>818c93aa44ab51397551e128e5f574ea25214b59</Sha>
</Dependency>
<Dependency Name="Microsoft.EntityFrameworkCore.Relational" Version="5.0.0-preview.4.20220.10">
<Dependency Name="Microsoft.EntityFrameworkCore.Relational" Version="5.0.0-preview.5.20227.5">
<Uri>https://github.com/dotnet/efcore</Uri>
<Sha>df113b75096223f66dc96a52ca71eaef2556a987</Sha>
<Sha>818c93aa44ab51397551e128e5f574ea25214b59</Sha>
</Dependency>
<Dependency Name="Microsoft.EntityFrameworkCore.Sqlite" Version="5.0.0-preview.4.20220.10">
<Dependency Name="Microsoft.EntityFrameworkCore.Sqlite" Version="5.0.0-preview.5.20227.5">
<Uri>https://github.com/dotnet/efcore</Uri>
<Sha>df113b75096223f66dc96a52ca71eaef2556a987</Sha>
<Sha>818c93aa44ab51397551e128e5f574ea25214b59</Sha>
</Dependency>
<Dependency Name="Microsoft.EntityFrameworkCore.SqlServer" Version="5.0.0-preview.4.20220.10">
<Dependency Name="Microsoft.EntityFrameworkCore.SqlServer" Version="5.0.0-preview.5.20227.5">
<Uri>https://github.com/dotnet/efcore</Uri>
<Sha>df113b75096223f66dc96a52ca71eaef2556a987</Sha>
<Sha>818c93aa44ab51397551e128e5f574ea25214b59</Sha>
</Dependency>
<Dependency Name="Microsoft.EntityFrameworkCore.Tools" Version="5.0.0-preview.4.20220.10">
<Dependency Name="Microsoft.EntityFrameworkCore.Tools" Version="5.0.0-preview.5.20227.5">
<Uri>https://github.com/dotnet/efcore</Uri>
<Sha>df113b75096223f66dc96a52ca71eaef2556a987</Sha>
<Sha>818c93aa44ab51397551e128e5f574ea25214b59</Sha>
</Dependency>
<Dependency Name="Microsoft.EntityFrameworkCore" Version="5.0.0-preview.4.20220.10">
<Dependency Name="Microsoft.EntityFrameworkCore" Version="5.0.0-preview.5.20227.5">
<Uri>https://github.com/dotnet/efcore</Uri>
<Sha>df113b75096223f66dc96a52ca71eaef2556a987</Sha>
<Sha>818c93aa44ab51397551e128e5f574ea25214b59</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Caching.Abstractions" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="Microsoft.Extensions.Caching.Abstractions" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Caching.Memory" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="Microsoft.Extensions.Caching.Memory" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.Abstractions" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="Microsoft.Extensions.Configuration.Abstractions" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.Binder" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="Microsoft.Extensions.Configuration.Binder" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.CommandLine" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="Microsoft.Extensions.Configuration.CommandLine" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.FileExtensions" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="Microsoft.Extensions.Configuration.FileExtensions" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.Ini" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="Microsoft.Extensions.Configuration.Ini" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.Json" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="Microsoft.Extensions.Configuration.Json" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.UserSecrets" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="Microsoft.Extensions.Configuration.UserSecrets" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.Xml" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="Microsoft.Extensions.Configuration.Xml" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Configuration" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="Microsoft.Extensions.Configuration" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.DependencyInjection.Abstractions" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="Microsoft.Extensions.DependencyInjection.Abstractions" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.DependencyInjection" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="Microsoft.Extensions.DependencyInjection" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.FileProviders.Abstractions" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="Microsoft.Extensions.FileProviders.Abstractions" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.FileProviders.Composite" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="Microsoft.Extensions.FileProviders.Composite" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.FileProviders.Physical" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="Microsoft.Extensions.FileProviders.Physical" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.FileSystemGlobbing" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="Microsoft.Extensions.FileSystemGlobbing" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Hosting.Abstractions" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="Microsoft.Extensions.Hosting.Abstractions" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Hosting" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="Microsoft.Extensions.Hosting" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Http" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="Microsoft.Extensions.Http" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Logging.Abstractions" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="Microsoft.Extensions.Logging.Abstractions" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Logging.Configuration" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="Microsoft.Extensions.Logging.Configuration" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Logging.Console" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="Microsoft.Extensions.Logging.Console" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Logging.Debug" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="Microsoft.Extensions.Logging.Debug" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Logging.EventSource" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="Microsoft.Extensions.Logging.EventSource" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Logging.EventLog" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="Microsoft.Extensions.Logging.EventLog" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Logging.TraceSource" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="Microsoft.Extensions.Logging.TraceSource" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Logging" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="Microsoft.Extensions.Logging" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Options.ConfigurationExtensions" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="Microsoft.Extensions.Options.ConfigurationExtensions" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Options.DataAnnotations" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="Microsoft.Extensions.Options.DataAnnotations" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Options" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="Microsoft.Extensions.Options" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Primitives" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="Microsoft.Extensions.Primitives" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Internal.Transport" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="Microsoft.Extensions.Internal.Transport" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="Microsoft.Win32.Registry" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="Microsoft.Win32.Registry" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="Microsoft.Win32.SystemEvents" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="Microsoft.Win32.SystemEvents" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="System.ComponentModel.Annotations" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="System.ComponentModel.Annotations" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="System.Diagnostics.EventLog" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="System.Diagnostics.EventLog" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="System.Drawing.Common" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="System.Drawing.Common" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="System.IO.Pipelines" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="System.IO.Pipelines" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="System.Net.Http.WinHttpHandler" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="System.Net.Http.WinHttpHandler" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="System.Net.WebSockets.WebSocketProtocol" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="System.Net.WebSockets.WebSocketProtocol" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="System.Reflection.Metadata" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="System.Reflection.Metadata" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="System.Runtime.CompilerServices.Unsafe" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="System.Runtime.CompilerServices.Unsafe" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="System.Security.Cryptography.Cng" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="System.Security.Cryptography.Cng" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="System.Security.Cryptography.Pkcs" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="System.Security.Cryptography.Pkcs" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="System.Security.Cryptography.Xml" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="System.Security.Cryptography.Xml" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="System.Security.Permissions" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="System.Security.Permissions" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="System.Security.Principal.Windows" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="System.Security.Principal.Windows" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="System.ServiceProcess.ServiceController" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="System.ServiceProcess.ServiceController" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="System.Text.Encodings.Web" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="System.Text.Encodings.Web" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="System.Text.Json" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="System.Text.Json" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="System.Threading.Channels" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="System.Threading.Channels" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="System.Windows.Extensions" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="System.Windows.Extensions" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.DependencyModel" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="Microsoft.Extensions.DependencyModel" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="Microsoft.NETCore.App.Ref" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="Microsoft.NETCore.App.Ref" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<!--
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.
-->
<Dependency Name="Microsoft.NETCore.App.Runtime.win-x64" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="Microsoft.NETCore.App.Runtime.win-x64" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="Microsoft.NETCore.App.Internal" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="Microsoft.NETCore.App.Internal" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
</ProductDependencies>
<ToolsetDependencies>
<!-- Listed explicitly to workaround https://github.com/dotnet/cli/issues/10528 -->
<Dependency Name="Microsoft.NETCore.Platforms" Version="5.0.0-preview.4.20251.6" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="Microsoft.NETCore.Platforms" Version="5.0.0-preview.5.20253.7" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>47ec733ba79b196e4e09d0c89bad245155002353</Sha>
<Sha>8527a991b91cabc9bec6f6abe57a52b5bb5e154d</Sha>
</Dependency>
<Dependency Name="Microsoft.DotNet.GenAPI" Version="5.0.0-beta.20201.2">
<Dependency Name="Microsoft.DotNet.GenAPI" Version="5.0.0-beta.20228.4">
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>bce0a98620c1c5a110b2bba9912f3d5929069c6b</Sha>
<Sha>590a102630c7efc7ca6f652f7c6c47dee4c4086c</Sha>
</Dependency>
<Dependency Name="Microsoft.DotNet.Arcade.Sdk" Version="5.0.0-beta.20201.2">
<Dependency Name="Microsoft.DotNet.Arcade.Sdk" Version="5.0.0-beta.20228.4">
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>bce0a98620c1c5a110b2bba9912f3d5929069c6b</Sha>
<Sha>590a102630c7efc7ca6f652f7c6c47dee4c4086c</Sha>
</Dependency>
<Dependency Name="Microsoft.DotNet.Helix.Sdk" Version="5.0.0-beta.20201.2">
<Dependency Name="Microsoft.DotNet.Helix.Sdk" Version="5.0.0-beta.20228.4">
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>bce0a98620c1c5a110b2bba9912f3d5929069c6b</Sha>
<Sha>590a102630c7efc7ca6f652f7c6c47dee4c4086c</Sha>
</Dependency>
<Dependency Name="Microsoft.Net.Compilers.Toolset" Version="3.7.0-1.20220.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Dependency Name="Microsoft.Net.Compilers.Toolset" Version="3.7.0-1.20254.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
<Uri>https://github.com/dotnet/roslyn</Uri>
<Sha>8eb05a084b01d1ebe3b2f4c9c84d21cd08635b09</Sha>
<Sha>87e2b1e95e030928b33d6a54341ea342efbbdafa</Sha>
</Dependency>
</ToolsetDependencies>
</Dependencies>

View File

@ -9,7 +9,7 @@
<AspNetCoreMajorVersion>5</AspNetCoreMajorVersion>
<AspNetCoreMinorVersion>0</AspNetCoreMinorVersion>
<AspNetCorePatchVersion>0</AspNetCorePatchVersion>
<PreReleaseVersionIteration>4</PreReleaseVersionIteration>
<PreReleaseVersionIteration>5</PreReleaseVersionIteration>
<!--
When StabilizePackageVersion is set to 'true', this branch will produce stable outputs for 'Shipping' packages
-->
@ -62,85 +62,85 @@
-->
<PropertyGroup Label="Automated">
<!-- Packages from dotnet/arcade -->
<MicrosoftDotNetGenAPIPackageVersion>5.0.0-beta.20201.2</MicrosoftDotNetGenAPIPackageVersion>
<MicrosoftDotNetGenAPIPackageVersion>5.0.0-beta.20228.4</MicrosoftDotNetGenAPIPackageVersion>
<!-- Packages from dotnet/roslyn -->
<MicrosoftNetCompilersToolsetPackageVersion>3.7.0-1.20220.1</MicrosoftNetCompilersToolsetPackageVersion>
<MicrosoftNetCompilersToolsetPackageVersion>3.7.0-1.20254.1</MicrosoftNetCompilersToolsetPackageVersion>
<!-- Packages from dotnet/runtime -->
<MicrosoftExtensionsDependencyModelPackageVersion>5.0.0-preview.4.20251.6</MicrosoftExtensionsDependencyModelPackageVersion>
<MicrosoftNETCoreAppInternalPackageVersion>5.0.0-preview.4.20251.6</MicrosoftNETCoreAppInternalPackageVersion>
<MicrosoftNETCoreAppRefPackageVersion>5.0.0-preview.4.20251.6</MicrosoftNETCoreAppRefPackageVersion>
<MicrosoftNETCoreAppRuntimewinx64PackageVersion>5.0.0-preview.4.20251.6</MicrosoftNETCoreAppRuntimewinx64PackageVersion>
<MicrosoftWin32RegistryPackageVersion>5.0.0-preview.4.20251.6</MicrosoftWin32RegistryPackageVersion>
<MicrosoftWin32SystemEventsPackageVersion>5.0.0-preview.4.20251.6</MicrosoftWin32SystemEventsPackageVersion>
<MicrosoftExtensionsCachingAbstractionsPackageVersion>5.0.0-preview.4.20251.6</MicrosoftExtensionsCachingAbstractionsPackageVersion>
<MicrosoftExtensionsCachingMemoryPackageVersion>5.0.0-preview.4.20251.6</MicrosoftExtensionsCachingMemoryPackageVersion>
<MicrosoftExtensionsConfigurationAbstractionsPackageVersion>5.0.0-preview.4.20251.6</MicrosoftExtensionsConfigurationAbstractionsPackageVersion>
<MicrosoftExtensionsConfigurationBinderPackageVersion>5.0.0-preview.4.20251.6</MicrosoftExtensionsConfigurationBinderPackageVersion>
<MicrosoftExtensionsConfigurationCommandLinePackageVersion>5.0.0-preview.4.20251.6</MicrosoftExtensionsConfigurationCommandLinePackageVersion>
<MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>5.0.0-preview.4.20251.6</MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>
<MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>5.0.0-preview.4.20251.6</MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>
<MicrosoftExtensionsConfigurationIniPackageVersion>5.0.0-preview.4.20251.6</MicrosoftExtensionsConfigurationIniPackageVersion>
<MicrosoftExtensionsConfigurationJsonPackageVersion>5.0.0-preview.4.20251.6</MicrosoftExtensionsConfigurationJsonPackageVersion>
<MicrosoftExtensionsConfigurationPackageVersion>5.0.0-preview.4.20251.6</MicrosoftExtensionsConfigurationPackageVersion>
<MicrosoftExtensionsConfigurationUserSecretsPackageVersion>5.0.0-preview.4.20251.6</MicrosoftExtensionsConfigurationUserSecretsPackageVersion>
<MicrosoftExtensionsConfigurationXmlPackageVersion>5.0.0-preview.4.20251.6</MicrosoftExtensionsConfigurationXmlPackageVersion>
<MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>5.0.0-preview.4.20251.6</MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>
<MicrosoftExtensionsDependencyInjectionPackageVersion>5.0.0-preview.4.20251.6</MicrosoftExtensionsDependencyInjectionPackageVersion>
<MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>5.0.0-preview.4.20251.6</MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>
<MicrosoftExtensionsFileProvidersCompositePackageVersion>5.0.0-preview.4.20251.6</MicrosoftExtensionsFileProvidersCompositePackageVersion>
<MicrosoftExtensionsFileProvidersPhysicalPackageVersion>5.0.0-preview.4.20251.6</MicrosoftExtensionsFileProvidersPhysicalPackageVersion>
<MicrosoftExtensionsFileSystemGlobbingPackageVersion>5.0.0-preview.4.20251.6</MicrosoftExtensionsFileSystemGlobbingPackageVersion>
<MicrosoftExtensionsHostingAbstractionsPackageVersion>5.0.0-preview.4.20251.6</MicrosoftExtensionsHostingAbstractionsPackageVersion>
<MicrosoftExtensionsHostingPackageVersion>5.0.0-preview.4.20251.6</MicrosoftExtensionsHostingPackageVersion>
<MicrosoftExtensionsHttpPackageVersion>5.0.0-preview.4.20251.6</MicrosoftExtensionsHttpPackageVersion>
<MicrosoftExtensionsLoggingAbstractionsPackageVersion>5.0.0-preview.4.20251.6</MicrosoftExtensionsLoggingAbstractionsPackageVersion>
<MicrosoftExtensionsLoggingConfigurationPackageVersion>5.0.0-preview.4.20251.6</MicrosoftExtensionsLoggingConfigurationPackageVersion>
<MicrosoftExtensionsLoggingConsolePackageVersion>5.0.0-preview.4.20251.6</MicrosoftExtensionsLoggingConsolePackageVersion>
<MicrosoftExtensionsLoggingDebugPackageVersion>5.0.0-preview.4.20251.6</MicrosoftExtensionsLoggingDebugPackageVersion>
<MicrosoftExtensionsLoggingEventSourcePackageVersion>5.0.0-preview.4.20251.6</MicrosoftExtensionsLoggingEventSourcePackageVersion>
<MicrosoftExtensionsLoggingEventLogPackageVersion>5.0.0-preview.4.20251.6</MicrosoftExtensionsLoggingEventLogPackageVersion>
<MicrosoftExtensionsLoggingPackageVersion>5.0.0-preview.4.20251.6</MicrosoftExtensionsLoggingPackageVersion>
<MicrosoftExtensionsLoggingTraceSourcePackageVersion>5.0.0-preview.4.20251.6</MicrosoftExtensionsLoggingTraceSourcePackageVersion>
<MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>5.0.0-preview.4.20251.6</MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>
<MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>5.0.0-preview.4.20251.6</MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>
<MicrosoftExtensionsOptionsPackageVersion>5.0.0-preview.4.20251.6</MicrosoftExtensionsOptionsPackageVersion>
<MicrosoftExtensionsPrimitivesPackageVersion>5.0.0-preview.4.20251.6</MicrosoftExtensionsPrimitivesPackageVersion>
<MicrosoftExtensionsInternalTransportPackageVersion>5.0.0-preview.4.20251.6</MicrosoftExtensionsInternalTransportPackageVersion>
<SystemComponentModelAnnotationsPackageVersion>5.0.0-preview.4.20251.6</SystemComponentModelAnnotationsPackageVersion>
<SystemDiagnosticsEventLogPackageVersion>5.0.0-preview.4.20251.6</SystemDiagnosticsEventLogPackageVersion>
<SystemDrawingCommonPackageVersion>5.0.0-preview.4.20251.6</SystemDrawingCommonPackageVersion>
<SystemIOPipelinesPackageVersion>5.0.0-preview.4.20251.6</SystemIOPipelinesPackageVersion>
<SystemNetHttpWinHttpHandlerPackageVersion>5.0.0-preview.4.20251.6</SystemNetHttpWinHttpHandlerPackageVersion>
<SystemNetWebSocketsWebSocketProtocolPackageVersion>5.0.0-preview.4.20251.6</SystemNetWebSocketsWebSocketProtocolPackageVersion>
<SystemReflectionMetadataPackageVersion>5.0.0-preview.4.20251.6</SystemReflectionMetadataPackageVersion>
<SystemRuntimeCompilerServicesUnsafePackageVersion>5.0.0-preview.4.20251.6</SystemRuntimeCompilerServicesUnsafePackageVersion>
<SystemSecurityCryptographyCngPackageVersion>5.0.0-preview.4.20251.6</SystemSecurityCryptographyCngPackageVersion>
<SystemSecurityCryptographyPkcsPackageVersion>5.0.0-preview.4.20251.6</SystemSecurityCryptographyPkcsPackageVersion>
<SystemSecurityCryptographyXmlPackageVersion>5.0.0-preview.4.20251.6</SystemSecurityCryptographyXmlPackageVersion>
<SystemSecurityPermissionsPackageVersion>5.0.0-preview.4.20251.6</SystemSecurityPermissionsPackageVersion>
<SystemSecurityPrincipalWindowsPackageVersion>5.0.0-preview.4.20251.6</SystemSecurityPrincipalWindowsPackageVersion>
<SystemServiceProcessServiceControllerPackageVersion>5.0.0-preview.4.20251.6</SystemServiceProcessServiceControllerPackageVersion>
<SystemTextEncodingsWebPackageVersion>5.0.0-preview.4.20251.6</SystemTextEncodingsWebPackageVersion>
<SystemTextJsonPackageVersion>5.0.0-preview.4.20251.6</SystemTextJsonPackageVersion>
<SystemThreadingChannelsPackageVersion>5.0.0-preview.4.20251.6</SystemThreadingChannelsPackageVersion>
<SystemWindowsExtensionsPackageVersion>5.0.0-preview.4.20251.6</SystemWindowsExtensionsPackageVersion>
<MicrosoftExtensionsDependencyModelPackageVersion>5.0.0-preview.5.20253.7</MicrosoftExtensionsDependencyModelPackageVersion>
<MicrosoftNETCoreAppInternalPackageVersion>5.0.0-preview.5.20253.7</MicrosoftNETCoreAppInternalPackageVersion>
<MicrosoftNETCoreAppRefPackageVersion>5.0.0-preview.5.20253.7</MicrosoftNETCoreAppRefPackageVersion>
<MicrosoftNETCoreAppRuntimewinx64PackageVersion>5.0.0-preview.5.20253.7</MicrosoftNETCoreAppRuntimewinx64PackageVersion>
<MicrosoftWin32RegistryPackageVersion>5.0.0-preview.5.20253.7</MicrosoftWin32RegistryPackageVersion>
<MicrosoftWin32SystemEventsPackageVersion>5.0.0-preview.5.20253.7</MicrosoftWin32SystemEventsPackageVersion>
<MicrosoftExtensionsCachingAbstractionsPackageVersion>5.0.0-preview.5.20253.7</MicrosoftExtensionsCachingAbstractionsPackageVersion>
<MicrosoftExtensionsCachingMemoryPackageVersion>5.0.0-preview.5.20253.7</MicrosoftExtensionsCachingMemoryPackageVersion>
<MicrosoftExtensionsConfigurationAbstractionsPackageVersion>5.0.0-preview.5.20253.7</MicrosoftExtensionsConfigurationAbstractionsPackageVersion>
<MicrosoftExtensionsConfigurationBinderPackageVersion>5.0.0-preview.5.20253.7</MicrosoftExtensionsConfigurationBinderPackageVersion>
<MicrosoftExtensionsConfigurationCommandLinePackageVersion>5.0.0-preview.5.20253.7</MicrosoftExtensionsConfigurationCommandLinePackageVersion>
<MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>5.0.0-preview.5.20253.7</MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>
<MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>5.0.0-preview.5.20253.7</MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>
<MicrosoftExtensionsConfigurationIniPackageVersion>5.0.0-preview.5.20253.7</MicrosoftExtensionsConfigurationIniPackageVersion>
<MicrosoftExtensionsConfigurationJsonPackageVersion>5.0.0-preview.5.20253.7</MicrosoftExtensionsConfigurationJsonPackageVersion>
<MicrosoftExtensionsConfigurationPackageVersion>5.0.0-preview.5.20253.7</MicrosoftExtensionsConfigurationPackageVersion>
<MicrosoftExtensionsConfigurationUserSecretsPackageVersion>5.0.0-preview.5.20253.7</MicrosoftExtensionsConfigurationUserSecretsPackageVersion>
<MicrosoftExtensionsConfigurationXmlPackageVersion>5.0.0-preview.5.20253.7</MicrosoftExtensionsConfigurationXmlPackageVersion>
<MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>5.0.0-preview.5.20253.7</MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>
<MicrosoftExtensionsDependencyInjectionPackageVersion>5.0.0-preview.5.20253.7</MicrosoftExtensionsDependencyInjectionPackageVersion>
<MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>5.0.0-preview.5.20253.7</MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>
<MicrosoftExtensionsFileProvidersCompositePackageVersion>5.0.0-preview.5.20253.7</MicrosoftExtensionsFileProvidersCompositePackageVersion>
<MicrosoftExtensionsFileProvidersPhysicalPackageVersion>5.0.0-preview.5.20253.7</MicrosoftExtensionsFileProvidersPhysicalPackageVersion>
<MicrosoftExtensionsFileSystemGlobbingPackageVersion>5.0.0-preview.5.20253.7</MicrosoftExtensionsFileSystemGlobbingPackageVersion>
<MicrosoftExtensionsHostingAbstractionsPackageVersion>5.0.0-preview.5.20253.7</MicrosoftExtensionsHostingAbstractionsPackageVersion>
<MicrosoftExtensionsHostingPackageVersion>5.0.0-preview.5.20253.7</MicrosoftExtensionsHostingPackageVersion>
<MicrosoftExtensionsHttpPackageVersion>5.0.0-preview.5.20253.7</MicrosoftExtensionsHttpPackageVersion>
<MicrosoftExtensionsLoggingAbstractionsPackageVersion>5.0.0-preview.5.20253.7</MicrosoftExtensionsLoggingAbstractionsPackageVersion>
<MicrosoftExtensionsLoggingConfigurationPackageVersion>5.0.0-preview.5.20253.7</MicrosoftExtensionsLoggingConfigurationPackageVersion>
<MicrosoftExtensionsLoggingConsolePackageVersion>5.0.0-preview.5.20253.7</MicrosoftExtensionsLoggingConsolePackageVersion>
<MicrosoftExtensionsLoggingDebugPackageVersion>5.0.0-preview.5.20253.7</MicrosoftExtensionsLoggingDebugPackageVersion>
<MicrosoftExtensionsLoggingEventSourcePackageVersion>5.0.0-preview.5.20253.7</MicrosoftExtensionsLoggingEventSourcePackageVersion>
<MicrosoftExtensionsLoggingEventLogPackageVersion>5.0.0-preview.5.20253.7</MicrosoftExtensionsLoggingEventLogPackageVersion>
<MicrosoftExtensionsLoggingPackageVersion>5.0.0-preview.5.20253.7</MicrosoftExtensionsLoggingPackageVersion>
<MicrosoftExtensionsLoggingTraceSourcePackageVersion>5.0.0-preview.5.20253.7</MicrosoftExtensionsLoggingTraceSourcePackageVersion>
<MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>5.0.0-preview.5.20253.7</MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>
<MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>5.0.0-preview.5.20253.7</MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>
<MicrosoftExtensionsOptionsPackageVersion>5.0.0-preview.5.20253.7</MicrosoftExtensionsOptionsPackageVersion>
<MicrosoftExtensionsPrimitivesPackageVersion>5.0.0-preview.5.20253.7</MicrosoftExtensionsPrimitivesPackageVersion>
<MicrosoftExtensionsInternalTransportPackageVersion>5.0.0-preview.5.20253.7</MicrosoftExtensionsInternalTransportPackageVersion>
<SystemComponentModelAnnotationsPackageVersion>5.0.0-preview.5.20253.7</SystemComponentModelAnnotationsPackageVersion>
<SystemDiagnosticsEventLogPackageVersion>5.0.0-preview.5.20253.7</SystemDiagnosticsEventLogPackageVersion>
<SystemDrawingCommonPackageVersion>5.0.0-preview.5.20253.7</SystemDrawingCommonPackageVersion>
<SystemIOPipelinesPackageVersion>5.0.0-preview.5.20253.7</SystemIOPipelinesPackageVersion>
<SystemNetHttpWinHttpHandlerPackageVersion>5.0.0-preview.5.20253.7</SystemNetHttpWinHttpHandlerPackageVersion>
<SystemNetWebSocketsWebSocketProtocolPackageVersion>5.0.0-preview.5.20253.7</SystemNetWebSocketsWebSocketProtocolPackageVersion>
<SystemReflectionMetadataPackageVersion>5.0.0-preview.5.20253.7</SystemReflectionMetadataPackageVersion>
<SystemRuntimeCompilerServicesUnsafePackageVersion>5.0.0-preview.5.20253.7</SystemRuntimeCompilerServicesUnsafePackageVersion>
<SystemSecurityCryptographyCngPackageVersion>5.0.0-preview.5.20253.7</SystemSecurityCryptographyCngPackageVersion>
<SystemSecurityCryptographyPkcsPackageVersion>5.0.0-preview.5.20253.7</SystemSecurityCryptographyPkcsPackageVersion>
<SystemSecurityCryptographyXmlPackageVersion>5.0.0-preview.5.20253.7</SystemSecurityCryptographyXmlPackageVersion>
<SystemSecurityPermissionsPackageVersion>5.0.0-preview.5.20253.7</SystemSecurityPermissionsPackageVersion>
<SystemSecurityPrincipalWindowsPackageVersion>5.0.0-preview.5.20253.7</SystemSecurityPrincipalWindowsPackageVersion>
<SystemServiceProcessServiceControllerPackageVersion>5.0.0-preview.5.20253.7</SystemServiceProcessServiceControllerPackageVersion>
<SystemTextEncodingsWebPackageVersion>5.0.0-preview.5.20253.7</SystemTextEncodingsWebPackageVersion>
<SystemTextJsonPackageVersion>5.0.0-preview.5.20253.7</SystemTextJsonPackageVersion>
<SystemThreadingChannelsPackageVersion>5.0.0-preview.5.20253.7</SystemThreadingChannelsPackageVersion>
<SystemWindowsExtensionsPackageVersion>5.0.0-preview.5.20253.7</SystemWindowsExtensionsPackageVersion>
<!-- Only listed explicitly to workaround https://github.com/dotnet/cli/issues/10528 -->
<MicrosoftNETCorePlatformsPackageVersion>5.0.0-preview.4.20251.6</MicrosoftNETCorePlatformsPackageVersion>
<MicrosoftNETCorePlatformsPackageVersion>5.0.0-preview.5.20253.7</MicrosoftNETCorePlatformsPackageVersion>
<!-- Packages from dotnet/blazor -->
<MicrosoftAspNetCoreBlazorMonoPackageVersion>3.2.0-preview1.20067.1</MicrosoftAspNetCoreBlazorMonoPackageVersion>
<!-- Packages from dotnet/efcore -->
<dotnetefPackageVersion>5.0.0-preview.4.20220.10</dotnetefPackageVersion>
<MicrosoftEntityFrameworkCoreInMemoryPackageVersion>5.0.0-preview.4.20220.10</MicrosoftEntityFrameworkCoreInMemoryPackageVersion>
<MicrosoftEntityFrameworkCoreRelationalPackageVersion>5.0.0-preview.4.20220.10</MicrosoftEntityFrameworkCoreRelationalPackageVersion>
<MicrosoftEntityFrameworkCoreSqlitePackageVersion>5.0.0-preview.4.20220.10</MicrosoftEntityFrameworkCoreSqlitePackageVersion>
<MicrosoftEntityFrameworkCoreSqlServerPackageVersion>5.0.0-preview.4.20220.10</MicrosoftEntityFrameworkCoreSqlServerPackageVersion>
<MicrosoftEntityFrameworkCoreToolsPackageVersion>5.0.0-preview.4.20220.10</MicrosoftEntityFrameworkCoreToolsPackageVersion>
<MicrosoftEntityFrameworkCorePackageVersion>5.0.0-preview.4.20220.10</MicrosoftEntityFrameworkCorePackageVersion>
<dotnetefPackageVersion>5.0.0-preview.5.20227.5</dotnetefPackageVersion>
<MicrosoftEntityFrameworkCoreInMemoryPackageVersion>5.0.0-preview.5.20227.5</MicrosoftEntityFrameworkCoreInMemoryPackageVersion>
<MicrosoftEntityFrameworkCoreRelationalPackageVersion>5.0.0-preview.5.20227.5</MicrosoftEntityFrameworkCoreRelationalPackageVersion>
<MicrosoftEntityFrameworkCoreSqlitePackageVersion>5.0.0-preview.5.20227.5</MicrosoftEntityFrameworkCoreSqlitePackageVersion>
<MicrosoftEntityFrameworkCoreSqlServerPackageVersion>5.0.0-preview.5.20227.5</MicrosoftEntityFrameworkCoreSqlServerPackageVersion>
<MicrosoftEntityFrameworkCoreToolsPackageVersion>5.0.0-preview.5.20227.5</MicrosoftEntityFrameworkCoreToolsPackageVersion>
<MicrosoftEntityFrameworkCorePackageVersion>5.0.0-preview.5.20227.5</MicrosoftEntityFrameworkCorePackageVersion>
<!-- Packages from dotnet/aspnetcore-tooling -->
<MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>5.0.0-preview.4.20251.2</MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>
<MicrosoftAspNetCoreRazorLanguagePackageVersion>5.0.0-preview.4.20251.2</MicrosoftAspNetCoreRazorLanguagePackageVersion>
<MicrosoftCodeAnalysisRazorPackageVersion>5.0.0-preview.4.20251.2</MicrosoftCodeAnalysisRazorPackageVersion>
<MicrosoftNETSdkRazorPackageVersion>5.0.0-preview.4.20251.2</MicrosoftNETSdkRazorPackageVersion>
<MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>5.0.0-preview.5.20258.1</MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>
<MicrosoftAspNetCoreRazorLanguagePackageVersion>5.0.0-preview.5.20258.1</MicrosoftAspNetCoreRazorLanguagePackageVersion>
<MicrosoftCodeAnalysisRazorPackageVersion>5.0.0-preview.5.20258.1</MicrosoftCodeAnalysisRazorPackageVersion>
<MicrosoftNETSdkRazorPackageVersion>5.0.0-preview.5.20258.1</MicrosoftNETSdkRazorPackageVersion>
</PropertyGroup>
<!--
@ -204,7 +204,7 @@
<!-- Packages from 2.1/2.2 branches used for site extension build -->
<MicrosoftAspNetCoreAzureAppServicesSiteExtension21PackageVersion>2.1.1</MicrosoftAspNetCoreAzureAppServicesSiteExtension21PackageVersion>
<MicrosoftAspNetCoreAzureAppServicesSiteExtension22PackageVersion>2.2.0</MicrosoftAspNetCoreAzureAppServicesSiteExtension22PackageVersion>
<MicrosoftAspNetCoreAzureAppServicesSiteExtension31PackageVersion>3.1.3-servicing.20163.14</MicrosoftAspNetCoreAzureAppServicesSiteExtension31PackageVersion>
<MicrosoftAspNetCoreAzureAppServicesSiteExtension31PackageVersion>3.1.3-servicing-20163-14</MicrosoftAspNetCoreAzureAppServicesSiteExtension31PackageVersion>
<!-- 3rd party dependencies -->
<AngleSharpPackageVersion>0.9.9</AngleSharpPackageVersion>
<BenchmarkDotNetPackageVersion>0.12.1</BenchmarkDotNetPackageVersion>

View File

@ -83,7 +83,7 @@ function AddCredential($creds, $source, $username, $password) {
$passwordElement.SetAttribute("value", $Password)
}
function InsertMaestroPrivateFeedCredentials($Sources, $Creds, $Password) {
function InsertMaestroPrivateFeedCredentials($Sources, $Creds, $Username, $Password) {
$maestroPrivateSources = $Sources.SelectNodes("add[contains(@key,'darc-int')]")
Write-Host "Inserting credentials for $($maestroPrivateSources.Count) Maestro's private feeds."
@ -123,19 +123,21 @@ if ($creds -eq $null) {
$doc.DocumentElement.AppendChild($creds) | Out-Null
}
$userName = "dn-bot"
# Insert credential nodes for Maestro's private feeds
InsertMaestroPrivateFeedCredentials -Sources $sources -Creds $creds -Password $Password
InsertMaestroPrivateFeedCredentials -Sources $sources -Creds $creds -Username $userName -Password $Password
$dotnet3Source = $sources.SelectSingleNode("add[@key='dotnet3']")
if ($dotnet3Source -ne $null) {
AddPackageSource -Sources $sources -SourceName "dotnet3-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3-internal/nuget/v2" -Creds $creds -Username "dn-bot" -Password $Password
AddPackageSource -Sources $sources -SourceName "dotnet3-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3-internal-transport/nuget/v2" -Creds $creds -Username "dn-bot" -Password $Password
AddPackageSource -Sources $sources -SourceName "dotnet3-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3-internal/nuget/v2" -Creds $creds -Username $userName -Password $Password
AddPackageSource -Sources $sources -SourceName "dotnet3-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3-internal-transport/nuget/v2" -Creds $creds -Username $userName -Password $Password
}
$dotnet31Source = $sources.SelectSingleNode("add[@key='dotnet3.1']")
if ($dotnet31Source -ne $null) {
AddPackageSource -Sources $sources -SourceName "dotnet3.1-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal/nuget/v2" -Creds $creds -Username "dn-bot" -Password $Password
AddPackageSource -Sources $sources -SourceName "dotnet3.1-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal-transport/nuget/v2" -Creds $creds -Username "dn-bot" -Password $Password
AddPackageSource -Sources $sources -SourceName "dotnet3.1-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal/nuget/v2" -Creds $creds -Username $userName -Password $Password
AddPackageSource -Sources $sources -SourceName "dotnet3.1-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal-transport/nuget/v2" -Creds $creds -Username $userName -Password $Password
}
$doc.Save($filename)

View File

@ -1,5 +1,7 @@
#!/usr/bin/env bash
set -e
usage()
{
echo "Usage: $0 [BuildArch] [CodeName] [lldbx.y] [--skipunmount] --rootfsdir <directory>]"
@ -15,6 +17,8 @@ __CodeName=xenial
__CrossDir=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
__InitialDir=$PWD
__BuildArch=arm
__AlpineArch=armv7
__QEMUArch=arm
__UbuntuArch=armhf
__UbuntuRepo="http://ports.ubuntu.com/"
__LLDB_Package="liblldb-3.9-dev"
@ -26,9 +30,10 @@ __UbuntuPackages="build-essential"
__AlpinePackages="alpine-base"
__AlpinePackages+=" build-base"
__AlpinePackages+=" linux-headers"
__AlpinePackagesEdgeTesting=" lldb-dev"
__AlpinePackagesEdgeMain=" llvm9-libs"
__AlpinePackagesEdgeCommunity=" lldb-dev"
__AlpinePackagesEdgeMain=" llvm10-libs"
__AlpinePackagesEdgeMain+=" python3"
__AlpinePackagesEdgeMain+=" libedit"
# symlinks fixer
__UbuntuPackages+=" symlinks"
@ -55,12 +60,11 @@ __AlpinePackages+=" openssl-dev"
__AlpinePackages+=" zlib-dev"
__FreeBSDBase="12.1-RELEASE"
__FreeBSDPkg="1.10.5"
__FreeBSDPkg="1.12.0"
__FreeBSDPackages="libunwind"
__FreeBSDPackages+=" icu"
__FreeBSDPackages+=" libinotify"
__FreeBSDPackages+=" lttng-ust"
__FreeBSDPackages+=" llvm-90"
__FreeBSDPackages+=" krb5"
__UnprocessedBuildArgs=
@ -78,7 +82,7 @@ while :; do
arm)
__BuildArch=arm
__UbuntuArch=armhf
__AlpineArch=armhf
__AlpineArch=armv7
__QEMUArch=arm
;;
arm64)
@ -205,7 +209,7 @@ fi
if [ -d "$__RootfsDir" ]; then
if [ $__SkipUnmount == 0 ]; then
umount $__RootfsDir/*
umount $__RootfsDir/* || true
fi
rm -rf $__RootfsDir
fi
@ -231,9 +235,9 @@ if [[ "$__CodeName" == "alpine" ]]; then
add $__AlpinePackagesEdgeMain
$__ApkToolsDir/apk-tools-$__ApkToolsVersion/apk \
-X http://dl-cdn.alpinelinux.org/alpine/edge/testing \
-X http://dl-cdn.alpinelinux.org/alpine/edge/community \
-U --allow-untrusted --root $__RootfsDir --arch $__AlpineArch --initdb \
add $__AlpinePackagesEdgeTesting
add $__AlpinePackagesEdgeCommunity
rm -r $__ApkToolsDir
elif [[ "$__CodeName" == "freebsd" ]]; then
@ -246,11 +250,13 @@ elif [[ "$__CodeName" == "freebsd" ]]; then
# get and build package manager
wget -O - https://github.com/freebsd/pkg/archive/${__FreeBSDPkg}.tar.gz | tar -C $__RootfsDir/tmp -zxf -
cd $__RootfsDir/tmp/pkg-${__FreeBSDPkg}
./autogen.sh && ./configure --prefix=$__RootfsDir/host && make install
# needed for install to succeed
mkdir -p $__RootfsDir/host/etc
./autogen.sh && ./configure --prefix=$__RootfsDir/host && make && make install
rm -rf $__RootfsDir/tmp/pkg-${__FreeBSDPkg}
# install packages we need.
$__RootfsDir/host/sbin/pkg -r $__RootfsDir -C $__RootfsDir/usr/local/etc/pkg.conf update
$__RootfsDir/host/sbin/pkg -r $__RootfsDir -C $__RootfsDir/usr/local/etc/pkg.conf install --yes $__FreeBSDPackages
INSTALL_AS_USER=$(whoami) $__RootfsDir/host/sbin/pkg -r $__RootfsDir -C $__RootfsDir/usr/local/etc/pkg.conf update
INSTALL_AS_USER=$(whoami) $__RootfsDir/host/sbin/pkg -r $__RootfsDir -C $__RootfsDir/usr/local/etc/pkg.conf install --yes $__FreeBSDPackages
elif [[ -n $__CodeName ]]; then
qemu-debootstrap --arch $__UbuntuArch $__CodeName $__RootfsDir $__UbuntuRepo
cp $__CrossDir/$__BuildArch/sources.list.$__CodeName $__RootfsDir/etc/apt/sources.list
@ -260,7 +266,7 @@ elif [[ -n $__CodeName ]]; then
chroot $__RootfsDir symlinks -cr /usr
if [ $__SkipUnmount == 0 ]; then
umount $__RootfsDir/*
umount $__RootfsDir/* || true
fi
if [[ "$__BuildArch" == "arm" && "$__CodeName" == "trusty" ]]; then

View File

@ -0,0 +1,121 @@
#!/usr/bin/env bash
#
# This file locates the native compiler with the given name and version and sets the environment variables to locate it.
#
source="${BASH_SOURCE[0]}"
# resolve $SOURCE until the file is no longer a symlink
while [[ -h $source ]]; do
scriptroot="$( cd -P "$( dirname "$source" )" && pwd )"
source="$(readlink "$source")"
# if $source was a relative symlink, we need to resolve it relative to the path where the
# symlink file was located
[[ $source != /* ]] && source="$scriptroot/$source"
done
scriptroot="$( cd -P "$( dirname "$source" )" && pwd )"
if [ $# -lt 0 ]
then
echo "Usage..."
echo "find-native-compiler.sh <compiler> <compiler major version> <compiler minor version>"
echo "Specify the name of compiler (clang or gcc)."
echo "Specify the major version of compiler."
echo "Specify the minor version of compiler."
exit 1
fi
. $scriptroot/../pipeline-logging-functions.sh
compiler="$1"
cxxCompiler="$compiler++"
majorVersion="$2"
minorVersion="$3"
if [ "$compiler" = "gcc" ]; then cxxCompiler="g++"; fi
check_version_exists() {
desired_version=-1
# Set up the environment to be used for building with the desired compiler.
if command -v "$compiler-$1.$2" > /dev/null; then
desired_version="-$1.$2"
elif command -v "$compiler$1$2" > /dev/null; then
desired_version="$1$2"
elif command -v "$compiler-$1$2" > /dev/null; then
desired_version="-$1$2"
fi
echo "$desired_version"
}
if [ -z "$CLR_CC" ]; then
# Set default versions
if [ -z "$majorVersion" ]; then
# note: gcc (all versions) and clang versions higher than 6 do not have minor version in file name, if it is zero.
if [ "$compiler" = "clang" ]; then versions=( 9 8 7 6.0 5.0 4.0 3.9 3.8 3.7 3.6 3.5 )
elif [ "$compiler" = "gcc" ]; then versions=( 9 8 7 6 5 4.9 ); fi
for version in "${versions[@]}"; do
parts=(${version//./ })
desired_version="$(check_version_exists "${parts[0]}" "${parts[1]}")"
if [ "$desired_version" != "-1" ]; then majorVersion="${parts[0]}"; break; fi
done
if [ -z "$majorVersion" ]; then
if command -v "$compiler" > /dev/null; then
if [ "$(uname)" != "Darwin" ]; then
Write-PipelineTelemetryError -category "Build" -type "warning" "Specific version of $compiler not found, falling back to use the one in PATH."
fi
export CC="$(command -v "$compiler")"
export CXX="$(command -v "$cxxCompiler")"
else
Write-PipelineTelemetryError -category "Build" "No usable version of $compiler found."
exit 1
fi
else
if [ "$compiler" = "clang" ] && [ "$majorVersion" -lt 5 ]; then
if [ "$build_arch" = "arm" ] || [ "$build_arch" = "armel" ]; then
if command -v "$compiler" > /dev/null; then
Write-PipelineTelemetryError -category "Build" -type "warning" "Found clang version $majorVersion which is not supported on arm/armel architectures, falling back to use clang from PATH."
export CC="$(command -v "$compiler")"
export CXX="$(command -v "$cxxCompiler")"
else
Write-PipelineTelemetryError -category "Build" "Found clang version $majorVersion which is not supported on arm/armel architectures, and there is no clang in PATH."
exit 1
fi
fi
fi
fi
else
desired_version="$(check_version_exists "$majorVersion" "$minorVersion")"
if [ "$desired_version" = "-1" ]; then
Write-PipelineTelemetryError -category "Build" "Could not find specific version of $compiler: $majorVersion $minorVersion."
exit 1
fi
fi
if [ -z "$CC" ]; then
export CC="$(command -v "$compiler$desired_version")"
export CXX="$(command -v "$cxxCompiler$desired_version")"
if [ -z "$CXX" ]; then export CXX="$(command -v "$cxxCompiler")"; fi
fi
else
if [ ! -f "$CLR_CC" ]; then
Write-PipelineTelemetryError -category "Build" "CLR_CC is set but path '$CLR_CC' does not exist"
exit 1
fi
export CC="$CLR_CC"
export CXX="$CLR_CXX"
fi
if [ -z "$CC" ]; then
Write-PipelineTelemetryError -category "Build" "Unable to find $compiler."
exit 1
fi
export CCC_CC="$CC"
export CCC_CXX="$CXX"
export SCAN_BUILD_COMMAND="$(command -v "scan-build$desired_version")"

View File

@ -6,13 +6,18 @@ param(
try {
. $PSScriptRoot\post-build-utils.ps1
if ($PromoteToChannels -eq "") {
Write-PipelineTaskError -Type 'warning' -Message "This build won't publish assets as it's not configured to any Maestro channel. If that wasn't intended use Darc to configure a default channel using add-default-channel for this branch or to promote it to a channel using add-build-to-channel. See https://github.com/dotnet/arcade/blob/master/Documentation/Darc.md#assigning-an-individual-build-to-a-channel for more info."
ExitWithExitCode 0
}
# Check that every channel that Maestro told to promote the build to
# is available in YAML
$PromoteToChannelsIds = $PromoteToChannels -split "\D" | Where-Object { $_ }
foreach ($id in $PromoteToChannelsIds) {
if (($id -ne 0) -and ($id -notin $AvailableChannelIds)) {
Write-PipelineTaskError -Type 'warning' -Message "Channel $id is not present in the post-build YAML configuration!"
Write-PipelineTaskError -Message "Channel $id is not present in the post-build YAML configuration! This is an error scenario. Please contact @dnceng."
}
}

View File

@ -1,7 +1,8 @@
param(
[Parameter(Mandatory=$true)][string] $InputPath, # Full path to directory where NuGet packages to be checked are stored
[Parameter(Mandatory=$true)][string] $ExtractPath, # Full path to directory where the packages will be extracted during validation
[Parameter(Mandatory=$true)][string] $DotnetSymbolVersion # Version of dotnet symbol to use
[Parameter(Mandatory=$true)][string] $DotnetSymbolVersion, # Version of dotnet symbol to use
[Parameter(Mandatory=$false)][switch] $ContinueOnError # If we should keep checking symbols after an error
)
function FirstMatchingSymbolDescriptionOrDefault {
@ -125,6 +126,8 @@ function CheckSymbolsAvailable {
Remove-Item $ExtractPath -Force -Recurse -ErrorAction SilentlyContinue
}
$TotalFailures = 0
Get-ChildItem "$InputPath\*.nupkg" |
ForEach-Object {
$FileName = $_.Name
@ -148,11 +151,22 @@ function CheckSymbolsAvailable {
if ($Status -ne 0) {
Write-PipelineTelemetryError -Category 'CheckSymbols' -Message "Missing symbols for $Status modules in the package $FileName"
ExitWithExitCode $exitCode
if ($ContinueOnError) {
$TotalFailures++
}
else {
ExitWithExitCode 1
}
}
Write-Host
}
if ($TotalFailures -ne 0) {
Write-PipelineTelemetryError -Category 'CheckSymbols' -Message "Symbols missing for $TotalFailures packages"
ExitWithExitCode 1
}
}
function InstallDotnetSymbol {

View File

@ -57,6 +57,18 @@ try {
ExitWithExitCode 1
}
if( $msbuildEngine -eq "vs") {
# Ensure desktop MSBuild is available for sdk tasks.
if( -not ($GlobalJson.tools.PSObject.Properties.Name -match "vs" )) {
$GlobalJson.tools | Add-Member -Name "vs" -Value (ConvertFrom-Json "{ `"version`": `"16.4`" }") -MemberType NoteProperty
}
if( -not ($GlobalJson.tools.PSObject.Properties.Name -match "xcopy-msbuild" )) {
$GlobalJson.tools | Add-Member -Name "xcopy-msbuild" -Value "16.4.0-alpha" -MemberType NoteProperty
}
InitializeXCopyMSBuild $GlobalJson.tools."xcopy-msbuild" -install $true
}
$taskProject = GetSdkTaskProject $task
if (!(Test-Path $taskProject)) {
Write-PipelineTelemetryError -Category 'Build' -Message "Unknown task: $task" -ForegroundColor Red

View File

@ -63,7 +63,7 @@ try {
}
}
catch {
Write-Host $_.ScriptStackTrace
Write-Host $_
Write-PipelineTelemetryError -Force -Category 'Sdl' -Message $_
ExitWithExitCode 1
}
@ -74,7 +74,7 @@ try {
Measure-Command { ExtractArtifacts }
}
catch {
Write-Host $_.ScriptStackTrace
Write-Host $_
Write-PipelineTelemetryError -Force -Category 'Sdl' -Message $_
ExitWithExitCode 1
}

View File

@ -24,7 +24,7 @@ $ProgressPreference = 'SilentlyContinue'
# Construct basic auth from AzDO access token; construct URI to the repository's gdn folder stored in that repository; construct location of zip file
$encodedPat = [Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$AzureDevOpsAccessToken"))
$escapedRepository = [Uri]::EscapeDataString("/$Repository/$BranchName/.gdn")
$uri = "https://dev.azure.com/dnceng/internal/_apis/git/repositories/sdl-tool-cfg/Items?path=$escapedRepository&versionDescriptor[versionOptions]=0&`$format=zip&api-version=5.0-preview.1"
$uri = "https://dev.azure.com/dnceng/internal/_apis/git/repositories/sdl-tool-cfg/Items?path=$escapedRepository&versionDescriptor[versionOptions]=0&`$format=zip&api-version=5.0"
$zipFile = "$WorkingDirectory/gdn.zip"
Add-Type -AssemblyName System.IO.Compression.FileSystem

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.Guardian.Cli" version="0.7.2"/>
<package id="Microsoft.Guardian.Cli.win10-x64" version="0.20.1"/>
</packages>

View File

@ -6,6 +6,7 @@ parameters:
# 'continueOnError', the parameter value is not correctly picked up.
# This can also be remedied by the caller (post-build.yml) if it does not use a nested parameter
sdlContinueOnError: false # optional: determines whether to continue the build if the step errors;
downloadArtifacts: true # optional: determines if the artifacts should be dowloaded
dependsOn: '' # Optional: dependencies of the job
artifactNames: '' # Optional: patterns supplied to DownloadBuildArtifacts
# Usage:
@ -31,8 +32,20 @@ jobs:
steps:
- checkout: self
clean: true
- ${{ if ne(parameters.artifactNames, '') }}:
- ${{ each artifactName in parameters.artifactNames }}:
- ${{ if ne(parameters.downloadArtifacts, 'false')}}:
- ${{ if ne(parameters.artifactNames, '') }}:
- ${{ each artifactName in parameters.artifactNames }}:
- task: DownloadBuildArtifacts@0
displayName: Download Build Artifacts
inputs:
buildType: specific
buildVersionToDownload: specific
project: $(AzDOProjectName)
pipeline: $(AzDOPipelineId)
buildId: $(AzDOBuildId)
artifactName: ${{ artifactName }}
downloadPath: $(Build.ArtifactStagingDirectory)\artifacts
- ${{ if eq(parameters.artifactNames, '') }}:
- task: DownloadBuildArtifacts@0
displayName: Download Build Artifacts
inputs:
@ -41,20 +54,9 @@ jobs:
project: $(AzDOProjectName)
pipeline: $(AzDOPipelineId)
buildId: $(AzDOBuildId)
artifactName: ${{ artifactName }}
downloadType: specific files
itemPattern: "**"
downloadPath: $(Build.ArtifactStagingDirectory)\artifacts
- ${{ if eq(parameters.artifactNames, '') }}:
- task: DownloadBuildArtifacts@0
displayName: Download Build Artifacts
inputs:
buildType: specific
buildVersionToDownload: specific
project: $(AzDOProjectName)
pipeline: $(AzDOPipelineId)
buildId: $(AzDOBuildId)
downloadType: specific files
itemPattern: "**"
downloadPath: $(Build.ArtifactStagingDirectory)\artifacts
- powershell: eng/common/sdl/extract-artifact-packages.ps1
-InputPath $(Build.ArtifactStagingDirectory)\artifacts\BlobArtifacts
-ExtractPath $(Build.ArtifactStagingDirectory)\artifacts\BlobArtifacts
@ -81,7 +83,7 @@ jobs:
continueOnError: ${{ parameters.sdlContinueOnError }}
- ${{ if eq(parameters.overrideParameters, '') }}:
- powershell: eng/common/sdl/execute-all-sdl-tools.ps1
-GuardianPackageName Microsoft.Guardian.Cli.0.7.2
-GuardianPackageName Microsoft.Guardian.Cli.win10-x64.0.20.1
-NugetPackageDirectory $(Build.SourcesDirectory)\.packages
-AzureDevOpsAccessToken $(dn-bot-dotnet-build-rw-code-rw)
${{ parameters.additionalParameters }}

View File

@ -24,6 +24,7 @@ parameters:
enablePublishBuildAssets: false
enablePublishTestResults: false
enablePublishUsingPipelines: false
useBuildManifest: false
mergeTestResults: false
testRunTitle: $(AgentOsName)-$(BuildConfiguration)-xunit
name: ''
@ -218,3 +219,12 @@ jobs:
ArtifactName: AssetManifests
continueOnError: ${{ parameters.continueOnError }}
condition: and(succeeded(), eq(variables['_DotNetPublishToBlobFeed'], 'true'))
- ${{ if eq(parameters.useBuildManifest, true) }}:
- task: PublishBuildArtifacts@1
displayName: Publish Build Manifest
inputs:
PathToPublish: '$(Build.SourcesDirectory)/artifacts/log/$(_BuildConfig)/manifest.props'
PublishLocation: Container
ArtifactName: BuildManifests
continueOnError: ${{ parameters.continueOnError }}

View File

@ -23,7 +23,7 @@ stages:
- job: publish_symbols
displayName: Symbol Publishing
dependsOn: setupMaestroVars
condition: or(contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', ${{ parameters.channelId }} )), eq(dependencies.setupMaestroVars.outputs['setReleaseVars.PromoteToMaestroChannelId'], ${{ parameters.channelId }}))
condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.TargetChannels'], format('[{0}]', ${{ parameters.channelId }} ))
variables:
- group: DotNet-Symbol-Server-Pats
- name: AzDOProjectName
@ -96,7 +96,7 @@ stages:
value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.AzDOPipelineId'] ]
- name: AzDOBuildId
value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.AzDOBuildId'] ]
condition: or(contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', ${{ parameters.channelId }} )), eq(dependencies.setupMaestroVars.outputs['setReleaseVars.PromoteToMaestroChannelId'], ${{ parameters.channelId }}))
condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.TargetChannels'], format('[{0}]', ${{ parameters.channelId }} ))
pool:
vmImage: 'windows-2019'
steps:

View File

@ -25,7 +25,7 @@ stages:
- job: publish_symbols
displayName: Symbol Publishing
dependsOn: setupMaestroVars
condition: or(contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', ${{ parameters.channelId }} )), eq(dependencies.setupMaestroVars.outputs['setReleaseVars.PromoteToMaestroChannelId'], ${{ parameters.channelId }}))
condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.TargetChannels'], format('[{0}]', ${{ parameters.channelId }} ))
variables:
- group: DotNet-Symbol-Server-Pats
- name: AzDOProjectName
@ -99,7 +99,7 @@ stages:
value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.AzDOBuildId'] ]
- name: ArtifactsCategory
value: ${{ coalesce(variables._DotNetArtifactsCategory, '.NETCore') }}
condition: or(contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', ${{ parameters.channelId }} )), eq(dependencies.setupMaestroVars.outputs['setReleaseVars.PromoteToMaestroChannelId'], ${{ parameters.channelId }}))
condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.TargetChannels'], format('[{0}]', ${{ parameters.channelId }} ))
pool:
vmImage: 'windows-2019'
steps:

View File

@ -63,7 +63,7 @@ variables:
- name: MaestroApiAccessToken
value: $(MaestroAccessToken)
- name: MaestroApiVersion
value: "2019-01-16"
value: "2020-02-20"
- name: SourceLinkCLIVersion
value: 3.0.0

View File

@ -9,12 +9,14 @@ parameters:
continueOnError: false
params: ''
artifactNames: ''
downloadArtifacts: true
# These parameters let the user customize the call to sdk-task.ps1 for publishing
# symbols & general artifacts as well as for signing validation
symbolPublishingAdditionalParameters: ''
artifactsPublishingAdditionalParameters: ''
signingValidationAdditionalParameters: ''
useBuildManifest: false
# Which stages should finish execution before post-build stages start
validateDependsOn:
@ -38,8 +40,8 @@ parameters:
Net5Preview3ChannelId: 739
Net5Preview4ChannelId: 856
Net5Preview5ChannelId: 857
NetCoreSDK313xxChannelId: 759
NetCoreSDK313xxInternalChannelId: 760
NetCoreSDK314xxChannelId: 921
NetCoreSDK314xxInternalChannelId: 922
stages:
- stage: Validate
@ -54,10 +56,8 @@ stages:
displayName: Post-build Checks
dependsOn: setupMaestroVars
variables:
- name: InitialChannels
value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'] ]
- name: PromoteToMaestroChannelId
value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.PromoteToMaestroChannelId'] ]
- name: TargetChannels
value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.TargetChannels'] ]
pool:
vmImage: 'windows-2019'
steps:
@ -65,8 +65,8 @@ stages:
displayName: Maestro Channels Consistency
inputs:
filePath: $(Build.SourcesDirectory)/eng/common/post-build/check-channel-consistency.ps1
arguments: -PromoteToChannels "$(InitialChannels)[$(PromoteToMaestroChannelId)]"
-AvailableChannelIds ${{parameters.NetEngLatestChannelId}},${{parameters.NetEngValidationChannelId}},${{parameters.NetDev5ChannelId}},${{parameters.GeneralTestingChannelId}},${{parameters.NETCoreToolingDevChannelId}},${{parameters.NETCoreToolingReleaseChannelId}},${{parameters.NETInternalToolingChannelId}},${{parameters.NETCoreExperimentalChannelId}},${{parameters.NetEngServicesIntChannelId}},${{parameters.NetEngServicesProdChannelId}}${{parameters.Net5Preview3ChannelId}},${{parameters.Net5Preview4ChannelId}},${{parameters.Net5Preview5ChannelId}},${{parameters.NetCoreSDK313xxChannelId}},${{parameters.NetCoreSDK313xxInternalChannelId}}
arguments: -PromoteToChannels "$(TargetChannels)"
-AvailableChannelIds ${{parameters.NetEngLatestChannelId}},${{parameters.NetEngValidationChannelId}},${{parameters.NetDev5ChannelId}},${{parameters.GeneralTestingChannelId}},${{parameters.NETCoreToolingDevChannelId}},${{parameters.NETCoreToolingReleaseChannelId}},${{parameters.NETInternalToolingChannelId}},${{parameters.NETCoreExperimentalChannelId}},${{parameters.NetEngServicesIntChannelId}},${{parameters.NetEngServicesProdChannelId}},${{parameters.Net5Preview3ChannelId}},${{parameters.Net5Preview4ChannelId}},${{parameters.Net5Preview5ChannelId}},${{parameters.NetCoreSDK314xxChannelId}},${{parameters.NetCoreSDK314xxInternalChannelId}}
- job:
displayName: NuGet Validation
@ -114,6 +114,16 @@ stages:
pool:
vmImage: 'windows-2019'
steps:
- ${{ if eq(parameters.useBuildManifest, true) }}:
- task: DownloadBuildArtifacts@0
displayName: Download build manifest
inputs:
buildType: specific
buildVersionToDownload: specific
project: $(AzDOProjectName)
pipeline: $(AzDOPipelineId)
buildId: $(AzDOBuildId)
artifactName: BuildManifests
- task: DownloadBuildArtifacts@0
displayName: Download Package Artifacts
inputs:
@ -136,11 +146,13 @@ stages:
filePath: eng\common\enable-cross-org-publishing.ps1
arguments: -token $(dn-bot-dnceng-artifact-feeds-rw)
# Signing validation will optionally work with the buildmanifest file which is downloaded from
# Azure DevOps above.
- task: PowerShell@2
displayName: Validate
inputs:
filePath: eng\common\sdk-task.ps1
arguments: -task SigningValidation -restore -msbuildEngine dotnet
arguments: -task SigningValidation -restore -msbuildEngine vs
/p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts'
/p:SignCheckExclusionsFile='$(Build.SourcesDirectory)/eng/SignCheckExclusionsFile.txt'
${{ parameters.signingValidationAdditionalParameters }}
@ -193,6 +205,7 @@ stages:
additionalParameters: ${{ parameters.SDLValidationParameters.params }}
continueOnError: ${{ parameters.SDLValidationParameters.continueOnError }}
artifactNames: ${{ parameters.SDLValidationParameters.artifactNames }}
downloadArtifacts: ${{ parameters.SDLValidationParameters.downloadArtifacts }}
- template: \eng\common\templates\post-build\channels\generic-public-channel.yml
parameters:
@ -376,9 +389,9 @@ stages:
dependsOn: ${{ parameters.publishDependsOn }}
publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }}
symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }}
stageName: 'NETCore_SDK_313xx_Publishing'
channelName: '.NET Core SDK 3.1.3xx'
channelId: ${{ parameters.NetCoreSDK313xxChannelId }}
stageName: 'NETCore_SDK_314xx_Publishing'
channelName: '.NET Core SDK 3.1.4xx'
channelId: ${{ parameters.NetCoreSDK314xxChannelId }}
transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3.1-transport/nuget/v3/index.json'
shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3.1/nuget/v3/index.json'
symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3.1-symbols/nuget/v3/index.json'
@ -389,10 +402,9 @@ stages:
dependsOn: ${{ parameters.publishDependsOn }}
publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }}
symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }}
stageName: 'NETCore_SDK_313xx_Internal_Publishing'
channelName: '.NET Core SDK 3.1.3xx Internal'
channelId: ${{ parameters.NetCoreSDK313xxInternalChannelId }}
stageName: 'NETCore_SDK_314xx_Internal_Publishing'
channelName: '.NET Core SDK 3.1.4xx Internal'
channelId: ${{ parameters.NetCoreSDK314xxInternalChannelId }}
transportFeed: 'https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal-transport/nuget/v3/index.json'
shippingFeed: 'https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal/nuget/v3/index.json'
symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal-symbols/nuget/v3/index.json'

View File

@ -5,7 +5,9 @@ jobs:
- template: common-variables.yml
- name: BuildId
value: $[ coalesce(variables.BARBuildId, 0) ]
- name: PromoteToChannelId
- name: PromoteToMaestroChannels
value: $[ coalesce(variables.PromoteToChannelIds, 0) ]
- name: PromoteToMaestroChannel
value: $[ coalesce(variables.PromoteToMaestroChannelId, 0) ]
pool:
vmImage: 'windows-2019'
@ -14,7 +16,7 @@ jobs:
- task: DownloadBuildArtifacts@0
displayName: Download Release Configs
condition: eq(variables.PromoteToChannelId, 0)
condition: and(eq(variables.PromoteToMaestroChannels, 0), eq(variables.PromoteToMaestroChannel, 0))
inputs:
buildType: current
artifactName: ReleaseConfigs
@ -26,20 +28,16 @@ jobs:
targetType: inline
script: |
try {
if ($Env:PromoteToChannelId -eq 0) {
if ($Env:PromoteToMaestroChannels -eq 0 -and $Env:PromoteToMaestroChannel -eq 0) {
$Content = Get-Content $(Build.StagingDirectory)/ReleaseConfigs/ReleaseConfigs.txt
$BarId = $Content | Select -Index 0
$Channels = ""
$Content | Select -Index 1 | ForEach-Object { $Channels += "$_ ," }
$Channels = $Content | Select -Index 1
$IsStableBuild = $Content | Select -Index 2
$AzureDevOpsProject = $Env:System_TeamProject
$AzureDevOpsBuildDefinitionId = $Env:System_DefinitionId
$AzureDevOpsBuildId = $Env:Build_BuildId
$PromoteToMaestroChannelId = 0
}
else {
$buildApiEndpoint = "${Env:MaestroApiEndPoint}/api/builds/${Env:BARBuildId}?api-version=${Env:MaestroApiVersion}"
@ -51,25 +49,23 @@ jobs:
$buildInfo = try { Invoke-WebRequest -Method Get -Uri $buildApiEndpoint -Headers $apiHeaders | ConvertFrom-Json } catch { Write-Host "Error: $_" }
$BarId = $Env:BARBuildId
$Channels = 'None'
#TODO: Fix this once this issue is done: https://github.com/dotnet/arcade/issues/3834
$IsStableBuild = 'False'
$Channels = $Env:PromoteToMaestroChannels -split ","
$Channels = $Channels -join "]["
$Channels = "[$Channels][$Env:PromoteToMaestroChannel]"
$IsStableBuild = $buildInfo.stable
$AzureDevOpsProject = $buildInfo.azureDevOpsProject
$AzureDevOpsBuildDefinitionId = $buildInfo.azureDevOpsBuildDefinitionId
$AzureDevOpsBuildId = $buildInfo.azureDevOpsBuildId
$PromoteToMaestroChannelId = $Env:PromoteToMaestroChannelId
}
Write-Host "##vso[task.setvariable variable=BARBuildId;isOutput=true]$BarId"
Write-Host "##vso[task.setvariable variable=InitialChannels;isOutput=true]$Channels"
Write-Host "##vso[task.setvariable variable=TargetChannels;isOutput=true]$Channels"
Write-Host "##vso[task.setvariable variable=IsStableBuild;isOutput=true]$IsStableBuild"
Write-Host "##vso[task.setvariable variable=AzDOProjectName;isOutput=true]$AzureDevOpsProject"
Write-Host "##vso[task.setvariable variable=AzDOPipelineId;isOutput=true]$AzureDevOpsBuildDefinitionId"
Write-Host "##vso[task.setvariable variable=AzDOBuildId;isOutput=true]$AzureDevOpsBuildId"
Write-Host "##vso[task.setvariable variable=PromoteToMaestroChannelId;isOutput=true]$PromoteToMaestroChannelId"
}
catch {
Write-Host $_

View File

@ -10,7 +10,7 @@ parameters:
HelixPostCommands: '' # optional -- commands to run after Helix work item execution
WorkItemDirectory: '' # optional -- a payload directory to zip up and send to Helix; requires WorkItemCommand; incompatible with XUnitProjects
WorkItemCommand: '' # optional -- a command to execute on the payload; requires WorkItemDirectory; incompatible with XUnitProjects
WorkItemTimeout: '' # optional -- a timeout in seconds for the work item command; requires WorkItemDirectory; incompatible with XUnitProjects
WorkItemTimeout: '' # optional -- a timeout in TimeSpan.Parse-ready value (e.g. 00:02:00) for the work item command; requires WorkItemDirectory; incompatible with XUnitProjects
CorrelationPayloadDirectory: '' # optional -- a directory to zip up and send to Helix as a correlation payload
XUnitProjects: '' # optional -- semicolon delimited list of XUnitProjects to parse and send to Helix; requires XUnitRuntimeTargetFramework, XUnitPublishTargetFramework, XUnitRunnerVersion, and IncludeDotNetCli=true
XUnitWorkItemTimeout: '' # optional -- the workitem timeout in seconds for all workitems created from the xUnit projects specified by XUnitProjects
@ -18,8 +18,8 @@ parameters:
XUnitRuntimeTargetFramework: '' # optional -- framework to use for the xUnit console runner
XUnitRunnerVersion: '' # optional -- version of the xUnit nuget package you wish to use on Helix; required for XUnitProjects
IncludeDotNetCli: false # optional -- true will download a version of the .NET CLI onto the Helix machine as a correlation payload; requires DotNetCliPackageType and DotNetCliVersion
DotNetCliPackageType: '' # optional -- either 'sdk' or 'runtime'; determines whether the sdk or runtime will be sent to Helix; see https://raw.githubusercontent.com/dotnet/core/master/release-notes/releases.json
DotNetCliVersion: '' # optional -- version of the CLI to send to Helix; based on this: https://raw.githubusercontent.com/dotnet/core/master/release-notes/releases.json
DotNetCliPackageType: '' # optional -- either 'sdk' or 'runtime'; determines whether the sdk or runtime will be sent to Helix; see https://raw.githubusercontent.com/dotnet/core/master/release-notes/releases-index.json
DotNetCliVersion: '' # optional -- version of the CLI to send to Helix; based on this: https://raw.githubusercontent.com/dotnet/core/master/release-notes/releases-index.json
EnableXUnitReporter: false # optional -- true enables XUnit result reporting to Mission Control
WaitForWorkItemCompletion: true # optional -- true will make the task wait until work items have been completed and fail the build if work items fail. False is "fire and forget."
IsExternal: false # [DEPRECATED] -- doesn't do anything, jobs are external if HelixAccessToken is empty and Creator is set

View File

@ -488,10 +488,11 @@ function GetNuGetPackageCachePath() {
if ($env:NUGET_PACKAGES -eq $null) {
# Use local cache on CI to ensure deterministic build,
# use global cache in dev builds to avoid cost of downloading packages.
# For directory normalization, see also: https://github.com/NuGet/Home/issues/7968
if ($useGlobalNuGetCache) {
$env:NUGET_PACKAGES = Join-Path $env:UserProfile '.nuget\packages'
$env:NUGET_PACKAGES = Join-Path $env:UserProfile '.nuget\packages\'
} else {
$env:NUGET_PACKAGES = Join-Path $RepoRoot '.packages'
$env:NUGET_PACKAGES = Join-Path $RepoRoot '.packages\'
}
}
@ -546,7 +547,7 @@ function InitializeToolset() {
MSBuild-Core $proj $bl /t:__WriteToolsetLocation /clp:ErrorsOnly`;NoSummary /p:__ToolsetLocationOutputFile=$toolsetLocationFile
$path = Get-Content $toolsetLocationFile -TotalCount 1
$path = Get-Content $toolsetLocationFile -Encoding UTF8 -TotalCount 1
if (!(Test-Path $path)) {
throw "Invalid toolset path: $path"
}
@ -632,6 +633,8 @@ function MSBuild-Core() {
}
}
$env:ARCADE_BUILD_TOOL_COMMAND = "$($buildTool.Path) $cmdArgs"
$exitCode = Exec-Process $buildTool.Path $cmdArgs
if ($exitCode -ne 0) {

View File

@ -422,11 +422,17 @@ function MSBuild-Core {
warnaserror_switch="/warnaserror"
fi
"$_InitializeBuildTool" "$_InitializeBuildToolCommand" /m /nologo /clp:Summary /v:$verbosity /nr:$node_reuse $warnaserror_switch /p:TreatWarningsAsErrors=$warn_as_error /p:ContinuousIntegrationBuild=$ci "$@" || {
local exit_code=$?
Write-PipelineTelemetryError -category 'Build' "Build failed (exit code '$exit_code')."
ExitWithExitCode $exit_code
function RunBuildTool {
export ARCADE_BUILD_TOOL_COMMAND="$_InitializeBuildTool $@"
"$_InitializeBuildTool" "$@" || {
local exit_code=$?
Write-PipelineTaskError "Build failed (exit code '$exit_code')."
ExitWithExitCode $exit_code
}
}
RunBuildTool "$_InitializeBuildToolCommand" /m /nologo /clp:Summary /v:$verbosity /nr:$node_reuse $warnaserror_switch /p:TreatWarningsAsErrors=$warn_as_error /p:ContinuousIntegrationBuild=$ci "$@"
}
ResolvePath "${BASH_SOURCE[0]}"

View File

@ -44,7 +44,7 @@ namespace RunTests
EnvironmentVariables.Add("NUGET_FALLBACK_PACKAGES", helixDir);
var nugetRestore = Path.Combine(helixDir, "nugetRestore");
EnvironmentVariables.Add("NUGET_RESTORE", nugetRestore);
var dotnetEFFullPath = Path.Combine(nugetRestore, $"dotnet-ef/{Options.EfVersion}/tools/netcoreapp3.1/any/dotnet-ef.exe");
var dotnetEFFullPath = Path.Combine(nugetRestore, helixDir, "dotnet-ef.exe");
Console.WriteLine($"Set DotNetEfFullPath: {dotnetEFFullPath}");
EnvironmentVariables.Add("DotNetEfFullPath", dotnetEFFullPath);
@ -138,11 +138,10 @@ namespace RunTests
errorDataReceived: Console.Error.WriteLine);
await ProcessUtil.RunAsync($"{Options.DotnetRoot}/dotnet",
$"tool install dotnet-ef --global --version {Options.EfVersion}",
$"tool install dotnet-ef --version {Options.EfVersion} --tool-path {Options.HELIX_WORKITEM_ROOT}",
environmentVariables: EnvironmentVariables,
outputDataReceived: Console.WriteLine,
errorDataReceived: Console.Error.WriteLine,
throwOnError: false); // EF tool is sometimes already installed so we can ignore this failure
errorDataReceived: Console.Error.WriteLine);
// ';' is the path separator on Windows, and ':' on Unix
Options.Path += RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? ";" : ":";

View File

@ -48,10 +48,10 @@ try {
if ($ci) {
# Install dotnet.exe
if ($DotNetRuntimeSourceFeed -or $DotNetRuntimeSourceFeedKey) {
& $repoRoot/restore.cmd -ci -NoBuildNodeJS -DotNetRuntimeSourceFeed $DotNetRuntimeSourceFeed -DotNetRuntimeSourceFeedKey $DotNetRuntimeSourceFeedKey
& $repoRoot/restore.cmd -ci -noBuildNodeJS -DotNetRuntimeSourceFeed $DotNetRuntimeSourceFeed -DotNetRuntimeSourceFeedKey $DotNetRuntimeSourceFeedKey
}
else{
& $repoRoot/restore.cmd -ci -NoBuildNodeJS
& $repoRoot/restore.cmd -ci -noBuildNodeJS
}
}

12
eng/sdl-tsa-vars.config Normal file
View File

@ -0,0 +1,12 @@
-SourceToolsList @("policheck","credscan")
-TsaInstanceURL https://devdiv.visualstudio.com/
-TsaProjectName DEVDIV
-TsaNotificationEmail aspnetcore-build@microsoft.com
-TsaCodebaseAdmin REDMOND\kevinpi
-TsaBugAreaPath "DevDiv\ASP.NET Core"
-TsaIterationPath DevDiv
-TsaRepositoryName AspNetCore
-TsaCodebaseName AspNetCore
-TsaOnboard $True
-TsaPublish $True
-PoliCheckAdditionalRunConfigParams @("UserExclusionPath < $(Build.SourcesDirectory)/eng/PoliCheckExclusions.xml")

View File

@ -8,14 +8,14 @@
<ItemGroup Condition="'$(IsWindowsOnlyTest)' == 'true'">
<HelixAvailablePlatform Include="Windows" />
<HelixContent Include="$(RepoRoot)src\Servers\IIS\tools\update_schema.ps1" />
<HelixContent Include="$(RepoRoot)src\Servers\IIS\tools\UpdateIISExpressCertificate.ps1" />
<HelixContent Include="$(RepoRoot)src\Servers\IIS\tools\TestCert.pfx" />
<HelixContent Include="$(RepoRoot)src\Servers\IIS\AspNetCoreModuleV2\AspNetCore\aspnetcore_schema_v2.xml" />
<HelixPreCommand Include="call RunPowershell.cmd update_schema.ps1 || exit /b 1" />
<HelixPreCommand Include="call RunPowershell.cmd UpdateIISExpressCertificate.ps1 || exit /b 1" />
<HelixPreCommand Include="call RunPowershell.cmd UpdateIISExpressCertificate.ps1 || exit /b 1" />
</ItemGroup>
<!-- ubuntu and win10 required for green PR queues -->
@ -27,7 +27,6 @@
<!-- daily scheduled only queues -->
<ItemGroup Condition="'$(IsWindowsOnlyTest)' != 'true' AND '$(TargetArchitecture)' == 'x64' AND '$(IsHelixDaily)' == 'true'">
<HelixAvailableTargetQueue Include="Windows.81.Amd64.Open" Platform="Windows" />
<HelixAvailableTargetQueue Include="Windows.7.Amd64.Open" Platform="Windows" />
<HelixAvailableTargetQueue Include="Ubuntu.1804.Amd64.Open" Platform="Linux" />
<HelixAvailableTargetQueue Include="OSX.1014.Amd64.Open" Platform="Linux" />

View File

@ -36,7 +36,7 @@
<Output TaskParameter="ExitCode" PropertyName="ErrorCode"/>
</Exec>
<Error Text="Building *.npmproj but NodeJS was not detected on path. Ensure NodeJS is on path or disable building NodeJS projects with /p:BuildNodeJs=false. Skipping NodeJS projects will also skip managed projects depending on them, including Components, Mvc and Analysers." Condition="'$(ErrorCode)' != '0'"/>
<Error Text="Building *.npmproj but NodeJS was not detected on path. Ensure NodeJS is on path or disable building NodeJS projects with -noBuildNodeJS or --no-build-nodejs. Skipping NodeJS projects will also skip managed projects depending on them, including Components, Mvc and Analysers." Condition="'$(ErrorCode)' != '0'"/>
</Target>
<Target Name="Restore">

View File

@ -5,40 +5,35 @@ with the right MSBuild incantations to get output copied to the right place.
-->
<Project>
<Choose>
<!-- IIS native projects only build on Windows with MSBuild.exe -->
<When Condition="'$(OS)' == 'Windows_NT' AND '$(MSBuildRuntimeType)' != 'Core' ">
<ItemGroup Condition="@(NativeProjectReference->Count()) != 0 AND '$(BuildNative)' != 'false' ">
<!-- TODO: investigate building just one arch at a time. -->
<ProjectReference Include="@(NativeProjectReference)">
<!-- Set the arch-->
<SetPlatform>Platform=%(Platform)</SetPlatform>
<SetPlatform Condition="'%(Platform)' == 'x86'">Platform=Win32</SetPlatform>
<!-- The base path for the output. -->
<LinkBase>%(Platform)\%(HandlerPath)\</LinkBase>
<!-- This reference assembly doesn't need -->
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
<!-- NativeContent is a custom type of item group which is assigned a target path after project references are resolved. -->
<OutputItemType>NativeContent</OutputItemType>
<!-- This instructs the ProjectRef protocol to collect symbols as well as built output -->
<Targets>Build;BuiltProjectOutputGroup;DebugSymbolsProjectOutputGroup</Targets>
<!-- Optimization. Native projects don't have a .NET TargetFramework -->
<SkipGetTargetFrameworkProperties>true</SkipGetTargetFrameworkProperties>
<UndefineProperties>TargetFramework</UndefineProperties>
<!-- Don't put this reference into generated .nuspec -->
<PrivateAssets>All</PrivateAssets>
<!-- Publish assets from this reference -->
<Publish>true</Publish>
</ProjectReference>
<NativeProjectReference Remove="@(NativeProjectReference)" />
</ItemGroup>
</When>
</Choose>
<!-- IIS native projects only build on Windows with MSBuild.exe -->
<ItemGroup Condition="@(NativeProjectReference->Count()) != 0 AND $(BuildNative) ">
<!-- TODO: investigate building just one arch at a time. -->
<ProjectReference Include="@(NativeProjectReference)">
<!-- Set the arch-->
<SetPlatform>Platform=%(Platform)</SetPlatform>
<SetPlatform Condition="'%(Platform)' == 'x86'">Platform=Win32</SetPlatform>
<!-- The base path for the output. -->
<LinkBase>%(Platform)\%(HandlerPath)\</LinkBase>
<!-- This reference assembly doesn't need -->
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
<!-- NativeContent is a custom type of item group which is assigned a target path after project references are resolved. -->
<OutputItemType>NativeContent</OutputItemType>
<!-- This instructs the ProjectRef protocol to collect symbols as well as built output -->
<Targets>Build;BuiltProjectOutputGroup;DebugSymbolsProjectOutputGroup</Targets>
<!-- Optimization. Native projects don't have a .NET TargetFramework -->
<SkipGetTargetFrameworkProperties>true</SkipGetTargetFrameworkProperties>
<UndefineProperties>TargetFramework</UndefineProperties>
<!-- Don't put this reference into generated .nuspec -->
<PrivateAssets>All</PrivateAssets>
<!-- Publish assets from this reference -->
<Publish>true</Publish>
</ProjectReference>
<NativeProjectReference Remove="@(NativeProjectReference)" />
</ItemGroup>
<Target Name="_WarnAboutUnbuiltNativeDependencies"
BeforeTargets="Build"
Condition=" @(NativeProjectReference->Count()) != 0 AND '$(BuildNative)' == 'false' ">
Condition=" @(NativeProjectReference->Count()) != 0 AND !$(BuildNative) ">
<Warning Text="This project has native dependencies which were not built. Without this, tests may not function correctly. Run `build.cmd -native` to build native projects. Run `build.cmd -managed -native` to build both C# and C++." />
</Target>

View File

@ -144,41 +144,40 @@
<UnusedBaselinePackageReference Include="@(BaselinePackageReference)" Exclude="@(Reference);@(_ProjectReferenceByAssemblyName);@(PackageReference)" />
<!-- Only allow suppressing baseline changes in non-servicing builds. -->
<UnusedBaselinePackageReference Remove="@(SuppressBaselineReference)" Condition="'$(IsServicingBuild)' != 'true'"/>
</ItemGroup>
<!--
MSBuild does not provide a way to join on matching identities in a Condition,
but you can do a cartesian product of two item groups and filter out mismatched id's in a second pass.
-->
<_LatestPackageReferenceWithVersion Include="@(Reference)" Condition=" '$(UseLatestPackageReferences)' == 'true' ">
<Id>%(LatestPackageReference.Identity)</Id>
<Version>%(LatestPackageReference.Version)</Version>
</_LatestPackageReferenceWithVersion>
<_LatestPackageReferenceWithVersion Remove="@(_LatestPackageReferenceWithVersion)" Condition="'%(Id)' != '%(Identity)' " />
<JoinItems Left="@(Reference)" Right="@(LatestPackageReference)" LeftMetadata="*" RightMetadata="Version"
Condition=" '$(UseLatestPackageReferences)' == 'true' ">
<Output TaskParameter="JoinResult" ItemName="_LatestPackageReferenceWithVersion" />
</JoinItems>
<ItemGroup>
<!-- Remove reference items that have been resolved to a LatestPackageReference item. -->
<Reference Remove="@(_LatestPackageReferenceWithVersion)" />
<PackageReference Include="@(_LatestPackageReferenceWithVersion)" IsImplicitlyDefined="true" />
<Reference Remove="@(_LatestPackageReferenceWithVersion)" />
</ItemGroup>
<!-- Resolve references from BaselinePackageReference for servicing builds. -->
<_BaselinePackageReferenceWithVersion Include="@(Reference)" Condition=" '$(IsServicingBuild)' == 'true' OR '$(UseLatestPackageReferences)' != 'true' ">
<Id>%(BaselinePackageReference.Identity)</Id>
<Version>%(BaselinePackageReference.Version)</Version>
</_BaselinePackageReferenceWithVersion>
<_BaselinePackageReferenceWithVersion Remove="@(_BaselinePackageReferenceWithVersion)" Condition="'%(Id)' != '%(Identity)' " />
<!-- Resolve references from BaselinePackageReference for servicing builds in corner cases. May be unused. -->
<JoinItems Left="@(Reference)" Right="@(BaselinePackageReference)" LeftMetadata="*" RightMetadata="Version"
Condition=" '$(IsServicingBuild)' == 'true' OR '$(UseLatestPackageReferences)' != 'true' ">
<Output TaskParameter="JoinResult" ItemName="_BaselinePackageReferenceWithVersion" />
</JoinItems>
<ItemGroup>
<!-- Remove reference items that have been resolved to a BaselinePackageReference item. -->
<PackageReference Include="@(_BaselinePackageReferenceWithVersion)" IsImplicitlyDefined="true" />
<Reference Remove="@(_BaselinePackageReferenceWithVersion)" />
</ItemGroup>
<!-- For PrivateAssets=All references, like .Sources packages, fallback to LatestPackageReferences. -->
<_PrivatePackageReferenceWithVersion Include="@(Reference->WithMetadataValue('PrivateAssets', 'All'))">
<Id>%(LatestPackageReference.Identity)</Id>
<Version>%(LatestPackageReference.Version)</Version>
</_PrivatePackageReferenceWithVersion>
<_PrivatePackageReferenceWithVersion Remove="@(_PrivatePackageReferenceWithVersion)" Condition="'%(Id)' != '%(Identity)' " />
<!-- For PrivateAssets=All references, like .Sources packages, fallback to LatestPackageReferences. -->
<JoinItems Left="@(Reference->WithMetadataValue('PrivateAssets', 'All'))"
Right="@(LatestPackageReference)"
LeftMetadata="*"
RightMetadata="Version">
<Output TaskParameter="JoinResult" ItemName="_PrivatePackageReferenceWithVersion" />
</JoinItems>
<ItemGroup>
<!-- Remove reference items that have been resolved to a LatestPackageReference item. -->
<PackageReference Include="@(_PrivatePackageReferenceWithVersion)" IsImplicitlyDefined="true" />
<Reference Remove="@(_PrivatePackageReferenceWithVersion)" />
@ -287,4 +286,4 @@
<Output TaskParameter="TargetOutputs" ItemName="_MSBuildProjectReferenceExistent" />
</MSBuild>
</Target>
</Project>
</Project>

View File

@ -1,9 +1,9 @@
{
"sdk": {
"version": "5.0.100-preview.2.20120.3"
"version": "5.0.100-preview.5.20258.4"
},
"tools": {
"dotnet": "5.0.100-preview.2.20120.3",
"dotnet": "5.0.100-preview.5.20258.4",
"runtimes": {
"dotnet/x64": [
"$(MicrosoftNETCoreAppInternalPackageVersion)"
@ -25,7 +25,7 @@
},
"msbuild-sdks": {
"Yarn.MSBuild": "1.15.2",
"Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.20201.2",
"Microsoft.DotNet.Helix.Sdk": "5.0.0-beta.20201.2"
"Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.20228.4",
"Microsoft.DotNet.Helix.Sdk": "5.0.0-beta.20228.4"
}
}

View File

@ -51,11 +51,11 @@
<script src="~/js/site.js" asp-append-version="true"></script>
</environment>
<environment exclude="Development">
<script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-2.2.0.min.js"
<script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-3.5.1.min.js"
asp-fallback-src="~/lib/jquery/dist/jquery.min.js"
asp-fallback-test="window.jQuery"
crossorigin="anonymous"
integrity="sha384-K+ctZQ+LL8q6tP7I94W+qzQsfRV2a+AfHIi9k8z8l9ggpc8X+Ytst4yBo/hH+8Fk">
integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=">
</script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"
asp-fallback-src="~/lib/bootstrap/dist/js/bootstrap.min.js"

View File

@ -12,14 +12,14 @@
"library"
],
"homepage": "https://github.com/jquery/jquery-dist",
"version": "2.2.0",
"_release": "2.2.0",
"version": "3.5.1",
"_release": "3.5.1",
"_resolution": {
"type": "version",
"tag": "2.2.0",
"commit": "6fc01e29bdad0964f62ef56d01297039cdcadbe5"
"tag": "3.5.1",
"commit": "4c0e4becb8263bb5b3e6dadc448d8e7305ef8215"
},
"_source": "git://github.com/jquery/jquery-dist.git",
"_target": "2.2.0",
"_target": "3.5.1",
"_originalSource": "jquery"
}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -51,11 +51,11 @@
<script src="~/js/site.js" asp-append-version="true"></script>
</environment>
<environment exclude="Development">
<script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-2.2.0.min.js"
<script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-3.5.1.min.js"
asp-fallback-src="~/lib/jquery/dist/jquery.min.js"
asp-fallback-test="window.jQuery"
crossorigin="anonymous"
integrity="sha384-K+ctZQ+LL8q6tP7I94W+qzQsfRV2a+AfHIi9k8z8l9ggpc8X+Ytst4yBo/hH+8Fk">
integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=">
</script>
<script src="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.7/bootstrap.min.js"
asp-fallback-src="~/lib/bootstrap/dist/js/bootstrap.min.js"

View File

@ -12,14 +12,14 @@
"library"
],
"homepage": "https://github.com/jquery/jquery-dist",
"version": "2.2.0",
"_release": "2.2.0",
"version": "3.5.1",
"_release": "3.5.1",
"_resolution": {
"type": "version",
"tag": "2.2.0",
"commit": "6fc01e29bdad0964f62ef56d01297039cdcadbe5"
"tag": "3.5.1",
"commit": "4c0e4becb8263bb5b3e6dadc448d8e7305ef8215"
},
"_source": "git://github.com/jquery/jquery-dist.git",
"_target": "2.2.0",
"_target": "3.5.1",
"_originalSource": "jquery"
}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -6,7 +6,7 @@
<PackageTags>wasm;javascript;interop</PackageTags>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<IsPackable>true</IsPackable>
<IsShipping>true</IsShipping>
<IsShipping>false</IsShipping>
<HasReferenceAssembly>false</HasReferenceAssembly>
</PropertyGroup>

View File

@ -333,11 +333,12 @@ namespace Ignitor
return null;
}
public async Task<bool> ConnectAsync(Uri uri, bool connectAutomatically = true)
public async Task<bool> ConnectAsync(Uri uri, bool connectAutomatically = true, Action<HubConnectionBuilder, Uri>? configure = null)
{
var builder = new HubConnectionBuilder();
builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton<IHubProtocol, IgnitorMessagePackHubProtocol>());
builder.WithUrl(GetHubUrl(uri));
var hubUrl = GetHubUrl(uri);
builder.WithUrl(hubUrl);
builder.ConfigureLogging(l =>
{
l.SetMinimumLevel(LogLevel.Trace);
@ -347,6 +348,8 @@ namespace Ignitor
}
});
configure?.Invoke(builder, hubUrl);
_hubConnection = builder.Build();
HubConnection.On<int, string>("JS.AttachComponent", OnAttachComponent);
@ -356,7 +359,19 @@ namespace Ignitor
HubConnection.On<string>("JS.Error", OnError);
HubConnection.Closed += OnClosedAsync;
await HubConnection.StartAsync(CancellationToken);
for (var i = 0; i < 10; i++)
{
try
{
await HubConnection.StartAsync(CancellationToken);
break;
}
catch
{
await Task.Delay(500);
// Retry 10 times
}
}
if (!connectAutomatically)
{

View File

@ -264,8 +264,14 @@ namespace Ignitor
case RenderTreeFrameType.ElementReferenceCapture:
{
// No action for reference captures.
break;
if (parent is ElementNode)
{
return 0; // A "capture" is a child in the diff, but has no node in the DOM
}
else
{
throw new Exception("Reference capture frames can only be children of element frames.");
}
}
case RenderTreeFrameType.Markup:

View File

@ -88,7 +88,7 @@ namespace Ignitor
return DispatchEventCore(connection, Serialize(webEventDescriptor), Serialize(args));
}
internal Task ClickAsync(HubConnection connection)
public Task ClickAsync(HubConnection connection)
{
if (!Events.TryGetValue("click", out var clickEventDescriptor))
{

File diff suppressed because one or more lines are too long

View File

@ -2,6 +2,8 @@
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Net;
using System.Net.Http;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Components.E2ETest.Infrastructure.ServerFixtures;
@ -22,6 +24,32 @@ namespace Microsoft.AspNetCore.Components.E2ETest.ServerExecutionTests
{
}
protected override async Task InitializeAsync()
{
await base.InitializeAsync();
var rootUri = ServerFixture.RootUri;
var baseUri = new Uri(rootUri, "/subdir");
var client = new HttpClient();
for (var i = 0; i < 10; i++)
{
try
{
var response = await client.GetAsync(baseUri + "/_negotiate");
if (response.StatusCode == HttpStatusCode.OK)
{
break;
}
}
catch
{
await Task.Delay(500);
throw;
}
}
}
[Fact]
[QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/19414")]
public async Task CannotStartMultipleCircuits()

View File

@ -7,6 +7,10 @@
<PlatformManifestFileName>PlatformManifest.txt</PlatformManifestFileName>
<PlatformManifestOutputPath>$(ArtifactsObjDir)$(PlatformManifestFileName)</PlatformManifestOutputPath>
<DisablePubternalApiCheck>true</DisablePubternalApiCheck>
<!-- Platform manifest and package override metatdata -->
<ReferencePackSharedFxVersion>$(AspNetCoreMajorVersion).$(AspNetCoreMinorVersion).0</ReferencePackSharedFxVersion>
<ReferencePackSharedFxVersion Condition="'$(VersionSuffix)' != ''">$(ReferencePackSharedFxVersion)-$(VersionSuffix)</ReferencePackSharedFxVersion>
</PropertyGroup>
<ItemGroup>

View File

@ -50,10 +50,6 @@ This package is an internal implementation of the .NET Core SDK and is not meant
<FrameworkListFileName>FrameworkList.xml</FrameworkListFileName>
<FrameworkListOutputPath>$(ArtifactsObjDir)$(FrameworkListFileName)</FrameworkListOutputPath>
<!-- Platform manifest and package override metatdata -->
<ReferencePackSharedFxVersion>$(AspNetCoreMajorVersion).$(AspNetCoreMinorVersion).0</ReferencePackSharedFxVersion>
<ReferencePackSharedFxVersion Condition="'$(VersionSuffix)' != ''">$(ReferencePackSharedFxVersion)-$(VersionSuffix)</ReferencePackSharedFxVersion>
<!-- Runtime extensions transport paths -->
<RuntimeExtensionsReferenceDirectory>$(PkgMicrosoft_Extensions_Internal_Transport)\ref\$(TargetFramework)\</RuntimeExtensionsReferenceDirectory>
@ -120,12 +116,6 @@ This package is an internal implementation of the .NET Core SDK and is not meant
<Output TaskParameter="JoinResult" ItemName="_ReferencedExtensionsRefAssemblies" />
</JoinItems>
<!-- _DuplicatedExtensionsRefAssemblies represents ref assemblies that are present in Microsoft.Extensions.Internal.Transport package and also are built in this repo. -->
<!-- This should be temporary while we migrate sources since there should be no duplication when sources are deleted from extensions. -->
<JoinItems Left="@(_ReferencedExtensionsRefAssemblies)" Right="@(_ResolvedProjectReferencePaths)" LeftKey="Filename" RightKey="Filename" ItemSpecToUse="Left">
<Output TaskParameter="JoinResult" ItemName="_DuplicatedExtensionsRefAssemblies" />
</JoinItems>
<JoinItems Left="@(_ReferencedExtensionsRefAssemblies)" Right="@(ExternalAspNetCoreAppReference)" LeftKey="Filename" RightKey="Identity" ItemSpecToUse="Left">
<Output TaskParameter="JoinResult" ItemName="_SelectedExtensionsRefs" />
</JoinItems>
@ -135,15 +125,12 @@ This package is an internal implementation of the .NET Core SDK and is not meant
</JoinItems>
<ItemGroup>
<!-- Do not exclude the ref assemblies that we built in this repo if it's also included in Microsoft.Extensions.Internal.Transport -->
<_ReferencedExtensionsRefAssembliesToExclude Include="@(_ReferencedExtensionsRefAssemblies)" Exclude="@(_DuplicatedExtensionsRefAssemblies)" />
<!-- Exclude transitive external dependencies that are not directly referenced by projects in AspNetCore or Extensions -->
<AspNetCoreReferenceAssemblyPath
Include="@(ReferencePathWithRefAssemblies)"
Condition="'%(ReferencePathWithRefAssemblies.IsReferenceAssembly)' != 'false'"
Exclude="
@(_ReferencedExtensionsRefAssembliesToExclude);
@(_ReferencedExtensionsRefAssemblies);
@(ReferencePathWithRefAssemblies->WithMetadataValue('NuGetPackageId', 'Microsoft.NETCore.App.Ref'));
@(ReferencePathWithRefAssemblies->WithMetadataValue('NuGetPackageId', 'System.Security.Cryptography.Pkcs'));
@(ReferencePathWithRefAssemblies->WithMetadataValue('NuGetPackageId', 'System.Drawing.Common'));
@ -172,7 +159,7 @@ This package is an internal implementation of the .NET Core SDK and is not meant
<_AspNetCoreAppPackageOverrides Include="@(AspNetCoreReferenceAssemblyPath->'%(NuGetPackageId)|%(NuGetPackageVersion)')" Condition="!Exists('$(RuntimeExtensionsReferenceDirectory)%(AspNetCoreReferenceAssemblyPath.NuGetPackageId).dll') AND '%(AspNetCoreReferenceAssemblyPath.NuGetPackageId)' != 'Microsoft.NETCore.App' AND '%(AspNetCoreReferenceAssemblyPath.NuGetPackageId)' != 'Microsoft.Extensions.Internal.Transport' AND '%(AspNetCoreReferenceAssemblyPath.NuGetSourceType)' == 'Package' " />
<!-- Pin version for extensions references -->
<_AspNetCoreAppPackageOverrides Include="@(_SelectedExtensionsRefAssemblies->'%(FileName)|$(MicrosoftInternalExtensionsRefsPackageOverrideVersion)')" />
<_AspNetCoreAppPackageOverrides Include="@(_SelectedExtensionsRefAssemblies->'%(FileName)|$(MicrosoftExtensionsInternalTransportPackageVersion)')" />
<_AspNetCoreAppPackageOverrides Include="@(AspNetCoreReferenceAssemblyPath->'%(FileName)|$(ReferencePackSharedFxVersion)')" Condition=" '%(AspNetCoreReferenceAssemblyPath.ReferenceSourceTarget)' == 'ProjectReference' AND '%(AspNetCoreReferenceAssemblyPath.IsReferenceAssembly)' == 'true' " />
</ItemGroup>

View File

@ -126,7 +126,8 @@ This package is an internal implementation of the .NET Core SDK and is not meant
<Reference Include="microsoft.netcore.app.runtime.$(RuntimeIdentifier)" ExcludeAssets="All" PrivateAssets="All" />
<ProjectReference Condition="'$(BuildIisNativeProjects)' == 'true' AND '$(BuildNative)' != 'false' AND '$(VCTargetsPath)' != ''" Include="$(RepoRoot)src\Servers\IIS\AspNetCoreModuleV2\InProcessRequestHandler\InProcessRequestHandler.vcxproj">
<ProjectReference Condition=" '$(BuildIisNativeProjects)' == 'true' "
Include="$(RepoRoot)src\Servers\IIS\AspNetCoreModuleV2\InProcessRequestHandler\InProcessRequestHandler.vcxproj">
<SetPlatform>Platform=$(TargetArchitecture)</SetPlatform>
<SetPlatform Condition="'$(TargetArchitecture)' == 'x86'">Platform=Win32</SetPlatform>
<!-- Custom attribute used to distinguish managed from native references. -->
@ -214,7 +215,7 @@ This package is an internal implementation of the .NET Core SDK and is not meant
<Target Name="_WarnAboutUnbuiltNativeDependencies"
BeforeTargets="Build"
Condition=" '$(BuildIisNativeProjects)' == 'true' AND '$(BuildNative)' == 'false' ">
Condition=" '$(BuildIisNativeProjects)' == 'true' AND !$(BuildNative) ">
<Warning Text="This project has native dependencies which were not built. Without this, tests may not function correctly. Run `build.cmd -BuildNative -BuildManaged` to build both C# and C++." />
</Target>
@ -496,7 +497,7 @@ This package is an internal implementation of the .NET Core SDK and is not meant
</Target>
<Target Name="IncludeVersionFile"
DependsOnTargets="GenerateSharedFxVersionsFiles"
DependsOnTargets="GenerateSharedFxVersionsFiles"
BeforeTargets="_GetPackageFiles">
<ItemGroup>

View File

@ -90,6 +90,28 @@
<_Parameter2>@(_TargetingPackDependencies)</_Parameter2>
</AssemblyAttribute>
<AspNetCoreTargetingPackDependencies
Include="@(_TargetingPackDependencies)"
Condition="'%(_TargetingPackDependencies.ReferenceSourceTarget)' == 'ProjectReference'" />
<RuntimeTargetingPackDependencies
Include="@(_TargetingPackDependencies)"
Exclude="@(AspNetCoreTargetingPackDependencies)" />
<AssemblyAttribute Include="Microsoft.AspNetCore.TestData">
<_Parameter1>AspNetCoreTargetingPackDependencies</_Parameter1>
<_Parameter2>@(AspNetCoreTargetingPackDependencies->'%(FileName)')</_Parameter2>
</AssemblyAttribute>
<AssemblyAttribute Include="Microsoft.AspNetCore.TestData">
<_Parameter1>RuntimeTargetingPackDependencies</_Parameter1>
<_Parameter2>@(RuntimeTargetingPackDependencies->'%(FileName)')</_Parameter2>
</AssemblyAttribute>
<AssemblyAttribute Include="Microsoft.AspNetCore.TestData">
<_Parameter1>ReferencePackSharedFxVersion</_Parameter1>
<_Parameter2>$(ReferencePackSharedFxVersion)</_Parameter2>
</AssemblyAttribute>
<AssemblyAttribute Include="Microsoft.AspNetCore.TestData">
<_Parameter1>RepositoryCommit</_Parameter1>
<_Parameter2>$(SourceRevisionId)</_Parameter2>

View File

@ -32,6 +32,50 @@ namespace Microsoft.AspNetCore
_isTargetingPackBuilding = bool.Parse(TestData.GetTestDataValue("IsTargetingPackBuilding"));
}
[Fact]
public void PackageOverridesContainsCorrectEntries()
{
if (!_isTargetingPackBuilding)
{
return;
}
var packageOverridePath = Path.Combine(_targetingPackRoot, "data", "PackageOverrides.txt");
AssertEx.FileExists(packageOverridePath);
var packageOverrideFileLines = File.ReadAllLines(packageOverridePath);
var runtimeDependencies = TestData.GetRuntimeTargetingPackDependencies()
.Split(';', StringSplitOptions.RemoveEmptyEntries)
.ToHashSet();
var aspnetcoreDependencies = TestData.GetAspNetCoreTargetingPackDependencies()
.Split(';', StringSplitOptions.RemoveEmptyEntries)
.ToHashSet();
Assert.Equal(packageOverrideFileLines.Length, runtimeDependencies.Count + aspnetcoreDependencies.Count);
foreach (var entry in packageOverrideFileLines)
{
var packageOverrideParts = entry.Split("|");
var packageName = packageOverrideParts[0];
var packageVersion = packageOverrideParts[1];
if (runtimeDependencies.Contains(packageName))
{
Assert.Equal(TestData.GetMicrosoftNETCoreAppPackageVersion(), packageVersion);
}
else if (aspnetcoreDependencies.Contains(packageName))
{
Assert.Equal(TestData.GetReferencePackSharedFxVersion(), packageVersion);
}
else
{
Assert.True(false, $"{packageName} is not a recognized aspNetCore or runtime dependency");
}
}
}
[Fact]
public void AssembliesAreReferenceAssemblies()
{

View File

@ -13,6 +13,8 @@ namespace Microsoft.AspNetCore
public static string GetMicrosoftNETCoreAppPackageVersion() => GetTestDataValue("MicrosoftNETCoreAppRuntimeVersion");
public static string GetReferencePackSharedFxVersion() => GetTestDataValue("ReferencePackSharedFxVersion");
public static string GetRepositoryCommit() => GetTestDataValue("RepositoryCommit");
public static string GetSharedFxRuntimeIdentifier() => GetTestDataValue("TargetRuntimeIdentifier");
@ -21,6 +23,10 @@ namespace Microsoft.AspNetCore
public static string GetTargetingPackDependencies() => GetTestDataValue("TargetingPackDependencies");
public static string GetRuntimeTargetingPackDependencies() => GetTestDataValue("RuntimeTargetingPackDependencies");
public static string GetAspNetCoreTargetingPackDependencies() => GetTestDataValue("AspNetCoreTargetingPackDependencies");
public static bool VerifyAncmBinary() => string.Equals(GetTestDataValue("VerifyAncmBinary"), "true", StringComparison.OrdinalIgnoreCase);
public static string GetTestDataValue(string key)

View File

@ -3,6 +3,7 @@
using System;
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Internal;
using Xunit.Abstractions;
@ -29,7 +30,7 @@ namespace InteropTests.Helpers
_process.OutputDataReceived += Process_OutputDataReceived;
_process.Start();
_processEx = new ProcessEx(output, _process);
_processEx = new ProcessEx(output, _process, timeout: Timeout.InfiniteTimeSpan);
_startTcs = new TaskCompletionSource<object>(TaskCreationOptions.RunContinuationsAsynchronously);
}

View File

@ -3,11 +3,8 @@
using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Internal;
using Xunit.Abstractions;
@ -19,7 +16,6 @@ namespace InteropTests.Helpers
private readonly Process _process;
private readonly ProcessEx _processEx;
private readonly TaskCompletionSource<object> _startTcs;
private readonly StringBuilder _consoleOut = new StringBuilder();
private static readonly Regex NowListeningRegex = new Regex(@"^\s*Now listening on: .*:(?<port>\d*)$");
public string ServerPort { get; private set; }
@ -38,7 +34,7 @@ namespace InteropTests.Helpers
_process.OutputDataReceived += Process_OutputDataReceived;
_process.Start();
_processEx = new ProcessEx(output, _process);
_processEx = new ProcessEx(output, _process, Timeout.InfiniteTimeSpan);
_startTcs = new TaskCompletionSource<object>(TaskCreationOptions.RunContinuationsAsynchronously);
}
@ -58,7 +54,6 @@ namespace InteropTests.Helpers
var data = e.Data;
if (data != null)
{
_consoleOut.AppendLine(data);
var m = NowListeningRegex.Match(data);
if (m.Success)
{
@ -74,19 +69,6 @@ namespace InteropTests.Helpers
public void Dispose()
{
var attributes = Assembly.GetExecutingAssembly()
.GetCustomAttributes<AssemblyMetadataAttribute>();
var serverLogPath = attributes.SingleOrDefault(a => a.Key == "ServerLogPath")?.Value;
if (!string.IsNullOrEmpty(serverLogPath))
{
File.WriteAllText(serverLogPath, _consoleOut.ToString());
}
else
{
var logDir = Path.Combine(Directory.GetCurrentDirectory(), "artifacts", "logs");
Directory.CreateDirectory(logDir);
File.WriteAllText(Path.Combine(logDir, "InteropServer.log"), _consoleOut.ToString());
}
_processEx.Dispose();
}
}

View File

@ -5,7 +5,6 @@ using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Threading.Tasks;
using InteropTests.Helpers;
using Microsoft.AspNetCore.Testing;

View File

@ -1,4 +1,4 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
@ -6,6 +6,7 @@ using System.Collections.Generic;
using System.Linq;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Routing.Patterns;
using Microsoft.AspNetCore.Routing.Template;
using Microsoft.Extensions.Logging;
namespace Microsoft.AspNetCore.Routing.Matching
@ -52,6 +53,9 @@ namespace Microsoft.AspNetCore.Routing.Matching
_constraints = new List<KeyValuePair<string, IRouteConstraint>>();
}
// Used in tests
internal EndpointComparer Comparer => _comparer;
public override void AddEndpoint(RouteEndpoint endpoint)
{
_endpoints.Add(endpoint);
@ -59,17 +63,11 @@ namespace Microsoft.AspNetCore.Routing.Matching
public DfaNode BuildDfaTree(bool includeLabel = false)
{
// We build the tree by doing a BFS over the list of entries. This is important
// because a 'parameter' node can also traverse the same paths that literal nodes
// traverse. This means that we need to order the entries first, or else we will
// miss possible edges in the DFA.
_endpoints.Sort(_comparer);
// Since we're doing a BFS we will process each 'level' of the tree in stages
// this list will hold the set of items we need to process at the current
// stage.
var work = new List<(RouteEndpoint endpoint, List<DfaNode> parents)>(_endpoints.Count);
List<(RouteEndpoint endpoint, List<DfaNode> parents)> previousWork = null;
var work = new List<(RouteEndpoint endpoint, int precedenceDigit, List<DfaNode> parents)>(_endpoints.Count);
List<(RouteEndpoint endpoint, int precedenceDigit, List<DfaNode> parents)> previousWork = null;
var root = new DfaNode() { PathDepth = 0, Label = includeLabel ? "/" : null };
@ -79,21 +77,37 @@ namespace Microsoft.AspNetCore.Routing.Matching
for (var i = 0; i < _endpoints.Count; i++)
{
var endpoint = _endpoints[i];
maxDepth = Math.Max(maxDepth, endpoint.RoutePattern.PathSegments.Count);
var precedenceDigit = GetPrecedenceDigitAtDepth(endpoint, depth: 0);
work.Add((endpoint, precedenceDigit, new List<DfaNode>() { root, }));
work.Add((endpoint, new List<DfaNode>() { root, }));
maxDepth = Math.Max(maxDepth, endpoint.RoutePattern.PathSegments.Count);
}
var workCount = work.Count;
// Sort work at each level by *PRECEDENCE OF THE CURRENT SEGMENT*.
//
// We build the tree by doing a BFS over the list of entries. This is important
// because a 'parameter' node can also traverse the same paths that literal nodes
// traverse. This means that we need to order the entries first, or else we will
// miss possible edges in the DFA.
//
// We'll sort the matches again later using the *real* comparer once building the
// precedence part of the DFA is over.
var precedenceDigitComparer = Comparer<(RouteEndpoint endpoint, int precedenceDigit, List<DfaNode> parents)>.Create((x, y) =>
{
return x.precedenceDigit.CompareTo(y.precedenceDigit);
});
// Now we process the entries a level at a time.
for (var depth = 0; depth <= maxDepth; depth++)
{
// As we process items, collect the next set of items.
List<(RouteEndpoint endpoint, List<DfaNode> parents)> nextWork;
List<(RouteEndpoint endpoint, int precedenceDigit, List<DfaNode> parents)> nextWork;
var nextWorkCount = 0;
if (previousWork == null)
{
nextWork = new List<(RouteEndpoint endpoint, List<DfaNode> parents)>();
nextWork = new List<(RouteEndpoint endpoint, int precedenceDigit, List<DfaNode> parents)>();
}
else
{
@ -102,9 +116,12 @@ namespace Microsoft.AspNetCore.Routing.Matching
nextWork = previousWork;
}
// See comments on precedenceDigitComparer
work.Sort(0, workCount, precedenceDigitComparer);
for (var i = 0; i < workCount; i++)
{
var (endpoint, parents) = work[i];
var (endpoint, _, parents) = work[i];
if (!HasAdditionalRequiredSegments(endpoint, depth))
{
@ -122,7 +139,8 @@ namespace Microsoft.AspNetCore.Routing.Matching
nextParents = nextWork[nextWorkCount].parents;
nextParents.Clear();
nextWork[nextWorkCount] = (endpoint, nextParents);
var nextPrecedenceDigit = GetPrecedenceDigitAtDepth(endpoint, depth + 1);
nextWork[nextWorkCount] = (endpoint, nextPrecedenceDigit, nextParents);
}
else
{
@ -130,7 +148,8 @@ namespace Microsoft.AspNetCore.Routing.Matching
// Add to the next set of work now so the list will be reused
// even if there are no parents
nextWork.Add((endpoint, nextParents));
var nextPrecedenceDigit = GetPrecedenceDigitAtDepth(endpoint, depth + 1);
nextWork.Add((endpoint, nextPrecedenceDigit, nextParents));
}
var segment = GetCurrentSegment(endpoint, depth);
@ -281,7 +300,7 @@ namespace Microsoft.AspNetCore.Routing.Matching
nextParents.Add(next);
}
private RoutePatternPathSegment GetCurrentSegment(RouteEndpoint endpoint, int depth)
private static RoutePatternPathSegment GetCurrentSegment(RouteEndpoint endpoint, int depth)
{
if (depth < endpoint.RoutePattern.PathSegments.Count)
{
@ -302,6 +321,18 @@ namespace Microsoft.AspNetCore.Routing.Matching
return null;
}
private static int GetPrecedenceDigitAtDepth(RouteEndpoint endpoint, int depth)
{
var segment = GetCurrentSegment(endpoint, depth);
if (segment is null)
{
// Treat "no segment" as high priority. it won't effect the algorithm, but we need to define a sort-order.
return 0;
}
return RoutePrecedence.ComputeInboundPrecedenceDigit(endpoint.RoutePattern, segment);
}
public override Matcher Build()
{
#if DEBUG
@ -670,6 +701,10 @@ namespace Microsoft.AspNetCore.Routing.Matching
return;
}
// We're done with the precedence based work. Sort the endpoints
// before applying policies for simplicity in policy-related code.
node.Matches.Sort(_comparer);
// Start with the current node as the root.
var work = new List<DfaNode>() { node, };
List<DfaNode> previousWork = null;

View File

@ -219,7 +219,7 @@ namespace Microsoft.AspNetCore.Routing.Template
// see description on ComputeInboundPrecedenceDigit(TemplateSegment segment)
//
// With a RoutePattern, parameters with a required value are treated as a literal segment
private static int ComputeInboundPrecedenceDigit(RoutePattern routePattern, RoutePatternPathSegment pathSegment)
internal static int ComputeInboundPrecedenceDigit(RoutePattern routePattern, RoutePatternPathSegment pathSegment)
{
if (pathSegment.Parts.Count > 1)
{
@ -260,4 +260,4 @@ namespace Microsoft.AspNetCore.Routing.Template
}
}
}
}
}

View File

@ -1,4 +1,4 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
@ -459,6 +459,200 @@ namespace Microsoft.AspNetCore.Routing.Matching
Assert.Same(catchAll, catchAll.CatchAll);
}
// Regression test for https://github.com/dotnet/aspnetcore/issues/16579
[Fact]
public void BuildDfaTree_MultipleEndpoint_ParameterAndCatchAll_OnSameNode_Order1()
{
// Arrange
var builder = CreateDfaMatcherBuilder();
var endpoint1 = CreateEndpoint("a/{b}", order: 0);
builder.AddEndpoint(endpoint1);
var endpoint2 = CreateEndpoint("a/{*b}", order: 1);
builder.AddEndpoint(endpoint2);
// Act
var root = builder.BuildDfaTree();
// Assert
Assert.Null(root.Matches);
Assert.Null(root.Parameters);
var next = Assert.Single(root.Literals);
Assert.Equal("a", next.Key);
var a = next.Value;
Assert.Same(endpoint2, Assert.Single(a.Matches));
Assert.Null(a.Literals);
var b = a.Parameters;
Assert.Collection(
b.Matches,
e => Assert.Same(endpoint1, e),
e => Assert.Same(endpoint2, e));
Assert.Null(b.Literals);
Assert.Null(b.Parameters);
Assert.NotNull(b.CatchAll);
var catchAll = b.CatchAll;
Assert.Same(endpoint2, Assert.Single(catchAll.Matches));
Assert.Null(catchAll.Literals);
Assert.Same(catchAll, catchAll.Parameters);
Assert.Same(catchAll, catchAll.CatchAll);
}
// Regression test for https://github.com/dotnet/aspnetcore/issues/16579
[Fact]
public void BuildDfaTree_MultipleEndpoint_ParameterAndCatchAll_OnSameNode_Order2()
{
// Arrange
var builder = CreateDfaMatcherBuilder();
var endpoint1 = CreateEndpoint("a/{*b}", order: 0);
builder.AddEndpoint(endpoint1);
var endpoint2 = CreateEndpoint("a/{b}", order: 1);
builder.AddEndpoint(endpoint2);
// Act
var root = builder.BuildDfaTree();
// Assert
Assert.Null(root.Matches);
Assert.Null(root.Parameters);
var next = Assert.Single(root.Literals);
Assert.Equal("a", next.Key);
var a = next.Value;
Assert.Same(endpoint1, Assert.Single(a.Matches));
Assert.Null(a.Literals);
var b = a.Parameters;
Assert.Collection(
b.Matches,
e => Assert.Same(endpoint1, e),
e => Assert.Same(endpoint2, e));
Assert.Null(b.Literals);
Assert.Null(b.Parameters);
Assert.NotNull(b.CatchAll);
var catchAll = b.CatchAll;
Assert.Same(endpoint1, Assert.Single(catchAll.Matches));
Assert.Null(catchAll.Literals);
Assert.Same(catchAll, catchAll.Parameters);
Assert.Same(catchAll, catchAll.CatchAll);
}
// Regression test for https://github.com/dotnet/aspnetcore/issues/18677
[Fact]
public void BuildDfaTree_MultipleEndpoint_CatchAllWithHigherPrecedenceThanParameter_Order1()
{
// Arrange
var builder = CreateDfaMatcherBuilder();
var endpoint1 = CreateEndpoint("{a}/{b}", order: 0);
builder.AddEndpoint(endpoint1);
var endpoint2 = CreateEndpoint("a/{*b}", order: 1);
builder.AddEndpoint(endpoint2);
// Act
var root = builder.BuildDfaTree();
// Assert
Assert.Null(root.Matches);
var next = Assert.Single(root.Literals);
Assert.Equal("a", next.Key);
var a1 = next.Value;
Assert.Same(endpoint2, Assert.Single(a1.Matches));
Assert.Null(a1.Literals);
var b1 = a1.Parameters;
Assert.Collection(
b1.Matches,
e => Assert.Same(endpoint1, e),
e => Assert.Same(endpoint2, e));
Assert.Null(b1.Literals);
Assert.Null(b1.Parameters);
Assert.NotNull(b1.CatchAll);
var catchAll1 = b1.CatchAll;
Assert.Same(endpoint2, Assert.Single(catchAll1.Matches));
Assert.Null(catchAll1.Literals);
Assert.Same(catchAll1, catchAll1.Parameters);
Assert.Same(catchAll1, catchAll1.CatchAll);
var a2 = root.Parameters;
Assert.Null(a2.Matches);
Assert.Null(a2.Literals);
var b2 = a2.Parameters;
Assert.Collection(
b2.Matches,
e => Assert.Same(endpoint1, e));
Assert.Null(b2.Literals);
Assert.Null(b2.Parameters);
Assert.Null(b2.CatchAll);
}
// Regression test for https://github.com/dotnet/aspnetcore/issues/18677
[Fact]
public void BuildDfaTree_MultipleEndpoint_CatchAllWithHigherPrecedenceThanParameter_Order2()
{
// Arrange
var builder = CreateDfaMatcherBuilder();
var endpoint1 = CreateEndpoint("a/{*b}", order: 0);
builder.AddEndpoint(endpoint1);
var endpoint2 = CreateEndpoint("{a}/{b}", order: 1);
builder.AddEndpoint(endpoint2);
// Act
var root = builder.BuildDfaTree();
// Assert
Assert.Null(root.Matches);
var next = Assert.Single(root.Literals);
Assert.Equal("a", next.Key);
var a1 = next.Value;
Assert.Same(endpoint1, Assert.Single(a1.Matches));
Assert.Null(a1.Literals);
var b1 = a1.Parameters;
Assert.Collection(
b1.Matches,
e => Assert.Same(endpoint1, e),
e => Assert.Same(endpoint2, e));
Assert.Null(b1.Literals);
Assert.Null(b1.Parameters);
Assert.NotNull(b1.CatchAll);
var catchAll1 = b1.CatchAll;
Assert.Same(endpoint1, Assert.Single(catchAll1.Matches));
Assert.Null(catchAll1.Literals);
Assert.Same(catchAll1, catchAll1.Parameters);
Assert.Same(catchAll1, catchAll1.CatchAll);
var a2 = root.Parameters;
Assert.Null(a2.Matches);
Assert.Null(a2.Literals);
var b2 = a2.Parameters;
Assert.Collection(
b2.Matches,
e => Assert.Same(endpoint2, e));
Assert.Null(b2.Literals);
Assert.Null(b2.Parameters);
Assert.Null(b2.CatchAll);
}
[Fact]
public void BuildDfaTree_WithPolicies()
{
@ -729,6 +923,48 @@ namespace Microsoft.AspNetCore.Routing.Matching
Assert.Null(a.PolicyEdges);
}
// Verifies that we sort the endpoints before calling into policies.
//
// The builder uses a different sort order when building the tree, vs when building the policy nodes. Policy
// nodes should see an "absolute" order.
[Fact]
public void BuildDfaTree_WithPolicies_SortedAccordingToScore()
{
// Arrange
//
// These cases where chosen where the absolute order incontrolled explicitly by setting .Order, but
// the precedence of segments is different, so these will be sorted into different orders when building
// the tree.
var policies = new MatcherPolicy[]
{
new TestMetadata1MatcherPolicy(),
new TestMetadata2MatcherPolicy(),
};
var builder = CreateDfaMatcherBuilder(policies);
((TestMetadata1MatcherPolicy)policies[0]).OnGetEdges = VerifyOrder;
((TestMetadata2MatcherPolicy)policies[1]).OnGetEdges = VerifyOrder;
var endpoint1 = CreateEndpoint("/a/{**b}", order: -1, metadata: new object[] { new TestMetadata1(0), new TestMetadata2(true), });
builder.AddEndpoint(endpoint1);
var endpoint2 = CreateEndpoint("/a/{b}/{**c}", order: 0, metadata: new object[] { new TestMetadata1(1), new TestMetadata2(true), });
builder.AddEndpoint(endpoint2);
var endpoint3 = CreateEndpoint("/a/b/{c}", order: 1, metadata: new object[] { new TestMetadata1(1), new TestMetadata2(false), });
builder.AddEndpoint(endpoint3);
// Act & Assert
_ = builder.BuildDfaTree();
void VerifyOrder(IReadOnlyList<Endpoint> endpoints)
{
// The list should already be in sorted order, every time build is called.
Assert.Equal(endpoints, endpoints.OrderBy(e => e, builder.Comparer));
}
}
[Fact]
public void BuildDfaTree_RequiredValues()
{
@ -1281,9 +1517,10 @@ namespace Microsoft.AspNetCore.Routing.Matching
object defaults = null,
object constraints = null,
object requiredValues = null,
int order = 0,
params object[] metadata)
{
return EndpointFactory.CreateRouteEndpoint(template, defaults, constraints, requiredValues, metadata: metadata);
return EndpointFactory.CreateRouteEndpoint(template, defaults, constraints, requiredValues, order: order, metadata: metadata);
}
private class TestMetadata1
@ -1306,6 +1543,8 @@ namespace Microsoft.AspNetCore.Routing.Matching
public IComparer<Endpoint> Comparer => EndpointMetadataComparer<TestMetadata1>.Default;
public Action<IReadOnlyList<Endpoint>> OnGetEdges { get; set; }
public bool AppliesToEndpoints(IReadOnlyList<Endpoint> endpoints)
{
return endpoints.Any(e => e.Metadata.GetMetadata<TestMetadata1>() != null);
@ -1318,6 +1557,7 @@ namespace Microsoft.AspNetCore.Routing.Matching
public IReadOnlyList<PolicyNodeEdge> GetEdges(IReadOnlyList<Endpoint> endpoints)
{
OnGetEdges?.Invoke(endpoints);
return endpoints
.GroupBy(e => e.Metadata.GetMetadata<TestMetadata1>().State)
.Select(g => new PolicyNodeEdge(g.Key, g.ToArray()))
@ -1345,6 +1585,9 @@ namespace Microsoft.AspNetCore.Routing.Matching
public IComparer<Endpoint> Comparer => EndpointMetadataComparer<TestMetadata2>.Default;
public Action<IReadOnlyList<Endpoint>> OnGetEdges { get; set; }
public bool AppliesToEndpoints(IReadOnlyList<Endpoint> endpoints)
{
return endpoints.Any(e => e.Metadata.GetMetadata<TestMetadata2>() != null);
@ -1357,6 +1600,7 @@ namespace Microsoft.AspNetCore.Routing.Matching
public IReadOnlyList<PolicyNodeEdge> GetEdges(IReadOnlyList<Endpoint> endpoints)
{
OnGetEdges?.Invoke(endpoints);
return endpoints
.GroupBy(e => e.Metadata.GetMetadata<TestMetadata2>().State)
.Select(g => new PolicyNodeEdge(g.Key, g.ToArray()))

View File

@ -4,6 +4,7 @@
using System;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Xunit;
namespace Microsoft.AspNetCore.Routing.Matching
@ -442,5 +443,98 @@ namespace Microsoft.AspNetCore.Routing.Matching
// Assert
MatcherAssert.AssertMatch(httpContext, expected, ignoreValues: true);
}
// https://github.com/dotnet/aspnetcore/issues/16579
[Fact]
public virtual async Task Match_Regression_16579_Order1()
{
var endpoints = new RouteEndpoint[]
{
EndpointFactory.CreateRouteEndpoint(
"{controller}/folder/{*path}",
order: 0,
defaults: new { controller = "File", action = "Folder", },
requiredValues: new { controller = "File", }),
EndpointFactory.CreateRouteEndpoint(
"{controller}/{action}/{filename}",
order: 1,
defaults: new { controller = "File", action = "Index", },
requiredValues: new { controller = "File", action = "Index", }),
};
var expected = endpoints[0];
var matcher = CreateMatcher(endpoints);
var httpContext = CreateContext("/file/folder/abc/abc");
// Act
await matcher.MatchAsync(httpContext);
// Assert
MatcherAssert.AssertMatch(httpContext, expected, ignoreValues: true);
}
// https://github.com/dotnet/aspnetcore/issues/16579
[Fact]
public virtual async Task Match_Regression_16579_Order2()
{
var endpoints = new RouteEndpoint[]
{
EndpointFactory.CreateRouteEndpoint(
"{controller}/{action}/{filename}",
order: 0,
defaults: new { controller = "File", action = "Index", },
requiredValues: new { controller = "File", action = "Index", }),
EndpointFactory.CreateRouteEndpoint(
"{controller}/folder/{*path}",
order: 1,
defaults: new { controller = "File", action = "Folder", },
requiredValues: new { controller = "File", }),
};
var expected = endpoints[1];
var matcher = CreateMatcher(endpoints);
var httpContext = CreateContext("/file/folder/abc/abc");
// Act
await matcher.MatchAsync(httpContext);
// Assert
MatcherAssert.AssertMatch(httpContext, expected, ignoreValues: true);
}
// https://github.com/dotnet/aspnetcore/issues/18677
[Theory]
[InlineData("/middleware", 1)]
[InlineData("/middleware/test", 1)]
[InlineData("/middleware/test1/test2", 1)]
[InlineData("/bill/boga", 0)]
public virtual async Task Match_Regression_18677(string path, int endpointIndex)
{
var endpoints = new RouteEndpoint[]
{
EndpointFactory.CreateRouteEndpoint(
"{firstName}/{lastName}",
order: 0,
defaults: new { controller = "TestRoute", action = "Index", }),
EndpointFactory.CreateRouteEndpoint(
"middleware/{**_}",
order: 0),
};
var expected = endpoints[endpointIndex];
var matcher = CreateMatcher(endpoints);
var httpContext = CreateContext(path);
// Act
await matcher.MatchAsync(httpContext);
// Assert
MatcherAssert.AssertMatch(httpContext, expected, ignoreValues: true);
}
}
}

View File

@ -77,6 +77,8 @@ namespace Microsoft.AspNetCore.WebUtilities
[System.Diagnostics.DebuggerStepThroughAttribute]
public override System.Threading.Tasks.ValueTask DisposeAsync() { throw null; }
[System.Diagnostics.DebuggerStepThroughAttribute]
public System.Threading.Tasks.Task DrainBufferAsync(System.IO.Pipelines.PipeWriter destination, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; }
[System.Diagnostics.DebuggerStepThroughAttribute]
public System.Threading.Tasks.Task DrainBufferAsync(System.IO.Stream destination, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; }
public override void Flush() { }
public override System.Threading.Tasks.Task FlushAsync(System.Threading.CancellationToken cancellationToken) { throw null; }

View File

@ -5,6 +5,8 @@ using System;
using System.Buffers;
using System.Diagnostics;
using System.IO;
using System.IO.Pipelines;
using System.Security.Cryptography;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Internal;
@ -184,9 +186,31 @@ namespace Microsoft.AspNetCore.WebUtilities
// unspooled content. Copy the FileStream content first when available.
if (FileStream != null)
{
FileStream.Position = 0;
await FileStream.CopyToAsync(destination, cancellationToken);
// We make a new stream for async reads from disk and async writes to the destination
await using var readStream = new FileStream(FileStream.Name, FileMode.Open, FileAccess.Read, FileShare.Delete | FileShare.ReadWrite, bufferSize: 1, useAsync: true);
await readStream.CopyToAsync(destination, cancellationToken);
// This is created with delete on close
await FileStream.DisposeAsync();
FileStream = null;
}
await PagedByteBuffer.MoveToAsync(destination, cancellationToken);
}
public async Task DrainBufferAsync(PipeWriter destination, CancellationToken cancellationToken = default)
{
// When not null, FileStream always has "older" spooled content. The PagedByteBuffer always has "newer"
// unspooled content. Copy the FileStream content first when available.
if (FileStream != null)
{
// We make a new stream for async reads from disk and async writes to the destination
await using var readStream = new FileStream(FileStream.Name, FileMode.Open, FileAccess.Read, FileShare.Delete | FileShare.ReadWrite, bufferSize: 1, useAsync: true);
await readStream.CopyToAsync(destination, cancellationToken);
// This is created with delete on close
await FileStream.DisposeAsync();
FileStream = null;
}
@ -227,10 +251,10 @@ namespace Microsoft.AspNetCore.WebUtilities
FileStream = new FileStream(
tempFileName,
FileMode.Create,
FileAccess.ReadWrite,
FileShare.Delete,
FileAccess.Write,
FileShare.Delete | FileShare.ReadWrite,
bufferSize: 1,
FileOptions.Asynchronous | FileOptions.SequentialScan | FileOptions.DeleteOnClose);
FileOptions.SequentialScan | FileOptions.DeleteOnClose);
}
}

View File

@ -5,6 +5,7 @@ using System;
using System.Buffers;
using System.Collections.Generic;
using System.IO;
using System.IO.Pipelines;
using System.Threading;
using System.Threading.Tasks;
@ -84,6 +85,23 @@ namespace Microsoft.AspNetCore.WebUtilities
ClearBuffers();
}
public async Task MoveToAsync(PipeWriter writer, CancellationToken cancellationToken)
{
ThrowIfDisposed();
for (var i = 0; i < Pages.Count; i++)
{
var page = Pages[i];
var length = (i == Pages.Count - 1) ?
_currentPageIndex :
page.Length;
await writer.WriteAsync(page.AsMemory(0, length), cancellationToken);
}
ClearBuffers();
}
public async Task MoveToAsync(Stream stream, CancellationToken cancellationToken)
{
ThrowIfDisposed();

View File

@ -7,6 +7,7 @@ using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Extensions.Configuration;
using Xunit;
namespace Microsoft.AspNetCore.WebUtilities
@ -383,9 +384,9 @@ namespace Microsoft.AspNetCore.WebUtilities
private static byte[] ReadFileContent(FileStream fileStream)
{
fileStream.Position = 0;
var fs = new FileStream(fileStream.Name, FileMode.Open, FileAccess.Read, FileShare.Delete | FileShare.ReadWrite);
using var memoryStream = new MemoryStream();
fileStream.CopyTo(memoryStream);
fs.CopyTo(memoryStream);
return memoryStream.ToArray();
}

View File

@ -1,6 +1,6 @@
{
"ConnectionStrings": {
"DefaultConnection": "DataSource=app.db"
"DefaultConnection": "DataSource=app.db;Cache=Shared"
},
"IdentityServer": {
"Clients": {

View File

@ -134,7 +134,7 @@
<comment>Error for duplicate roles</comment>
</data>
<data name="DuplicateUserName" xml:space="preserve">
<value>User name '{0}' is already taken.</value>
<value>Username '{0}' is already taken.</value>
<comment>Error for duplicate user names</comment>
</data>
<data name="InvalidEmail" xml:space="preserve">
@ -162,7 +162,7 @@
<comment>Error when a token is not recognized</comment>
</data>
<data name="InvalidUserName" xml:space="preserve">
<value>User name '{0}' is invalid, can only contain letters or digits.</value>
<value>Username '{0}' is invalid, can only contain letters or digits.</value>
<comment>User names can only contain letters or digits</comment>
</data>
<data name="LoginAlreadyAssociated" xml:space="preserve">
@ -317,4 +317,4 @@
<value>No IPersonalDataProtector service was registered, this is required when ProtectPersonalData = true.</value>
<comment>Error when there is no IPersonalDataProtector</comment>
</data>
</root>
</root>

View File

@ -3,10 +3,10 @@
<PropertyGroup>
<Description>Shared test suite for Asp.Net Identity Core store implementations.</Description>
<TargetFramework>$(DefaultNetCoreTargetFramework)</TargetFramework>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<GenerateDocumentationFile>false</GenerateDocumentationFile>
<PackageTags>aspnetcore;identity;membership</PackageTags>
<IsTestProject>false</IsTestProject>
<IsPackable>true</IsPackable>
<IsPackable>false</IsPackable>
<HasReferenceAssembly>false</HasReferenceAssembly>
</PropertyGroup>
@ -15,6 +15,7 @@
<Reference Include="Microsoft.Extensions.Configuration" />
<Reference Include="Microsoft.Extensions.DependencyInjection" />
<Reference Include="Microsoft.Extensions.Logging" />
<Reference Include="Microsoft.AspNetCore.Testing" />
<Reference Include="xunit.assert" />
<Reference Include="xunit.extensibility.core" />
<Reference Include="xunit.analyzers" PrivateAssets="All" />

View File

@ -7,6 +7,7 @@ using System.Linq;
using System.Linq.Expressions;
using System.Security.Claims;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Testing;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Xunit;
@ -1469,6 +1470,7 @@ namespace Microsoft.AspNetCore.Identity.Test
/// </summary>
/// <returns>Task</returns>
[Fact]
[QuarantinedTest]
public async Task CanVerifyPhoneNumber()
{
var manager = CreateManager();

View File

@ -63,11 +63,11 @@
<script src="~/Identity/js/site.js" asp-append-version="true"></script>
</environment>
<environment exclude="Development">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"
asp-fallback-src="~/Identity/lib/jquery/dist/jquery.min.js"
asp-fallback-test="window.jQuery"
crossorigin="anonymous"
integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=">
integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=">
</script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"
asp-fallback-src="~/Identity/lib/bootstrap/dist/js/bootstrap.min.js"

View File

@ -74,11 +74,11 @@
<script src="~/Identity/js/site.js" asp-append-version="true"></script>
</environment>
<environment exclude="Development">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"
asp-fallback-src="~/Identity/lib/jquery/dist/jquery.min.js"
asp-fallback-test="window.jQuery"
crossorigin="anonymous"
integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=">
integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=">
</script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.bundle.min.js"
asp-fallback-src="~/Identity/lib/bootstrap/dist/js/bootstrap.bundle.min.js"

View File

@ -152,7 +152,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
License notice for jQuery 3.3.1
License notice for jQuery 3.5.1
-------------------------------
Copyright JS Foundation and other contributors, https://js.foundation/

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -56,11 +56,11 @@
<script src="~/lib/bootstrap/dist/js/bootstrap.bundle.js"></script>
</environment>
<environment exclude="Development">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"
asp-fallback-src="~/lib/jquery/dist/jquery.min.js"
asp-fallback-test="window.jQuery"
crossorigin="anonymous"
integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=">
integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=">
</script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.bundle.min.js"
asp-fallback-src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -46,7 +46,7 @@ namespace MusicStore
// Add EF services to the services container
// Add EF services to the services container
services.AddDbContext<MusicStoreContext>(options =>
options.UseSqlite("Data Source=MusicStore.db"));
options.UseSqlite("Data Source=MusicStore.db;Cache=Shared"));
// Add Identity services to the services container
services.AddIdentity<ApplicationUser, IdentityRole>()

View File

@ -46,7 +46,7 @@ namespace MusicStore
// Add EF services to the services container
services.AddDbContext<MusicStoreContext>(options =>
options.UseSqlite("Data Source=MusicStore.db"));
options.UseSqlite("Data Source=MusicStore.db;Cache=Shared"));
// Add Identity services to the services container
services.AddIdentity<ApplicationUser, IdentityRole>()

View File

@ -3,6 +3,6 @@
/// <reference path="../wwwroot/Scripts/jquery.signalR-2.0.1.js" />
/// <reference path="../wwwroot/Scripts/jquery.validate.js" />
/// <reference path="../wwwroot/Scripts/jquery.validate.unobtrusive.js" />
/// <reference path="../wwwroot/Scripts/jquery-2.0.3.js" />
/// <reference path="../wwwroot/Scripts/jquery-3.5.1.js" />
/// <reference path="../wwwroot/Scripts/modernizr-2.6.2.js" />
/// <reference path="../wwwroot/Scripts/respond.js" />

View File

@ -39,7 +39,7 @@ namespace MusicStore
// Add EF services to the services container
services.AddDbContext<MusicStoreContext>(options =>
options.UseSqlite("Data Source=MusicStore.db"));
options.UseSqlite("Data Source=MusicStore.db;Cache=Shared"));
// Add Identity services to the services container
services.AddIdentity<ApplicationUser, IdentityRole>()

View File

@ -57,7 +57,7 @@ namespace MusicStore
// Add EF services to the services container
services.AddDbContext<MusicStoreContext>(options =>
options.UseSqlite("Data Source=MusicStore.db"));
options.UseSqlite("Data Source=MusicStore.db;Cache=Shared"));
// Add Identity services to the services container
services.AddIdentity<ApplicationUser, IdentityRole>()

Some files were not shown because too many files have changed in this diff Show More