diff --git a/.azure/pipelines/ci.yml b/.azure/pipelines/ci.yml
index d3d8637c4108..b90e79fbb59b 100644
--- a/.azure/pipelines/ci.yml
+++ b/.azure/pipelines/ci.yml
@@ -316,7 +316,7 @@ stages:
displayName: Build Arm64 Installers
# A few files must also go to the VS package feed.
- - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
+ - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest'), ne(variables['PostBuildSign'], 'true')) }}:
- task: NuGetCommand@2
displayName: Push Visual Studio packages
inputs:
@@ -525,6 +525,40 @@ stages:
parameters:
inputName: Linux_musl_x64
+ # Build Linux Musl ARM
+ - template: jobs/default-build.yml
+ parameters:
+ jobName: Linux_musl_arm_build
+ jobDisplayName: "Build: Linux Musl ARM"
+ agentOs: Linux
+ useHostedUbuntu: false
+ container: mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-18.04-cross-arm-alpine-20200827125937-14441ae
+ buildScript: ./build.sh
+ buildArgs:
+ --arch arm
+ --os-name linux-musl
+ --pack
+ --all
+ --no-build-nodejs
+ --no-build-java
+ -p:OnlyPackPlatformSpecificPackages=true
+ -p:AssetManifestFileName=aspnetcore-Linux_musl_arm.xml
+ $(_BuildArgs)
+ $(_PublishArgs)
+ $(_InternalRuntimeDownloadArgs)
+ installNodeJs: false
+ installJdk: false
+ artifacts:
+ - name: Linux_musl_arm_Logs
+ path: artifacts/log/
+ publishOnError: true
+ includeForks: true
+ - name: Linux_musl_arm_Packages
+ path: artifacts/packages/
+ - template: jobs/codesign-xplat.yml
+ parameters:
+ inputName: Linux_musl_arm
+
# Build Linux Musl ARM64
- template: jobs/default-build.yml
parameters:
@@ -532,7 +566,7 @@ stages:
jobDisplayName: "Build: Linux Musl ARM64"
agentOs: Linux
useHostedUbuntu: false
- container: mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-16.04-cross-arm64-alpine-20200413125008-406629a
+ container: mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-18.04-cross-arm64-alpine-20210311173921-b2c2436
buildScript: ./build.sh
buildArgs:
--arch arm64
@@ -646,7 +680,7 @@ stages:
parameters:
condition: ne(variables['SkipTests'], 'true')
jobName: Linux_Test
- jobDisplayName: "Test: Ubuntu 16.04 x64"
+ jobDisplayName: "Test: Ubuntu 18.04 x64"
agentOs: Linux
isTestingJob: true
useHostedUbuntu: false
@@ -675,13 +709,15 @@ stages:
timeoutInMinutes: 240
steps:
# Build the shared framework
- - script: ./build.cmd -ci -nobl -all -pack -arch x64 /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log $(_InternalRuntimeDownloadArgs)
+ - script: ./build.cmd -ci -nobl -all -pack -arch x64
+ /p:CrossgenOutput=false /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log $(_InternalRuntimeDownloadArgs)
displayName: Build shared fx
- - script: ./build.cmd -ci -nobl -noBuildRepoTasks -restore -noBuild -noBuildNative -projects src/Grpc/**/*.csproj $(_InternalRuntimeDownloadArgs)
+ - script: ./build.cmd -ci -nobl -noBuildRepoTasks -restore -noBuild -noBuildNative -projects src/Grpc/**/*.csproj
+ /p:CrossgenOutput=false /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log $(_InternalRuntimeDownloadArgs)
displayName: Restore interop projects
- script: ./build.cmd -ci -nobl -noBuildRepoTasks -noRestore -test -all -noBuildNative -projects eng\helix\helix.proj
- /p:IsRequiredCheck=true /p:IsHelixJob=true /p:BuildInteropProjects=true /p:RunTemplateTests=true $(_InternalRuntimeDownloadArgs)
- /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log
+ /p:IsRequiredCheck=true /p:IsHelixJob=true /p:BuildInteropProjects=true /p:RunTemplateTests=true
+ /p:CrossgenOutput=false /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log $(_InternalRuntimeDownloadArgs)
displayName: Run build.cmd helix target
env:
HelixApiAccessToken: $(HelixApiAccessToken) # Needed for internal queues
@@ -698,12 +734,15 @@ stages:
displayName: 'Test: Linux Source Build'
container: centos:7
pool:
- vmImage: 'ubuntu-16.04'
+ vmImage: 'ubuntu-18.04'
variables:
DotNetCoreSdkDir: $(Agent.ToolsDirectory)/dotnet
# This isn't needed in the path because build does not need to _use_ global tools.
DOTNET_CLI_HOME: $(System.DefaultWorkingDirectory)
DOTNET_SYSTEM_GLOBALIZATION_INVARIANT: true
+ LC_ALL: 'en_US.UTF-8'
+ LANG: 'en_US.UTF-8'
+ LANGUAGE: 'en_US.UTF-8'
steps:
- script: |
source eng/common/native/common-library.sh
@@ -756,6 +795,7 @@ stages:
- CodeSign_Xplat_Linux_arm
- CodeSign_Xplat_Linux_arm64
- CodeSign_Xplat_Linux_musl_x64
+ - CodeSign_Xplat_Linux_musl_arm
- CodeSign_Xplat_Linux_musl_arm64
# In addition to the dependencies above, ensure the build was successful overall.
- Source_Build
diff --git a/.azure/pipelines/helix-matrix.yml b/.azure/pipelines/helix-matrix.yml
index 6e491364008b..eec20d557a77 100644
--- a/.azure/pipelines/helix-matrix.yml
+++ b/.azure/pipelines/helix-matrix.yml
@@ -2,11 +2,17 @@
pr: none
trigger: none
schedules:
+# Cron timezone is UTC.
- cron: "0 */12 * * *"
branches:
include:
- master
always: true
+- cron: "0 9 * * *"
+ branches:
+ include:
+ - release/5.0
+ always: false
variables:
- ${{ if ne(variables['System.TeamProject'], 'internal') }}:
@@ -27,12 +33,14 @@ jobs:
steps:
# Build the shared framework
- script: ./build.cmd -ci -nobl -all -pack -arch x64 /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log
+ /p:CrossgenOutput=false /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log
displayName: Build shared fx
- script: ./build.cmd -ci -nobl -noBuildRepoTasks -restore -noBuild -noBuildNative -projects src/Grpc/**/*.csproj
+ /p:CrossgenOutput=false /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log
displayName: Restore interop projects
- script: .\build.cmd -ci -nobl -noBuildRepoTasks -NoRestore -test -all -noBuildNative -projects eng\helix\helix.proj
/p:IsHelixDaily=true /p:IsRequiredCheck=true /p:IsHelixJob=true /p:BuildInteropProjects=true
- /p:RunTemplateTests=true /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log
+ /p:RunTemplateTests=true /p:CrossgenOutput=false /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log
displayName: Run build.cmd helix target
env:
HelixApiAccessToken: $(HelixApiAccessToken) # Needed for internal queues
diff --git a/.azure/pipelines/jobs/default-build.yml b/.azure/pipelines/jobs/default-build.yml
index 8383409fe902..9996b79ef7ef 100644
--- a/.azure/pipelines/jobs/default-build.yml
+++ b/.azure/pipelines/jobs/default-build.yml
@@ -95,14 +95,14 @@ jobs:
vmImage: macOS-10.14
${{ if eq(parameters.agentOs, 'Linux') }}:
${{ if eq(parameters.useHostedUbuntu, true) }}:
- vmImage: ubuntu-16.04
+ vmImage: ubuntu-18.04
${{ if eq(parameters.useHostedUbuntu, false) }}:
${{ if eq(variables['System.TeamProject'], 'public') }}:
name: NetCorePublic-Pool
- queue: BuildPool.Ubuntu.1604.Amd64.Open
+ queue: BuildPool.Ubuntu.1804.Amd64.Open
${{ if eq(variables['System.TeamProject'], 'internal') }}:
name: NetCoreInternal-Pool
- queue: BuildPool.Ubuntu.1604.Amd64
+ queue: BuildPool.Ubuntu.1804.Amd64
${{ if eq(parameters.agentOs, 'Windows') }}:
${{ if eq(variables['System.TeamProject'], 'public') }}:
name: NetCorePublic-Pool
@@ -139,6 +139,9 @@ jobs:
- _SignType: real
- ${{ if in(variables['Build.Reason'], 'PullRequest') }}:
- _SignType: test
+ - LC_ALL: 'en_US.UTF-8'
+ - LANG: 'en_US.UTF-8'
+ - LANGUAGE: 'en_US.UTF-8'
steps:
- ${{ if ne(parameters.agentOs, 'Windows') }}:
- script: df -h
diff --git a/.azure/pipelines/quarantined-pr.yml b/.azure/pipelines/quarantined-pr.yml
index b90a1793e9e1..5b89191bd868 100644
--- a/.azure/pipelines/quarantined-pr.yml
+++ b/.azure/pipelines/quarantined-pr.yml
@@ -4,6 +4,14 @@ trigger:
branches:
include:
- master
+ - release/5.0
+
+pr:
+ autoCancel: true
+ branches:
+ include:
+ - master
+ - release/5.0
schedules:
- cron: "0 */4 * * *"
@@ -31,13 +39,16 @@ jobs:
timeoutInMinutes: 120
steps:
# Build the shared framework
- - script: ./build.cmd -ci -nobl -all -pack -arch x64 /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log
+ - script: ./build.cmd -ci -nobl -all -pack -arch x64
+ /p:CrossgenOutput=false /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log
displayName: Build shared fx
- script: ./build.cmd -ci -nobl -noBuildRepoTasks -restore -noBuild -noBuildNative -projects src/Grpc/**/*.csproj
+ /p:CrossgenOutput=false /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log
displayName: Restore interop projects
- script: ./build.cmd -ci -nobl -noBuildRepoTasks -noRestore -test -all -noBuildJava -noBuildNative
-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
+ /p:BuildInteropProjects=true /p:RunTemplateTests=true
+ /p:CrossgenOutput=false /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log
displayName: Run build.cmd helix target
continueOnError: true
env:
@@ -117,7 +128,7 @@ jobs:
- template: jobs/default-build.yml
parameters:
jobName: Linux_Quarantined_Test
- jobDisplayName: "Tests: Ubuntu 16.04 x64"
+ jobDisplayName: "Tests: Ubuntu 18.04 x64"
agentOs: Linux
timeoutInMinutes: 60
isTestingJob: true
diff --git a/.azure/pipelines/quarantined-tests.yml b/.azure/pipelines/quarantined-tests.yml
index 86a21a3dd8b9..02e3f9839276 100644
--- a/.azure/pipelines/quarantined-tests.yml
+++ b/.azure/pipelines/quarantined-tests.yml
@@ -28,13 +28,16 @@ jobs:
timeoutInMinutes: 480
steps:
# Build the shared framework
- - script: ./build.cmd -ci -nobl -all -pack -arch x64 /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log
+ - script: ./build.cmd -ci -nobl -all -pack -arch x64
+ /p:CrossgenOutput=false /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log
displayName: Build shared fx
- script: ./build.cmd -ci -nobl -noBuildRepoTasks -restore -noBuild -noBuildNative -projects src/Grpc/**/*.csproj
+ /p:CrossgenOutput=false /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log
displayName: Restore interop projects
- script: ./build.cmd -ci -nobl -noBuildRepoTasks -noRestore -test -all -noBuildJava -noBuildNative
- -projects eng\helix\helix.proj /p:IsHelixDaily=true /p:RunQuarantinedTests=true /p:IsRequiredCheck=true /p:IsHelixJob=true
- /p:BuildInteropProjects=true /p:RunTemplateTests=true /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log
+ -projects eng\helix\helix.proj /p:IsHelixDaily=true /p:RunQuarantinedTests=true /p:IsRequiredCheck=true
+ /p:IsHelixJob=true /p:BuildInteropProjects=true /p:RunTemplateTests=true
+ /p:CrossgenOutput=false /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log
displayName: Run build.cmd helix target
continueOnError: true
env:
diff --git a/.config/CredScanSuppressions.json b/.config/CredScanSuppressions.json
index b406aebd032b..b3e185cf8d7a 100644
--- a/.config/CredScanSuppressions.json
+++ b/.config/CredScanSuppressions.json
@@ -1,6 +1,10 @@
{
"tool": "Credential Scanner",
"suppressions": [
+ {
+ "placeholder": "aspnetcore",
+ "_justification": "This is a fake password used in test code."
+ },
{
"placeholder": "password",
"_justification": "This is a fake password used in test code."
@@ -9,6 +13,10 @@
"placeholder": "newpassword",
"_justification": "This is a fake password used in test code."
},
+ {
+ "placeholder": "testpassword",
+ "_justification": "This is a fake password used in test code."
+ },
{
"placeholder": "AAABAgMEBQYHCAkKCwwNDg+ukCEMDf0yyQ29NYubggE=",
"_justification": "This is a fake password hash used in test code."
@@ -25,6 +33,98 @@
"file": "\\src\\Servers\\Kestrel\\shared\\test\\TestCertificates\\testCert.pfx",
"_justification": "Legitimate UT certificate file with private key"
},
+ {
+ "file": "\\src\\DataProtection\\DataProtection\\test\\TestFiles\\TestCert1.pfx",
+ "_justification": "Legitimate UT certificate file with private key"
+ },
+ {
+ "file": "\\src\\DataProtection\\DataProtection\\test\\TestFiles\\TestCert2.pfx",
+ "_justification": "Legitimate UT certificate file with private key"
+ },
+ {
+ "file": "\\src\\DataProtection\\Extensions\\test\\TestFiles\\TestCert.pfx",
+ "_justification": "Legitimate UT certificate file with private key"
+ },
+ {
+ "file": "\\src\\DataProtection\\Extensions\\test\\TestFiles\\TestCert2.pfx",
+ "_justification": "Legitimate UT certificate file with private key"
+ },
+ {
+ "file": "\\src\\DataProtection\\Extensions\\test\\TestFiles\\TestCert3.pfx",
+ "_justification": "Legitimate UT certificate file with private key"
+ },
+ {
+ "file": "\\src\\DataProtection\\Extensions\\test\\TestFiles\\TestCert3WithoutPrivateKey.pfx",
+ "_justification": "Legitimate UT certificate file without private key"
+ },
+ {
+ "file": "\\src\\DataProtection\\Extensions\\test\\TestFiles\\TestCertWithoutPrivateKey.pfx",
+ "_justification": "Legitimate UT certificate file without private key"
+ },
+ {
+ "file": "\\src\\DefaultBuilder\\test\\Microsoft.AspNetCore.FunctionalTests\\testCert.pfx",
+ "_justification": "Legitimate UT certificate file with private key"
+ },
+ {
+ "file": "\\src\\Identity\\ApiAuthorization.IdentityServer\\test\\current.pfx",
+ "_justification": "Legitimate UT certificate file with private key"
+ },
+ {
+ "file": "\\src\\Identity\\ApiAuthorization.IdentityServer\\test\\expired.pfx",
+ "_justification": "Legitimate UT certificate file with private key"
+ },
+ {
+ "file": "\\src\\Identity\\ApiAuthorization.IdentityServer\\test\\future.pfx",
+ "_justification": "Legitimate UT certificate file with private key"
+ },
+ {
+ "file": "\\src\\Identity\\ApiAuthorization.IdentityServer\\test\\test.pfx",
+ "_justification": "Legitimate UT certificate file with private key"
+ },
+ {
+ "file": "\\src\\Middleware\\WebSockets\\test\\ConformanceTests\\AutobahnTestApp\\TestResources\\testCert.pfx",
+ "_justification": "Legitimate UT certificate file with private key"
+ },
+ {
+ "file": "\\src\\Security\\Authentication\\Negotiate\\test\\Negotiate.FunctionalTest\\negotiateAuthCert.pfx",
+ "_justification": "Legitimate UT certificate file with private key"
+ },
+ {
+ "file": "\\src\\Servers\\IIS\\tools\\TestCert.pfx",
+ "_justification": "Legitimate UT certificate file with private key"
+ },
+ {
+ "file": "\\src\\Servers\\Kestrel\\shared\\test\\TestCertificates\\aspnetdevcert.pfx",
+ "_justification": "Legitimate UT certificate file with private key"
+ },
+ {
+ "file": "\\src\\Servers\\Kestrel\\shared\\test\\TestCertificates\\eku.client.pfx",
+ "_justification": "Legitimate UT certificate file with private key"
+ },
+ {
+ "file": "\\src\\Servers\\Kestrel\\shared\\test\\TestCertificates\\eku.code_signing.pfx",
+ "_justification": "Legitimate UT certificate file with private key"
+ },
+ {
+ "file": "\\src\\Servers\\Kestrel\\shared\\test\\TestCertificates\\eku.multiple_usages.pfx",
+ "_justification": "Legitimate UT certificate file with private key"
+ },
+ {
+ "file": "\\src\\Servers\\Kestrel\\shared\\test\\TestCertificates\\eku.server.pfx",
+ "_justification": "Legitimate UT certificate file with private key"
+ },
+ {
+ "file": "\\src\\Servers\\Kestrel\\shared\\test\\TestCertificates\\no_extensions.pfx",
+ "_justification": "Legitimate UT certificate file with private key"
+ },
+ {
+ "file": "\\src\\SignalR\\clients\\ts\\FunctionalTests\\testCert.pfx",
+ "_justification": "Legitimate UT certificate file with private key"
+ },
+ {
+ "file": "\\src\\SignalR\\clients\\ts\\FunctionalTests\\testCertECC.pfx",
+ "_justification": "Legitimate UT certificate file with private key"
+ },
{
"file": "\\src\\Servers\\Kestrel\\shared\\test\\TestCertificates\\https-aspnet.key",
"_justification": "Legitimate key file used for testing"
@@ -52,6 +152,10 @@
{
"file": "\\src\\Servers\\Kestrel\\shared\\test\\TestCertificates\\https-rsa.key",
"_justification": "Legitimate key file used for testing"
+ },
+ {
+ "file": "\\src\\SignalR\\clients\\ts\\FunctionalTests\\node_modules\\https-proxy-agent\\node_modules\\agent-base\\test\\ssl-cert-snakeoil.key",
+ "_justification": "Legitimate key file used for testing"
}
]
}
diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json
index c4cd22ce9f97..cbd1980934f5 100644
--- a/.config/dotnet-tools.json
+++ b/.config/dotnet-tools.json
@@ -9,4 +9,4 @@
]
}
}
-}
\ No newline at end of file
+}
diff --git a/.gitmodules b/.gitmodules
index a64d4061292a..596f3ee4d908 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,7 +1,8 @@
-[submodule "googletest"]
+[submodule "src/submodules/googletest"]
path = src/submodules/googletest
url = https://github.com/google/googletest
-
+ branch = master
[submodule "src/submodules/MessagePack-CSharp"]
path = src/submodules/MessagePack-CSharp
url = https://github.com/aspnet/MessagePack-CSharp.git
+ branch = release/5.0
diff --git a/AspNetCore.sln b/AspNetCore.sln
index ceb029889f9e..698593bb3fa4 100644
--- a/AspNetCore.sln
+++ b/AspNetCore.sln
@@ -861,18 +861,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.WebSoc
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.ResponseCaching.Microbenchmarks", "src\Middleware\perf\ResponseCaching.Microbenchmarks\Microsoft.AspNetCore.ResponseCaching.Microbenchmarks.csproj", "{8A745E35-8098-4EB4-AC55-587B9F0DC4BE}"
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MusicStore", "MusicStore", "{884AED21-7931-42A3-B08A-E58F7B0D6E7F}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{8DA88110-5A13-41A9-9F9D-674D921EB442}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MusicStore", "src\MusicStore\samples\MusicStore\MusicStore.csproj", "{4BCF2228-159D-4547-8D54-CDD2252D076A}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{2D347127-3B13-47B1-84EC-770A9C1E11B0}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MusicStore.Test", "src\MusicStore\test\MusicStore.Test\MusicStore.Test.csproj", "{A7802482-55BA-4D95-BE79-8A601131F527}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MusicStore.E2ETests", "src\MusicStore\test\MusicStore.E2ETests\MusicStore.E2ETests.csproj", "{81947277-035F-41F6-A1D4-8EA362CB46D2}"
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MicrosoftAccount", "MicrosoftAccount", "{8C4006DF-FF48-46B6-A124-10B1EEAA266E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.MicrosoftAccount", "src\Security\Authentication\MicrosoftAccount\src\Microsoft.AspNetCore.Authentication.MicrosoftAccount.csproj", "{F5C54062-B19C-4291-A816-F1B5A167369A}"
@@ -1009,8 +997,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BlazorTemplates.Tests", "sr
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Framework", "Framework", "{A4C26078-B6D8-4FD8-87A6-7C15A3482038}"
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "App.Runtime", "App.Runtime", "{F1A6BA04-853E-43B5-B27E-54558603837B}"
-EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.App.Runtime", "src\Framework\App.Runtime\src\Microsoft.AspNetCore.App.Runtime.csproj", "{3163C56E-99BC-4BD1-8880-4F94A2407741}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.Test", "src\Razor\Razor\test\Microsoft.AspNetCore.Razor.Test.csproj", "{776BFCDC-8591-4E3D-BD0D-858A188A033D}"
@@ -1235,12 +1221,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.FilePr
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tools", "Tools", "{0B200A66-B809-4ED3-A790-CB1C2E80975E}"
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "dotnet-watch", "dotnet-watch", "{B6118E15-C37A-4B05-B4DF-97FE99790417}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "dotnet-watch", "src\Tools\dotnet-watch\src\dotnet-watch.csproj", "{D0ADA8EC-F431-43C8-A86E-FE6A1E906512}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "dotnet-watch.Tests", "src\Tools\dotnet-watch\test\dotnet-watch.Tests.csproj", "{95920BAA-46E6-44E6-A1AF-A23804F079D2}"
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "dotnet-dev-certs", "dotnet-dev-certs", "{A4EECF29-6E66-4E7F-B781-A169B0C2AB29}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "dotnet-dev-certs", "src\Tools\dotnet-dev-certs\src\dotnet-dev-certs.csproj", "{52433D20-35EA-48CC-BB4A-4DFE3023670B}"
@@ -1449,10 +1429,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RequestHandlerLib", "src\Se
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.ANCMSymbols", "src\Servers\IIS\AspNetCoreModuleV2\Symbols\Microsoft.AspNetCore.ANCMSymbols.csproj", "{7E268085-1046-4362-80CB-2977FF826DCA}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Watch.BrowserRefresh", "src\Tools\dotnet-watch\BrowserRefresh\src\Microsoft.AspNetCore.Watch.BrowserRefresh.csproj", "{A5CE25E9-89E1-4F2C-9B89-0C161707E700}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Watch.BrowserRefresh.Tests", "src\Tools\dotnet-watch\BrowserRefresh\test\Microsoft.AspNetCore.Watch.BrowserRefresh.Tests.csproj", "{E6A23627-8D63-4DF1-A4F2-8881172C1FE6}"
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "testassets", "testassets", "{7D2B0799-A634-42AC-AE77-5D167BA51389}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HostedInAspNet.Client", "src\Components\WebAssembly\testassets\HostedInAspNet.Client\HostedInAspNet.Client.csproj", "{9788C76F-658B-4441-88F8-22C6B86FAD27}"
@@ -1503,7 +1479,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.App.Un
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Localization", "Localization", "{3D34C81F-2CB5-459E-87E9-0CC04757A2A0}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GlobalizationWasmApp", "src\Components\test\testassets\GlobalizationWasmApp\GlobalizationWasmApp.csproj", "{04CFE286-6D32-41EF-8887-4B5F8086A365}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GlobalizationWasmApp", "src\Components\test\testassets\GlobalizationWasmApp\GlobalizationWasmApp.csproj", "{04CFE286-6D32-41EF-8887-4B5F8086A365}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Localization.Abstractions", "src\Localization\Abstractions\src\Microsoft.Extensions.Localization.Abstractions.csproj", "{FEF97646-9BC9-4D1B-A939-784D915C18A4}"
EndProject
@@ -1539,6 +1515,12 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sdk", "Sdk", "{E83B0BCC-A8E
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HostingStartup", "src\SiteExtensions\Sdk\HostingStartup\HostingStartup.csproj", "{5D6F99C5-D292-4459-B8BD-8E4AD42E1B21}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CustomBasePathApp", "src\Components\WebAssembly\testassets\CustomBasePathApp\CustomBasePathApp.csproj", "{E2461809-D2EA-436D-B5C3-8A9EE0A283B8}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "App.Ref", "App.Ref", "{9BAB79EC-E469-4EA4-9FDF-91A5944C28FD}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.App.Ref.Internal", "src\Framework\App.Ref.Internal\src\Microsoft.AspNetCore.App.Ref.Internal.csproj", "{E3993626-E5A9-440E-BA77-2A22823FAF52}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -4429,42 +4411,6 @@ Global
{8A745E35-8098-4EB4-AC55-587B9F0DC4BE}.Release|x64.Build.0 = Release|Any CPU
{8A745E35-8098-4EB4-AC55-587B9F0DC4BE}.Release|x86.ActiveCfg = Release|Any CPU
{8A745E35-8098-4EB4-AC55-587B9F0DC4BE}.Release|x86.Build.0 = Release|Any CPU
- {4BCF2228-159D-4547-8D54-CDD2252D076A}.Debug|Any CPU.ActiveCfg = Debug|x64
- {4BCF2228-159D-4547-8D54-CDD2252D076A}.Debug|Any CPU.Build.0 = Debug|x64
- {4BCF2228-159D-4547-8D54-CDD2252D076A}.Debug|x64.ActiveCfg = Debug|x64
- {4BCF2228-159D-4547-8D54-CDD2252D076A}.Debug|x64.Build.0 = Debug|x64
- {4BCF2228-159D-4547-8D54-CDD2252D076A}.Debug|x86.ActiveCfg = Debug|x86
- {4BCF2228-159D-4547-8D54-CDD2252D076A}.Debug|x86.Build.0 = Debug|x86
- {4BCF2228-159D-4547-8D54-CDD2252D076A}.Release|Any CPU.ActiveCfg = Release|x64
- {4BCF2228-159D-4547-8D54-CDD2252D076A}.Release|Any CPU.Build.0 = Release|x64
- {4BCF2228-159D-4547-8D54-CDD2252D076A}.Release|x64.ActiveCfg = Release|x64
- {4BCF2228-159D-4547-8D54-CDD2252D076A}.Release|x64.Build.0 = Release|x64
- {4BCF2228-159D-4547-8D54-CDD2252D076A}.Release|x86.ActiveCfg = Release|x86
- {4BCF2228-159D-4547-8D54-CDD2252D076A}.Release|x86.Build.0 = Release|x86
- {A7802482-55BA-4D95-BE79-8A601131F527}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {A7802482-55BA-4D95-BE79-8A601131F527}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {A7802482-55BA-4D95-BE79-8A601131F527}.Debug|x64.ActiveCfg = Debug|Any CPU
- {A7802482-55BA-4D95-BE79-8A601131F527}.Debug|x64.Build.0 = Debug|Any CPU
- {A7802482-55BA-4D95-BE79-8A601131F527}.Debug|x86.ActiveCfg = Debug|Any CPU
- {A7802482-55BA-4D95-BE79-8A601131F527}.Debug|x86.Build.0 = Debug|Any CPU
- {A7802482-55BA-4D95-BE79-8A601131F527}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {A7802482-55BA-4D95-BE79-8A601131F527}.Release|Any CPU.Build.0 = Release|Any CPU
- {A7802482-55BA-4D95-BE79-8A601131F527}.Release|x64.ActiveCfg = Release|Any CPU
- {A7802482-55BA-4D95-BE79-8A601131F527}.Release|x64.Build.0 = Release|Any CPU
- {A7802482-55BA-4D95-BE79-8A601131F527}.Release|x86.ActiveCfg = Release|Any CPU
- {A7802482-55BA-4D95-BE79-8A601131F527}.Release|x86.Build.0 = Release|Any CPU
- {81947277-035F-41F6-A1D4-8EA362CB46D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {81947277-035F-41F6-A1D4-8EA362CB46D2}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {81947277-035F-41F6-A1D4-8EA362CB46D2}.Debug|x64.ActiveCfg = Debug|Any CPU
- {81947277-035F-41F6-A1D4-8EA362CB46D2}.Debug|x64.Build.0 = Debug|Any CPU
- {81947277-035F-41F6-A1D4-8EA362CB46D2}.Debug|x86.ActiveCfg = Debug|Any CPU
- {81947277-035F-41F6-A1D4-8EA362CB46D2}.Debug|x86.Build.0 = Debug|Any CPU
- {81947277-035F-41F6-A1D4-8EA362CB46D2}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {81947277-035F-41F6-A1D4-8EA362CB46D2}.Release|Any CPU.Build.0 = Release|Any CPU
- {81947277-035F-41F6-A1D4-8EA362CB46D2}.Release|x64.ActiveCfg = Release|Any CPU
- {81947277-035F-41F6-A1D4-8EA362CB46D2}.Release|x64.Build.0 = Release|Any CPU
- {81947277-035F-41F6-A1D4-8EA362CB46D2}.Release|x86.ActiveCfg = Release|Any CPU
- {81947277-035F-41F6-A1D4-8EA362CB46D2}.Release|x86.Build.0 = Release|Any CPU
{F5C54062-B19C-4291-A816-F1B5A167369A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F5C54062-B19C-4291-A816-F1B5A167369A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F5C54062-B19C-4291-A816-F1B5A167369A}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -6049,30 +5995,6 @@ Global
{65EE0531-4533-407F-A9CA-2EBCDC444397}.Release|x64.Build.0 = Release|Any CPU
{65EE0531-4533-407F-A9CA-2EBCDC444397}.Release|x86.ActiveCfg = Release|Any CPU
{65EE0531-4533-407F-A9CA-2EBCDC444397}.Release|x86.Build.0 = Release|Any CPU
- {D0ADA8EC-F431-43C8-A86E-FE6A1E906512}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {D0ADA8EC-F431-43C8-A86E-FE6A1E906512}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {D0ADA8EC-F431-43C8-A86E-FE6A1E906512}.Debug|x64.ActiveCfg = Debug|Any CPU
- {D0ADA8EC-F431-43C8-A86E-FE6A1E906512}.Debug|x64.Build.0 = Debug|Any CPU
- {D0ADA8EC-F431-43C8-A86E-FE6A1E906512}.Debug|x86.ActiveCfg = Debug|Any CPU
- {D0ADA8EC-F431-43C8-A86E-FE6A1E906512}.Debug|x86.Build.0 = Debug|Any CPU
- {D0ADA8EC-F431-43C8-A86E-FE6A1E906512}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {D0ADA8EC-F431-43C8-A86E-FE6A1E906512}.Release|Any CPU.Build.0 = Release|Any CPU
- {D0ADA8EC-F431-43C8-A86E-FE6A1E906512}.Release|x64.ActiveCfg = Release|Any CPU
- {D0ADA8EC-F431-43C8-A86E-FE6A1E906512}.Release|x64.Build.0 = Release|Any CPU
- {D0ADA8EC-F431-43C8-A86E-FE6A1E906512}.Release|x86.ActiveCfg = Release|Any CPU
- {D0ADA8EC-F431-43C8-A86E-FE6A1E906512}.Release|x86.Build.0 = Release|Any CPU
- {95920BAA-46E6-44E6-A1AF-A23804F079D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {95920BAA-46E6-44E6-A1AF-A23804F079D2}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {95920BAA-46E6-44E6-A1AF-A23804F079D2}.Debug|x64.ActiveCfg = Debug|Any CPU
- {95920BAA-46E6-44E6-A1AF-A23804F079D2}.Debug|x64.Build.0 = Debug|Any CPU
- {95920BAA-46E6-44E6-A1AF-A23804F079D2}.Debug|x86.ActiveCfg = Debug|Any CPU
- {95920BAA-46E6-44E6-A1AF-A23804F079D2}.Debug|x86.Build.0 = Debug|Any CPU
- {95920BAA-46E6-44E6-A1AF-A23804F079D2}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {95920BAA-46E6-44E6-A1AF-A23804F079D2}.Release|Any CPU.Build.0 = Release|Any CPU
- {95920BAA-46E6-44E6-A1AF-A23804F079D2}.Release|x64.ActiveCfg = Release|Any CPU
- {95920BAA-46E6-44E6-A1AF-A23804F079D2}.Release|x64.Build.0 = Release|Any CPU
- {95920BAA-46E6-44E6-A1AF-A23804F079D2}.Release|x86.ActiveCfg = Release|Any CPU
- {95920BAA-46E6-44E6-A1AF-A23804F079D2}.Release|x86.Build.0 = Release|Any CPU
{52433D20-35EA-48CC-BB4A-4DFE3023670B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{52433D20-35EA-48CC-BB4A-4DFE3023670B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{52433D20-35EA-48CC-BB4A-4DFE3023670B}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -6983,30 +6905,6 @@ Global
{7E268085-1046-4362-80CB-2977FF826DCA}.Release|x64.Build.0 = Release|Any CPU
{7E268085-1046-4362-80CB-2977FF826DCA}.Release|x86.ActiveCfg = Release|Any CPU
{7E268085-1046-4362-80CB-2977FF826DCA}.Release|x86.Build.0 = Release|Any CPU
- {A5CE25E9-89E1-4F2C-9B89-0C161707E700}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {A5CE25E9-89E1-4F2C-9B89-0C161707E700}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {A5CE25E9-89E1-4F2C-9B89-0C161707E700}.Debug|x64.ActiveCfg = Debug|Any CPU
- {A5CE25E9-89E1-4F2C-9B89-0C161707E700}.Debug|x64.Build.0 = Debug|Any CPU
- {A5CE25E9-89E1-4F2C-9B89-0C161707E700}.Debug|x86.ActiveCfg = Debug|Any CPU
- {A5CE25E9-89E1-4F2C-9B89-0C161707E700}.Debug|x86.Build.0 = Debug|Any CPU
- {A5CE25E9-89E1-4F2C-9B89-0C161707E700}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {A5CE25E9-89E1-4F2C-9B89-0C161707E700}.Release|Any CPU.Build.0 = Release|Any CPU
- {A5CE25E9-89E1-4F2C-9B89-0C161707E700}.Release|x64.ActiveCfg = Release|Any CPU
- {A5CE25E9-89E1-4F2C-9B89-0C161707E700}.Release|x64.Build.0 = Release|Any CPU
- {A5CE25E9-89E1-4F2C-9B89-0C161707E700}.Release|x86.ActiveCfg = Release|Any CPU
- {A5CE25E9-89E1-4F2C-9B89-0C161707E700}.Release|x86.Build.0 = Release|Any CPU
- {E6A23627-8D63-4DF1-A4F2-8881172C1FE6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {E6A23627-8D63-4DF1-A4F2-8881172C1FE6}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {E6A23627-8D63-4DF1-A4F2-8881172C1FE6}.Debug|x64.ActiveCfg = Debug|Any CPU
- {E6A23627-8D63-4DF1-A4F2-8881172C1FE6}.Debug|x64.Build.0 = Debug|Any CPU
- {E6A23627-8D63-4DF1-A4F2-8881172C1FE6}.Debug|x86.ActiveCfg = Debug|Any CPU
- {E6A23627-8D63-4DF1-A4F2-8881172C1FE6}.Debug|x86.Build.0 = Debug|Any CPU
- {E6A23627-8D63-4DF1-A4F2-8881172C1FE6}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {E6A23627-8D63-4DF1-A4F2-8881172C1FE6}.Release|Any CPU.Build.0 = Release|Any CPU
- {E6A23627-8D63-4DF1-A4F2-8881172C1FE6}.Release|x64.ActiveCfg = Release|Any CPU
- {E6A23627-8D63-4DF1-A4F2-8881172C1FE6}.Release|x64.Build.0 = Release|Any CPU
- {E6A23627-8D63-4DF1-A4F2-8881172C1FE6}.Release|x86.ActiveCfg = Release|Any CPU
- {E6A23627-8D63-4DF1-A4F2-8881172C1FE6}.Release|x86.Build.0 = Release|Any CPU
{9788C76F-658B-4441-88F8-22C6B86FAD27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9788C76F-658B-4441-88F8-22C6B86FAD27}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9788C76F-658B-4441-88F8-22C6B86FAD27}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -7199,18 +7097,6 @@ Global
{BAD47859-95DF-4C8F-9AF7-C48B68F478A1}.Release|x64.Build.0 = Release|Any CPU
{BAD47859-95DF-4C8F-9AF7-C48B68F478A1}.Release|x86.ActiveCfg = Release|Any CPU
{BAD47859-95DF-4C8F-9AF7-C48B68F478A1}.Release|x86.Build.0 = Release|Any CPU
- {04CFE286-6D32-41EF-8887-4B5F8086A365}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {04CFE286-6D32-41EF-8887-4B5F8086A365}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {04CFE286-6D32-41EF-8887-4B5F8086A365}.Debug|x64.ActiveCfg = Debug|Any CPU
- {04CFE286-6D32-41EF-8887-4B5F8086A365}.Debug|x64.Build.0 = Debug|Any CPU
- {04CFE286-6D32-41EF-8887-4B5F8086A365}.Debug|x86.ActiveCfg = Debug|Any CPU
- {04CFE286-6D32-41EF-8887-4B5F8086A365}.Debug|x86.Build.0 = Debug|Any CPU
- {04CFE286-6D32-41EF-8887-4B5F8086A365}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {04CFE286-6D32-41EF-8887-4B5F8086A365}.Release|Any CPU.Build.0 = Release|Any CPU
- {04CFE286-6D32-41EF-8887-4B5F8086A365}.Release|x64.ActiveCfg = Release|Any CPU
- {04CFE286-6D32-41EF-8887-4B5F8086A365}.Release|x64.Build.0 = Release|Any CPU
- {04CFE286-6D32-41EF-8887-4B5F8086A365}.Release|x86.ActiveCfg = Release|Any CPU
- {04CFE286-6D32-41EF-8887-4B5F8086A365}.Release|x86.Build.0 = Release|Any CPU
{010A9638-F20E-4FE6-A186-85732BFC9CB0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{010A9638-F20E-4FE6-A186-85732BFC9CB0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{010A9638-F20E-4FE6-A186-85732BFC9CB0}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -7223,6 +7109,18 @@ Global
{010A9638-F20E-4FE6-A186-85732BFC9CB0}.Release|x64.Build.0 = Release|Any CPU
{010A9638-F20E-4FE6-A186-85732BFC9CB0}.Release|x86.ActiveCfg = Release|Any CPU
{010A9638-F20E-4FE6-A186-85732BFC9CB0}.Release|x86.Build.0 = Release|Any CPU
+ {04CFE286-6D32-41EF-8887-4B5F8086A365}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {04CFE286-6D32-41EF-8887-4B5F8086A365}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {04CFE286-6D32-41EF-8887-4B5F8086A365}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {04CFE286-6D32-41EF-8887-4B5F8086A365}.Debug|x64.Build.0 = Debug|Any CPU
+ {04CFE286-6D32-41EF-8887-4B5F8086A365}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {04CFE286-6D32-41EF-8887-4B5F8086A365}.Debug|x86.Build.0 = Debug|Any CPU
+ {04CFE286-6D32-41EF-8887-4B5F8086A365}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {04CFE286-6D32-41EF-8887-4B5F8086A365}.Release|Any CPU.Build.0 = Release|Any CPU
+ {04CFE286-6D32-41EF-8887-4B5F8086A365}.Release|x64.ActiveCfg = Release|Any CPU
+ {04CFE286-6D32-41EF-8887-4B5F8086A365}.Release|x64.Build.0 = Release|Any CPU
+ {04CFE286-6D32-41EF-8887-4B5F8086A365}.Release|x86.ActiveCfg = Release|Any CPU
+ {04CFE286-6D32-41EF-8887-4B5F8086A365}.Release|x86.Build.0 = Release|Any CPU
{FEF97646-9BC9-4D1B-A939-784D915C18A4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FEF97646-9BC9-4D1B-A939-784D915C18A4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FEF97646-9BC9-4D1B-A939-784D915C18A4}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -7367,6 +7265,30 @@ Global
{5D6F99C5-D292-4459-B8BD-8E4AD42E1B21}.Release|x64.Build.0 = Release|Any CPU
{5D6F99C5-D292-4459-B8BD-8E4AD42E1B21}.Release|x86.ActiveCfg = Release|Any CPU
{5D6F99C5-D292-4459-B8BD-8E4AD42E1B21}.Release|x86.Build.0 = Release|Any CPU
+ {E2461809-D2EA-436D-B5C3-8A9EE0A283B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E2461809-D2EA-436D-B5C3-8A9EE0A283B8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E2461809-D2EA-436D-B5C3-8A9EE0A283B8}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {E2461809-D2EA-436D-B5C3-8A9EE0A283B8}.Debug|x64.Build.0 = Debug|Any CPU
+ {E2461809-D2EA-436D-B5C3-8A9EE0A283B8}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {E2461809-D2EA-436D-B5C3-8A9EE0A283B8}.Debug|x86.Build.0 = Debug|Any CPU
+ {E2461809-D2EA-436D-B5C3-8A9EE0A283B8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E2461809-D2EA-436D-B5C3-8A9EE0A283B8}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E2461809-D2EA-436D-B5C3-8A9EE0A283B8}.Release|x64.ActiveCfg = Release|Any CPU
+ {E2461809-D2EA-436D-B5C3-8A9EE0A283B8}.Release|x64.Build.0 = Release|Any CPU
+ {E2461809-D2EA-436D-B5C3-8A9EE0A283B8}.Release|x86.ActiveCfg = Release|Any CPU
+ {E2461809-D2EA-436D-B5C3-8A9EE0A283B8}.Release|x86.Build.0 = Release|Any CPU
+ {E3993626-E5A9-440E-BA77-2A22823FAF52}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E3993626-E5A9-440E-BA77-2A22823FAF52}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E3993626-E5A9-440E-BA77-2A22823FAF52}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {E3993626-E5A9-440E-BA77-2A22823FAF52}.Debug|x64.Build.0 = Debug|Any CPU
+ {E3993626-E5A9-440E-BA77-2A22823FAF52}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {E3993626-E5A9-440E-BA77-2A22823FAF52}.Debug|x86.Build.0 = Debug|Any CPU
+ {E3993626-E5A9-440E-BA77-2A22823FAF52}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E3993626-E5A9-440E-BA77-2A22823FAF52}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E3993626-E5A9-440E-BA77-2A22823FAF52}.Release|x64.ActiveCfg = Release|Any CPU
+ {E3993626-E5A9-440E-BA77-2A22823FAF52}.Release|x64.Build.0 = Release|Any CPU
+ {E3993626-E5A9-440E-BA77-2A22823FAF52}.Release|x86.ActiveCfg = Release|Any CPU
+ {E3993626-E5A9-440E-BA77-2A22823FAF52}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -7799,12 +7721,6 @@ Global
{EE65018D-FA12-461D-B2C5-44CA6E385530} = {E5963C9F-20A6-4385-B364-814D2581FADF}
{A8E1962B-688E-44B3-81F3-BBB9891534CE} = {EE65018D-FA12-461D-B2C5-44CA6E385530}
{8A745E35-8098-4EB4-AC55-587B9F0DC4BE} = {EE65018D-FA12-461D-B2C5-44CA6E385530}
- {884AED21-7931-42A3-B08A-E58F7B0D6E7F} = {017429CC-C5FB-48B4-9C46-034E29EE2F06}
- {8DA88110-5A13-41A9-9F9D-674D921EB442} = {884AED21-7931-42A3-B08A-E58F7B0D6E7F}
- {4BCF2228-159D-4547-8D54-CDD2252D076A} = {8DA88110-5A13-41A9-9F9D-674D921EB442}
- {2D347127-3B13-47B1-84EC-770A9C1E11B0} = {884AED21-7931-42A3-B08A-E58F7B0D6E7F}
- {A7802482-55BA-4D95-BE79-8A601131F527} = {2D347127-3B13-47B1-84EC-770A9C1E11B0}
- {81947277-035F-41F6-A1D4-8EA362CB46D2} = {2D347127-3B13-47B1-84EC-770A9C1E11B0}
{8C4006DF-FF48-46B6-A124-10B1EEAA266E} = {822D1519-77F0-484A-B9AB-F694C2CC25F1}
{F5C54062-B19C-4291-A816-F1B5A167369A} = {8C4006DF-FF48-46B6-A124-10B1EEAA266E}
{056535BC-3E30-49E2-BE3B-630C62E641A5} = {1A0EFF9F-E699-4303-AE50-BFAF9804EEB6}
@@ -7873,8 +7789,7 @@ Global
{6DE03095-7EAC-41DF-8AE4-3018ED29BC61} = {08D53E58-4AAE-40C4-8497-63EC8664F304}
{18CE63FC-3BFE-47DF-A8D7-9D716FEB04C9} = {08D53E58-4AAE-40C4-8497-63EC8664F304}
{A4C26078-B6D8-4FD8-87A6-7C15A3482038} = {017429CC-C5FB-48B4-9C46-034E29EE2F06}
- {F1A6BA04-853E-43B5-B27E-54558603837B} = {A4C26078-B6D8-4FD8-87A6-7C15A3482038}
- {3163C56E-99BC-4BD1-8880-4F94A2407741} = {F1A6BA04-853E-43B5-B27E-54558603837B}
+ {3163C56E-99BC-4BD1-8880-4F94A2407741} = {A4C26078-B6D8-4FD8-87A6-7C15A3482038}
{776BFCDC-8591-4E3D-BD0D-858A188A033D} = {66A0F71A-FFB5-4763-913E-FB4A4F17EAA2}
{ED34C082-619E-4CCB-9D26-4E2375633FA2} = {AB316CF4-D9C3-427E-8460-7C5235BED45E}
{8BA59986-C9AA-4A78-BE18-0A344FB56D09} = {B27FBAC2-ADA3-4A05-B232-64011B6B2DA3}
@@ -7986,9 +7901,6 @@ Global
{898F7E0B-1671-42CB-9DFB-689AFF212ED3} = {FED63417-432B-49CD-AB4B-44ADA837C2E7}
{65EE0531-4533-407F-A9CA-2EBCDC444397} = {898F7E0B-1671-42CB-9DFB-689AFF212ED3}
{0B200A66-B809-4ED3-A790-CB1C2E80975E} = {017429CC-C5FB-48B4-9C46-034E29EE2F06}
- {B6118E15-C37A-4B05-B4DF-97FE99790417} = {0B200A66-B809-4ED3-A790-CB1C2E80975E}
- {D0ADA8EC-F431-43C8-A86E-FE6A1E906512} = {B6118E15-C37A-4B05-B4DF-97FE99790417}
- {95920BAA-46E6-44E6-A1AF-A23804F079D2} = {B6118E15-C37A-4B05-B4DF-97FE99790417}
{A4EECF29-6E66-4E7F-B781-A169B0C2AB29} = {0B200A66-B809-4ED3-A790-CB1C2E80975E}
{52433D20-35EA-48CC-BB4A-4DFE3023670B} = {A4EECF29-6E66-4E7F-B781-A169B0C2AB29}
{8562A154-B802-411B-897C-89621C4B05CB} = {0B200A66-B809-4ED3-A790-CB1C2E80975E}
@@ -8093,8 +8005,6 @@ Global
{7F87406C-A3C8-4139-A68D-E4C344294A67} = {D62AF49B-F9FE-4794-AC39-A473FF13CA81}
{1533E271-F61B-441B-8B74-59FB61DF0552} = {D62AF49B-F9FE-4794-AC39-A473FF13CA81}
{7E268085-1046-4362-80CB-2977FF826DCA} = {D62AF49B-F9FE-4794-AC39-A473FF13CA81}
- {A5CE25E9-89E1-4F2C-9B89-0C161707E700} = {B6118E15-C37A-4B05-B4DF-97FE99790417}
- {E6A23627-8D63-4DF1-A4F2-8881172C1FE6} = {B6118E15-C37A-4B05-B4DF-97FE99790417}
{7D2B0799-A634-42AC-AE77-5D167BA51389} = {562D5067-8CD8-4F19-BCBB-873204932C61}
{9788C76F-658B-4441-88F8-22C6B86FAD27} = {7D2B0799-A634-42AC-AE77-5D167BA51389}
{1970D5CD-D9A4-4673-A297-179BB04199F4} = {7D2B0799-A634-42AC-AE77-5D167BA51389}
@@ -8117,10 +8027,10 @@ Global
{37329855-01B8-4B03-9765-1A941B06E43C} = {8C15FD04-7F90-43FC-B488-023432FE3CE1}
{D3246226-BC1A-47F1-8E3E-C3380A8F13FB} = {8C15FD04-7F90-43FC-B488-023432FE3CE1}
{B06ADD57-E855-4D8C-85DC-B323509AE540} = {898F7E0B-1671-42CB-9DFB-689AFF212ED3}
- {04CFE286-6D32-41EF-8887-4B5F8086A365} = {6126DCE4-9692-4EE2-B240-C65743572995}
- {BAD47859-95DF-4C8F-9AF7-C48B68F478A1} = {A4C26078-B6D8-4FD8-87A6-7C15A3482038}
+ {BAD47859-95DF-4C8F-9AF7-C48B68F478A1} = {9BAB79EC-E469-4EA4-9FDF-91A5944C28FD}
{010A9638-F20E-4FE6-A186-85732BFC9CB0} = {A4C26078-B6D8-4FD8-87A6-7C15A3482038}
{3D34C81F-2CB5-459E-87E9-0CC04757A2A0} = {017429CC-C5FB-48B4-9C46-034E29EE2F06}
+ {04CFE286-6D32-41EF-8887-4B5F8086A365} = {6126DCE4-9692-4EE2-B240-C65743572995}
{FEF97646-9BC9-4D1B-A939-784D915C18A4} = {3D34C81F-2CB5-459E-87E9-0CC04757A2A0}
{839CE175-E0D9-43B9-9FA8-F32C47E7F56B} = {3D34C81F-2CB5-459E-87E9-0CC04757A2A0}
{50BF2926-7435-4F4B-88A9-3D0EDEB67FC8} = {3D34C81F-2CB5-459E-87E9-0CC04757A2A0}
@@ -8138,6 +8048,9 @@ Global
{545751D5-71FC-4889-A3A0-BBD731DBA18A} = {56B45580-B089-424E-A847-A6115D591950}
{E83B0BCC-A8E0-4FBD-BE51-9A533C9CB972} = {DFC4F588-B4B4-484B-AB93-B36721374AD3}
{5D6F99C5-D292-4459-B8BD-8E4AD42E1B21} = {E83B0BCC-A8E0-4FBD-BE51-9A533C9CB972}
+ {E2461809-D2EA-436D-B5C3-8A9EE0A283B8} = {7D2B0799-A634-42AC-AE77-5D167BA51389}
+ {9BAB79EC-E469-4EA4-9FDF-91A5944C28FD} = {A4C26078-B6D8-4FD8-87A6-7C15A3482038}
+ {E3993626-E5A9-440E-BA77-2A22823FAF52} = {9BAB79EC-E469-4EA4-9FDF-91A5944C28FD}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {3E8720B3-DBDD-498C-B383-2CC32A054E8F}
diff --git a/Directory.Build.props b/Directory.Build.props
index 258a01d38823..07e3d3405564 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -11,14 +11,23 @@
$([MSBuild]::MakeRelative($(RepoRoot), $(MSBuildProjectDirectory)))
- true
+ true
true
false
- true
- true
- true
+ true
+ true
+ true
true
- false
+ false
- win-x64;win-x86
-
-
$(AssemblyName)
- true
+ true
- true
+ true
true
diff --git a/NuGet.config b/NuGet.config
index 09ae34655f38..eae9defda853 100644
--- a/NuGet.config
+++ b/NuGet.config
@@ -3,18 +3,40 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Helix.md b/docs/Helix.md
index 477574dc2c0d..49c076b3be27 100644
--- a/docs/Helix.md
+++ b/docs/Helix.md
@@ -18,17 +18,17 @@ This will restore, and then publish all the test project including some bootstra
## Overview of the helix usage in our pipelines
-- Required queues: Windows10, OSX, Ubuntu1604
-- Full queue matrix: Windows[7, 81, 10], Ubuntu[1604, 1804, 2004], Centos7, Debian9, Redhat7, Fedora28, Arm64 (Win10, Debian9)
-- The queues are defined in [Helix.Common.props](https://github.com/dotnet/aspnetcore/blob/master/eng/targets/Helix.Common.props)
+- Required queues: Windows10, OSX, Ubuntu1804
+- Full queue matrix: Windows[7, 81, 10], Ubuntu[1804, 2004], Debian9, Redhat7, Arm64 (Win10, Debian9)
+- The queues are defined in [Helix.Common.props](https://github.com/dotnet/aspnetcore/blob/main/eng/targets/Helix.Common.props)
[aspnetcore-ci](https://dev.azure.com/dnceng/public/_build?definitionId=278) runs non quarantined tests against the required helix queues as a required PR check and all builds on all branches.
-[aspnetcore-helix-matrix](https://dev.azure.com/dnceng/public/_build?definitionId=837) runs non quarantined tests against all queues twice a day only on public master.
+[aspnetcore-helix-matrix](https://dev.azure.com/dnceng/public/_build?definitionId=837) runs non quarantined tests against all queues twice a day only on public main.
-[aspnetcore-quarantined-pr](https://dev.azure.com/dnceng/public/_build?definitionId=869) runs only quarantined tests against the required queues on PRs and on master every 4 hours.
+[aspnetcore-quarantined-pr](https://dev.azure.com/dnceng/public/_build?definitionId=869) runs only quarantined tests against the required queues on PRs and on main every 4 hours.
-[aspnetcore-quarantined-tests](https://dev.azure.com/dnceng/public/_build?definitionId=331) runs only quarantined tests against all queues only on public master once a day at 11 PM.
+[aspnetcore-quarantined-tests](https://dev.azure.com/dnceng/public/_build?definitionId=331) runs only quarantined tests against all queues only on public main once a day at 11 PM.
You can always manually queue pipeline runs by clicking on the link to the pipeline -> Run Pipeline -> select your branch/tag and commit
diff --git a/eng/Baseline.Designer.props b/eng/Baseline.Designer.props
index d3894b52f088..dd848a575e81 100644
--- a/eng/Baseline.Designer.props
+++ b/eng/Baseline.Designer.props
@@ -2,694 +2,900 @@
$(MSBuildAllProjects);$(MSBuildThisFileFullPath)
- 3.1.7
+ 5.0.8
-
-
- 3.0.3
+
+
+ 5.0.8
-
-
- 3.0.3
+
+
+ 5.0.8
- 3.1.7
+ 5.0.8
-
-
- 3.2.1
-
-
-
-
- 3.1.7
-
-
-
-
-
-
-
-
-
-
-
-
+ 5.0.8
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5.0.0
+
+
+
+ 5.0.8
+
+
+
+ 5.0.8
+
+
+
+ 5.0.8
+
+
+
+ 5.0.8
+
+
+
+ 5.0.8
+
+
+
+ 5.0.8
+
+
+
+ 5.0.8
+
+
+
+ 5.0.8
+
- 3.1.7
+ 5.0.8
+
+
+
+ 5.0.8
- 3.1.7
+ 5.0.8
-
-
-
+
+
+
- 3.1.7
+ 5.0.8
-
-
-
+
+
+
- 3.1.7
+ 5.0.8
+
+
+
- 3.1.7
+ 5.0.8
- 3.1.7
+ 5.0.8
- 3.1.7
+ 5.0.8
-
-
+
+
- 3.1.7
+ 5.0.8
- 3.1.7
+ 5.0.8
-
-
+
+
+
- 3.1.7
+ 5.0.8
-
-
+
+
- 3.1.7
+ 5.0.8
- 3.1.7
+ 5.0.8
-
-
-
+
+
+
- 3.1.7
+ 5.0.8
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
- 3.1.7
+ 5.0.8
-
-
-
+
+
+
- 3.1.7
+ 5.0.8
-
-
-
- 3.1.7
-
-
-
-
-
-
- 3.1.7
+ 5.0.8
-
-
-
-
-
-
-
-
-
-
+
+
- 3.1.7
+ 5.0.8
- 3.1.7
+ 5.0.8
-
-
-
-
-
-
-
+
+
+
- 3.1.7
+ 5.0.8
-
-
-
-
-
-
+
+
- 3.1.7
+ 5.0.8
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
-
-
- 3.2.1
+
+
+ 5.0.8
-
-
-
-
-
-
+
+
+
-
-
- 3.2.1
+
+
+ 5.0.8
-
-
-
- 3.2.1
+ 5.0.8
-
-
- 3.2.1
+
+
+ 5.0.8
-
-
-
+
+
+
+
+
+
-
-
- 3.2.1
-
-
-
- 3.2.1
+
+
+ 5.0.8
-
-
+
+
+
- 3.1.7
+ 5.0.8
-
-
-
+
+
+
- 3.1.7
+ 5.0.8
-
-
-
+
+
+
+
+
+
-
-
-
+
+
-
-
+
- 3.1.7
+ 5.0.8
- 3.1.7
+ 5.0.8
-
-
+
+
-
-
+
+
-
-
-
-
- 3.1.7
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
- 3.1.7
-
-
-
- 3.1.7
-
-
-
-
-
-
-
-
- 3.1.7
+ 5.0.8
-
-
-
-
-
- 3.1.7
+ 5.0.8
-
-
+
+
- 3.1.7
+ 5.0.8
-
-
-
+
+
+
+
+
+
+
-
-
+
+
- 3.1.7
+ 5.0.8
+
+
+
+
-
+
+
+
+ 5.0.8
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
- 3.1.7
+ 5.0.8
-
-
+
+
- 3.1.7
+ 5.0.8
-
-
-
+
+
+
- 3.1.7
+ 5.0.8
-
-
+
+
- 3.1.7
+ 5.0.8
+
+
+
+
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
- 3.1.7
+ 5.0.8
-
-
+
+
+
+
+
+
-
-
+
+
- 3.1.7
+ 5.0.8
-
-
-
+
+
+
+
+
+
+
-
-
+
+
- 3.1.7
+ 5.0.8
-
-
-
+
+
+
-
-
-
-
-
- 3.1.7
-
-
-
-
-
-
-
+
+
- 3.1.7
+ 5.0.8
-
-
-
-
+
+
+
- 3.1.7
+ 5.0.8
+
+
+
+
- 3.1.7
+ 5.0.8
- 3.1.7
+ 5.0.8
-
-
+
+
- 3.1.7
+ 5.0.8
-
-
+
+
+
+
+ 5.0.8
+
+
+
+
+
- 3.1.7
+ 5.0.8
-
-
-
-
+
+
+
+
- 3.1.7
+ 5.0.8
-
-
-
-
-
-
-
- 3.1.7
-
-
-
-
+
+
+
+
- 3.1.7
+ 5.0.8
+
+
+
+ 5.0.8
+
+
+ 5.0.8
+
+
+
+
+
+
- 3.1.7
+ 5.0.8
-
-
+
+
-
-
-
-
-
- 3.1.7
-
-
-
-
+
+
- 3.1.7
+ 5.0.8
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
+
+
+
+ 5.0.8
+
+
+
+
+
+
+
+
- 3.1.7
+ 5.0.8
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
- 3.1.7
+ 5.0.8
-
-
+
+
+
+
+
-
+
- 3.1.7
+ 5.0.8
+
+
+
+
-
-
+
+
- 3.1.7
+ 5.0.8
+
+
+
+
-
+
- 3.1.7
+ 5.0.8
-
-
-
-
-
+
+
+
+
+
- 3.1.7
+ 5.0.8
-
-
-
+
+
+
-
-
- 3.1.7
-
-
-
-
- 3.1.7
+ 5.0.8
-
-
-
+
+
- 3.1.7
+ 5.0.8
+
+
+
+
+
+
+ 5.0.8
+
+
+
+
+
+
+ 5.0.8
-
-
+
+
+
+
- 3.1.7
+ 5.0.8
- 3.1.7
+ 5.0.8
- 3.1.7
+ 5.0.8
-
-
- 3.1.7
+
+
+ 5.0.8
-
-
- 3.1.7
+
+
+ 5.0.8
- 3.1.7
+ 5.0.8
- 3.1.7
+ 5.0.8
+
+
+
+ 5.0.8
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5.0.8
- 3.1.7
+ 5.0.8
-
-
-
+
+
+
+
+
+
+ 5.0.8
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5.0.8
+
+
+
+
+
+
- 3.1.7
+ 5.0.8
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
- 3.1.7
+ 5.0.8
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
+
+
+ 5.0.8
+
+
+
+ 5.0.8
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5.0.8
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5.0.8
+
+
+
+ 5.0.8
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5.0.8
+
+
+
+
+
+ 5.0.8
+
\ No newline at end of file
diff --git a/eng/Baseline.xml b/eng/Baseline.xml
index ca3b6217b81f..2b5f6cf2d21a 100644
--- a/eng/Baseline.xml
+++ b/eng/Baseline.xml
@@ -1,90 +1,108 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/eng/Build.props b/eng/Build.props
index 1333471df20c..b2ac403f12d0 100644
--- a/eng/Build.props
+++ b/eng/Build.props
@@ -158,7 +158,6 @@
$(RepoRoot)src\Razor\**\*.*proj;
$(RepoRoot)src\Mvc\**\*.*proj;
$(RepoRoot)src\Azure\**\*.*proj;
- $(RepoRoot)src\MusicStore\**\*.*proj;
$(RepoRoot)src\SignalR\**\*.csproj;
$(RepoRoot)src\Components\**\*.csproj;
$(RepoRoot)src\Analyzers\**\*.csproj;
diff --git a/eng/Dependencies.props b/eng/Dependencies.props
index 62a7ac2e0f82..bfc8c66145f3 100644
--- a/eng/Dependencies.props
+++ b/eng/Dependencies.props
@@ -73,6 +73,8 @@ and are generated based on the last package release.
+
+
@@ -94,6 +96,7 @@ and are generated based on the last package release.
+
@@ -173,7 +176,6 @@ and are generated based on the last package release.
-
@@ -194,6 +196,11 @@ and are generated based on the last package release.
$(%(VersionName)PackageVersion)
+ $(%(VersionName)V0PackageVersion)
+
+
+
+
@@ -31,7 +35,9 @@
<_ChecksumsToPublish Include="$(ArtifactsDir)**\*.sha512" />
-
+
+
+
+
+
+
+ <_ProductVersion>@(_ResolvedProductVersionInfo->'%(PackageVersion)')
+
+
+
+
+
+
diff --git a/eng/Tools.props b/eng/Tools.props
index cdfb67026c6a..38f0efa3bea7 100644
--- a/eng/Tools.props
+++ b/eng/Tools.props
@@ -1,14 +1,25 @@
-
+
-
+
+
+
+
+
+
+
+
diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml
index 82210a6de674..df3efbc3169a 100644
--- a/eng/Version.Details.xml
+++ b/eng/Version.Details.xml
@@ -9,37 +9,37 @@
-->
-
- https://github.com/dotnet/efcore
- 33570d0337f76208fa3a814f7f6d3a506bd9c0be
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-efcore
+ 780af7091b186e1e0af288ebda44404accd4ea63
-
- https://github.com/dotnet/efcore
- 33570d0337f76208fa3a814f7f6d3a506bd9c0be
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-efcore
+ 780af7091b186e1e0af288ebda44404accd4ea63
-
- https://github.com/dotnet/efcore
- 33570d0337f76208fa3a814f7f6d3a506bd9c0be
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-efcore
+ 780af7091b186e1e0af288ebda44404accd4ea63
-
- https://github.com/dotnet/efcore
- 33570d0337f76208fa3a814f7f6d3a506bd9c0be
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-efcore
+ 780af7091b186e1e0af288ebda44404accd4ea63
-
- https://github.com/dotnet/efcore
- 33570d0337f76208fa3a814f7f6d3a506bd9c0be
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-efcore
+ 780af7091b186e1e0af288ebda44404accd4ea63
-
- https://github.com/dotnet/efcore
- 33570d0337f76208fa3a814f7f6d3a506bd9c0be
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-efcore
+ 780af7091b186e1e0af288ebda44404accd4ea63
-
- https://github.com/dotnet/efcore
- 33570d0337f76208fa3a814f7f6d3a506bd9c0be
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-efcore
+ 780af7091b186e1e0af288ebda44404accd4ea63
-
- https://github.com/dotnet/efcore
- 33570d0337f76208fa3a814f7f6d3a506bd9c0be
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-efcore
+ 780af7091b186e1e0af288ebda44404accd4ea63
https://github.com/dotnet/runtime
@@ -93,9 +93,9 @@
https://github.com/dotnet/runtime
cf258a14b70ad9069470a108f13765e0e5988f51
-
- https://github.com/dotnet/runtime
- cf258a14b70ad9069470a108f13765e0e5988f51
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 35964c9215613d66a687ebcb2d7fcd9496390ee7
https://github.com/dotnet/runtime
@@ -145,9 +145,9 @@
https://github.com/dotnet/runtime
cf258a14b70ad9069470a108f13765e0e5988f51
-
- https://github.com/dotnet/runtime
- cf258a14b70ad9069470a108f13765e0e5988f51
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 2f740adc1457e8a28c1c072993b66f515977eb51
https://github.com/dotnet/runtime
@@ -173,9 +173,9 @@
https://github.com/dotnet/runtime
cf258a14b70ad9069470a108f13765e0e5988f51
-
- https://github.com/dotnet/runtime
- cf258a14b70ad9069470a108f13765e0e5988f51
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 2f740adc1457e8a28c1c072993b66f515977eb51
https://github.com/dotnet/runtime
@@ -193,25 +193,25 @@
https://github.com/dotnet/runtime
cf258a14b70ad9069470a108f13765e0e5988f51
-
- https://github.com/dotnet/runtime
- cf258a14b70ad9069470a108f13765e0e5988f51
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ cb5f173b9696d9d00a544b953d95190ab3b56df2
-
- https://github.com/dotnet/runtime
- cf258a14b70ad9069470a108f13765e0e5988f51
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ c636bbdc8a2d393d07c0e9407a4f8923ba1a21cb
https://github.com/dotnet/runtime
cf258a14b70ad9069470a108f13765e0e5988f51
-
- https://github.com/dotnet/runtime
- cf258a14b70ad9069470a108f13765e0e5988f51
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ f27d33729518f5aa478aa818b7b4f54a4d50bef1
-
+
https://github.com/dotnet/runtime
- cf258a14b70ad9069470a108f13765e0e5988f51
+ b02e13abab3d6f499751af2ad1ae6333fb4e633d
https://github.com/dotnet/runtime
@@ -237,14 +237,19 @@
https://github.com/dotnet/runtime
cf258a14b70ad9069470a108f13765e0e5988f51
-
+
+
https://github.com/dotnet/runtime
cf258a14b70ad9069470a108f13765e0e5988f51
-
+
https://github.com/dotnet/runtime
cf258a14b70ad9069470a108f13765e0e5988f51
+
+ https://github.com/dotnet/runtime
+ b02e13abab3d6f499751af2ad1ae6333fb4e633d
+
https://github.com/dotnet/runtime
cf258a14b70ad9069470a108f13765e0e5988f51
@@ -261,13 +266,13 @@
https://github.com/dotnet/runtime
cf258a14b70ad9069470a108f13765e0e5988f51
-
- https://github.com/dotnet/runtime
- cf258a14b70ad9069470a108f13765e0e5988f51
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ e6b30911ce808668d81d926b0744f1dd02a43840
-
- https://github.com/dotnet/runtime
- cf258a14b70ad9069470a108f13765e0e5988f51
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 2f740adc1457e8a28c1c072993b66f515977eb51
https://github.com/dotnet/runtime
@@ -289,36 +294,36 @@
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.
-->
-
- https://github.com/dotnet/runtime
- cf258a14b70ad9069470a108f13765e0e5988f51
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 208e377a5329ad6eb1db5e5fb9d4590fa50beadd
-
- https://github.com/dotnet/runtime
- cf258a14b70ad9069470a108f13765e0e5988f51
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 208e377a5329ad6eb1db5e5fb9d4590fa50beadd
-
- https://github.com/dotnet/runtime
- cf258a14b70ad9069470a108f13765e0e5988f51
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 208e377a5329ad6eb1db5e5fb9d4590fa50beadd
-
- https://github.com/dotnet/runtime
- cf258a14b70ad9069470a108f13765e0e5988f51
+
+ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
+ 2f740adc1457e8a28c1c072993b66f515977eb51
-
+
https://github.com/dotnet/arcade
- 6813f5aa511a7a4498fa217a54219b5704a01f83
+ 5266aa9856457785b84739fda2616f21da7ee6b4
-
+
https://github.com/dotnet/arcade
- 6813f5aa511a7a4498fa217a54219b5704a01f83
+ 5266aa9856457785b84739fda2616f21da7ee6b4
-
+
https://github.com/dotnet/arcade
- 6813f5aa511a7a4498fa217a54219b5704a01f83
+ 5266aa9856457785b84739fda2616f21da7ee6b4
diff --git a/eng/Versions.props b/eng/Versions.props
index 2ff1c82f1408..0f445df9f100 100644
--- a/eng/Versions.props
+++ b/eng/Versions.props
@@ -8,21 +8,25 @@
5
0
- 0
+ 9
+ true
true
release
- rtm
- RTM $(PreReleaseVersionIteration)
+ servicing
+ Servicing
true
false
$(AspNetCoreMajorVersion).$(AspNetCoreMinorVersion)
true
$(AspNetCoreMajorVersion).$(AspNetCoreMinorVersion).$(AspNetCorePatchVersion)
-
+
$(VersionPrefix)
$(AspNetCoreMajorVersion).$(AspNetCoreMinorVersion).0
@@ -55,10 +59,10 @@
5.0.0
- 5.0.0-rtm.20519.4
+ 5.0.9-servicing.21359.8
5.0.0
- 5.0.0
- 5.0.0-rtm.20519.4
+ 5.0.9
+ 5.0.9-servicing.21359.8
5.0.0
5.0.0
5.0.0
@@ -74,7 +78,7 @@
5.0.0
5.0.0
5.0.0
- 5.0.0
+ 5.0.2
5.0.0
5.0.0
5.0.0
@@ -87,50 +91,52 @@
5.0.0
5.0.0
5.0.0
- 5.0.0
+ 5.0.1
5.0.0
5.0.0
5.0.0
5.0.0
5.0.0
5.0.0
- 5.0.0
+ 5.0.1
5.0.0-rtm.20519.4
5.0.0
- 5.0.0
- 5.0.0
+ 5.0.1
+ 5.0.1
5.0.0
- 5.0.0
- 5.0.0
+ 5.0.2
+ 5.0.1
5.0.0
5.0.0
5.0.0
5.0.0
5.0.0
5.0.0
+
+ 5.0.0
5.0.0
- 5.0.0
+ 5.0.1
5.0.0
5.0.0
5.0.0
5.0.0
- 5.0.0
- 5.0.0
+ 5.0.1
+ 5.0.2
5.0.0
5.0.0
- 5.0.0
+ 5.0.2
- 5.0.0
- 5.0.0
- 5.0.0
- 5.0.0
- 5.0.0
- 5.0.0
- 5.0.0
- 5.0.0
+ 5.0.9
+ 5.0.9
+ 5.0.9
+ 5.0.9
+ 5.0.9
+ 5.0.9
+ 5.0.9
+ 5.0.9
- 5.0.0-beta.20510.1
+ 5.0.0-beta.21328.3
$(MicrosoftNETCoreAppRuntimewinx64PackageVersion)
+
+
+ $(MicrosoftWin32RegistryPackageVersion.Split('.')[0]).$(MicrosoftWin32RegistryPackageVersion.Split('.')[1]).0
+ $(MicrosoftWin32SystemEventsPackageVersion.Split('.')[0]).$(MicrosoftWin32SystemEventsPackageVersion.Split('.')[1]).0
+ $(SystemDiagnosticsEventLogPackageVersion.Split('.')[0]).$(SystemDiagnosticsEventLogPackageVersion.Split('.')[1]).0
+ $(SystemDrawingCommonPackageVersion.Split('.')[0]).$(SystemDrawingCommonPackageVersion.Split('.')[1]).0
+ $(SystemIOPipelinesPackageVersion.Split('.')[0]).$(SystemIOPipelinesPackageVersion.Split('.')[1]).0
+ $(SystemSecurityAccessControlPackageVersion.Split('.')[0]).$(SystemSecurityAccessControlPackageVersion.Split('.')[1]).0
+ $(SystemSecurityCryptographyCngPackageVersion.Split('.')[0]).$(SystemSecurityCryptographyCngPackageVersion.Split('.')[1]).0
+ $(SystemSecurityCryptographyPkcsPackageVersion.Split('.')[0]).$(SystemSecurityCryptographyPkcsPackageVersion.Split('.')[1]).0
+ $(SystemSecurityCryptographyXmlPackageVersion.Split('.')[0]).$(SystemSecurityCryptographyXmlPackageVersion.Split('.')[1]).0
+ $(SystemSecurityPermissionsPackageVersion.Split('.')[0]).$(SystemSecurityPermissionsPackageVersion.Split('.')[1]).0
+ $(SystemSecurityPrincipalWindowsPackageVersion.Split('.')[0]).$(SystemSecurityPrincipalWindowsPackageVersion.Split('.')[1]).0
+ $(SystemTextJsonPackageVersion.Split('.')[0]).$(SystemTextJsonPackageVersion.Split('.')[1]).0
+ $(SystemTextEncodingsWebPackageVersion.Split('.')[0]).$(SystemTextEncodingsWebPackageVersion.Split('.')[1]).0
+ $(SystemWindowsExtensionsPackageVersion.Split('.')[0]).$(SystemWindowsExtensionsPackageVersion.Split('.')[1]).0
+
3.8.0-3.20458.6
@@ -179,9 +217,9 @@
15.8.166
1.2.6
15.8.166
- 3.7.0
- 3.7.0
- 3.7.0
+ 3.8.0
+ 3.8.0
+ 3.8.0
3.3.0
3.0.0
1.0.0-20200708.1
@@ -196,11 +234,11 @@
11.1.0
1.4.0
6.7.1
- 5.7.0
+ 5.9.0
2.1.1
2.2.0
- 3.1.8-servicing-20421-6
+ 3.1.17-servicing-21318-8
$(MicrosoftAspNetCoreAzureAppServicesSiteExtension31PackageVersion)
$(MicrosoftAspNetCoreAzureAppServicesSiteExtension31PackageVersion)
@@ -209,11 +247,11 @@
4.2.1
2.3.0
4.2.1
- 3.13.0
- 2.32.0
- 2.32.0
- 2.32.0
- 2.32.0
+ 3.14.0
+ 2.34.0
+ 2.34.0
+ 2.34.0
+ 2.34.0
4.1.0
4.1.0
4.1.0
@@ -229,10 +267,9 @@
1.0.2
12.0.2
13.0.4
- 4.0.0-alpha05
- 17.17134.0
- 85.0.4183.8300
- 4.0.0-alpha05
+ 4.0.0-beta1
+ 91.0.4472.1900-beta
+ 4.0.0-beta1
1.4.0
4.0.0
2.0.593
diff --git a/eng/Workarounds.targets b/eng/Workarounds.targets
index 863e0c471638..7e11ce5f09d7 100644
--- a/eng/Workarounds.targets
+++ b/eng/Workarounds.targets
@@ -9,10 +9,9 @@
+ TargetingPackVersion="$(MicrosoftNETCoreAppRefPackageVersion)" />
"
sed -i.bak "s|$OldDisableValue|$NewDisableValue|" $ConfigFile
echo "Neutralized disablePackageSources entry for '$DisabledSourceName'"
fi
diff --git a/eng/common/build.ps1 b/eng/common/build.ps1
index 1fd7f686faea..94a91c0817e8 100644
--- a/eng/common/build.ps1
+++ b/eng/common/build.ps1
@@ -7,7 +7,6 @@ Param(
[string] $msbuildEngine = $null,
[bool] $warnAsError = $true,
[bool] $nodeReuse = $true,
- [bool] $useDefaultDotnetInstall = $false,
[switch][Alias('r')]$restore,
[switch] $deployDeps,
[switch][Alias('b')]$build,
@@ -66,7 +65,6 @@ function Print-Usage() {
Write-Host " -prepareMachine Prepare machine for CI run, clean up processes after build"
Write-Host " -warnAsError Sets warnaserror msbuild parameter ('true' or 'false')"
Write-Host " -msbuildEngine Msbuild engine to use to run build ('dotnet', 'vs', or unspecified)."
- Write-Host " -useDefaultDotnetInstall Use dotnet-install.* scripts from public location as opposed to from eng common folder"
Write-Host ""
Write-Host "Command line arguments not listed above are passed thru to msbuild."
diff --git a/eng/common/build.sh b/eng/common/build.sh
index 19849adbee3f..252b63604e6e 100755
--- a/eng/common/build.sh
+++ b/eng/common/build.sh
@@ -36,8 +36,6 @@ usage()
echo " --prepareMachine Prepare machine for CI run, clean up processes after build"
echo " --nodeReuse Sets nodereuse msbuild parameter ('true' or 'false')"
echo " --warnAsError Sets warnaserror msbuild parameter ('true' or 'false')"
- echo " --useDefaultDotnetInstall Use dotnet-install.* scripts from public location as opposed to from eng common folder"
-
echo ""
echo "Command line arguments not listed above are passed thru to msbuild."
echo "Arguments can also be passed in with a single hyphen."
@@ -80,7 +78,6 @@ prepare_machine=false
verbosity='minimal'
runtime_source_feed=''
runtime_source_feed_key=''
-use_default_dotnet_install=false
properties=''
while [[ $# > 0 ]]; do
@@ -159,14 +156,10 @@ while [[ $# > 0 ]]; do
runtime_source_feed=$2
shift
;;
- -runtimesourcefeedkey)
+ -runtimesourcefeedkey)
runtime_source_feed_key=$2
shift
;;
- -usedefaultdotnetinstall)
- use_default_dotnet_install=$2
- shift
- ;;
*)
properties="$properties $1"
;;
diff --git a/eng/common/dotnet-install-scripts/dotnet-install.ps1 b/eng/common/dotnet-install-scripts/dotnet-install.ps1
deleted file mode 100644
index f63b533f25a9..000000000000
--- a/eng/common/dotnet-install-scripts/dotnet-install.ps1
+++ /dev/null
@@ -1,774 +0,0 @@
-#
-# Copyright (c) .NET Foundation and contributors. All rights reserved.
-# Licensed under the MIT license. See LICENSE file in the project root for full license information.
-#
-
-# Copied from https://dot.net/v1/dotnet-install.ps1 on 8/26/2020
-
-<#
-.SYNOPSIS
- Installs dotnet cli
-.DESCRIPTION
- Installs dotnet cli. If dotnet installation already exists in the given directory
- it will update it only if the requested version differs from the one already installed.
-.PARAMETER Channel
- Default: LTS
- Download from the Channel specified. Possible values:
- - Current - most current release
- - LTS - most current supported release
- - 2-part version in a format A.B - represents a specific release
- examples: 2.0, 1.0
- - Branch name
- examples: release/2.0.0, Master
- Note: The version parameter overrides the channel parameter.
-.PARAMETER Version
- Default: latest
- Represents a build version on specific channel. Possible values:
- - latest - most latest build on specific channel
- - coherent - most latest coherent build on specific channel
- coherent applies only to SDK downloads
- - 3-part version in a format A.B.C - represents specific version of build
- examples: 2.0.0-preview2-006120, 1.1.0
-.PARAMETER InstallDir
- Default: %LocalAppData%\Microsoft\dotnet
- Path to where to install dotnet. Note that binaries will be placed directly in a given directory.
-.PARAMETER Architecture
- Default: - this value represents currently running OS architecture
- Architecture of dotnet binaries to be installed.
- Possible values are: , amd64, x64, x86, arm64, arm
-.PARAMETER SharedRuntime
- This parameter is obsolete and may be removed in a future version of this script.
- The recommended alternative is '-Runtime dotnet'.
- Installs just the shared runtime bits, not the entire SDK.
-.PARAMETER Runtime
- Installs just a shared runtime, not the entire SDK.
- Possible values:
- - dotnet - the Microsoft.NETCore.App shared runtime
- - aspnetcore - the Microsoft.AspNetCore.App shared runtime
- - windowsdesktop - the Microsoft.WindowsDesktop.App shared runtime
-.PARAMETER DryRun
- If set it will not perform installation but instead display what command line to use to consistently install
- currently requested version of dotnet cli. In example if you specify version 'latest' it will display a link
- with specific version so that this command can be used deterministicly in a build script.
- It also displays binaries location if you prefer to install or download it yourself.
-.PARAMETER NoPath
- By default this script will set environment variable PATH for the current process to the binaries folder inside installation folder.
- If set it will display binaries location but not set any environment variable.
-.PARAMETER Verbose
- Displays diagnostics information.
-.PARAMETER AzureFeed
- Default: https://dotnetcli.azureedge.net/dotnet
- This parameter typically is not changed by the user.
- It allows changing the URL for the Azure feed used by this installer.
-.PARAMETER UncachedFeed
- This parameter typically is not changed by the user.
- It allows changing the URL for the Uncached feed used by this installer.
-.PARAMETER FeedCredential
- Used as a query string to append to the Azure feed.
- It allows changing the URL to use non-public blob storage accounts.
-.PARAMETER ProxyAddress
- If set, the installer will use the proxy when making web requests
-.PARAMETER ProxyUseDefaultCredentials
- Default: false
- Use default credentials, when using proxy address.
-.PARAMETER ProxyBypassList
- If set with ProxyAddress, will provide the list of comma separated urls that will bypass the proxy
-.PARAMETER SkipNonVersionedFiles
- Default: false
- Skips installing non-versioned files if they already exist, such as dotnet.exe.
-.PARAMETER NoCdn
- Disable downloading from the Azure CDN, and use the uncached feed directly.
-.PARAMETER JSonFile
- Determines the SDK version from a user specified global.json file
- Note: global.json must have a value for 'SDK:Version'
-#>
-[cmdletbinding()]
-param(
- [string]$Channel="LTS",
- [string]$Version="Latest",
- [string]$JSonFile,
- [string]$InstallDir="",
- [string]$Architecture="",
- [ValidateSet("dotnet", "aspnetcore", "windowsdesktop", IgnoreCase = $false)]
- [string]$Runtime,
- [Obsolete("This parameter may be removed in a future version of this script. The recommended alternative is '-Runtime dotnet'.")]
- [switch]$SharedRuntime,
- [switch]$DryRun,
- [switch]$NoPath,
- [string]$AzureFeed="https://dotnetcli.azureedge.net/dotnet",
- [string]$UncachedFeed="https://dotnetcli.blob.core.windows.net/dotnet",
- [string]$FeedCredential,
- [string]$ProxyAddress,
- [switch]$ProxyUseDefaultCredentials,
- [string[]]$ProxyBypassList=@(),
- [switch]$SkipNonVersionedFiles,
- [switch]$NoCdn
-)
-
-Set-StrictMode -Version Latest
-$ErrorActionPreference="Stop"
-$ProgressPreference="SilentlyContinue"
-
-if ($NoCdn) {
- $AzureFeed = $UncachedFeed
-}
-
-$BinFolderRelativePath=""
-
-if ($SharedRuntime -and (-not $Runtime)) {
- $Runtime = "dotnet"
-}
-
-# example path with regex: shared/1.0.0-beta-12345/somepath
-$VersionRegEx="/\d+\.\d+[^/]+/"
-$OverrideNonVersionedFiles = !$SkipNonVersionedFiles
-
-function Say($str) {
- try
- {
- Write-Host "dotnet-install: $str"
- }
- catch
- {
- # Some platforms cannot utilize Write-Host (Azure Functions, for instance). Fall back to Write-Output
- Write-Output "dotnet-install: $str"
- }
-}
-
-function Say-Verbose($str) {
- try
- {
- Write-Verbose "dotnet-install: $str"
- }
- catch
- {
- # Some platforms cannot utilize Write-Verbose (Azure Functions, for instance). Fall back to Write-Output
- Write-Output "dotnet-install: $str"
- }
-}
-
-function Say-Invocation($Invocation) {
- $command = $Invocation.MyCommand;
- $args = (($Invocation.BoundParameters.Keys | foreach { "-$_ `"$($Invocation.BoundParameters[$_])`"" }) -join " ")
- Say-Verbose "$command $args"
-}
-
-function Invoke-With-Retry([ScriptBlock]$ScriptBlock, [int]$MaxAttempts = 3, [int]$SecondsBetweenAttempts = 1) {
- $Attempts = 0
-
- while ($true) {
- try {
- return $ScriptBlock.Invoke()
- }
- catch {
- $Attempts++
- if ($Attempts -lt $MaxAttempts) {
- Start-Sleep $SecondsBetweenAttempts
- }
- else {
- throw
- }
- }
- }
-}
-
-function Get-Machine-Architecture() {
- Say-Invocation $MyInvocation
-
- # On PS x86, PROCESSOR_ARCHITECTURE reports x86 even on x64 systems.
- # To get the correct architecture, we need to use PROCESSOR_ARCHITEW6432.
- # PS x64 doesn't define this, so we fall back to PROCESSOR_ARCHITECTURE.
- # Possible values: amd64, x64, x86, arm64, arm
-
- if( $ENV:PROCESSOR_ARCHITEW6432 -ne $null )
- {
- return $ENV:PROCESSOR_ARCHITEW6432
- }
-
- return $ENV:PROCESSOR_ARCHITECTURE
-}
-
-function Get-CLIArchitecture-From-Architecture([string]$Architecture) {
- Say-Invocation $MyInvocation
-
- switch ($Architecture.ToLower()) {
- { $_ -eq "" } { return Get-CLIArchitecture-From-Architecture $(Get-Machine-Architecture) }
- { ($_ -eq "amd64") -or ($_ -eq "x64") } { return "x64" }
- { $_ -eq "x86" } { return "x86" }
- { $_ -eq "arm" } { return "arm" }
- { $_ -eq "arm64" } { return "arm64" }
- default { throw "Architecture not supported. If you think this is a bug, report it at https://github.com/dotnet/sdk/issues" }
- }
-}
-
-# The version text returned from the feeds is a 1-line or 2-line string:
-# For the SDK and the dotnet runtime (2 lines):
-# Line 1: # commit_hash
-# Line 2: # 4-part version
-# For the aspnetcore runtime (1 line):
-# Line 1: # 4-part version
-function Get-Version-Info-From-Version-Text([string]$VersionText) {
- Say-Invocation $MyInvocation
-
- $Data = -split $VersionText
-
- $VersionInfo = @{
- CommitHash = $(if ($Data.Count -gt 1) { $Data[0] })
- Version = $Data[-1] # last line is always the version number.
- }
- return $VersionInfo
-}
-
-function Load-Assembly([string] $Assembly) {
- try {
- Add-Type -Assembly $Assembly | Out-Null
- }
- catch {
- # On Nano Server, Powershell Core Edition is used. Add-Type is unable to resolve base class assemblies because they are not GAC'd.
- # Loading the base class assemblies is not unnecessary as the types will automatically get resolved.
- }
-}
-
-function GetHTTPResponse([Uri] $Uri)
-{
- Invoke-With-Retry(
- {
-
- $HttpClient = $null
-
- try {
- # HttpClient is used vs Invoke-WebRequest in order to support Nano Server which doesn't support the Invoke-WebRequest cmdlet.
- Load-Assembly -Assembly System.Net.Http
-
- if(-not $ProxyAddress) {
- try {
- # Despite no proxy being explicitly specified, we may still be behind a default proxy
- $DefaultProxy = [System.Net.WebRequest]::DefaultWebProxy;
- if($DefaultProxy -and (-not $DefaultProxy.IsBypassed($Uri))) {
- $ProxyAddress = $DefaultProxy.GetProxy($Uri).OriginalString
- $ProxyUseDefaultCredentials = $true
- }
- } catch {
- # Eat the exception and move forward as the above code is an attempt
- # at resolving the DefaultProxy that may not have been a problem.
- $ProxyAddress = $null
- Say-Verbose("Exception ignored: $_.Exception.Message - moving forward...")
- }
- }
-
- if($ProxyAddress) {
- $HttpClientHandler = New-Object System.Net.Http.HttpClientHandler
- $HttpClientHandler.Proxy = New-Object System.Net.WebProxy -Property @{
- Address=$ProxyAddress;
- UseDefaultCredentials=$ProxyUseDefaultCredentials;
- BypassList = $ProxyBypassList;
- }
- $HttpClient = New-Object System.Net.Http.HttpClient -ArgumentList $HttpClientHandler
- }
- else {
-
- $HttpClient = New-Object System.Net.Http.HttpClient
- }
- # Default timeout for HttpClient is 100s. For a 50 MB download this assumes 500 KB/s average, any less will time out
- # 20 minutes allows it to work over much slower connections.
- $HttpClient.Timeout = New-TimeSpan -Minutes 20
- $Response = $HttpClient.GetAsync("${Uri}${FeedCredential}").Result
- if (($Response -eq $null) -or (-not ($Response.IsSuccessStatusCode))) {
- # The feed credential is potentially sensitive info. Do not log FeedCredential to console output.
- $ErrorMsg = "Failed to download $Uri."
- if ($Response -ne $null) {
- $ErrorMsg += " $Response"
- }
-
- throw $ErrorMsg
- }
-
- return $Response
- }
- finally {
- if ($HttpClient -ne $null) {
- $HttpClient.Dispose()
- }
- }
- })
-}
-
-function Get-Latest-Version-Info([string]$AzureFeed, [string]$Channel, [bool]$Coherent) {
- Say-Invocation $MyInvocation
-
- $VersionFileUrl = $null
- if ($Runtime -eq "dotnet") {
- $VersionFileUrl = "$UncachedFeed/Runtime/$Channel/latest.version"
- }
- elseif ($Runtime -eq "aspnetcore") {
- $VersionFileUrl = "$UncachedFeed/aspnetcore/Runtime/$Channel/latest.version"
- }
- # Currently, the WindowsDesktop runtime is manufactured with the .Net core runtime
- elseif ($Runtime -eq "windowsdesktop") {
- $VersionFileUrl = "$UncachedFeed/Runtime/$Channel/latest.version"
- }
- elseif (-not $Runtime) {
- if ($Coherent) {
- $VersionFileUrl = "$UncachedFeed/Sdk/$Channel/latest.coherent.version"
- }
- else {
- $VersionFileUrl = "$UncachedFeed/Sdk/$Channel/latest.version"
- }
- }
- else {
- throw "Invalid value for `$Runtime"
- }
- try {
- $Response = GetHTTPResponse -Uri $VersionFileUrl
- }
- catch {
- throw "Could not resolve version information."
- }
- $StringContent = $Response.Content.ReadAsStringAsync().Result
-
- switch ($Response.Content.Headers.ContentType) {
- { ($_ -eq "application/octet-stream") } { $VersionText = $StringContent }
- { ($_ -eq "text/plain") } { $VersionText = $StringContent }
- { ($_ -eq "text/plain; charset=UTF-8") } { $VersionText = $StringContent }
- default { throw "``$Response.Content.Headers.ContentType`` is an unknown .version file content type." }
- }
-
- $VersionInfo = Get-Version-Info-From-Version-Text $VersionText
-
- return $VersionInfo
-}
-
-function Parse-Jsonfile-For-Version([string]$JSonFile) {
- Say-Invocation $MyInvocation
-
- If (-Not (Test-Path $JSonFile)) {
- throw "Unable to find '$JSonFile'"
- }
- try {
- $JSonContent = Get-Content($JSonFile) -Raw | ConvertFrom-Json | Select-Object -expand "sdk" -ErrorAction SilentlyContinue
- }
- catch {
- throw "Json file unreadable: '$JSonFile'"
- }
- if ($JSonContent) {
- try {
- $JSonContent.PSObject.Properties | ForEach-Object {
- $PropertyName = $_.Name
- if ($PropertyName -eq "version") {
- $Version = $_.Value
- Say-Verbose "Version = $Version"
- }
- }
- }
- catch {
- throw "Unable to parse the SDK node in '$JSonFile'"
- }
- }
- else {
- throw "Unable to find the SDK node in '$JSonFile'"
- }
- If ($Version -eq $null) {
- throw "Unable to find the SDK:version node in '$JSonFile'"
- }
- return $Version
-}
-
-function Get-Specific-Version-From-Version([string]$AzureFeed, [string]$Channel, [string]$Version, [string]$JSonFile) {
- Say-Invocation $MyInvocation
-
- if (-not $JSonFile) {
- switch ($Version.ToLower()) {
- { $_ -eq "latest" } {
- $LatestVersionInfo = Get-Latest-Version-Info -AzureFeed $AzureFeed -Channel $Channel -Coherent $False
- return $LatestVersionInfo.Version
- }
- { $_ -eq "coherent" } {
- $LatestVersionInfo = Get-Latest-Version-Info -AzureFeed $AzureFeed -Channel $Channel -Coherent $True
- return $LatestVersionInfo.Version
- }
- default { return $Version }
- }
- }
- else {
- return Parse-Jsonfile-For-Version $JSonFile
- }
-}
-
-function Get-Download-Link([string]$AzureFeed, [string]$SpecificVersion, [string]$CLIArchitecture) {
- Say-Invocation $MyInvocation
-
- # If anything fails in this lookup it will default to $SpecificVersion
- $SpecificProductVersion = Get-Product-Version -AzureFeed $AzureFeed -SpecificVersion $SpecificVersion
-
- if ($Runtime -eq "dotnet") {
- $PayloadURL = "$AzureFeed/Runtime/$SpecificVersion/dotnet-runtime-$SpecificProductVersion-win-$CLIArchitecture.zip"
- }
- elseif ($Runtime -eq "aspnetcore") {
- $PayloadURL = "$AzureFeed/aspnetcore/Runtime/$SpecificVersion/aspnetcore-runtime-$SpecificProductVersion-win-$CLIArchitecture.zip"
- }
- elseif ($Runtime -eq "windowsdesktop") {
- $PayloadURL = "$AzureFeed/Runtime/$SpecificVersion/windowsdesktop-runtime-$SpecificProductVersion-win-$CLIArchitecture.zip"
- }
- elseif (-not $Runtime) {
- $PayloadURL = "$AzureFeed/Sdk/$SpecificVersion/dotnet-sdk-$SpecificProductVersion-win-$CLIArchitecture.zip"
- }
- else {
- throw "Invalid value for `$Runtime"
- }
-
- Say-Verbose "Constructed primary named payload URL: $PayloadURL"
-
- return $PayloadURL, $SpecificProductVersion
-}
-
-function Get-LegacyDownload-Link([string]$AzureFeed, [string]$SpecificVersion, [string]$CLIArchitecture) {
- Say-Invocation $MyInvocation
-
- if (-not $Runtime) {
- $PayloadURL = "$AzureFeed/Sdk/$SpecificVersion/dotnet-dev-win-$CLIArchitecture.$SpecificVersion.zip"
- }
- elseif ($Runtime -eq "dotnet") {
- $PayloadURL = "$AzureFeed/Runtime/$SpecificVersion/dotnet-win-$CLIArchitecture.$SpecificVersion.zip"
- }
- else {
- return $null
- }
-
- Say-Verbose "Constructed legacy named payload URL: $PayloadURL"
-
- return $PayloadURL
-}
-
-function Get-Product-Version([string]$AzureFeed, [string]$SpecificVersion) {
- Say-Invocation $MyInvocation
-
- if ($Runtime -eq "dotnet") {
- $ProductVersionTxtURL = "$AzureFeed/Runtime/$SpecificVersion/productVersion.txt"
- }
- elseif ($Runtime -eq "aspnetcore") {
- $ProductVersionTxtURL = "$AzureFeed/aspnetcore/Runtime/$SpecificVersion/productVersion.txt"
- }
- elseif ($Runtime -eq "windowsdesktop") {
- $ProductVersionTxtURL = "$AzureFeed/Runtime/$SpecificVersion/productVersion.txt"
- }
- elseif (-not $Runtime) {
- $ProductVersionTxtURL = "$AzureFeed/Sdk/$SpecificVersion/productVersion.txt"
- }
- else {
- throw "Invalid value specified for `$Runtime"
- }
-
- Say-Verbose "Checking for existence of $ProductVersionTxtURL"
-
- try {
- $productVersionResponse = GetHTTPResponse($productVersionTxtUrl)
-
- if ($productVersionResponse.StatusCode -eq 200) {
- $productVersion = $productVersionResponse.Content.ReadAsStringAsync().Result.Trim()
- if ($productVersion -ne $SpecificVersion)
- {
- Say "Using alternate version $productVersion found in $ProductVersionTxtURL"
- }
-
- return $productVersion
- }
- else {
- Say-Verbose "Got StatusCode $($productVersionResponse.StatusCode) trying to get productVersion.txt at $productVersionTxtUrl, so using default value of $SpecificVersion"
- $productVersion = $SpecificVersion
- }
- } catch {
- Say-Verbose "Could not read productVersion.txt at $productVersionTxtUrl, so using default value of $SpecificVersion"
- $productVersion = $SpecificVersion
- }
-
- return $productVersion
-}
-
-function Get-User-Share-Path() {
- Say-Invocation $MyInvocation
-
- $InstallRoot = $env:DOTNET_INSTALL_DIR
- if (!$InstallRoot) {
- $InstallRoot = "$env:LocalAppData\Microsoft\dotnet"
- }
- return $InstallRoot
-}
-
-function Resolve-Installation-Path([string]$InstallDir) {
- Say-Invocation $MyInvocation
-
- if ($InstallDir -eq "") {
- return Get-User-Share-Path
- }
- return $InstallDir
-}
-
-function Is-Dotnet-Package-Installed([string]$InstallRoot, [string]$RelativePathToPackage, [string]$SpecificVersion) {
- Say-Invocation $MyInvocation
-
- $DotnetPackagePath = Join-Path -Path $InstallRoot -ChildPath $RelativePathToPackage | Join-Path -ChildPath $SpecificVersion
- Say-Verbose "Is-Dotnet-Package-Installed: DotnetPackagePath=$DotnetPackagePath"
- return Test-Path $DotnetPackagePath -PathType Container
-}
-
-function Get-Absolute-Path([string]$RelativeOrAbsolutePath) {
- # Too much spam
- # Say-Invocation $MyInvocation
-
- return $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($RelativeOrAbsolutePath)
-}
-
-function Get-Path-Prefix-With-Version($path) {
- $match = [regex]::match($path, $VersionRegEx)
- if ($match.Success) {
- return $entry.FullName.Substring(0, $match.Index + $match.Length)
- }
-
- return $null
-}
-
-function Get-List-Of-Directories-And-Versions-To-Unpack-From-Dotnet-Package([System.IO.Compression.ZipArchive]$Zip, [string]$OutPath) {
- Say-Invocation $MyInvocation
-
- $ret = @()
- foreach ($entry in $Zip.Entries) {
- $dir = Get-Path-Prefix-With-Version $entry.FullName
- if ($dir -ne $null) {
- $path = Get-Absolute-Path $(Join-Path -Path $OutPath -ChildPath $dir)
- if (-Not (Test-Path $path -PathType Container)) {
- $ret += $dir
- }
- }
- }
-
- $ret = $ret | Sort-Object | Get-Unique
-
- $values = ($ret | foreach { "$_" }) -join ";"
- Say-Verbose "Directories to unpack: $values"
-
- return $ret
-}
-
-# Example zip content and extraction algorithm:
-# Rule: files if extracted are always being extracted to the same relative path locally
-# .\
-# a.exe # file does not exist locally, extract
-# b.dll # file exists locally, override only if $OverrideFiles set
-# aaa\ # same rules as for files
-# ...
-# abc\1.0.0\ # directory contains version and exists locally
-# ... # do not extract content under versioned part
-# abc\asd\ # same rules as for files
-# ...
-# def\ghi\1.0.1\ # directory contains version and does not exist locally
-# ... # extract content
-function Extract-Dotnet-Package([string]$ZipPath, [string]$OutPath) {
- Say-Invocation $MyInvocation
-
- Load-Assembly -Assembly System.IO.Compression.FileSystem
- Set-Variable -Name Zip
- try {
- $Zip = [System.IO.Compression.ZipFile]::OpenRead($ZipPath)
-
- $DirectoriesToUnpack = Get-List-Of-Directories-And-Versions-To-Unpack-From-Dotnet-Package -Zip $Zip -OutPath $OutPath
-
- foreach ($entry in $Zip.Entries) {
- $PathWithVersion = Get-Path-Prefix-With-Version $entry.FullName
- if (($PathWithVersion -eq $null) -Or ($DirectoriesToUnpack -contains $PathWithVersion)) {
- $DestinationPath = Get-Absolute-Path $(Join-Path -Path $OutPath -ChildPath $entry.FullName)
- $DestinationDir = Split-Path -Parent $DestinationPath
- $OverrideFiles=$OverrideNonVersionedFiles -Or (-Not (Test-Path $DestinationPath))
- if ((-Not $DestinationPath.EndsWith("\")) -And $OverrideFiles) {
- New-Item -ItemType Directory -Force -Path $DestinationDir | Out-Null
- [System.IO.Compression.ZipFileExtensions]::ExtractToFile($entry, $DestinationPath, $OverrideNonVersionedFiles)
- }
- }
- }
- }
- finally {
- if ($Zip -ne $null) {
- $Zip.Dispose()
- }
- }
-}
-
-function DownloadFile($Source, [string]$OutPath) {
- if ($Source -notlike "http*") {
- # Using System.IO.Path.GetFullPath to get the current directory
- # does not work in this context - $pwd gives the current directory
- if (![System.IO.Path]::IsPathRooted($Source)) {
- $Source = $(Join-Path -Path $pwd -ChildPath $Source)
- }
- $Source = Get-Absolute-Path $Source
- Say "Copying file from $Source to $OutPath"
- Copy-Item $Source $OutPath
- return
- }
-
- $Stream = $null
-
- try {
- $Response = GetHTTPResponse -Uri $Source
- $Stream = $Response.Content.ReadAsStreamAsync().Result
- $File = [System.IO.File]::Create($OutPath)
- $Stream.CopyTo($File)
- $File.Close()
- }
- finally {
- if ($Stream -ne $null) {
- $Stream.Dispose()
- }
- }
-}
-
-function Prepend-Sdk-InstallRoot-To-Path([string]$InstallRoot, [string]$BinFolderRelativePath) {
- $BinPath = Get-Absolute-Path $(Join-Path -Path $InstallRoot -ChildPath $BinFolderRelativePath)
- if (-Not $NoPath) {
- $SuffixedBinPath = "$BinPath;"
- if (-Not $env:path.Contains($SuffixedBinPath)) {
- Say "Adding to current process PATH: `"$BinPath`". Note: This change will not be visible if PowerShell was run as a child process."
- $env:path = $SuffixedBinPath + $env:path
- } else {
- Say-Verbose "Current process PATH already contains `"$BinPath`""
- }
- }
- else {
- Say "Binaries of dotnet can be found in $BinPath"
- }
-}
-
-$CLIArchitecture = Get-CLIArchitecture-From-Architecture $Architecture
-$SpecificVersion = Get-Specific-Version-From-Version -AzureFeed $AzureFeed -Channel $Channel -Version $Version -JSonFile $JSonFile
-$DownloadLink, $EffectiveVersion = Get-Download-Link -AzureFeed $AzureFeed -SpecificVersion $SpecificVersion -CLIArchitecture $CLIArchitecture
-$LegacyDownloadLink = Get-LegacyDownload-Link -AzureFeed $AzureFeed -SpecificVersion $SpecificVersion -CLIArchitecture $CLIArchitecture
-
-$InstallRoot = Resolve-Installation-Path $InstallDir
-Say-Verbose "InstallRoot: $InstallRoot"
-$ScriptName = $MyInvocation.MyCommand.Name
-
-if ($DryRun) {
- Say "Payload URLs:"
- Say "Primary named payload URL: $DownloadLink"
- if ($LegacyDownloadLink) {
- Say "Legacy named payload URL: $LegacyDownloadLink"
- }
- $RepeatableCommand = ".\$ScriptName -Version `"$SpecificVersion`" -InstallDir `"$InstallRoot`" -Architecture `"$CLIArchitecture`""
- if ($Runtime -eq "dotnet") {
- $RepeatableCommand+=" -Runtime `"dotnet`""
- }
- elseif ($Runtime -eq "aspnetcore") {
- $RepeatableCommand+=" -Runtime `"aspnetcore`""
- }
- foreach ($key in $MyInvocation.BoundParameters.Keys) {
- if (-not (@("Architecture","Channel","DryRun","InstallDir","Runtime","SharedRuntime","Version") -contains $key)) {
- $RepeatableCommand+=" -$key `"$($MyInvocation.BoundParameters[$key])`""
- }
- }
- Say "Repeatable invocation: $RepeatableCommand"
- exit 0
-}
-
-if ($Runtime -eq "dotnet") {
- $assetName = ".NET Core Runtime"
- $dotnetPackageRelativePath = "shared\Microsoft.NETCore.App"
-}
-elseif ($Runtime -eq "aspnetcore") {
- $assetName = "ASP.NET Core Runtime"
- $dotnetPackageRelativePath = "shared\Microsoft.AspNetCore.App"
-}
-elseif ($Runtime -eq "windowsdesktop") {
- $assetName = ".NET Core Windows Desktop Runtime"
- $dotnetPackageRelativePath = "shared\Microsoft.WindowsDesktop.App"
-}
-elseif (-not $Runtime) {
- $assetName = ".NET Core SDK"
- $dotnetPackageRelativePath = "sdk"
-}
-else {
- throw "Invalid value for `$Runtime"
-}
-
-if ($SpecificVersion -ne $EffectiveVersion)
-{
- Say "Performing installation checks for effective version: $EffectiveVersion"
- $SpecificVersion = $EffectiveVersion
-}
-
-# Check if the SDK version is already installed.
-$isAssetInstalled = Is-Dotnet-Package-Installed -InstallRoot $InstallRoot -RelativePathToPackage $dotnetPackageRelativePath -SpecificVersion $SpecificVersion
-if ($isAssetInstalled) {
- Say "$assetName version $SpecificVersion is already installed."
- Prepend-Sdk-InstallRoot-To-Path -InstallRoot $InstallRoot -BinFolderRelativePath $BinFolderRelativePath
- exit 0
-}
-
-New-Item -ItemType Directory -Force -Path $InstallRoot | Out-Null
-
-$installDrive = $((Get-Item $InstallRoot).PSDrive.Name);
-$diskInfo = Get-PSDrive -Name $installDrive
-if ($diskInfo.Free / 1MB -le 100) {
- Say "There is not enough disk space on drive ${installDrive}:"
- exit 0
-}
-
-$ZipPath = [System.IO.Path]::combine([System.IO.Path]::GetTempPath(), [System.IO.Path]::GetRandomFileName())
-Say-Verbose "Zip path: $ZipPath"
-
-$DownloadFailed = $false
-Say "Downloading link: $DownloadLink"
-try {
- DownloadFile -Source $DownloadLink -OutPath $ZipPath
-}
-catch {
- Say "Cannot download: $DownloadLink"
- if ($LegacyDownloadLink) {
- $DownloadLink = $LegacyDownloadLink
- $ZipPath = [System.IO.Path]::combine([System.IO.Path]::GetTempPath(), [System.IO.Path]::GetRandomFileName())
- Say-Verbose "Legacy zip path: $ZipPath"
- Say "Downloading legacy link: $DownloadLink"
- try {
- DownloadFile -Source $DownloadLink -OutPath $ZipPath
- }
- catch {
- Say "Cannot download: $DownloadLink"
- $DownloadFailed = $true
- }
- }
- else {
- $DownloadFailed = $true
- }
-}
-
-if ($DownloadFailed) {
- throw "Could not find/download: `"$assetName`" with version = $SpecificVersion`nRefer to: https://aka.ms/dotnet-os-lifecycle for information on .NET Core support"
-}
-
-Say "Extracting zip from $DownloadLink"
-Extract-Dotnet-Package -ZipPath $ZipPath -OutPath $InstallRoot
-
-# Check if the SDK version is installed; if not, fail the installation.
-$isAssetInstalled = $false
-
-# if the version contains "RTM" or "servicing"; check if a 'release-type' SDK version is installed.
-if ($SpecificVersion -Match "rtm" -or $SpecificVersion -Match "servicing") {
- $ReleaseVersion = $SpecificVersion.Split("-")[0]
- Say-Verbose "Checking installation: version = $ReleaseVersion"
- $isAssetInstalled = Is-Dotnet-Package-Installed -InstallRoot $InstallRoot -RelativePathToPackage $dotnetPackageRelativePath -SpecificVersion $ReleaseVersion
-}
-
-# Check if the SDK version is installed.
-if (!$isAssetInstalled) {
- Say-Verbose "Checking installation: version = $SpecificVersion"
- $isAssetInstalled = Is-Dotnet-Package-Installed -InstallRoot $InstallRoot -RelativePathToPackage $dotnetPackageRelativePath -SpecificVersion $SpecificVersion
-}
-
-if (!$isAssetInstalled) {
- throw "`"$assetName`" with version = $SpecificVersion failed to install with an unknown error."
-}
-
-Remove-Item $ZipPath
-
-Prepend-Sdk-InstallRoot-To-Path -InstallRoot $InstallRoot -BinFolderRelativePath $BinFolderRelativePath
-
-Say "Installation finished"
-exit 0
\ No newline at end of file
diff --git a/eng/common/dotnet-install-scripts/dotnet-install.sh b/eng/common/dotnet-install-scripts/dotnet-install.sh
deleted file mode 100644
index 92161141f6c3..000000000000
--- a/eng/common/dotnet-install-scripts/dotnet-install.sh
+++ /dev/null
@@ -1,1133 +0,0 @@
-#!/usr/bin/env bash
-# Copyright (c) .NET Foundation and contributors. All rights reserved.
-# Licensed under the MIT license. See LICENSE file in the project root for full license information.
-#
-
-# Stop script on NZEC
-set -e
-# Stop script if unbound variable found (use ${var:-} if intentional)
-set -u
-# By default cmd1 | cmd2 returns exit code of cmd2 regardless of cmd1 success
-# This is causing it to fail
-set -o pipefail
-
-# Use in the the functions: eval $invocation
-invocation='say_verbose "Calling: ${yellow:-}${FUNCNAME[0]} ${green:-}$*${normal:-}"'
-
-# standard output may be used as a return value in the functions
-# we need a way to write text on the screen in the functions so that
-# it won't interfere with the return value.
-# Exposing stream 3 as a pipe to standard output of the script itself
-exec 3>&1
-
-# Setup some colors to use. These need to work in fairly limited shells, like the Ubuntu Docker container where there are only 8 colors.
-# See if stdout is a terminal
-if [ -t 1 ] && command -v tput > /dev/null; then
- # see if it supports colors
- ncolors=$(tput colors)
- if [ -n "$ncolors" ] && [ $ncolors -ge 8 ]; then
- bold="$(tput bold || echo)"
- normal="$(tput sgr0 || echo)"
- black="$(tput setaf 0 || echo)"
- red="$(tput setaf 1 || echo)"
- green="$(tput setaf 2 || echo)"
- yellow="$(tput setaf 3 || echo)"
- blue="$(tput setaf 4 || echo)"
- magenta="$(tput setaf 5 || echo)"
- cyan="$(tput setaf 6 || echo)"
- white="$(tput setaf 7 || echo)"
- fi
-fi
-
-say_warning() {
- printf "%b\n" "${yellow:-}dotnet_install: Warning: $1${normal:-}"
-}
-
-say_err() {
- printf "%b\n" "${red:-}dotnet_install: Error: $1${normal:-}" >&2
-}
-
-say() {
- # using stream 3 (defined in the beginning) to not interfere with stdout of functions
- # which may be used as return value
- printf "%b\n" "${cyan:-}dotnet-install:${normal:-} $1" >&3
-}
-
-say_verbose() {
- if [ "$verbose" = true ]; then
- say "$1"
- fi
-}
-
-# This platform list is finite - if the SDK/Runtime has supported Linux distribution-specific assets,
-# then and only then should the Linux distribution appear in this list.
-# Adding a Linux distribution to this list does not imply distribution-specific support.
-get_legacy_os_name_from_platform() {
- eval $invocation
-
- platform="$1"
- case "$platform" in
- "centos.7")
- echo "centos"
- return 0
- ;;
- "debian.8")
- echo "debian"
- return 0
- ;;
- "debian.9")
- echo "debian.9"
- return 0
- ;;
- "fedora.23")
- echo "fedora.23"
- return 0
- ;;
- "fedora.24")
- echo "fedora.24"
- return 0
- ;;
- "fedora.27")
- echo "fedora.27"
- return 0
- ;;
- "fedora.28")
- echo "fedora.28"
- return 0
- ;;
- "opensuse.13.2")
- echo "opensuse.13.2"
- return 0
- ;;
- "opensuse.42.1")
- echo "opensuse.42.1"
- return 0
- ;;
- "opensuse.42.3")
- echo "opensuse.42.3"
- return 0
- ;;
- "rhel.7"*)
- echo "rhel"
- return 0
- ;;
- "ubuntu.14.04")
- echo "ubuntu"
- return 0
- ;;
- "ubuntu.16.04")
- echo "ubuntu.16.04"
- return 0
- ;;
- "ubuntu.16.10")
- echo "ubuntu.16.10"
- return 0
- ;;
- "ubuntu.18.04")
- echo "ubuntu.18.04"
- return 0
- ;;
- "alpine.3.4.3")
- echo "alpine"
- return 0
- ;;
- esac
- return 1
-}
-
-get_linux_platform_name() {
- eval $invocation
-
- if [ -n "$runtime_id" ]; then
- echo "${runtime_id%-*}"
- return 0
- else
- if [ -e /etc/os-release ]; then
- . /etc/os-release
- echo "$ID${VERSION_ID:+.${VERSION_ID}}"
- return 0
- elif [ -e /etc/redhat-release ]; then
- local redhatRelease=$(&1 || true) | grep -q musl
-}
-
-get_current_os_name() {
- eval $invocation
-
- local uname=$(uname)
- if [ "$uname" = "Darwin" ]; then
- echo "osx"
- return 0
- elif [ "$uname" = "FreeBSD" ]; then
- echo "freebsd"
- return 0
- elif [ "$uname" = "Linux" ]; then
- local linux_platform_name
- linux_platform_name="$(get_linux_platform_name)" || { echo "linux" && return 0 ; }
-
- if [ "$linux_platform_name" = "rhel.6" ]; then
- echo $linux_platform_name
- return 0
- elif is_musl_based_distro; then
- echo "linux-musl"
- return 0
- else
- echo "linux"
- return 0
- fi
- fi
-
- say_err "OS name could not be detected: UName = $uname"
- return 1
-}
-
-get_legacy_os_name() {
- eval $invocation
-
- local uname=$(uname)
- if [ "$uname" = "Darwin" ]; then
- echo "osx"
- return 0
- elif [ -n "$runtime_id" ]; then
- echo $(get_legacy_os_name_from_platform "${runtime_id%-*}" || echo "${runtime_id%-*}")
- return 0
- else
- if [ -e /etc/os-release ]; then
- . /etc/os-release
- os=$(get_legacy_os_name_from_platform "$ID${VERSION_ID:+.${VERSION_ID}}" || echo "")
- if [ -n "$os" ]; then
- echo "$os"
- return 0
- fi
- fi
- fi
-
- say_verbose "Distribution specific OS name and version could not be detected: UName = $uname"
- return 1
-}
-
-machine_has() {
- eval $invocation
-
- hash "$1" > /dev/null 2>&1
- return $?
-}
-
-
-check_min_reqs() {
- local hasMinimum=false
- if machine_has "curl"; then
- hasMinimum=true
- elif machine_has "wget"; then
- hasMinimum=true
- fi
-
- if [ "$hasMinimum" = "false" ]; then
- say_err "curl (recommended) or wget are required to download dotnet. Install missing prerequisite to proceed."
- return 1
- fi
- return 0
-}
-
-check_pre_reqs() {
- eval $invocation
-
- if [ "${DOTNET_INSTALL_SKIP_PREREQS:-}" = "1" ]; then
- return 0
- fi
-
- if [ "$(uname)" = "Linux" ]; then
- if is_musl_based_distro; then
- if ! command -v scanelf > /dev/null; then
- say_warning "scanelf not found, please install pax-utils package."
- return 0
- fi
- LDCONFIG_COMMAND="scanelf --ldpath -BF '%f'"
- [ -z "$($LDCONFIG_COMMAND 2>/dev/null | grep libintl)" ] && say_warning "Unable to locate libintl. Probable prerequisite missing; install libintl (or gettext)."
- else
- if [ ! -x "$(command -v ldconfig)" ]; then
- say_verbose "ldconfig is not in PATH, trying /sbin/ldconfig."
- LDCONFIG_COMMAND="/sbin/ldconfig"
- else
- LDCONFIG_COMMAND="ldconfig"
- fi
- local librarypath=${LD_LIBRARY_PATH:-}
- LDCONFIG_COMMAND="$LDCONFIG_COMMAND -NXv ${librarypath//:/ }"
- fi
-
- [ -z "$($LDCONFIG_COMMAND 2>/dev/null | grep zlib)" ] && say_warning "Unable to locate zlib. Probable prerequisite missing; install zlib."
- [ -z "$($LDCONFIG_COMMAND 2>/dev/null | grep ssl)" ] && say_warning "Unable to locate libssl. Probable prerequisite missing; install libssl."
- [ -z "$($LDCONFIG_COMMAND 2>/dev/null | grep libicu)" ] && say_warning "Unable to locate libicu. Probable prerequisite missing; install libicu."
- [ -z "$($LDCONFIG_COMMAND 2>/dev/null | grep lttng)" ] && say_warning "Unable to locate liblttng. Probable prerequisite missing; install libcurl."
- [ -z "$($LDCONFIG_COMMAND 2>/dev/null | grep libcurl)" ] && say_warning "Unable to locate libcurl. Probable prerequisite missing; install libcurl."
- fi
-
- return 0
-}
-
-# args:
-# input - $1
-to_lowercase() {
- #eval $invocation
-
- echo "$1" | tr '[:upper:]' '[:lower:]'
- return 0
-}
-
-# args:
-# input - $1
-remove_trailing_slash() {
- #eval $invocation
-
- local input="${1:-}"
- echo "${input%/}"
- return 0
-}
-
-# args:
-# input - $1
-remove_beginning_slash() {
- #eval $invocation
-
- local input="${1:-}"
- echo "${input#/}"
- return 0
-}
-
-# args:
-# root_path - $1
-# child_path - $2 - this parameter can be empty
-combine_paths() {
- eval $invocation
-
- # TODO: Consider making it work with any number of paths. For now:
- if [ ! -z "${3:-}" ]; then
- say_err "combine_paths: Function takes two parameters."
- return 1
- fi
-
- local root_path="$(remove_trailing_slash "$1")"
- local child_path="$(remove_beginning_slash "${2:-}")"
- say_verbose "combine_paths: root_path=$root_path"
- say_verbose "combine_paths: child_path=$child_path"
- echo "$root_path/$child_path"
- return 0
-}
-
-get_machine_architecture() {
- eval $invocation
-
- if command -v uname > /dev/null; then
- CPUName=$(uname -m)
- case $CPUName in
- armv7l)
- echo "arm"
- return 0
- ;;
- aarch64)
- echo "arm64"
- return 0
- ;;
- esac
- fi
-
- # Always default to 'x64'
- echo "x64"
- return 0
-}
-
-# args:
-# architecture - $1
-get_normalized_architecture_from_architecture() {
- eval $invocation
-
- local architecture="$(to_lowercase "$1")"
- case "$architecture" in
- \)
- echo "$(get_normalized_architecture_from_architecture "$(get_machine_architecture)")"
- return 0
- ;;
- amd64|x64)
- echo "x64"
- return 0
- ;;
- arm)
- echo "arm"
- return 0
- ;;
- arm64)
- echo "arm64"
- return 0
- ;;
- esac
-
- say_err "Architecture \`$architecture\` not supported. If you think this is a bug, report it at https://github.com/dotnet/sdk/issues"
- return 1
-}
-
-# The version text returned from the feeds is a 1-line or 2-line string:
-# For the SDK and the dotnet runtime (2 lines):
-# Line 1: # commit_hash
-# Line 2: # 4-part version
-# For the aspnetcore runtime (1 line):
-# Line 1: # 4-part version
-
-# args:
-# version_text - stdin
-get_version_from_version_info() {
- eval $invocation
-
- cat | tail -n 1 | sed 's/\r$//'
- return 0
-}
-
-# args:
-# install_root - $1
-# relative_path_to_package - $2
-# specific_version - $3
-is_dotnet_package_installed() {
- eval $invocation
-
- local install_root="$1"
- local relative_path_to_package="$2"
- local specific_version="${3//[$'\t\r\n']}"
-
- local dotnet_package_path="$(combine_paths "$(combine_paths "$install_root" "$relative_path_to_package")" "$specific_version")"
- say_verbose "is_dotnet_package_installed: dotnet_package_path=$dotnet_package_path"
-
- if [ -d "$dotnet_package_path" ]; then
- return 0
- else
- return 1
- fi
-}
-
-# args:
-# azure_feed - $1
-# channel - $2
-# normalized_architecture - $3
-# coherent - $4
-get_latest_version_info() {
- eval $invocation
-
- local azure_feed="$1"
- local channel="$2"
- local normalized_architecture="$3"
- local coherent="$4"
-
- local version_file_url=null
- if [[ "$runtime" == "dotnet" ]]; then
- version_file_url="$uncached_feed/Runtime/$channel/latest.version"
- elif [[ "$runtime" == "aspnetcore" ]]; then
- version_file_url="$uncached_feed/aspnetcore/Runtime/$channel/latest.version"
- elif [ -z "$runtime" ]; then
- if [ "$coherent" = true ]; then
- version_file_url="$uncached_feed/Sdk/$channel/latest.coherent.version"
- else
- version_file_url="$uncached_feed/Sdk/$channel/latest.version"
- fi
- else
- say_err "Invalid value for \$runtime"
- return 1
- fi
- say_verbose "get_latest_version_info: latest url: $version_file_url"
-
- download "$version_file_url"
- return $?
-}
-
-# args:
-# json_file - $1
-parse_jsonfile_for_version() {
- eval $invocation
-
- local json_file="$1"
- if [ ! -f "$json_file" ]; then
- say_err "Unable to find \`$json_file\`"
- return 1
- fi
-
- sdk_section=$(cat $json_file | awk '/"sdk"/,/}/')
- if [ -z "$sdk_section" ]; then
- say_err "Unable to parse the SDK node in \`$json_file\`"
- return 1
- fi
-
- sdk_list=$(echo $sdk_section | awk -F"[{}]" '{print $2}')
- sdk_list=${sdk_list//[\" ]/}
- sdk_list=${sdk_list//,/$'\n'}
- sdk_list="$(echo -e "${sdk_list}" | tr -d '[[:space:]]')"
-
- local version_info=""
- while read -r line; do
- IFS=:
- while read -r key value; do
- if [[ "$key" == "version" ]]; then
- version_info=$value
- fi
- done <<< "$line"
- done <<< "$sdk_list"
- if [ -z "$version_info" ]; then
- say_err "Unable to find the SDK:version node in \`$json_file\`"
- return 1
- fi
-
- unset IFS;
- echo "$version_info"
- return 0
-}
-
-# args:
-# azure_feed - $1
-# channel - $2
-# normalized_architecture - $3
-# version - $4
-# json_file - $5
-get_specific_version_from_version() {
- eval $invocation
-
- local azure_feed="$1"
- local channel="$2"
- local normalized_architecture="$3"
- local version="$(to_lowercase "$4")"
- local json_file="$5"
-
- if [ -z "$json_file" ]; then
- case "$version" in
- latest)
- local version_info
- version_info="$(get_latest_version_info "$azure_feed" "$channel" "$normalized_architecture" false)" || return 1
- say_verbose "get_specific_version_from_version: version_info=$version_info"
- echo "$version_info" | get_version_from_version_info
- return 0
- ;;
- coherent)
- local version_info
- version_info="$(get_latest_version_info "$azure_feed" "$channel" "$normalized_architecture" true)" || return 1
- say_verbose "get_specific_version_from_version: version_info=$version_info"
- echo "$version_info" | get_version_from_version_info
- return 0
- ;;
- *)
- echo "$version"
- return 0
- ;;
- esac
- else
- local version_info
- version_info="$(parse_jsonfile_for_version "$json_file")" || return 1
- echo "$version_info"
- return 0
- fi
-}
-
-# args:
-# azure_feed - $1
-# channel - $2
-# normalized_architecture - $3
-# specific_version - $4
-construct_download_link() {
- eval $invocation
-
- local azure_feed="$1"
- local channel="$2"
- local normalized_architecture="$3"
- local specific_version="${4//[$'\t\r\n']}"
- local specific_product_version="$(get_specific_product_version "$1" "$4")"
-
- local osname
- osname="$(get_current_os_name)" || return 1
-
- local download_link=null
- if [[ "$runtime" == "dotnet" ]]; then
- download_link="$azure_feed/Runtime/$specific_version/dotnet-runtime-$specific_product_version-$osname-$normalized_architecture.tar.gz"
- elif [[ "$runtime" == "aspnetcore" ]]; then
- download_link="$azure_feed/aspnetcore/Runtime/$specific_version/aspnetcore-runtime-$specific_product_version-$osname-$normalized_architecture.tar.gz"
- elif [ -z "$runtime" ]; then
- download_link="$azure_feed/Sdk/$specific_version/dotnet-sdk-$specific_product_version-$osname-$normalized_architecture.tar.gz"
- else
- return 1
- fi
-
- echo "$download_link"
- return 0
-}
-
-# args:
-# azure_feed - $1
-# specific_version - $2
-get_specific_product_version() {
- # If we find a 'productVersion.txt' at the root of any folder, we'll use its contents
- # to resolve the version of what's in the folder, superseding the specified version.
- eval $invocation
-
- local azure_feed="$1"
- local specific_version="${2//[$'\t\r\n']}"
- local specific_product_version=$specific_version
-
- local download_link=null
- if [[ "$runtime" == "dotnet" ]]; then
- download_link="$azure_feed/Runtime/$specific_version/productVersion.txt${feed_credential}"
- elif [[ "$runtime" == "aspnetcore" ]]; then
- download_link="$azure_feed/aspnetcore/Runtime/$specific_version/productVersion.txt${feed_credential}"
- elif [ -z "$runtime" ]; then
- download_link="$azure_feed/Sdk/$specific_version/productVersion.txt${feed_credential}"
- else
- return 1
- fi
-
- specific_product_version=$(curl -s --fail "$download_link")
- if [ $? -ne 0 ]
- then
- specific_product_version=$(wget -qO- "$download_link")
- if [ $? -ne 0 ]
- then
- specific_product_version=$specific_version
- fi
- fi
- specific_product_version="${specific_product_version//[$'\t\r\n']}"
-
- echo "$specific_product_version"
- return 0
-}
-
-# args:
-# azure_feed - $1
-# channel - $2
-# normalized_architecture - $3
-# specific_version - $4
-construct_legacy_download_link() {
- eval $invocation
-
- local azure_feed="$1"
- local channel="$2"
- local normalized_architecture="$3"
- local specific_version="${4//[$'\t\r\n']}"
-
- local distro_specific_osname
- distro_specific_osname="$(get_legacy_os_name)" || return 1
-
- local legacy_download_link=null
- if [[ "$runtime" == "dotnet" ]]; then
- legacy_download_link="$azure_feed/Runtime/$specific_version/dotnet-$distro_specific_osname-$normalized_architecture.$specific_version.tar.gz"
- elif [ -z "$runtime" ]; then
- legacy_download_link="$azure_feed/Sdk/$specific_version/dotnet-dev-$distro_specific_osname-$normalized_architecture.$specific_version.tar.gz"
- else
- return 1
- fi
-
- echo "$legacy_download_link"
- return 0
-}
-
-get_user_install_path() {
- eval $invocation
-
- if [ ! -z "${DOTNET_INSTALL_DIR:-}" ]; then
- echo "$DOTNET_INSTALL_DIR"
- else
- echo "$HOME/.dotnet"
- fi
- return 0
-}
-
-# args:
-# install_dir - $1
-resolve_installation_path() {
- eval $invocation
-
- local install_dir=$1
- if [ "$install_dir" = "" ]; then
- local user_install_path="$(get_user_install_path)"
- say_verbose "resolve_installation_path: user_install_path=$user_install_path"
- echo "$user_install_path"
- return 0
- fi
-
- echo "$install_dir"
- return 0
-}
-
-# args:
-# relative_or_absolute_path - $1
-get_absolute_path() {
- eval $invocation
-
- local relative_or_absolute_path=$1
- echo "$(cd "$(dirname "$1")" && pwd -P)/$(basename "$1")"
- return 0
-}
-
-# args:
-# input_files - stdin
-# root_path - $1
-# out_path - $2
-# override - $3
-copy_files_or_dirs_from_list() {
- eval $invocation
-
- local root_path="$(remove_trailing_slash "$1")"
- local out_path="$(remove_trailing_slash "$2")"
- local override="$3"
- local osname="$(get_current_os_name)"
- local override_switch=$(
- if [ "$override" = false ]; then
- if [ "$osname" = "linux-musl" ]; then
- printf -- "-u";
- else
- printf -- "-n";
- fi
- fi)
-
- cat | uniq | while read -r file_path; do
- local path="$(remove_beginning_slash "${file_path#$root_path}")"
- local target="$out_path/$path"
- if [ "$override" = true ] || (! ([ -d "$target" ] || [ -e "$target" ])); then
- mkdir -p "$out_path/$(dirname "$path")"
- if [ -d "$target" ]; then
- rm -rf "$target"
- fi
- cp -R $override_switch "$root_path/$path" "$target"
- fi
- done
-}
-
-# args:
-# zip_path - $1
-# out_path - $2
-extract_dotnet_package() {
- eval $invocation
-
- local zip_path="$1"
- local out_path="$2"
-
- local temp_out_path="$(mktemp -d "$temporary_file_template")"
-
- local failed=false
- tar -xzf "$zip_path" -C "$temp_out_path" > /dev/null || failed=true
-
- local folders_with_version_regex='^.*/[0-9]+\.[0-9]+[^/]+/'
- find "$temp_out_path" -type f | grep -Eo "$folders_with_version_regex" | sort | copy_files_or_dirs_from_list "$temp_out_path" "$out_path" false
- find "$temp_out_path" -type f | grep -Ev "$folders_with_version_regex" | copy_files_or_dirs_from_list "$temp_out_path" "$out_path" "$override_non_versioned_files"
-
- rm -rf "$temp_out_path"
-
- if [ "$failed" = true ]; then
- say_err "Extraction failed"
- return 1
- fi
-}
-
-# args:
-# remote_path - $1
-# [out_path] - $2 - stdout if not provided
-download() {
- eval $invocation
-
- local remote_path="$1"
- local out_path="${2:-}"
-
- if [[ "$remote_path" != "http"* ]]; then
- cp "$remote_path" "$out_path"
- return $?
- fi
-
- local failed=false
- if machine_has "curl"; then
- downloadcurl "$remote_path" "$out_path" || failed=true
- elif machine_has "wget"; then
- downloadwget "$remote_path" "$out_path" || failed=true
- else
- failed=true
- fi
- if [ "$failed" = true ]; then
- say_verbose "Download failed: $remote_path"
- return 1
- fi
- return 0
-}
-
-downloadcurl() {
- eval $invocation
- local remote_path="$1"
- local out_path="${2:-}"
-
- # Append feed_credential as late as possible before calling curl to avoid logging feed_credential
- remote_path="${remote_path}${feed_credential}"
-
- local curl_options="--retry 20 --retry-delay 2 --connect-timeout 15 -sSL -f --create-dirs "
- local failed=false
- if [ -z "$out_path" ]; then
- curl $curl_options "$remote_path" || failed=true
- else
- curl $curl_options -o "$out_path" "$remote_path" || failed=true
- fi
- if [ "$failed" = true ]; then
- say_verbose "Curl download failed"
- return 1
- fi
- return 0
-}
-
-downloadwget() {
- eval $invocation
- local remote_path="$1"
- local out_path="${2:-}"
-
- # Append feed_credential as late as possible before calling wget to avoid logging feed_credential
- remote_path="${remote_path}${feed_credential}"
- local wget_options="--tries 20 --waitretry 2 --connect-timeout 15 "
- local failed=false
- if [ -z "$out_path" ]; then
- wget -q $wget_options -O - "$remote_path" || failed=true
- else
- wget $wget_options -O "$out_path" "$remote_path" || failed=true
- fi
- if [ "$failed" = true ]; then
- say_verbose "Wget download failed"
- return 1
- fi
- return 0
-}
-
-calculate_vars() {
- eval $invocation
- valid_legacy_download_link=true
-
- normalized_architecture="$(get_normalized_architecture_from_architecture "$architecture")"
- say_verbose "normalized_architecture=$normalized_architecture"
-
- specific_version="$(get_specific_version_from_version "$azure_feed" "$channel" "$normalized_architecture" "$version" "$json_file")"
- specific_product_version="$(get_specific_product_version "$azure_feed" "$specific_version")"
- say_verbose "specific_version=$specific_version"
- if [ -z "$specific_version" ]; then
- say_err "Could not resolve version information."
- return 1
- fi
-
- download_link="$(construct_download_link "$azure_feed" "$channel" "$normalized_architecture" "$specific_version")"
- say_verbose "Constructed primary named payload URL: $download_link"
-
- legacy_download_link="$(construct_legacy_download_link "$azure_feed" "$channel" "$normalized_architecture" "$specific_version")" || valid_legacy_download_link=false
-
- if [ "$valid_legacy_download_link" = true ]; then
- say_verbose "Constructed legacy named payload URL: $legacy_download_link"
- else
- say_verbose "Cound not construct a legacy_download_link; omitting..."
- fi
-
- install_root="$(resolve_installation_path "$install_dir")"
- say_verbose "InstallRoot: $install_root"
-}
-
-install_dotnet() {
- eval $invocation
- local download_failed=false
- local asset_name=''
- local asset_relative_path=''
-
- if [[ "$runtime" == "dotnet" ]]; then
- asset_relative_path="shared/Microsoft.NETCore.App"
- asset_name=".NET Core Runtime"
- elif [[ "$runtime" == "aspnetcore" ]]; then
- asset_relative_path="shared/Microsoft.AspNetCore.App"
- asset_name="ASP.NET Core Runtime"
- elif [ -z "$runtime" ]; then
- asset_relative_path="sdk"
- asset_name=".NET Core SDK"
- else
- say_err "Invalid value for \$runtime"
- return 1
- fi
-
- # Check if the SDK version is already installed.
- if is_dotnet_package_installed "$install_root" "$asset_relative_path" "$specific_version"; then
- say "$asset_name version $specific_version is already installed."
- return 0
- fi
-
- mkdir -p "$install_root"
- zip_path="$(mktemp "$temporary_file_template")"
- say_verbose "Zip path: $zip_path"
-
- say "Downloading link: $download_link"
-
- # Failures are normal in the non-legacy case for ultimately legacy downloads.
- # Do not output to stderr, since output to stderr is considered an error.
- download "$download_link" "$zip_path" 2>&1 || download_failed=true
-
- # if the download fails, download the legacy_download_link
- if [ "$download_failed" = true ]; then
- say "Cannot download: $download_link"
-
- if [ "$valid_legacy_download_link" = true ]; then
- download_failed=false
- download_link="$legacy_download_link"
- zip_path="$(mktemp "$temporary_file_template")"
- say_verbose "Legacy zip path: $zip_path"
- say "Downloading legacy link: $download_link"
- download "$download_link" "$zip_path" 2>&1 || download_failed=true
-
- if [ "$download_failed" = true ]; then
- say "Cannot download: $download_link"
- fi
- fi
- fi
-
- if [ "$download_failed" = true ]; then
- say_err "Could not find/download: \`$asset_name\` with version = $specific_version"
- say_err "Refer to: https://aka.ms/dotnet-os-lifecycle for information on .NET Core support"
- return 1
- fi
-
- say "Extracting zip from $download_link"
- extract_dotnet_package "$zip_path" "$install_root"
-
- # Check if the SDK version is installed; if not, fail the installation.
- # if the version contains "RTM" or "servicing"; check if a 'release-type' SDK version is installed.
- if [[ $specific_version == *"rtm"* || $specific_version == *"servicing"* ]]; then
- IFS='-'
- read -ra verArr <<< "$specific_version"
- release_version="${verArr[0]}"
- unset IFS;
- say_verbose "Checking installation: version = $release_version"
- if is_dotnet_package_installed "$install_root" "$asset_relative_path" "$release_version"; then
- return 0
- fi
- fi
-
- # Check if the standard SDK version is installed.
- say_verbose "Checking installation: version = $specific_product_version"
- if is_dotnet_package_installed "$install_root" "$asset_relative_path" "$specific_product_version"; then
- return 0
- fi
-
- say_err "\`$asset_name\` with version = $specific_product_version failed to install with an unknown error."
- return 1
-}
-
-args=("$@")
-
-local_version_file_relative_path="/.version"
-bin_folder_relative_path=""
-temporary_file_template="${TMPDIR:-/tmp}/dotnet.XXXXXXXXX"
-
-channel="LTS"
-version="Latest"
-json_file=""
-install_dir=""
-architecture=""
-dry_run=false
-no_path=false
-no_cdn=false
-azure_feed="https://dotnetcli.azureedge.net/dotnet"
-uncached_feed="https://dotnetcli.blob.core.windows.net/dotnet"
-feed_credential=""
-verbose=false
-runtime=""
-runtime_id=""
-override_non_versioned_files=true
-non_dynamic_parameters=""
-
-while [ $# -ne 0 ]
-do
- name="$1"
- case "$name" in
- -c|--channel|-[Cc]hannel)
- shift
- channel="$1"
- ;;
- -v|--version|-[Vv]ersion)
- shift
- version="$1"
- ;;
- -i|--install-dir|-[Ii]nstall[Dd]ir)
- shift
- install_dir="$1"
- ;;
- --arch|--architecture|-[Aa]rch|-[Aa]rchitecture)
- shift
- architecture="$1"
- ;;
- --shared-runtime|-[Ss]hared[Rr]untime)
- say_warning "The --shared-runtime flag is obsolete and may be removed in a future version of this script. The recommended usage is to specify '--runtime dotnet'."
- if [ -z "$runtime" ]; then
- runtime="dotnet"
- fi
- ;;
- --runtime|-[Rr]untime)
- shift
- runtime="$1"
- if [[ "$runtime" != "dotnet" ]] && [[ "$runtime" != "aspnetcore" ]]; then
- say_err "Unsupported value for --runtime: '$1'. Valid values are 'dotnet' and 'aspnetcore'."
- if [[ "$runtime" == "windowsdesktop" ]]; then
- say_err "WindowsDesktop archives are manufactured for Windows platforms only."
- fi
- exit 1
- fi
- ;;
- --dry-run|-[Dd]ry[Rr]un)
- dry_run=true
- ;;
- --no-path|-[Nn]o[Pp]ath)
- no_path=true
- non_dynamic_parameters+=" $name"
- ;;
- --verbose|-[Vv]erbose)
- verbose=true
- non_dynamic_parameters+=" $name"
- ;;
- --no-cdn|-[Nn]o[Cc]dn)
- no_cdn=true
- non_dynamic_parameters+=" $name"
- ;;
- --azure-feed|-[Aa]zure[Ff]eed)
- shift
- azure_feed="$1"
- non_dynamic_parameters+=" $name "\""$1"\"""
- ;;
- --uncached-feed|-[Uu]ncached[Ff]eed)
- shift
- uncached_feed="$1"
- non_dynamic_parameters+=" $name "\""$1"\"""
- ;;
- --feed-credential|-[Ff]eed[Cc]redential)
- shift
- feed_credential="$1"
- non_dynamic_parameters+=" $name "\""$1"\"""
- ;;
- --runtime-id|-[Rr]untime[Ii]d)
- shift
- runtime_id="$1"
- non_dynamic_parameters+=" $name "\""$1"\"""
- ;;
- --jsonfile|-[Jj][Ss]on[Ff]ile)
- shift
- json_file="$1"
- ;;
- --skip-non-versioned-files|-[Ss]kip[Nn]on[Vv]ersioned[Ff]iles)
- override_non_versioned_files=false
- non_dynamic_parameters+=" $name"
- ;;
- -?|--?|-h|--help|-[Hh]elp)
- script_name="$(basename "$0")"
- echo ".NET Tools Installer"
- echo "Usage: $script_name [-c|--channel ] [-v|--version ] [-p|--prefix ]"
- echo " $script_name -h|-?|--help"
- echo ""
- echo "$script_name is a simple command line interface for obtaining dotnet cli."
- echo ""
- echo "Options:"
- echo " -c,--channel Download from the channel specified, Defaults to \`$channel\`."
- echo " -Channel"
- echo " Possible values:"
- echo " - Current - most current release"
- echo " - LTS - most current supported release"
- echo " - 2-part version in a format A.B - represents a specific release"
- echo " examples: 2.0; 1.0"
- echo " - Branch name"
- echo " examples: release/2.0.0; Master"
- echo " Note: The version parameter overrides the channel parameter."
- echo " -v,--version Use specific VERSION, Defaults to \`$version\`."
- echo " -Version"
- echo " Possible values:"
- echo " - latest - most latest build on specific channel"
- echo " - coherent - most latest coherent build on specific channel"
- echo " coherent applies only to SDK downloads"
- echo " - 3-part version in a format A.B.C - represents specific version of build"
- echo " examples: 2.0.0-preview2-006120; 1.1.0"
- echo " -i,--install-dir Install under specified location (see Install Location below)"
- echo " -InstallDir"
- echo " --architecture Architecture of dotnet binaries to be installed, Defaults to \`$architecture\`."
- echo " --arch,-Architecture,-Arch"
- echo " Possible values: x64, arm, and arm64"
- echo " --runtime Installs a shared runtime only, without the SDK."
- echo " -Runtime"
- echo " Possible values:"
- echo " - dotnet - the Microsoft.NETCore.App shared runtime"
- echo " - aspnetcore - the Microsoft.AspNetCore.App shared runtime"
- echo " --dry-run,-DryRun Do not perform installation. Display download link."
- echo " --no-path, -NoPath Do not set PATH for the current process."
- echo " --verbose,-Verbose Display diagnostics information."
- echo " --azure-feed,-AzureFeed Azure feed location. Defaults to $azure_feed, This parameter typically is not changed by the user."
- echo " --uncached-feed,-UncachedFeed Uncached feed location. This parameter typically is not changed by the user."
- echo " --feed-credential,-FeedCredential Azure feed shared access token. This parameter typically is not specified."
- echo " --skip-non-versioned-files Skips non-versioned files if they already exist, such as the dotnet executable."
- echo " -SkipNonVersionedFiles"
- echo " --no-cdn,-NoCdn Disable downloading from the Azure CDN, and use the uncached feed directly."
- echo " --jsonfile Determines the SDK version from a user specified global.json file."
- echo " Note: global.json must have a value for 'SDK:Version'"
- echo " --runtime-id Installs the .NET Tools for the given platform (use linux-x64 for portable linux)."
- echo " -RuntimeId"
- echo " -?,--?,-h,--help,-Help Shows this help message"
- echo ""
- echo "Obsolete parameters:"
- echo " --shared-runtime The recommended alternative is '--runtime dotnet'."
- echo " This parameter is obsolete and may be removed in a future version of this script."
- echo " Installs just the shared runtime bits, not the entire SDK."
- echo ""
- echo "Install Location:"
- echo " Location is chosen in following order:"
- echo " - --install-dir option"
- echo " - Environmental variable DOTNET_INSTALL_DIR"
- echo " - $HOME/.dotnet"
- exit 0
- ;;
- *)
- say_err "Unknown argument \`$name\`"
- exit 1
- ;;
- esac
-
- shift
-done
-
-if [ "$no_cdn" = true ]; then
- azure_feed="$uncached_feed"
-fi
-
-check_min_reqs
-calculate_vars
-script_name=$(basename "$0")
-
-if [ "$dry_run" = true ]; then
- say "Payload URLs:"
- say "Primary named payload URL: $download_link"
- if [ "$valid_legacy_download_link" = true ]; then
- say "Legacy named payload URL: $legacy_download_link"
- fi
- repeatable_command="./$script_name --version "\""$specific_version"\"" --install-dir "\""$install_root"\"" --architecture "\""$normalized_architecture"\"""
- if [[ "$runtime" == "dotnet" ]]; then
- repeatable_command+=" --runtime "\""dotnet"\"""
- elif [[ "$runtime" == "aspnetcore" ]]; then
- repeatable_command+=" --runtime "\""aspnetcore"\"""
- fi
- repeatable_command+="$non_dynamic_parameters"
- say "Repeatable invocation: $repeatable_command"
- exit 0
-fi
-
-check_pre_reqs
-install_dotnet
-
-bin_path="$(get_absolute_path "$(combine_paths "$install_root" "$bin_folder_relative_path")")"
-if [ "$no_path" = false ]; then
- say "Adding to current process PATH: \`$bin_path\`. Note: This change will be visible only when sourcing script."
- export PATH="$bin_path":"$PATH"
-else
- say "Binaries of dotnet can be found in $bin_path"
-fi
-
-say "Installation finished successfully."
diff --git a/eng/common/generate-locproject.ps1 b/eng/common/generate-locproject.ps1
new file mode 100644
index 000000000000..de348a2e225c
--- /dev/null
+++ b/eng/common/generate-locproject.ps1
@@ -0,0 +1,110 @@
+Param(
+ [Parameter(Mandatory=$true)][string] $SourcesDirectory, # Directory where source files live; if using a Localize directory it should live in here
+ [string] $LanguageSet = 'VS_Main_Languages', # Language set to be used in the LocProject.json
+ [switch] $UseCheckedInLocProjectJson, # When set, generates a LocProject.json and compares it to one that already exists in the repo; otherwise just generates one
+ [switch] $CreateNeutralXlfs # Creates neutral xlf files. Only set to false when running locally
+)
+
+# Generates LocProject.json files for the OneLocBuild task. OneLocBuildTask is described here:
+# https://ceapex.visualstudio.com/CEINTL/_wiki/wikis/CEINTL.wiki/107/Localization-with-OneLocBuild-Task
+
+Set-StrictMode -Version 2.0
+$ErrorActionPreference = "Stop"
+. $PSScriptRoot\tools.ps1
+
+Import-Module -Name (Join-Path $PSScriptRoot 'native\CommonLibrary.psm1')
+
+$exclusionsFilePath = "$SourcesDirectory\eng\Localize\LocExclusions.json"
+$exclusions = @{ Exclusions = @() }
+if (Test-Path -Path $exclusionsFilePath)
+{
+ $exclusions = Get-Content "$exclusionsFilePath" | ConvertFrom-Json
+}
+
+Push-Location "$SourcesDirectory" # push location for Resolve-Path -Relative to work
+
+# Template files
+$jsonFiles = @()
+$jsonFiles += Get-ChildItem -Recurse -Path "$SourcesDirectory" | Where-Object { $_.FullName -Match "\.template\.config\\localize\\en\..+\.json" } # .NET templating pattern
+$jsonFiles += Get-ChildItem -Recurse -Path "$SourcesDirectory" | Where-Object { $_.FullName -Match "en\\strings\.json" } # current winforms pattern
+
+$xlfFiles = @()
+
+$allXlfFiles = Get-ChildItem -Recurse -Path "$SourcesDirectory\*\*.xlf"
+$langXlfFiles = @()
+if ($allXlfFiles) {
+ $null = $allXlfFiles[0].FullName -Match "\.([\w-]+)\.xlf" # matches '[langcode].xlf'
+ $firstLangCode = $Matches.1
+ $langXlfFiles = Get-ChildItem -Recurse -Path "$SourcesDirectory\*\*.$firstLangCode.xlf"
+}
+$langXlfFiles | ForEach-Object {
+ $null = $_.Name -Match "(.+)\.[\w-]+\.xlf" # matches '[filename].[langcode].xlf
+
+ $destinationFile = "$($_.Directory.FullName)\$($Matches.1).xlf"
+ $xlfFiles += Copy-Item "$($_.FullName)" -Destination $destinationFile -PassThru
+}
+
+$locFiles = $jsonFiles + $xlfFiles
+
+$locJson = @{
+ Projects = @(
+ @{
+ LanguageSet = $LanguageSet
+ LocItems = @(
+ $locFiles | ForEach-Object {
+ $outputPath = "$(($_.DirectoryName | Resolve-Path -Relative) + "\")"
+ $continue = $true
+ foreach ($exclusion in $exclusions.Exclusions) {
+ if ($outputPath.Contains($exclusion))
+ {
+ $continue = $false
+ }
+ }
+ $sourceFile = ($_.FullName | Resolve-Path -Relative)
+ if (!$CreateNeutralXlfs -and $_.Extension -eq '.xlf') {
+ Remove-Item -Path $sourceFile
+ }
+ if ($continue)
+ {
+ if ($_.Directory.Name -eq 'en' -and $_.Extension -eq '.json') {
+ return @{
+ SourceFile = $sourceFile
+ CopyOption = "LangIDOnPath"
+ OutputPath = "$($_.Directory.Parent.FullName | Resolve-Path -Relative)\"
+ }
+ }
+ else {
+ return @{
+ SourceFile = $sourceFile
+ CopyOption = "LangIDOnName"
+ OutputPath = $outputPath
+ }
+ }
+ }
+ }
+ )
+ }
+ )
+}
+
+$json = ConvertTo-Json $locJson -Depth 5
+Write-Host "LocProject.json generated:`n`n$json`n`n"
+Pop-Location
+
+if (!$UseCheckedInLocProjectJson) {
+ New-Item "$SourcesDirectory\eng\Localize\LocProject.json" -Force # Need this to make sure the Localize directory is created
+ Set-Content "$SourcesDirectory\eng\Localize\LocProject.json" $json
+}
+else {
+ New-Item "$SourcesDirectory\eng\Localize\LocProject-generated.json" -Force # Need this to make sure the Localize directory is created
+ Set-Content "$SourcesDirectory\eng\Localize\LocProject-generated.json" $json
+
+ if ((Get-FileHash "$SourcesDirectory\eng\Localize\LocProject-generated.json").Hash -ne (Get-FileHash "$SourcesDirectory\eng\Localize\LocProject.json").Hash) {
+ Write-PipelineTelemetryError -Category "OneLocBuild" -Message "Existing LocProject.json differs from generated LocProject.json. Download LocProject-generated.json and compare them."
+
+ exit 1
+ }
+ else {
+ Write-Host "Generated LocProject.json and current LocProject.json are identical."
+ }
+}
\ No newline at end of file
diff --git a/eng/common/internal-feed-operations.ps1 b/eng/common/internal-feed-operations.ps1
index b8f6529fdc87..418c09930cf1 100644
--- a/eng/common/internal-feed-operations.ps1
+++ b/eng/common/internal-feed-operations.ps1
@@ -63,8 +63,6 @@ function SetupCredProvider {
}
if (($endpoints | Measure-Object).Count -gt 0) {
- # [SuppressMessage("Microsoft.Security", "CS002:SecretInNextLine", Justification="Endpoint code example with no real credentials.")]
- # Create the JSON object. It should look like '{"endpointCredentials": [{"endpoint":"http://example.index.json", "username":"optional", "password":"accesstoken"}]}'
$endpointCredentials = @{endpointCredentials=$endpoints} | ConvertTo-Json -Compress
# Create the environment variables the AzDo way
diff --git a/eng/common/internal-feed-operations.sh b/eng/common/internal-feed-operations.sh
index 9ed225e7e559..343054b3ae9b 100755
--- a/eng/common/internal-feed-operations.sh
+++ b/eng/common/internal-feed-operations.sh
@@ -62,8 +62,6 @@ function SetupCredProvider {
endpoints+=']'
if [ ${#endpoints} -gt 2 ]; then
- # [SuppressMessage("Microsoft.Security", "CS002:SecretInNextLine", Justification="Endpoint code example with no real credentials.")]
- # Create the JSON object. It should look like '{"endpointCredentials": [{"endpoint":"http://example.index.json", "username":"optional", "password":"accesstoken"}]}'
local endpointCredentials="{\"endpointCredentials\": "$endpoints"}"
echo "##vso[task.setvariable variable=VSS_NUGET_EXTERNAL_FEED_ENDPOINTS]$endpointCredentials"
diff --git a/eng/common/post-build/publish-using-darc.ps1 b/eng/common/post-build/publish-using-darc.ps1
index 650b13b089b2..a40ee827a431 100644
--- a/eng/common/post-build/publish-using-darc.ps1
+++ b/eng/common/post-build/publish-using-darc.ps1
@@ -54,7 +54,7 @@ try {
--id $buildId `
--publishing-infra-version $PublishingInfraVersion `
--default-channels `
- --source-branch master `
+ --source-branch main `
--azdev-pat $AzdoToken `
--bar-uri $MaestroApiEndPoint `
--password $MaestroToken `
diff --git a/eng/common/sdl/init-sdl.ps1 b/eng/common/sdl/init-sdl.ps1
index a68bf0b88ea6..bb6a42971108 100644
--- a/eng/common/sdl/init-sdl.ps1
+++ b/eng/common/sdl/init-sdl.ps1
@@ -29,18 +29,7 @@ $zipFile = "$WorkingDirectory/gdn.zip"
Add-Type -AssemblyName System.IO.Compression.FileSystem
$gdnFolder = (Join-Path $WorkingDirectory '.gdn')
-try {
- # We try to download the zip; if the request fails (e.g. the file doesn't exist), we catch it and init guardian instead
- Write-Host 'Downloading gdn folder from internal config repostiory...'
- Invoke-WebRequest -Headers @{ "Accept"="application/zip"; "Authorization"="Basic $encodedPat" } -Uri $uri -OutFile $zipFile
- if (Test-Path $gdnFolder) {
- # Remove the gdn folder if it exists (it shouldn't unless there's too much caching; this is just in case)
- Remove-Item -Force -Recurse $gdnFolder
- }
- [System.IO.Compression.ZipFile]::ExtractToDirectory($zipFile, $WorkingDirectory)
- Write-Host $gdnFolder
- ExitWithExitCode 0
-} catch [System.Net.WebException] { } # Catch and ignore webexception
+
try {
# if the folder does not exist, we'll do a guardian init and push it to the remote repository
Write-Host 'Initializing Guardian...'
diff --git a/eng/common/sdl/packages.config b/eng/common/sdl/packages.config
index 968b39bef5f1..3bd8b29ebd72 100644
--- a/eng/common/sdl/packages.config
+++ b/eng/common/sdl/packages.config
@@ -1,4 +1,4 @@
-
+
diff --git a/eng/common/templates/job/execute-sdl.yml b/eng/common/templates/job/execute-sdl.yml
index c64c4f5686cb..53c100222b21 100644
--- a/eng/common/templates/job/execute-sdl.yml
+++ b/eng/common/templates/job/execute-sdl.yml
@@ -83,7 +83,7 @@ jobs:
continueOnError: ${{ parameters.sdlContinueOnError }}
- ${{ if eq(parameters.overrideParameters, '') }}:
- powershell: eng/common/sdl/execute-all-sdl-tools.ps1
- -GuardianPackageName Microsoft.Guardian.Cli.win10-x64.0.20.1
+ -GuardianPackageName Microsoft.Guardian.Cli.0.53.3
-NugetPackageDirectory $(Build.SourcesDirectory)\.packages
-AzureDevOpsAccessToken $(dn-bot-dotnet-build-rw-code-rw)
${{ parameters.additionalParameters }}
diff --git a/eng/common/templates/job/onelocbuild.yml b/eng/common/templates/job/onelocbuild.yml
new file mode 100644
index 000000000000..e8bc77d2ebbe
--- /dev/null
+++ b/eng/common/templates/job/onelocbuild.yml
@@ -0,0 +1,93 @@
+parameters:
+ # Optional: dependencies of the job
+ dependsOn: ''
+
+ # Optional: A defined YAML pool - https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=vsts&tabs=schema#pool
+ pool:
+ vmImage: vs2017-win2016
+
+ CeapexPat: $(dn-bot-ceapex-package-r) # PAT for the loc AzDO instance https://dev.azure.com/ceapex
+ GithubPat: $(BotAccount-dotnet-bot-repo-PAT)
+
+ SourcesDirectory: $(Build.SourcesDirectory)
+ CreatePr: true
+ AutoCompletePr: false
+ UseLfLineEndings: true
+ UseCheckedInLocProjectJson: false
+ LanguageSet: VS_Main_Languages
+ LclSource: lclFilesInRepo
+ LclPackageId: ''
+ RepoType: gitHub
+ GitHubOrg: dotnet
+ MirrorRepo: ''
+ MirrorBranch: main
+ condition: ''
+
+jobs:
+- job: OneLocBuild
+
+ dependsOn: ${{ parameters.dependsOn }}
+
+ displayName: OneLocBuild
+
+ pool: ${{ parameters.pool }}
+
+ variables:
+ - group: OneLocBuildVariables # Contains the CeapexPat and GithubPat
+ - name: _GenerateLocProjectArguments
+ value: -SourcesDirectory ${{ parameters.SourcesDirectory }}
+ -LanguageSet "${{ parameters.LanguageSet }}"
+ -CreateNeutralXlfs
+ - ${{ if eq(parameters.UseCheckedInLocProjectJson, 'true') }}:
+ - name: _GenerateLocProjectArguments
+ value: ${{ variables._GenerateLocProjectArguments }} -UseCheckedInLocProjectJson
+
+
+ steps:
+ - task: Powershell@2
+ inputs:
+ filePath: $(Build.SourcesDirectory)/eng/common/generate-locproject.ps1
+ arguments: $(_GenerateLocProjectArguments)
+ displayName: Generate LocProject.json
+ condition: ${{ parameters.condition }}
+
+ - task: OneLocBuild@2
+ displayName: OneLocBuild
+ env:
+ SYSTEM_ACCESSTOKEN: $(System.AccessToken)
+ inputs:
+ locProj: eng/Localize/LocProject.json
+ outDir: $(Build.ArtifactStagingDirectory)
+ lclSource: ${{ parameters.LclSource }}
+ lclPackageId: ${{ parameters.LclPackageId }}
+ isCreatePrSelected: ${{ parameters.CreatePr }}
+ ${{ if eq(parameters.CreatePr, true) }}:
+ isAutoCompletePrSelected: ${{ parameters.AutoCompletePr }}
+ isUseLfLineEndingsSelected: ${{ parameters.UseLfLineEndings }}
+ packageSourceAuth: patAuth
+ patVariable: ${{ parameters.CeapexPat }}
+ ${{ if eq(parameters.RepoType, 'gitHub') }}:
+ repoType: ${{ parameters.RepoType }}
+ gitHubPatVariable: "${{ parameters.GithubPat }}"
+ ${{ if ne(parameters.MirrorRepo, '') }}:
+ isMirrorRepoSelected: true
+ gitHubOrganization: ${{ parameters.GitHubOrg }}
+ mirrorRepo: ${{ parameters.MirrorRepo }}
+ mirrorBranch: ${{ parameters.MirrorBranch }}
+ condition: ${{ parameters.condition }}
+
+ - task: PublishBuildArtifacts@1
+ displayName: Publish Localization Files
+ inputs:
+ PathtoPublish: '$(Build.ArtifactStagingDirectory)/loc'
+ PublishLocation: Container
+ ArtifactName: Loc
+ condition: ${{ parameters.condition }}
+
+ - task: PublishBuildArtifacts@1
+ displayName: Publish LocProject.json
+ inputs:
+ PathtoPublish: '$(Build.SourcesDirectory)/eng/Localize/'
+ PublishLocation: Container
+ ArtifactName: Loc
+ condition: ${{ parameters.condition }}
\ No newline at end of file
diff --git a/eng/common/templates/post-build/post-build.yml b/eng/common/templates/post-build/post-build.yml
index 0854e489615a..1b0af40d52f4 100644
--- a/eng/common/templates/post-build/post-build.yml
+++ b/eng/common/templates/post-build/post-build.yml
@@ -65,178 +65,183 @@ parameters:
VS167ChannelId: 1011
VS168ChannelId: 1154
VSMasterChannelId: 1012
-
+ VS169ChannelId: 1473
+ VS1610ChannelId: 1692
+
stages:
-- stage: Validate
- dependsOn: ${{ parameters.validateDependsOn }}
- displayName: Validate Build Assets
- variables:
- - template: common-variables.yml
- jobs:
- - template: setup-maestro-vars.yml
- parameters:
- BARBuildId: ${{ parameters.BARBuildId }}
- PromoteToChannelIds: ${{ parameters.PromoteToChannelIds }}
+- ${{ if or(and(le(parameters.publishingInfraVersion, 2), eq(parameters.inline, 'true')), eq( parameters.enableNugetValidation, 'true'), eq(parameters.enableSigningValidation, 'true'), eq(parameters.enableSourceLinkValidation, 'true'), eq(parameters.SDLValidationParameters.enable, 'true')) }}:
+ - stage: Validate
+ dependsOn: ${{ parameters.validateDependsOn }}
+ displayName: Validate Build Assets
+ variables:
+ - template: common-variables.yml
+ jobs:
+ - template: setup-maestro-vars.yml
+ parameters:
+ BARBuildId: ${{ parameters.BARBuildId }}
+ PromoteToChannelIds: ${{ parameters.PromoteToChannelIds }}
- - ${{ if and(le(parameters.publishingInfraVersion, 2), eq(parameters.inline, 'true')) }}:
+ - ${{ if and(le(parameters.publishingInfraVersion, 2), eq(parameters.inline, 'true')) }}:
+ - job:
+ displayName: Post-build Checks
+ dependsOn: setupMaestroVars
+ variables:
+ - name: TargetChannels
+ value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.TargetChannels'] ]
+ pool:
+ vmImage: 'windows-2019'
+ steps:
+ - task: PowerShell@2
+ displayName: Maestro Channels Consistency
+ inputs:
+ filePath: $(Build.SourcesDirectory)/eng/common/post-build/check-channel-consistency.ps1
+ arguments: -PromoteToChannels "$(TargetChannels)"
+ -AvailableChannelIds ${{parameters.NetEngLatestChannelId}},${{parameters.NetEngValidationChannelId}},${{parameters.NetDev5ChannelId}},${{parameters.NetDev6ChannelId}},${{parameters.GeneralTestingChannelId}},${{parameters.NETCoreToolingDevChannelId}},${{parameters.NETCoreToolingReleaseChannelId}},${{parameters.NETInternalToolingChannelId}},${{parameters.NETCoreExperimentalChannelId}},${{parameters.NetEngServicesIntChannelId}},${{parameters.NetEngServicesProdChannelId}},${{parameters.Net5Preview8ChannelId}},${{parameters.Net5RC1ChannelId}},${{parameters.Net5RC2ChannelId}},${{parameters.NetCoreSDK313xxChannelId}},${{parameters.NetCoreSDK313xxInternalChannelId}},${{parameters.NetCoreSDK314xxChannelId}},${{parameters.NetCoreSDK314xxInternalChannelId}},${{parameters.VS166ChannelId}},${{parameters.VS167ChannelId}},${{parameters.VS168ChannelId}},${{parameters.VSMasterChannelId}},${{parameters.VS169ChannelId}},${{parameters.VS1610ChannelId}}
- job:
- displayName: Post-build Checks
+ displayName: NuGet Validation
dependsOn: setupMaestroVars
- variables:
- - name: TargetChannels
- value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.TargetChannels'] ]
+ condition: eq( ${{ parameters.enableNugetValidation }}, 'true')
pool:
vmImage: 'windows-2019'
+ variables:
+ - name: AzDOProjectName
+ value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.AzDOProjectName'] ]
+ - name: AzDOPipelineId
+ value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.AzDOPipelineId'] ]
+ - name: AzDOBuildId
+ value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.AzDOBuildId'] ]
steps:
+ - task: DownloadBuildArtifacts@0
+ displayName: Download Package Artifacts
+ inputs:
+ buildType: specific
+ buildVersionToDownload: specific
+ project: $(AzDOProjectName)
+ pipeline: $(AzDOPipelineId)
+ buildId: $(AzDOBuildId)
+ artifactName: PackageArtifacts
+
- task: PowerShell@2
- displayName: Maestro Channels Consistency
+ displayName: Validate
inputs:
- filePath: $(Build.SourcesDirectory)/eng/common/post-build/check-channel-consistency.ps1
- arguments: -PromoteToChannels "$(TargetChannels)"
- -AvailableChannelIds ${{parameters.NetEngLatestChannelId}},${{parameters.NetEngValidationChannelId}},${{parameters.NetDev5ChannelId}},${{parameters.NetDev6ChannelId}},${{parameters.GeneralTestingChannelId}},${{parameters.NETCoreToolingDevChannelId}},${{parameters.NETCoreToolingReleaseChannelId}},${{parameters.NETInternalToolingChannelId}},${{parameters.NETCoreExperimentalChannelId}},${{parameters.NetEngServicesIntChannelId}},${{parameters.NetEngServicesProdChannelId}},${{parameters.Net5Preview8ChannelId}},${{parameters.Net5RC1ChannelId}},${{parameters.Net5RC2ChannelId}},${{parameters.NetCoreSDK313xxChannelId}},${{parameters.NetCoreSDK313xxInternalChannelId}},${{parameters.NetCoreSDK314xxChannelId}},${{parameters.NetCoreSDK314xxInternalChannelId}},${{parameters.VS166ChannelId}},${{parameters.VS167ChannelId}},${{parameters.VS168ChannelId}},${{parameters.VSMasterChannelId}}
-
- - job:
- displayName: NuGet Validation
- dependsOn: setupMaestroVars
- condition: eq( ${{ parameters.enableNugetValidation }}, 'true')
- pool:
- vmImage: 'windows-2019'
- variables:
- - name: AzDOProjectName
- value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.AzDOProjectName'] ]
- - name: AzDOPipelineId
- value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.AzDOPipelineId'] ]
- - name: AzDOBuildId
- value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.AzDOBuildId'] ]
- steps:
- - task: DownloadBuildArtifacts@0
- displayName: Download Package Artifacts
- inputs:
- buildType: specific
- buildVersionToDownload: specific
- project: $(AzDOProjectName)
- pipeline: $(AzDOPipelineId)
- buildId: $(AzDOBuildId)
- artifactName: PackageArtifacts
-
- - task: PowerShell@2
- displayName: Validate
- inputs:
- filePath: $(Build.SourcesDirectory)/eng/common/post-build/nuget-validation.ps1
- arguments: -PackagesPath $(Build.ArtifactStagingDirectory)/PackageArtifacts/
- -ToolDestinationPath $(Agent.BuildDirectory)/Extract/
-
- - job:
- displayName: Signing Validation
- dependsOn: setupMaestroVars
- condition: eq( ${{ parameters.enableSigningValidation }}, 'true')
- variables:
- - template: common-variables.yml
- - name: AzDOProjectName
- value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.AzDOProjectName'] ]
- - name: AzDOPipelineId
- value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.AzDOPipelineId'] ]
- - name: AzDOBuildId
- value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.AzDOBuildId'] ]
- pool:
- vmImage: 'windows-2019'
- steps:
- - ${{ if eq(parameters.useBuildManifest, true) }}:
+ filePath: $(Build.SourcesDirectory)/eng/common/post-build/nuget-validation.ps1
+ arguments: -PackagesPath $(Build.ArtifactStagingDirectory)/PackageArtifacts/
+ -ToolDestinationPath $(Agent.BuildDirectory)/Extract/
+
+ - job:
+ displayName: Signing Validation
+ dependsOn: setupMaestroVars
+ condition: eq( ${{ parameters.enableSigningValidation }}, 'true')
+ variables:
+ - template: common-variables.yml
+ - name: AzDOProjectName
+ value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.AzDOProjectName'] ]
+ - name: AzDOPipelineId
+ value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.AzDOPipelineId'] ]
+ - name: AzDOBuildId
+ value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.AzDOBuildId'] ]
+ 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 build manifest
+ displayName: Download Package Artifacts
inputs:
buildType: specific
buildVersionToDownload: specific
project: $(AzDOProjectName)
pipeline: $(AzDOPipelineId)
buildId: $(AzDOBuildId)
- artifactName: BuildManifests
- - task: DownloadBuildArtifacts@0
- displayName: Download Package Artifacts
- inputs:
- buildType: specific
- buildVersionToDownload: specific
- project: $(AzDOProjectName)
- pipeline: $(AzDOPipelineId)
- buildId: $(AzDOBuildId)
- artifactName: PackageArtifacts
-
- # This is necessary whenever we want to publish/restore to an AzDO private feed
- # Since sdk-task.ps1 tries to restore packages we need to do this authentication here
- # otherwise it'll complain about accessing a private feed.
- - task: NuGetAuthenticate@0
- displayName: 'Authenticate to AzDO Feeds'
-
- - task: PowerShell@2
- displayName: Enable cross-org publishing
- inputs:
- 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 vs
- /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts'
- /p:SignCheckExclusionsFile='$(Build.SourcesDirectory)/eng/SignCheckExclusionsFile.txt'
- ${{ parameters.signingValidationAdditionalParameters }}
-
- - template: ../steps/publish-logs.yml
- parameters:
- StageLabel: 'Validation'
- JobLabel: 'Signing'
-
- - job:
- displayName: SourceLink Validation
- dependsOn: setupMaestroVars
- condition: eq( ${{ parameters.enableSourceLinkValidation }}, 'true')
- variables:
- - template: common-variables.yml
- - name: AzDOProjectName
- value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.AzDOProjectName'] ]
- - name: AzDOPipelineId
- value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.AzDOPipelineId'] ]
- - name: AzDOBuildId
- value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.AzDOBuildId'] ]
- pool:
- vmImage: 'windows-2019'
- steps:
- - task: DownloadBuildArtifacts@0
- displayName: Download Blob Artifacts
- inputs:
- buildType: specific
- buildVersionToDownload: specific
- project: $(AzDOProjectName)
- pipeline: $(AzDOPipelineId)
- buildId: $(AzDOBuildId)
- artifactName: BlobArtifacts
-
- - task: PowerShell@2
- displayName: Validate
- inputs:
- filePath: $(Build.SourcesDirectory)/eng/common/post-build/sourcelink-validation.ps1
- arguments: -InputPath $(Build.ArtifactStagingDirectory)/BlobArtifacts/
- -ExtractPath $(Agent.BuildDirectory)/Extract/
- -GHRepoName $(Build.Repository.Name)
- -GHCommit $(Build.SourceVersion)
- -SourcelinkCliVersion $(SourceLinkCLIVersion)
- continueOnError: true
-
- - template: /eng/common/templates/job/execute-sdl.yml
- parameters:
- enable: ${{ parameters.SDLValidationParameters.enable }}
+ artifactName: PackageArtifacts
+
+ # This is necessary whenever we want to publish/restore to an AzDO private feed
+ # Since sdk-task.ps1 tries to restore packages we need to do this authentication here
+ # otherwise it'll complain about accessing a private feed.
+ - task: NuGetAuthenticate@0
+ displayName: 'Authenticate to AzDO Feeds'
+
+ - task: PowerShell@2
+ displayName: Enable cross-org publishing
+ inputs:
+ 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 vs
+ /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts'
+ /p:SignCheckExclusionsFile='$(Build.SourcesDirectory)/eng/SignCheckExclusionsFile.txt'
+ ${{ parameters.signingValidationAdditionalParameters }}
+
+ - template: ../steps/publish-logs.yml
+ parameters:
+ StageLabel: 'Validation'
+ JobLabel: 'Signing'
+
+ - job:
+ displayName: SourceLink Validation
dependsOn: setupMaestroVars
- additionalParameters: ${{ parameters.SDLValidationParameters.params }}
- continueOnError: ${{ parameters.SDLValidationParameters.continueOnError }}
- artifactNames: ${{ parameters.SDLValidationParameters.artifactNames }}
- downloadArtifacts: ${{ parameters.SDLValidationParameters.downloadArtifacts }}
+ condition: eq( ${{ parameters.enableSourceLinkValidation }}, 'true')
+ variables:
+ - template: common-variables.yml
+ - name: AzDOProjectName
+ value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.AzDOProjectName'] ]
+ - name: AzDOPipelineId
+ value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.AzDOPipelineId'] ]
+ - name: AzDOBuildId
+ value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.AzDOBuildId'] ]
+ pool:
+ vmImage: 'windows-2019'
+ steps:
+ - task: DownloadBuildArtifacts@0
+ displayName: Download Blob Artifacts
+ inputs:
+ buildType: specific
+ buildVersionToDownload: specific
+ project: $(AzDOProjectName)
+ pipeline: $(AzDOPipelineId)
+ buildId: $(AzDOBuildId)
+ artifactName: BlobArtifacts
+
+ - task: PowerShell@2
+ displayName: Validate
+ inputs:
+ filePath: $(Build.SourcesDirectory)/eng/common/post-build/sourcelink-validation.ps1
+ arguments: -InputPath $(Build.ArtifactStagingDirectory)/BlobArtifacts/
+ -ExtractPath $(Agent.BuildDirectory)/Extract/
+ -GHRepoName $(Build.Repository.Name)
+ -GHCommit $(Build.SourceVersion)
+ -SourcelinkCliVersion $(SourceLinkCLIVersion)
+ continueOnError: true
+
+ - template: /eng/common/templates/job/execute-sdl.yml
+ parameters:
+ enable: ${{ parameters.SDLValidationParameters.enable }}
+ dependsOn: setupMaestroVars
+ additionalParameters: ${{ parameters.SDLValidationParameters.params }}
+ continueOnError: ${{ parameters.SDLValidationParameters.continueOnError }}
+ artifactNames: ${{ parameters.SDLValidationParameters.artifactNames }}
+ downloadArtifacts: ${{ parameters.SDLValidationParameters.downloadArtifacts }}
- ${{ if or(ge(parameters.publishingInfraVersion, 3), eq(parameters.inline, 'false')) }}:
- stage: publish_using_darc
- dependsOn: Validate
+ ${{ if or(eq(parameters.enableNugetValidation, 'true'), eq(parameters.enableSigningValidation, 'true'), eq(parameters.enableSourceLinkValidation, 'true'), eq(parameters.SDLValidationParameters.enable, 'true')) }}:
+ dependsOn: Validate
+ ${{ if and(ne(parameters.enableNugetValidation, 'true'), ne(parameters.enableSigningValidation, 'true'), ne(parameters.enableSourceLinkValidation, 'true'), ne(parameters.SDLValidationParameters.enable, 'true')) }}:
+ dependsOn: ${{ parameters.validateDependsOn }}
displayName: Publish using Darc
variables:
- template: common-variables.yml
@@ -604,3 +609,33 @@ stages:
transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools-transport/nuget/v3/index.json'
shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json'
symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools-symbols/nuget/v3/index.json'
+
+ - template: \eng\common\templates\post-build\channels\generic-public-channel.yml
+ parameters:
+ BARBuildId: ${{ parameters.BARBuildId }}
+ PromoteToChannelIds: ${{ parameters.PromoteToChannelIds }}
+ artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }}
+ dependsOn: ${{ parameters.publishDependsOn }}
+ publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }}
+ symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }}
+ stageName: 'VS_16_9_Publishing'
+ channelName: 'VS 16.9'
+ channelId: ${{ parameters.VS169ChannelId }}
+ transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools-transport/nuget/v3/index.json'
+ shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json'
+ symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools-symbols/nuget/v3/index.json'
+
+ - template: \eng\common\templates\post-build\channels\generic-public-channel.yml
+ parameters:
+ BARBuildId: ${{ parameters.BARBuildId }}
+ PromoteToChannelIds: ${{ parameters.PromoteToChannelIds }}
+ artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }}
+ dependsOn: ${{ parameters.publishDependsOn }}
+ publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }}
+ symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }}
+ stageName: 'VS_16_10_Publishing'
+ channelName: 'VS 16.10'
+ channelId: ${{ parameters.VS1610ChannelId }}
+ transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools-transport/nuget/v3/index.json'
+ shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json'
+ symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools-symbols/nuget/v3/index.json'
diff --git a/eng/common/tools.ps1 b/eng/common/tools.ps1
index 9014e062514b..eba7ed49d784 100644
--- a/eng/common/tools.ps1
+++ b/eng/common/tools.ps1
@@ -62,10 +62,6 @@ $ErrorActionPreference = 'Stop'
# Base-64 encoded SAS token that has permission to storage container described by $runtimeSourceFeed
[string]$runtimeSourceFeedKey = if (Test-Path variable:runtimeSourceFeedKey) { $runtimeSourceFeedKey } else { $null }
-# If false, use copy of dotnet-install from /eng/common/dotnet-install-scripts (for custom behaviors).
-# otherwise will fetch from public location.
-[bool]$useDefaultDotnetInstall = if (Test-Path variable:useDefaultDotnetInstall) { $useDefaultDotnetInstall } else { $false }
-
function Create-Directory ([string[]] $path) {
New-Item -Path $path -Force -ItemType 'Directory' | Out-Null
}
@@ -197,46 +193,37 @@ function InitializeDotNetCli([bool]$install, [bool]$createSdkLocationFile) {
function GetDotNetInstallScript([string] $dotnetRoot) {
$installScript = Join-Path $dotnetRoot 'dotnet-install.ps1'
if (!(Test-Path $installScript)) {
- create-directory $dotnetroot
-
- if ($useDefaultDotnetInstall)
- {
- $progresspreference = 'silentlycontinue' # don't display the console progress ui - it's a huge perf hit
+ Create-Directory $dotnetRoot
+ $ProgressPreference = 'SilentlyContinue' # Don't display the console progress UI - it's a huge perf hit
- $maxretries = 5
- $retries = 1
+ $maxRetries = 5
+ $retries = 1
- $uri = "https://dot.net/$dotnetinstallscriptversion/dotnet-install.ps1"
+ $uri = "https://dot.net/$dotnetInstallScriptVersion/dotnet-install.ps1"
- while($true) {
- try {
- write-host "get $uri"
- invoke-webrequest $uri -outfile $installscript
- break
- }
- catch {
- write-host "failed to download '$uri'"
- write-error $_.exception.message -erroraction continue
- }
+ while($true) {
+ try {
+ Write-Host "GET $uri"
+ Invoke-WebRequest $uri -OutFile $installScript
+ break
+ }
+ catch {
+ Write-Host "Failed to download '$uri'"
+ Write-Error $_.Exception.Message -ErrorAction Continue
+ }
- if (++$retries -le $maxretries) {
- $delayinseconds = [math]::pow(2, $retries) - 1 # exponential backoff
- write-host "retrying. waiting for $delayinseconds seconds before next attempt ($retries of $maxretries)."
- start-sleep -seconds $delayinseconds
- }
- else {
- throw "unable to download file in $maxretries attempts."
- }
+ if (++$retries -le $maxRetries) {
+ $delayInSeconds = [math]::Pow(2, $retries) - 1 # Exponential backoff
+ Write-Host "Retrying. Waiting for $delayInSeconds seconds before next attempt ($retries of $maxRetries)."
+ Start-Sleep -Seconds $delayInSeconds
}
- }
- else
- {
- # Use a special version of the script from eng/common that understands the existence of a "productVersion.txt" in a dotnet path.
- # See https://github.com/dotnet/arcade/issues/6047 for details
- $engCommonCopy = Resolve-Path (Join-Path $PSScriptRoot 'dotnet-install-scripts\dotnet-install.ps1')
- Copy-Item $engCommonCopy -Destination $installScript -Force
+ else {
+ throw "Unable to download file in $maxRetries attempts."
+ }
+
}
}
+
return $installScript
}
@@ -384,7 +371,16 @@ function InitializeVisualStudioMSBuild([bool]$install, [object]$vsRequirements =
}
$msbuildVersionDir = if ([int]$vsMajorVersion -lt 16) { "$vsMajorVersion.0" } else { "Current" }
- return $global:_MSBuildExe = Join-Path $vsInstallDir "MSBuild\$msbuildVersionDir\Bin\msbuild.exe"
+
+ $local:BinFolder = Join-Path $vsInstallDir "MSBuild\$msbuildVersionDir\Bin"
+ $local:Prefer64bit = if (Get-Member -InputObject $vsRequirements -Name 'Prefer64bit') { $vsRequirements.Prefer64bit } else { $false }
+ if ($local:Prefer64bit -and (Test-Path(Join-Path $local:BinFolder "amd64"))) {
+ $global:_MSBuildExe = Join-Path $local:BinFolder "amd64\msbuild.exe"
+ } else {
+ $global:_MSBuildExe = Join-Path $local:BinFolder "msbuild.exe"
+ }
+
+ return $global:_MSBuildExe
}
function InitializeVisualStudioEnvironmentVariables([string] $vsInstallDir, [string] $vsMajorVersion) {
@@ -540,7 +536,7 @@ function GetDefaultMSBuildEngine() {
function GetNuGetPackageCachePath() {
if ($env:NUGET_PACKAGES -eq $null) {
- # Use local cache on CI to ensure deterministic build.
+ # Use local cache on CI to ensure deterministic build.
# Avoid using the http cache as workaround for https://github.com/NuGet/Home/issues/3116
# use global cache in dev builds to avoid cost of downloading packages.
# For directory normalization, see also: https://github.com/NuGet/Home/issues/7968
diff --git a/eng/common/tools.sh b/eng/common/tools.sh
index b5d63cb1b7cb..98186e784965 100755
--- a/eng/common/tools.sh
+++ b/eng/common/tools.sh
@@ -68,10 +68,6 @@ fi
runtime_source_feed=${runtime_source_feed:-''}
runtime_source_feed_key=${runtime_source_feed_key:-''}
-# Determines if dotnet-install.sh comes from the eng/common folder or the internet
-# (default = public version)
-use_default_dotnet_install=${use_default_dotnet_install:-false}
-
# Resolve any symlinks in the given path.
function ResolvePath {
local path=$1
@@ -271,30 +267,23 @@ function GetDotNetInstallScript {
if [[ ! -a "$install_script" ]]; then
mkdir -p "$root"
- if [[ "$use_default_dotnet_install" == true ]]; then
- echo "Downloading '$install_script_url'"
+ echo "Downloading '$install_script_url'"
- # Use curl if available, otherwise use wget
- if command -v curl > /dev/null; then
- with_retries curl "$install_script_url" -sSL --retry 10 --create-dirs -o "$install_script" || {
- local exit_code=$?
- Write-PipelineTelemetryError -category 'InitializeToolset' "Failed to acquire dotnet install script (exit code '$exit_code')."
- ExitWithExitCode $exit_code
- }
- else
- with_retries wget -v -O "$install_script" "$install_script_url" || {
- local exit_code=$?
- Write-PipelineTelemetryError -category 'InitializeToolset' "Failed to acquire dotnet install script (exit code '$exit_code')."
- ExitWithExitCode $exit_code
- }
- fi
+ # Use curl if available, otherwise use wget
+ if command -v curl > /dev/null; then
+ with_retries curl "$install_script_url" -sSL --retry 10 --create-dirs -o "$install_script" || {
+ local exit_code=$?
+ Write-PipelineTelemetryError -category 'InitializeToolset' "Failed to acquire dotnet install script (exit code '$exit_code')."
+ ExitWithExitCode $exit_code
+ }
else
- # Use a special version of the script from eng/common that understands the existence of a "productVersion.txt" in a dotnet path.
- # See https://github.com/dotnet/arcade/issues/6047 for details
- cp $repo_root/eng/common/dotnet-install-scripts/dotnet-install.sh $install_script
+ with_retries wget -v -O "$install_script" "$install_script_url" || {
+ local exit_code=$?
+ Write-PipelineTelemetryError -category 'InitializeToolset' "Failed to acquire dotnet install script (exit code '$exit_code')."
+ ExitWithExitCode $exit_code
+ }
fi
fi
-
# return value
_GetDotNetInstallScript="$install_script"
}
diff --git a/eng/helix/content/Directory.Build.empty.in b/eng/helix/content/Directory.Build.empty.in
new file mode 100644
index 000000000000..058246e40862
--- /dev/null
+++ b/eng/helix/content/Directory.Build.empty.in
@@ -0,0 +1 @@
+
diff --git a/eng/helix/content/RunTests/Directory.Build.props b/eng/helix/content/RunTests/Directory.Build.props
index c1df2220ddc6..058246e40862 100644
--- a/eng/helix/content/RunTests/Directory.Build.props
+++ b/eng/helix/content/RunTests/Directory.Build.props
@@ -1,2 +1 @@
-
-
\ No newline at end of file
+
diff --git a/eng/helix/content/RunTests/Directory.Build.targets b/eng/helix/content/RunTests/Directory.Build.targets
index c1df2220ddc6..058246e40862 100644
--- a/eng/helix/content/RunTests/Directory.Build.targets
+++ b/eng/helix/content/RunTests/Directory.Build.targets
@@ -1,2 +1 @@
-
-
\ No newline at end of file
+
diff --git a/eng/scripts/RunHelix.ps1 b/eng/scripts/RunHelix.ps1
index 0bad5574a4e7..1f5e43d5fd38 100644
--- a/eng/scripts/RunHelix.ps1
+++ b/eng/scripts/RunHelix.ps1
@@ -8,25 +8,38 @@
.PARAMETER HelixQueues
Set the Helix queues to use. The list is '+' or ';'-separated.
Some supported queues:
- Ubuntu.1604.Amd64.Open
Ubuntu.1804.Amd64.Open
+ Ubuntu.2004.Amd64.Open
Windows.10.Amd64.Open
+ Windows.10.Amd64.Server20H2.Open
Windows.81.Amd64.Open
Windows.7.Amd64.Open
OSX.1014.Amd64.Open
- Centos.7.Amd64.Open
Debian.9.Amd64.Open
Redhat.7.Amd64.Open
.PARAMETER RunQuarantinedTests
By default quarantined tests are not run. Set this to $true to run only the quarantined tests.
+.PARAMETER TargetArchitecture
+ The CPU architecture to build for (x64, x86, arm). Default=x64
+.PARAMETER MSBuildArguments
+ Additional MSBuild arguments to be passed through.
#>
+[CmdletBinding(PositionalBinding = $false)]
param(
[Parameter(Mandatory=$true)]
[string]$Project,
+
[string]$HelixQueues = "Windows.10.Amd64.Open",
+ [switch]$RunQuarantinedTests,
+
+ [ValidateSet('x64', 'x86', 'arm', 'arm64')]
[string]$TargetArchitecture = "x64",
- [bool]$RunQuarantinedTests = $false
+
+ # Capture the rest
+ [Parameter(ValueFromRemainingArguments = $true)]
+ [string[]]$MSBuildArguments
)
+
$ErrorActionPreference = 'Stop'
$ProgressPreference = 'SilentlyContinue' # Workaround PowerShell/PowerShell#2138
@@ -37,5 +50,11 @@ $env:BUILD_SOURCEBRANCH="local"
$env:BUILD_REPOSITORY_NAME="aspnetcore"
$env:SYSTEM_TEAMPROJECT="aspnetcore"
+Write-Host -ForegroundColor Yellow "If running tests that need the shared Fx, run './build -pack -all' before this."
+Write-Host -ForegroundColor Yellow "And if packing for a different platform, add '/p:CrossgenOutput=false'."
+
$HelixQueues = $HelixQueues -replace ";", "%3B"
-dotnet msbuild $Project /t:Helix /p:TargetArchitecture="$TargetArchitecture" /p:IsRequiredCheck=true /p:IsHelixDaily=true /p:HelixTargetQueues=$HelixQueues /p:RunQuarantinedTests=$RunQuarantinedTests /p:_UseHelixOpenQueues=true /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log
+dotnet msbuild $Project /t:Helix /p:TargetArchitecture="$TargetArchitecture" /p:IsRequiredCheck=true `
+ /p:IsHelixDaily=true /p:HelixTargetQueues=$HelixQueues /p:RunQuarantinedTests=$RunQuarantinedTests `
+ /p:_UseHelixOpenQueues=true /p:CrossgenOutput=false /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log `
+ @MSBuildArguments
diff --git a/eng/targets/CSharp.Common.targets b/eng/targets/CSharp.Common.targets
index babdae75f264..5da1b5c47d5d 100644
--- a/eng/targets/CSharp.Common.targets
+++ b/eng/targets/CSharp.Common.targets
@@ -6,32 +6,42 @@
.NETFramework
-
- <_TFMDirectory>$(TargetFramework)
- <_TFMDirectory Condition=" '$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' ">netcoreapp
+
+ true
+ false
$(NoWarn);RS0041
-
- $(NoWarn);CA1416
+
+ $(NoWarn);CA1416
-
+
+ Condition=" Exists('$(MSBuildProjectDirectory)\PublicAPI.Shipped.txt') AND ! $(AddPublicApiAnalyzers) ">
+
+
+ <_PublicAPIAnalyzers Include="@(Analyzer->WithMetadataValue('NuGetPackageId','Microsoft.CodeAnalysis.PublicApiAnalyzers'))" />
+
+
+
+
+
+
+
+
-
+
-
+
@@ -30,11 +30,10 @@
-
-
+
diff --git a/eng/targets/Helix.props b/eng/targets/Helix.props
index 032bcd49285e..941b2c0df778 100644
--- a/eng/targets/Helix.props
+++ b/eng/targets/Helix.props
@@ -34,7 +34,7 @@
-
+
diff --git a/eng/targets/Helix.targets b/eng/targets/Helix.targets
index ba28388707f2..96433f083ec6 100644
--- a/eng/targets/Helix.targets
+++ b/eng/targets/Helix.targets
@@ -116,6 +116,42 @@
+
+
+
+
+
+
+
+
diff --git a/eng/targets/Packaging.targets b/eng/targets/Packaging.targets
index aa4b272cba53..e1a555056fad 100644
--- a/eng/targets/Packaging.targets
+++ b/eng/targets/Packaging.targets
@@ -1,7 +1,8 @@
+
-
-
+ Condition=" '$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' AND
+ '$(MSBuildRestoreSessionId)' != '' AND
+ @(_InvalidReferenceToNonSharedFxAssembly->Count()) != 0 "
+ Text="Cannot reference "%(Identity)". This dependency is not in the shared framework. See docs/SharedFramework.md for instructions on how to modify what is in the shared framework." />
+ Text="Cannot reference "%(Identity)" with a ProjectReference item; use a Reference item." />
@@ -248,16 +247,57 @@
Text="Could not resolve this reference. Could not locate the package or project for "%(Reference.Identity)". Did you update baselines and dependencies lists? See docs/ReferenceResolution.md for more details." />
+
+
+
+
+
+
+
+
+
+
+
+
+ <_ResolvedCompileFileDefinitionsToChange
+ HintPath="$([System.String]::new('%(Identity)').Replace('\%(Version)\', '\%(RTMVersion)\').Replace('/%(Version)/', '/%(RTMVersion)/'))" />
+
+
+ <_ResolvedCompileFileDefinitionsToChange Remove="@(_ResolvedCompileFileDefinitionsToChange)" />
+
+
+
<_CompileTfmUsingReferenceAssemblies>false
<_CompileTfmUsingReferenceAssemblies
Condition=" '$(CompileUsingReferenceAssemblies)' != false AND '$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' ">true
+
-
+
+
+
+
+
+
+
+
diff --git a/eng/targets/Wix.Common.targets b/eng/targets/Wix.Common.targets
index 3fdb8af56d14..5206b96c0876 100644
--- a/eng/targets/Wix.Common.targets
+++ b/eng/targets/Wix.Common.targets
@@ -18,6 +18,14 @@
+
+
+ <_GeneratedPackageVersion>$(PackageVersion)
+ <_GeneratedPackageVersion
+ Condition="! $(PackageVersion.Contains('$(_PreReleaseLabel)'))">$(PackageVersion)-$(_PreReleaseLabel)$(_BuildNumberLabels)
+
+ $(OutputNamePrefix)$(_GeneratedPackageVersion)$(OutputNameSuffix)
+
yes
$(OutputName.Replace('-', '_')).cab
$(ProductName)
diff --git a/eng/tools/BaselineGenerator/BaselineGenerator.csproj b/eng/tools/BaselineGenerator/BaselineGenerator.csproj
index 775e7523c847..21528646afba 100644
--- a/eng/tools/BaselineGenerator/BaselineGenerator.csproj
+++ b/eng/tools/BaselineGenerator/BaselineGenerator.csproj
@@ -7,7 +7,7 @@
-
+
diff --git a/eng/tools/BaselineGenerator/Program.cs b/eng/tools/BaselineGenerator/Program.cs
index e77b35edeeeb..e18791792179 100644
--- a/eng/tools/BaselineGenerator/Program.cs
+++ b/eng/tools/BaselineGenerator/Program.cs
@@ -156,7 +156,7 @@ private async Task Run()
StringComparison.OrdinalIgnoreCase))
{
targetCondition =
- $"('$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' OR {targetCondition})";
+ $"('$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' OR '$(TargetFramework)' == '{defaultTarget}')";
}
var itemGroup = new XElement(
diff --git a/eng/tools/GenerateFiles/Directory.Build.props.in b/eng/tools/GenerateFiles/Directory.Build.props.in
new file mode 100644
index 000000000000..97f9206a78c4
--- /dev/null
+++ b/eng/tools/GenerateFiles/Directory.Build.props.in
@@ -0,0 +1,7 @@
+
+
+ ${DefaultNetCoreTargetFramework}
+ ${DefaultNetCoreTargetFramework}
+ true
+
+
diff --git a/eng/tools/GenerateFiles/Directory.Build.targets.in b/eng/tools/GenerateFiles/Directory.Build.targets.in
new file mode 100644
index 000000000000..aa4cd6cd297a
--- /dev/null
+++ b/eng/tools/GenerateFiles/Directory.Build.targets.in
@@ -0,0 +1,44 @@
+
+
+
+ 99.9
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/eng/tools/GenerateFiles/GenerateFiles.csproj b/eng/tools/GenerateFiles/GenerateFiles.csproj
new file mode 100644
index 000000000000..42bcca694b9f
--- /dev/null
+++ b/eng/tools/GenerateFiles/GenerateFiles.csproj
@@ -0,0 +1,33 @@
+
+
+ $(DefaultNetCoreTargetFramework)
+
+
+
+
+
+ <_TemplateProperties>
+ DefaultNetCoreTargetFramework=$(DefaultNetCoreTargetFramework);
+ KnownAppHostPackOrFrameworkReferenceTfm=$(KnownAppHostPackOrFrameworkReferenceTfm);
+ MicrosoftAspNetCoreAppRefPackageVersion=$(TargetingPackVersion);
+ MicrosoftAspNetCoreAppRuntimePackageVersion=$(SharedFxVersion);
+ MicrosoftNETCoreAppRefPackageVersion=$(MicrosoftNETCoreAppRefPackageVersion);
+ MicrosoftNETCoreAppRuntimeVersion=$(MicrosoftNETCoreAppRuntimeVersion);
+ MicrosoftNetCompilersToolsetPackageVersion=$(MicrosoftNetCompilersToolsetPackageVersion);
+ SupportedRuntimeIdentifiers=$(SupportedRuntimeIdentifiers.Trim())
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/eng/tools/RepoTasks/RepoTasks.csproj b/eng/tools/RepoTasks/RepoTasks.csproj
index e71a1d759183..dde3165107ee 100644
--- a/eng/tools/RepoTasks/RepoTasks.csproj
+++ b/eng/tools/RepoTasks/RepoTasks.csproj
@@ -1,5 +1,4 @@
-
$(DefaultNetCoreTargetFramework)
$(TargetFrameworks);net472
@@ -9,11 +8,23 @@
true
false
+
+ false
-
+
+
+
+
diff --git a/global.json b/global.json
index 213d84ae5332..f84d8bb7c4c9 100644
--- a/global.json
+++ b/global.json
@@ -1,19 +1,19 @@
{
"sdk": {
- "version": "5.0.100-rc.2.20479.15"
+ "version": "5.0.205"
},
"tools": {
- "dotnet": "5.0.100-rc.2.20479.15",
+ "dotnet": "5.0.205",
"runtimes": {
"dotnet/x64": [
- "2.1.18",
+ "2.1.28",
"$(MicrosoftNETCoreAppInternalPackageVersion)"
],
"dotnet/x86": [
"$(MicrosoftNETCoreAppInternalPackageVersion)"
],
"aspnetcore/x64": [
- "3.1.4"
+ "3.1.17"
]
},
"Git": "2.22.0",
@@ -30,7 +30,7 @@
},
"msbuild-sdks": {
"Yarn.MSBuild": "1.15.2",
- "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.20510.1",
- "Microsoft.DotNet.Helix.Sdk": "5.0.0-beta.20510.1"
+ "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.21328.3",
+ "Microsoft.DotNet.Helix.Sdk": "5.0.0-beta.21328.3"
}
}
diff --git a/src/Analyzers/Microsoft.AspNetCore.Analyzer.Testing/src/DiagnosticProject.cs b/src/Analyzers/Microsoft.AspNetCore.Analyzer.Testing/src/DiagnosticProject.cs
index 013bbf151c89..d390db41afb1 100644
--- a/src/Analyzers/Microsoft.AspNetCore.Analyzer.Testing/src/DiagnosticProject.cs
+++ b/src/Analyzers/Microsoft.AspNetCore.Analyzer.Testing/src/DiagnosticProject.cs
@@ -25,6 +25,7 @@ public class DiagnosticProject
///
public static string TestProjectName = "TestProject";
+ private static readonly ICompilationAssemblyResolver _assemblyResolver = new AppBaseCompilationAssemblyResolver();
private static readonly Dictionary _solutionCache = new Dictionary();
public static Project Create(Assembly testAssembly, string[] sources)
@@ -41,7 +42,7 @@ public static Project Create(Assembly testAssembly, string[] sources)
foreach (var defaultCompileLibrary in DependencyContext.Load(testAssembly).CompileLibraries)
{
- foreach (var resolveReferencePath in defaultCompileLibrary.ResolveReferencePaths(new AppLocalResolver()))
+ foreach (var resolveReferencePath in defaultCompileLibrary.ResolveReferencePaths(_assemblyResolver))
{
solution = solution.AddMetadataReference(projectId, MetadataReference.CreateFromFile(resolveReferencePath));
}
@@ -69,31 +70,5 @@ public static Project Create(Assembly testAssembly, string[] sources)
return solution.GetProject(testProject);
}
-
- // Required to resolve compilation assemblies inside unit tests
- private class AppLocalResolver : ICompilationAssemblyResolver
- {
- public bool TryResolveAssemblyPaths(CompilationLibrary library, List assemblies)
- {
- foreach (var assembly in library.Assemblies)
- {
- var dll = Path.Combine(Directory.GetCurrentDirectory(), "refs", Path.GetFileName(assembly));
- if (File.Exists(dll))
- {
- assemblies.Add(dll);
- return true;
- }
-
- dll = Path.Combine(Directory.GetCurrentDirectory(), Path.GetFileName(assembly));
- if (File.Exists(dll))
- {
- assemblies.Add(dll);
- return true;
- }
- }
-
- return false;
- }
- }
}
}
diff --git a/src/Analyzers/Microsoft.AspNetCore.Analyzer.Testing/src/Microsoft.AspNetCore.Analyzer.Testing.csproj b/src/Analyzers/Microsoft.AspNetCore.Analyzer.Testing/src/Microsoft.AspNetCore.Analyzer.Testing.csproj
index 01e88ae148a8..88ac17550a80 100644
--- a/src/Analyzers/Microsoft.AspNetCore.Analyzer.Testing/src/Microsoft.AspNetCore.Analyzer.Testing.csproj
+++ b/src/Analyzers/Microsoft.AspNetCore.Analyzer.Testing/src/Microsoft.AspNetCore.Analyzer.Testing.csproj
@@ -5,8 +5,9 @@
netstandard2.0
$(PackageTags);testing
true
-
+
false
+ true
true
false
diff --git a/src/Antiforgery/src/PublicAPI.Shipped.txt b/src/Antiforgery/src/PublicAPI.Shipped.txt
index 7dc5c58110bf..575a0a0b8605 100644
--- a/src/Antiforgery/src/PublicAPI.Shipped.txt
+++ b/src/Antiforgery/src/PublicAPI.Shipped.txt
@@ -1 +1,33 @@
#nullable enable
+Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions
+Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.AntiforgeryOptions() -> void
+Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.Cookie.get -> Microsoft.AspNetCore.Http.CookieBuilder!
+Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.Cookie.set -> void
+Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.FormFieldName.get -> string!
+Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.FormFieldName.set -> void
+Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.HeaderName.get -> string?
+Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.HeaderName.set -> void
+Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.SuppressXFrameOptionsHeader.get -> bool
+Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.SuppressXFrameOptionsHeader.set -> void
+Microsoft.AspNetCore.Antiforgery.AntiforgeryTokenSet
+Microsoft.AspNetCore.Antiforgery.AntiforgeryTokenSet.AntiforgeryTokenSet(string? requestToken, string? cookieToken, string! formFieldName, string? headerName) -> void
+Microsoft.AspNetCore.Antiforgery.AntiforgeryTokenSet.CookieToken.get -> string?
+Microsoft.AspNetCore.Antiforgery.AntiforgeryTokenSet.FormFieldName.get -> string!
+Microsoft.AspNetCore.Antiforgery.AntiforgeryTokenSet.HeaderName.get -> string?
+Microsoft.AspNetCore.Antiforgery.AntiforgeryTokenSet.RequestToken.get -> string?
+Microsoft.AspNetCore.Antiforgery.AntiforgeryValidationException
+Microsoft.AspNetCore.Antiforgery.AntiforgeryValidationException.AntiforgeryValidationException(string! message) -> void
+Microsoft.AspNetCore.Antiforgery.AntiforgeryValidationException.AntiforgeryValidationException(string! message, System.Exception? innerException) -> void
+Microsoft.AspNetCore.Antiforgery.IAntiforgery
+Microsoft.AspNetCore.Antiforgery.IAntiforgery.GetAndStoreTokens(Microsoft.AspNetCore.Http.HttpContext! httpContext) -> Microsoft.AspNetCore.Antiforgery.AntiforgeryTokenSet!
+Microsoft.AspNetCore.Antiforgery.IAntiforgery.GetTokens(Microsoft.AspNetCore.Http.HttpContext! httpContext) -> Microsoft.AspNetCore.Antiforgery.AntiforgeryTokenSet!
+Microsoft.AspNetCore.Antiforgery.IAntiforgery.IsRequestValidAsync(Microsoft.AspNetCore.Http.HttpContext! httpContext) -> System.Threading.Tasks.Task!
+Microsoft.AspNetCore.Antiforgery.IAntiforgery.SetCookieTokenAndHeader(Microsoft.AspNetCore.Http.HttpContext! httpContext) -> void
+Microsoft.AspNetCore.Antiforgery.IAntiforgery.ValidateRequestAsync(Microsoft.AspNetCore.Http.HttpContext! httpContext) -> System.Threading.Tasks.Task!
+Microsoft.AspNetCore.Antiforgery.IAntiforgeryAdditionalDataProvider
+Microsoft.AspNetCore.Antiforgery.IAntiforgeryAdditionalDataProvider.GetAdditionalData(Microsoft.AspNetCore.Http.HttpContext! context) -> string!
+Microsoft.AspNetCore.Antiforgery.IAntiforgeryAdditionalDataProvider.ValidateAdditionalData(Microsoft.AspNetCore.Http.HttpContext! context, string! additionalData) -> bool
+Microsoft.Extensions.DependencyInjection.AntiforgeryServiceCollectionExtensions
+static Microsoft.Extensions.DependencyInjection.AntiforgeryServiceCollectionExtensions.AddAntiforgery(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> Microsoft.Extensions.DependencyInjection.IServiceCollection!
+static Microsoft.Extensions.DependencyInjection.AntiforgeryServiceCollectionExtensions.AddAntiforgery(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services, System.Action! setupAction) -> Microsoft.Extensions.DependencyInjection.IServiceCollection!
+static readonly Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.DefaultCookiePrefix -> string!
diff --git a/src/Antiforgery/src/PublicAPI.Unshipped.txt b/src/Antiforgery/src/PublicAPI.Unshipped.txt
index 575a0a0b8605..7dc5c58110bf 100644
--- a/src/Antiforgery/src/PublicAPI.Unshipped.txt
+++ b/src/Antiforgery/src/PublicAPI.Unshipped.txt
@@ -1,33 +1 @@
#nullable enable
-Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions
-Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.AntiforgeryOptions() -> void
-Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.Cookie.get -> Microsoft.AspNetCore.Http.CookieBuilder!
-Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.Cookie.set -> void
-Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.FormFieldName.get -> string!
-Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.FormFieldName.set -> void
-Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.HeaderName.get -> string?
-Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.HeaderName.set -> void
-Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.SuppressXFrameOptionsHeader.get -> bool
-Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.SuppressXFrameOptionsHeader.set -> void
-Microsoft.AspNetCore.Antiforgery.AntiforgeryTokenSet
-Microsoft.AspNetCore.Antiforgery.AntiforgeryTokenSet.AntiforgeryTokenSet(string? requestToken, string? cookieToken, string! formFieldName, string? headerName) -> void
-Microsoft.AspNetCore.Antiforgery.AntiforgeryTokenSet.CookieToken.get -> string?
-Microsoft.AspNetCore.Antiforgery.AntiforgeryTokenSet.FormFieldName.get -> string!
-Microsoft.AspNetCore.Antiforgery.AntiforgeryTokenSet.HeaderName.get -> string?
-Microsoft.AspNetCore.Antiforgery.AntiforgeryTokenSet.RequestToken.get -> string?
-Microsoft.AspNetCore.Antiforgery.AntiforgeryValidationException
-Microsoft.AspNetCore.Antiforgery.AntiforgeryValidationException.AntiforgeryValidationException(string! message) -> void
-Microsoft.AspNetCore.Antiforgery.AntiforgeryValidationException.AntiforgeryValidationException(string! message, System.Exception? innerException) -> void
-Microsoft.AspNetCore.Antiforgery.IAntiforgery
-Microsoft.AspNetCore.Antiforgery.IAntiforgery.GetAndStoreTokens(Microsoft.AspNetCore.Http.HttpContext! httpContext) -> Microsoft.AspNetCore.Antiforgery.AntiforgeryTokenSet!
-Microsoft.AspNetCore.Antiforgery.IAntiforgery.GetTokens(Microsoft.AspNetCore.Http.HttpContext! httpContext) -> Microsoft.AspNetCore.Antiforgery.AntiforgeryTokenSet!
-Microsoft.AspNetCore.Antiforgery.IAntiforgery.IsRequestValidAsync(Microsoft.AspNetCore.Http.HttpContext! httpContext) -> System.Threading.Tasks.Task!
-Microsoft.AspNetCore.Antiforgery.IAntiforgery.SetCookieTokenAndHeader(Microsoft.AspNetCore.Http.HttpContext! httpContext) -> void
-Microsoft.AspNetCore.Antiforgery.IAntiforgery.ValidateRequestAsync(Microsoft.AspNetCore.Http.HttpContext! httpContext) -> System.Threading.Tasks.Task!
-Microsoft.AspNetCore.Antiforgery.IAntiforgeryAdditionalDataProvider
-Microsoft.AspNetCore.Antiforgery.IAntiforgeryAdditionalDataProvider.GetAdditionalData(Microsoft.AspNetCore.Http.HttpContext! context) -> string!
-Microsoft.AspNetCore.Antiforgery.IAntiforgeryAdditionalDataProvider.ValidateAdditionalData(Microsoft.AspNetCore.Http.HttpContext! context, string! additionalData) -> bool
-Microsoft.Extensions.DependencyInjection.AntiforgeryServiceCollectionExtensions
-static Microsoft.Extensions.DependencyInjection.AntiforgeryServiceCollectionExtensions.AddAntiforgery(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> Microsoft.Extensions.DependencyInjection.IServiceCollection!
-static Microsoft.Extensions.DependencyInjection.AntiforgeryServiceCollectionExtensions.AddAntiforgery(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services, System.Action! setupAction) -> Microsoft.Extensions.DependencyInjection.IServiceCollection!
-static readonly Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.DefaultCookiePrefix -> string!
diff --git a/src/Azure/AzureAD/Authentication.AzureAD.UI/src/PublicAPI.Shipped.txt b/src/Azure/AzureAD/Authentication.AzureAD.UI/src/PublicAPI.Shipped.txt
new file mode 100644
index 000000000000..c6696c73a02c
--- /dev/null
+++ b/src/Azure/AzureAD/Authentication.AzureAD.UI/src/PublicAPI.Shipped.txt
@@ -0,0 +1,47 @@
+#nullable enable
+Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADDefaults
+Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADOptions
+Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADOptions.AzureADOptions() -> void
+Microsoft.AspNetCore.Authentication.AzureAD.UI.Internal.AccessDeniedModel
+Microsoft.AspNetCore.Authentication.AzureAD.UI.Internal.AccessDeniedModel.AccessDeniedModel() -> void
+Microsoft.AspNetCore.Authentication.AzureAD.UI.Internal.AccessDeniedModel.OnGet() -> void
+Microsoft.AspNetCore.Authentication.AzureAD.UI.Internal.ErrorModel
+Microsoft.AspNetCore.Authentication.AzureAD.UI.Internal.ErrorModel.ErrorModel() -> void
+Microsoft.AspNetCore.Authentication.AzureAD.UI.Internal.ErrorModel.OnGet() -> void
+Microsoft.AspNetCore.Authentication.AzureAD.UI.Internal.ErrorModel.ShowRequestId.get -> bool
+Microsoft.AspNetCore.Authentication.AzureAD.UI.Internal.SignedOutModel
+Microsoft.AspNetCore.Authentication.AzureAD.UI.Internal.SignedOutModel.SignedOutModel() -> void
+Microsoft.AspNetCore.Authentication.AzureADAuthenticationBuilderExtensions
+~Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADOptions.AllSchemes.get -> string[]
+~Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADOptions.CallbackPath.get -> string
+~Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADOptions.CallbackPath.set -> void
+~Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADOptions.ClientId.get -> string
+~Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADOptions.ClientId.set -> void
+~Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADOptions.ClientSecret.get -> string
+~Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADOptions.ClientSecret.set -> void
+~Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADOptions.CookieSchemeName.get -> string
+~Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADOptions.CookieSchemeName.set -> void
+~Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADOptions.Domain.get -> string
+~Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADOptions.Domain.set -> void
+~Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADOptions.Instance.get -> string
+~Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADOptions.Instance.set -> void
+~Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADOptions.JwtBearerSchemeName.get -> string
+~Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADOptions.OpenIdConnectSchemeName.get -> string
+~Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADOptions.OpenIdConnectSchemeName.set -> void
+~Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADOptions.SignedOutCallbackPath.get -> string
+~Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADOptions.SignedOutCallbackPath.set -> void
+~Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADOptions.TenantId.get -> string
+~Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADOptions.TenantId.set -> void
+~Microsoft.AspNetCore.Authentication.AzureAD.UI.Internal.ErrorModel.RequestId.get -> string
+~Microsoft.AspNetCore.Authentication.AzureAD.UI.Internal.ErrorModel.RequestId.set -> void
+~Microsoft.AspNetCore.Authentication.AzureAD.UI.Internal.SignedOutModel.OnGet() -> Microsoft.AspNetCore.Mvc.IActionResult
+~const Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADDefaults.AuthenticationScheme = "AzureAD" -> string
+~const Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADDefaults.BearerAuthenticationScheme = "AzureADBearer" -> string
+~const Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADDefaults.CookieScheme = "AzureADCookie" -> string
+~const Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADDefaults.JwtBearerAuthenticationScheme = "AzureADJwtBearer" -> string
+~const Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADDefaults.OpenIdScheme = "AzureADOpenID" -> string
+~static Microsoft.AspNetCore.Authentication.AzureADAuthenticationBuilderExtensions.AddAzureAD(this Microsoft.AspNetCore.Authentication.AuthenticationBuilder builder, System.Action configureOptions) -> Microsoft.AspNetCore.Authentication.AuthenticationBuilder
+~static Microsoft.AspNetCore.Authentication.AzureADAuthenticationBuilderExtensions.AddAzureAD(this Microsoft.AspNetCore.Authentication.AuthenticationBuilder builder, string scheme, string openIdConnectScheme, string cookieScheme, string displayName, System.Action configureOptions) -> Microsoft.AspNetCore.Authentication.AuthenticationBuilder
+~static Microsoft.AspNetCore.Authentication.AzureADAuthenticationBuilderExtensions.AddAzureADBearer(this Microsoft.AspNetCore.Authentication.AuthenticationBuilder builder, System.Action configureOptions) -> Microsoft.AspNetCore.Authentication.AuthenticationBuilder
+~static Microsoft.AspNetCore.Authentication.AzureADAuthenticationBuilderExtensions.AddAzureADBearer(this Microsoft.AspNetCore.Authentication.AuthenticationBuilder builder, string scheme, string jwtBearerScheme, System.Action configureOptions) -> Microsoft.AspNetCore.Authentication.AuthenticationBuilder
+~static readonly Microsoft.AspNetCore.Authentication.AzureAD.UI.AzureADDefaults.DisplayName -> string
diff --git a/src/Azure/AzureAD/Authentication.AzureAD.UI/src/PublicAPI.Unshipped.txt b/src/Azure/AzureAD/Authentication.AzureAD.UI/src/PublicAPI.Unshipped.txt
new file mode 100644
index 000000000000..7dc5c58110bf
--- /dev/null
+++ b/src/Azure/AzureAD/Authentication.AzureAD.UI/src/PublicAPI.Unshipped.txt
@@ -0,0 +1 @@
+#nullable enable
diff --git a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/PublicAPI.Shipped.txt b/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/PublicAPI.Shipped.txt
new file mode 100644
index 000000000000..dc774f64eeb5
--- /dev/null
+++ b/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/PublicAPI.Shipped.txt
@@ -0,0 +1,53 @@
+#nullable enable
+Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2CDefaults
+Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions
+Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.AzureADB2COptions() -> void
+Microsoft.AspNetCore.Authentication.AzureADB2C.UI.Internal.AccessDeniedModel
+Microsoft.AspNetCore.Authentication.AzureADB2C.UI.Internal.AccessDeniedModel.AccessDeniedModel() -> void
+Microsoft.AspNetCore.Authentication.AzureADB2C.UI.Internal.AccessDeniedModel.OnGet() -> void
+Microsoft.AspNetCore.Authentication.AzureADB2C.UI.Internal.ErrorModel
+Microsoft.AspNetCore.Authentication.AzureADB2C.UI.Internal.ErrorModel.ErrorModel() -> void
+Microsoft.AspNetCore.Authentication.AzureADB2C.UI.Internal.ErrorModel.OnGet() -> void
+Microsoft.AspNetCore.Authentication.AzureADB2C.UI.Internal.ErrorModel.ShowRequestId.get -> bool
+Microsoft.AspNetCore.Authentication.AzureADB2C.UI.Internal.SignedOutModel
+Microsoft.AspNetCore.Authentication.AzureADB2C.UI.Internal.SignedOutModel.SignedOutModel() -> void
+Microsoft.AspNetCore.Authentication.AzureADB2CAuthenticationBuilderExtensions
+~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.AllSchemes.get -> string[]
+~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.CallbackPath.get -> string
+~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.CallbackPath.set -> void
+~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.ClientId.get -> string
+~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.ClientId.set -> void
+~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.ClientSecret.get -> string
+~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.ClientSecret.set -> void
+~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.CookieSchemeName.get -> string
+~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.CookieSchemeName.set -> void
+~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.DefaultPolicy.get -> string
+~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.Domain.get -> string
+~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.Domain.set -> void
+~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.EditProfilePolicyId.get -> string
+~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.EditProfilePolicyId.set -> void
+~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.Instance.get -> string
+~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.Instance.set -> void
+~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.JwtBearerSchemeName.get -> string
+~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.OpenIdConnectSchemeName.get -> string
+~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.OpenIdConnectSchemeName.set -> void
+~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.ResetPasswordPolicyId.get -> string
+~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.ResetPasswordPolicyId.set -> void
+~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.SignUpSignInPolicyId.get -> string
+~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.SignUpSignInPolicyId.set -> void
+~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.SignedOutCallbackPath.get -> string
+~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COptions.SignedOutCallbackPath.set -> void
+~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.Internal.ErrorModel.RequestId.get -> string
+~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.Internal.ErrorModel.RequestId.set -> void
+~Microsoft.AspNetCore.Authentication.AzureADB2C.UI.Internal.SignedOutModel.OnGet() -> Microsoft.AspNetCore.Mvc.IActionResult
+~const Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2CDefaults.AuthenticationScheme = "AzureADB2C" -> string
+~const Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2CDefaults.BearerAuthenticationScheme = "AzureADB2CBearer" -> string
+~const Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2CDefaults.CookieScheme = "AzureADB2CCookie" -> string
+~const Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2CDefaults.JwtBearerAuthenticationScheme = "AzureADB2CJwtBearer" -> string
+~const Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2CDefaults.OpenIdScheme = "AzureADB2COpenID" -> string
+~static Microsoft.AspNetCore.Authentication.AzureADB2CAuthenticationBuilderExtensions.AddAzureADB2C(this Microsoft.AspNetCore.Authentication.AuthenticationBuilder builder, System.Action configureOptions) -> Microsoft.AspNetCore.Authentication.AuthenticationBuilder
+~static Microsoft.AspNetCore.Authentication.AzureADB2CAuthenticationBuilderExtensions.AddAzureADB2C(this Microsoft.AspNetCore.Authentication.AuthenticationBuilder builder, string scheme, string openIdConnectScheme, string cookieScheme, string displayName, System.Action configureOptions) -> Microsoft.AspNetCore.Authentication.AuthenticationBuilder
+~static Microsoft.AspNetCore.Authentication.AzureADB2CAuthenticationBuilderExtensions.AddAzureADB2CBearer(this Microsoft.AspNetCore.Authentication.AuthenticationBuilder builder, System.Action configureOptions) -> Microsoft.AspNetCore.Authentication.AuthenticationBuilder
+~static Microsoft.AspNetCore.Authentication.AzureADB2CAuthenticationBuilderExtensions.AddAzureADB2CBearer(this Microsoft.AspNetCore.Authentication.AuthenticationBuilder builder, string scheme, string jwtBearerScheme, System.Action configureOptions) -> Microsoft.AspNetCore.Authentication.AuthenticationBuilder
+~static readonly Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2CDefaults.DisplayName -> string
+~static readonly Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2CDefaults.PolicyKey -> string
diff --git a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/PublicAPI.Unshipped.txt b/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/PublicAPI.Unshipped.txt
new file mode 100644
index 000000000000..7dc5c58110bf
--- /dev/null
+++ b/src/Azure/AzureAD/Authentication.AzureADB2C.UI/src/PublicAPI.Unshipped.txt
@@ -0,0 +1 @@
+#nullable enable
diff --git a/src/Azure/AzureAppServices.HostingStartup/src/PublicAPI.Shipped.txt b/src/Azure/AzureAppServices.HostingStartup/src/PublicAPI.Shipped.txt
index 7dc5c58110bf..8ae5bbc1c5f7 100644
--- a/src/Azure/AzureAppServices.HostingStartup/src/PublicAPI.Shipped.txt
+++ b/src/Azure/AzureAppServices.HostingStartup/src/PublicAPI.Shipped.txt
@@ -1 +1,4 @@
#nullable enable
+Microsoft.AspNetCore.AzureAppServices.HostingStartup.AzureAppServicesHostingStartup
+Microsoft.AspNetCore.AzureAppServices.HostingStartup.AzureAppServicesHostingStartup.AzureAppServicesHostingStartup() -> void
+~Microsoft.AspNetCore.AzureAppServices.HostingStartup.AzureAppServicesHostingStartup.Configure(Microsoft.AspNetCore.Hosting.IWebHostBuilder builder) -> void
diff --git a/src/Azure/AzureAppServices.HostingStartup/src/PublicAPI.Unshipped.txt b/src/Azure/AzureAppServices.HostingStartup/src/PublicAPI.Unshipped.txt
index 8ae5bbc1c5f7..7dc5c58110bf 100644
--- a/src/Azure/AzureAppServices.HostingStartup/src/PublicAPI.Unshipped.txt
+++ b/src/Azure/AzureAppServices.HostingStartup/src/PublicAPI.Unshipped.txt
@@ -1,4 +1 @@
#nullable enable
-Microsoft.AspNetCore.AzureAppServices.HostingStartup.AzureAppServicesHostingStartup
-Microsoft.AspNetCore.AzureAppServices.HostingStartup.AzureAppServicesHostingStartup.AzureAppServicesHostingStartup() -> void
-~Microsoft.AspNetCore.AzureAppServices.HostingStartup.AzureAppServicesHostingStartup.Configure(Microsoft.AspNetCore.Hosting.IWebHostBuilder builder) -> void
diff --git a/src/Azure/AzureAppServicesIntegration/src/PublicAPI.Shipped.txt b/src/Azure/AzureAppServicesIntegration/src/PublicAPI.Shipped.txt
index 7dc5c58110bf..8a21c33de6f3 100644
--- a/src/Azure/AzureAppServicesIntegration/src/PublicAPI.Shipped.txt
+++ b/src/Azure/AzureAppServicesIntegration/src/PublicAPI.Shipped.txt
@@ -1 +1,3 @@
#nullable enable
+Microsoft.AspNetCore.Hosting.AppServicesWebHostBuilderExtensions
+~static Microsoft.AspNetCore.Hosting.AppServicesWebHostBuilderExtensions.UseAzureAppServices(this Microsoft.AspNetCore.Hosting.IWebHostBuilder hostBuilder) -> Microsoft.AspNetCore.Hosting.IWebHostBuilder
diff --git a/src/Azure/AzureAppServicesIntegration/src/PublicAPI.Unshipped.txt b/src/Azure/AzureAppServicesIntegration/src/PublicAPI.Unshipped.txt
index 8a21c33de6f3..7dc5c58110bf 100644
--- a/src/Azure/AzureAppServicesIntegration/src/PublicAPI.Unshipped.txt
+++ b/src/Azure/AzureAppServicesIntegration/src/PublicAPI.Unshipped.txt
@@ -1,3 +1 @@
#nullable enable
-Microsoft.AspNetCore.Hosting.AppServicesWebHostBuilderExtensions
-~static Microsoft.AspNetCore.Hosting.AppServicesWebHostBuilderExtensions.UseAzureAppServices(this Microsoft.AspNetCore.Hosting.IWebHostBuilder hostBuilder) -> Microsoft.AspNetCore.Hosting.IWebHostBuilder
diff --git a/src/Components/Analyzers/test/AnalyzerTestBase.cs b/src/Components/Analyzers/test/AnalyzerTestBase.cs
index 91bfe2d9cc41..30101929bfd2 100644
--- a/src/Components/Analyzers/test/AnalyzerTestBase.cs
+++ b/src/Components/Analyzers/test/AnalyzerTestBase.cs
@@ -5,20 +5,20 @@
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Analyzer.Testing;
-using Microsoft.AspNetCore.Testing;
using Microsoft.CodeAnalysis;
namespace Microsoft.AspNetCore.Components.Analyzers
{
public abstract class AnalyzerTestBase
{
- private static readonly string ProjectDirectory = GetProjectDirectory();
+ // Test files are copied to both the bin/ and publish/ folders. Use BaseDirectory on or off Helix.
+ private static readonly string ProjectDirectory = AppContext.BaseDirectory;
public TestSource Read(string source)
{
if (!source.EndsWith(".cs"))
{
- source = source + ".cs";
+ source += ".cs";
}
var filePath = Path.Combine(ProjectDirectory, "TestFiles", GetType().Name, source);
@@ -35,7 +35,7 @@ public Project CreateProject(string source)
{
if (!source.EndsWith(".cs"))
{
- source = source + ".cs";
+ source += ".cs";
}
var read = Read(source);
@@ -46,22 +46,5 @@ public Task CreateCompilationAsync(string source)
{
return CreateProject(source).GetCompilationAsync();
}
-
- private static string GetProjectDirectory()
- {
- // On helix we use the published test files
- if (SkipOnHelixAttribute.OnHelix())
- {
- return AppContext.BaseDirectory;
- }
-
- // This test code needs to be updated to support distributed testing.
- // See https://github.com/dotnet/aspnetcore/issues/10422
-#pragma warning disable 0618
- var solutionDirectory = TestPathUtilities.GetSolutionRootDirectory("Components");
-#pragma warning restore 0618
- var projectDirectory = Path.Combine(solutionDirectory, "Analyzers", "test");
- return projectDirectory;
- }
}
}
diff --git a/src/Components/Authorization/src/PublicAPI.Shipped.txt b/src/Components/Authorization/src/PublicAPI.Shipped.txt
new file mode 100644
index 000000000000..d9a2ae59c8af
--- /dev/null
+++ b/src/Components/Authorization/src/PublicAPI.Shipped.txt
@@ -0,0 +1,48 @@
+#nullable enable
+Microsoft.AspNetCore.Components.Authorization.AuthenticationState
+Microsoft.AspNetCore.Components.Authorization.AuthenticationStateChangedHandler
+Microsoft.AspNetCore.Components.Authorization.AuthenticationStateProvider
+Microsoft.AspNetCore.Components.Authorization.AuthenticationStateProvider.AuthenticationStateChanged -> Microsoft.AspNetCore.Components.Authorization.AuthenticationStateChangedHandler
+Microsoft.AspNetCore.Components.Authorization.AuthenticationStateProvider.AuthenticationStateProvider() -> void
+Microsoft.AspNetCore.Components.Authorization.AuthorizeRouteView
+Microsoft.AspNetCore.Components.Authorization.AuthorizeRouteView.AuthorizeRouteView() -> void
+Microsoft.AspNetCore.Components.Authorization.AuthorizeView
+Microsoft.AspNetCore.Components.Authorization.AuthorizeView.AuthorizeView() -> void
+Microsoft.AspNetCore.Components.Authorization.AuthorizeViewCore
+Microsoft.AspNetCore.Components.Authorization.AuthorizeViewCore.AuthorizeViewCore() -> void
+Microsoft.AspNetCore.Components.Authorization.CascadingAuthenticationState
+Microsoft.AspNetCore.Components.Authorization.CascadingAuthenticationState.CascadingAuthenticationState() -> void
+Microsoft.AspNetCore.Components.Authorization.IHostEnvironmentAuthenticationStateProvider
+override Microsoft.AspNetCore.Components.Authorization.CascadingAuthenticationState.OnInitialized() -> void
+~Microsoft.AspNetCore.Components.Authorization.AuthenticationState.AuthenticationState(System.Security.Claims.ClaimsPrincipal user) -> void
+~Microsoft.AspNetCore.Components.Authorization.AuthenticationState.User.get -> System.Security.Claims.ClaimsPrincipal
+~Microsoft.AspNetCore.Components.Authorization.AuthenticationStateProvider.NotifyAuthenticationStateChanged(System.Threading.Tasks.Task task) -> void
+~Microsoft.AspNetCore.Components.Authorization.AuthorizeRouteView.Authorizing.get -> Microsoft.AspNetCore.Components.RenderFragment
+~Microsoft.AspNetCore.Components.Authorization.AuthorizeRouteView.Authorizing.set -> void
+~Microsoft.AspNetCore.Components.Authorization.AuthorizeRouteView.NotAuthorized.get -> Microsoft.AspNetCore.Components.RenderFragment
+~Microsoft.AspNetCore.Components.Authorization.AuthorizeRouteView.NotAuthorized.set -> void
+~Microsoft.AspNetCore.Components.Authorization.AuthorizeRouteView.Resource.get -> object
+~Microsoft.AspNetCore.Components.Authorization.AuthorizeRouteView.Resource.set -> void
+~Microsoft.AspNetCore.Components.Authorization.AuthorizeView.Policy.get -> string
+~Microsoft.AspNetCore.Components.Authorization.AuthorizeView.Policy.set -> void
+~Microsoft.AspNetCore.Components.Authorization.AuthorizeView.Roles.get -> string
+~Microsoft.AspNetCore.Components.Authorization.AuthorizeView.Roles.set -> void
+~Microsoft.AspNetCore.Components.Authorization.AuthorizeViewCore.Authorized.get -> Microsoft.AspNetCore.Components.RenderFragment
+~Microsoft.AspNetCore.Components.Authorization.AuthorizeViewCore.Authorized.set -> void
+~Microsoft.AspNetCore.Components.Authorization.AuthorizeViewCore.Authorizing.get -> Microsoft.AspNetCore.Components.RenderFragment
+~Microsoft.AspNetCore.Components.Authorization.AuthorizeViewCore.Authorizing.set -> void
+~Microsoft.AspNetCore.Components.Authorization.AuthorizeViewCore.ChildContent.get -> Microsoft.AspNetCore.Components.RenderFragment
+~Microsoft.AspNetCore.Components.Authorization.AuthorizeViewCore.ChildContent.set -> void
+~Microsoft.AspNetCore.Components.Authorization.AuthorizeViewCore.NotAuthorized.get -> Microsoft.AspNetCore.Components.RenderFragment
+~Microsoft.AspNetCore.Components.Authorization.AuthorizeViewCore.NotAuthorized.set -> void
+~Microsoft.AspNetCore.Components.Authorization.AuthorizeViewCore.Resource.get -> object
+~Microsoft.AspNetCore.Components.Authorization.AuthorizeViewCore.Resource.set -> void
+~Microsoft.AspNetCore.Components.Authorization.CascadingAuthenticationState.ChildContent.get -> Microsoft.AspNetCore.Components.RenderFragment
+~Microsoft.AspNetCore.Components.Authorization.CascadingAuthenticationState.ChildContent.set -> void
+~Microsoft.AspNetCore.Components.Authorization.IHostEnvironmentAuthenticationStateProvider.SetAuthenticationState(System.Threading.Tasks.Task authenticationStateTask) -> void
+~abstract Microsoft.AspNetCore.Components.Authorization.AuthenticationStateProvider.GetAuthenticationStateAsync() -> System.Threading.Tasks.Task
+~abstract Microsoft.AspNetCore.Components.Authorization.AuthorizeViewCore.GetAuthorizeData() -> Microsoft.AspNetCore.Authorization.IAuthorizeData[]
+~override Microsoft.AspNetCore.Components.Authorization.AuthorizeView.GetAuthorizeData() -> Microsoft.AspNetCore.Authorization.IAuthorizeData[]
+~override Microsoft.AspNetCore.Components.Authorization.AuthorizeViewCore.BuildRenderTree(Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder builder) -> void
+~override Microsoft.AspNetCore.Components.Authorization.AuthorizeViewCore.OnParametersSetAsync() -> System.Threading.Tasks.Task
+~override Microsoft.AspNetCore.Components.Authorization.CascadingAuthenticationState.BuildRenderTree(Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder __builder) -> void
diff --git a/src/Components/Authorization/src/PublicAPI.Unshipped.txt b/src/Components/Authorization/src/PublicAPI.Unshipped.txt
new file mode 100644
index 000000000000..7dc5c58110bf
--- /dev/null
+++ b/src/Components/Authorization/src/PublicAPI.Unshipped.txt
@@ -0,0 +1 @@
+#nullable enable
diff --git a/src/Components/Components/src/PublicAPI.Shipped.txt b/src/Components/Components/src/PublicAPI.Shipped.txt
index ab058de62d44..d111d01e1e42 100644
--- a/src/Components/Components/src/PublicAPI.Shipped.txt
+++ b/src/Components/Components/src/PublicAPI.Shipped.txt
@@ -1 +1,431 @@
#nullable enable
+Microsoft.AspNetCore.Components.BindConverter
+Microsoft.AspNetCore.Components.BindElementAttribute
+Microsoft.AspNetCore.Components.BindElementAttribute.BindElementAttribute(string! element, string? suffix, string! valueAttribute, string! changeAttribute) -> void
+Microsoft.AspNetCore.Components.BindElementAttribute.ChangeAttribute.get -> string!
+Microsoft.AspNetCore.Components.BindElementAttribute.Element.get -> string!
+Microsoft.AspNetCore.Components.BindElementAttribute.Suffix.get -> string?
+Microsoft.AspNetCore.Components.BindElementAttribute.ValueAttribute.get -> string!
+Microsoft.AspNetCore.Components.CascadingParameterAttribute
+Microsoft.AspNetCore.Components.CascadingParameterAttribute.CascadingParameterAttribute() -> void
+Microsoft.AspNetCore.Components.CascadingParameterAttribute.Name.get -> string?
+Microsoft.AspNetCore.Components.CascadingParameterAttribute.Name.set -> void
+Microsoft.AspNetCore.Components.CascadingValue
+Microsoft.AspNetCore.Components.CascadingValue.Attach(Microsoft.AspNetCore.Components.RenderHandle renderHandle) -> void
+Microsoft.AspNetCore.Components.CascadingValue.CascadingValue() -> void
+Microsoft.AspNetCore.Components.CascadingValue.ChildContent.get -> Microsoft.AspNetCore.Components.RenderFragment!
+Microsoft.AspNetCore.Components.CascadingValue.ChildContent.set -> void
+Microsoft.AspNetCore.Components.CascadingValue.IsFixed.get -> bool
+Microsoft.AspNetCore.Components.CascadingValue.IsFixed.set -> void
+Microsoft.AspNetCore.Components.CascadingValue.Name.get -> string?
+Microsoft.AspNetCore.Components.CascadingValue.Name.set -> void
+Microsoft.AspNetCore.Components.CascadingValue.SetParametersAsync(Microsoft.AspNetCore.Components.ParameterView parameters) -> System.Threading.Tasks.Task!
+Microsoft.AspNetCore.Components.CascadingValue.Value.get -> TValue
+Microsoft.AspNetCore.Components.CascadingValue.Value.set -> void
+Microsoft.AspNetCore.Components.ChangeEventArgs
+Microsoft.AspNetCore.Components.ChangeEventArgs.ChangeEventArgs() -> void
+Microsoft.AspNetCore.Components.ChangeEventArgs.Value.get -> object?
+Microsoft.AspNetCore.Components.ChangeEventArgs.Value.set -> void
+Microsoft.AspNetCore.Components.CompilerServices.RuntimeHelpers
+Microsoft.AspNetCore.Components.ComponentBase
+Microsoft.AspNetCore.Components.ComponentBase.ComponentBase() -> void
+Microsoft.AspNetCore.Components.ComponentBase.InvokeAsync(System.Action! workItem) -> System.Threading.Tasks.Task!
+Microsoft.AspNetCore.Components.ComponentBase.InvokeAsync(System.Func! workItem) -> System.Threading.Tasks.Task!
+Microsoft.AspNetCore.Components.ComponentBase.StateHasChanged() -> void
+Microsoft.AspNetCore.Components.Dispatcher
+Microsoft.AspNetCore.Components.Dispatcher.AssertAccess() -> void
+Microsoft.AspNetCore.Components.Dispatcher.Dispatcher() -> void
+Microsoft.AspNetCore.Components.Dispatcher.OnUnhandledException(System.UnhandledExceptionEventArgs! e) -> void
+Microsoft.AspNetCore.Components.ElementReference
+Microsoft.AspNetCore.Components.ElementReference.Context.get -> Microsoft.AspNetCore.Components.ElementReferenceContext?
+Microsoft.AspNetCore.Components.ElementReference.ElementReference(string! id) -> void
+Microsoft.AspNetCore.Components.ElementReference.ElementReference(string! id, Microsoft.AspNetCore.Components.ElementReferenceContext? context) -> void
+Microsoft.AspNetCore.Components.ElementReference.Id.get -> string!
+Microsoft.AspNetCore.Components.ElementReferenceContext
+Microsoft.AspNetCore.Components.ElementReferenceContext.ElementReferenceContext() -> void
+Microsoft.AspNetCore.Components.EventCallback
+Microsoft.AspNetCore.Components.EventCallback.EventCallback(Microsoft.AspNetCore.Components.IHandleEvent? receiver, System.MulticastDelegate? delegate) -> void
+Microsoft.AspNetCore.Components.EventCallback.HasDelegate.get -> bool
+Microsoft.AspNetCore.Components.EventCallback.InvokeAsync() -> System.Threading.Tasks.Task!
+Microsoft.AspNetCore.Components.EventCallback.InvokeAsync(object? arg) -> System.Threading.Tasks.Task!
+Microsoft.AspNetCore.Components.EventCallback
+Microsoft.AspNetCore.Components.EventCallback.EventCallback(Microsoft.AspNetCore.Components.IHandleEvent? receiver, System.MulticastDelegate? delegate) -> void
+Microsoft.AspNetCore.Components.EventCallback.HasDelegate.get -> bool
+Microsoft.AspNetCore.Components.EventCallback.InvokeAsync() -> System.Threading.Tasks.Task!
+Microsoft.AspNetCore.Components.EventCallback.InvokeAsync(TValue? arg) -> System.Threading.Tasks.Task!
+Microsoft.AspNetCore.Components.EventCallbackFactory
+Microsoft.AspNetCore.Components.EventCallbackFactory.Create(object! receiver, Microsoft.AspNetCore.Components.EventCallback callback) -> Microsoft.AspNetCore.Components.EventCallback
+Microsoft.AspNetCore.Components.EventCallbackFactory.Create(object! receiver, System.Action! callback) -> Microsoft.AspNetCore.Components.EventCallback
+Microsoft.AspNetCore.Components.EventCallbackFactory.Create(object! receiver, System.Action