Browse Source

Merge branch 'main' into merge/release/9.0-to-main

William Godbe 1 year ago
parent
commit
dc3923e1dc
100 changed files with 880 additions and 542 deletions
  1. 32 0
      .azure/pipelines/ci-public.yml
  2. 33 0
      .azure/pipelines/ci.yml
  3. 3 0
      Directory.Build.props
  4. 3 5
      NuGet.config
  5. 3 1
      eng/Npm.Workspace.nodeproj
  6. 1 1
      eng/SourceBuildPrebuiltBaseline.xml
  7. 182 182
      eng/Version.Details.xml
  8. 97 97
      eng/Versions.props
  9. 1 0
      eng/common/core-templates/steps/publish-logs.yml
  10. 3 2
      eng/test-configuration.json
  11. 74 0
      eng/tools/RepoTasks/GenerateTestDevCert.cs
  12. 10 0
      eng/tools/RepoTasks/RepoTasks.csproj
  13. 1 0
      eng/tools/RepoTasks/RepoTasks.tasks
  14. 45 0
      eng/tools/RepoTasks/shared/CertificateGeneration/DevelopmentCertificate.cs
  15. 6 0
      eng/tools/RepoTasks/shared/CertificateGeneration/Global.cs
  16. 2 2
      global.json
  17. 3 3
      package-lock.json
  18. 2 16
      src/Analyzers/Microsoft.AspNetCore.Analyzer.Testing/src/Assert.cs
  19. 2 2
      src/Antiforgery/test/BinaryBlobTest.cs
  20. 1 1
      src/Antiforgery/test/DefaultAntiforgeryTest.cs
  21. 1 1
      src/Antiforgery/test/DefaultAntiforgeryTokenStoreTest.cs
  22. 1 1
      src/Components/Analyzers/test/Verifiers/CodeFixVerifier.cs
  23. 8 8
      src/Components/Analyzers/test/Verifiers/DiagnosticVerifier.cs
  24. 3 3
      src/Components/Authorization/test/AuthorizeViewTest.cs
  25. 3 1
      src/Components/Components/src/RouteAttribute.cs
  26. 2 2
      src/Components/Components/test/LayoutViewTest.cs
  27. 22 2
      src/Components/Components/test/NavigationManagerTest.cs
  28. 3 3
      src/Components/Components/test/RendererTest.cs
  29. 1 1
      src/Components/Components/test/ResourceAssetCollectionTest.cs
  30. 2 2
      src/Components/Components/test/Routing/RouterTest.cs
  31. 6 6
      src/Components/Endpoints/test/Builder/RazorComponentsEndpointConventionBuilderExtensionsTest.cs
  32. 1 1
      src/Components/Endpoints/test/EndpointHtmlRendererTest.cs
  33. 2 2
      src/Components/Endpoints/test/RazorComponentResultTest.cs
  34. 2 6
      src/Components/Endpoints/test/RazorComponentsServiceCollectionExtensionsTest.cs
  35. 2 2
      src/Components/Server/src/Circuits/CircuitHost.cs
  36. 2 0
      src/Components/Server/test/Circuits/RemoteRendererTest.cs
  37. 0 0
      src/Components/Web.JS/dist/Release/blazor.server.js
  38. 0 0
      src/Components/Web.JS/dist/Release/blazor.web.js
  39. 2 2
      src/Components/Web/test/Forms/InputBaseTest.cs
  40. 1 1
      src/Components/WebAssembly/WebAssembly.Authentication/test/AuthorizationMessageHandlerTests.cs
  41. 22 11
      src/Components/test/E2ETest/ServerExecutionTests/CircuitContextTest.cs
  42. 3 0
      src/Components/test/E2ETest/ServerExecutionTests/NavigationLockPrerenderingTest.cs
  43. 5 5
      src/Components/test/E2ETest/ServerRenderingTests/BlazorWebJsInitializersTest.cs
  44. 14 3
      src/Components/test/E2ETest/ServerRenderingTests/FormHandlingTests/FormWithParentBindingContextTest.cs
  45. 2 2
      src/Components/test/E2ETest/ServerRenderingTests/InteractivityTest.cs
  46. 1 1
      src/Components/test/E2ETest/ServerRenderingTests/StreamingRenderingTest.cs
  47. 4 4
      src/Components/test/E2ETest/Tests/BootResourceCachingTest.cs
  48. 0 1
      src/Components/test/E2ETest/Tests/EventTest.cs
  49. 1 1
      src/Components/test/E2ETest/Tests/HostedInAlternativeBasePathTest.cs
  50. 1 1
      src/Components/test/E2ETest/Tests/InteropTest.cs
  51. 1 1
      src/Components/test/E2ETest/Tests/MultipleHostedAppTest.cs
  52. 3 0
      src/Components/test/E2ETest/Tests/RoutingTest.cs
  53. 11 0
      src/Components/test/testassets/BasicTestApp/Index.razor
  54. 1 0
      src/Components/test/testassets/Components.TestServer/RazorComponents/App.razor
  55. 1 23
      src/Components/test/testassets/Components.TestServer/RazorComponents/Pages/Interactivity/CircuitContextPage.razor
  56. 1 1
      src/DataProtection/Cryptography.Internal/test/Cng/BCryptUtilTests.cs
  57. 2 2
      src/DataProtection/DataProtection/test/Microsoft.AspNetCore.DataProtection.Tests/AuthenticatedEncryption/ConfigurationModel/AuthenticatedEncryptorDescriptorTests.cs
  58. 2 0
      src/DataProtection/DataProtection/test/Microsoft.AspNetCore.DataProtection.Tests/KeyManagement/KeyRingProviderTests.cs
  59. 1 1
      src/DataProtection/DataProtection/test/Microsoft.AspNetCore.DataProtection.Tests/KeyManagement/XmlKeyManagerTests.cs
  60. 1 1
      src/DataProtection/DataProtection/test/Microsoft.AspNetCore.DataProtection.Tests/Repositories/EphemeralXmlRepositoryTests.cs
  61. 2 2
      src/DataProtection/DataProtection/test/Microsoft.AspNetCore.DataProtection.Tests/Repositories/FileSystemXmlRepositoryTests.cs
  62. 2 2
      src/DataProtection/DataProtection/test/Microsoft.AspNetCore.DataProtection.Tests/Repositories/RegistryXmlRepositoryTests.cs
  63. 1 1
      src/DataProtection/DataProtection/test/Microsoft.AspNetCore.DataProtection.Tests/XmlAssert.cs
  64. 1 1
      src/DefaultBuilder/test/Microsoft.AspNetCore.FunctionalTests/WebHostFunctionalTests.cs
  65. 5 5
      src/DefaultBuilder/test/Microsoft.AspNetCore.Tests/WebApplicationTests.cs
  66. 2 2
      src/Features/JsonPatch/test/IntegrationTests/DictionaryIntegrationTest.cs
  67. 3 3
      src/FileProviders/Embedded/test/EmbeddedFileProviderTests.cs
  68. 2 2
      src/Framework/AspNetCoreAnalyzers/test/RouteEmbeddedLanguage/RoutePatternParserTests.cs
  69. 1 1
      src/Framework/test/TargetingPackTests.cs
  70. 1 0
      src/Grpc/JsonTranscoding/perf/Microsoft.AspNetCore.Grpc.Microbenchmarks/Microsoft.AspNetCore.Grpc.Microbenchmarks.csproj
  71. 1 1
      src/Grpc/JsonTranscoding/test/Microsoft.AspNetCore.Grpc.JsonTranscoding.Tests/JsonTranscodingServiceMethodProviderTests.cs
  72. 1 1
      src/Grpc/JsonTranscoding/test/Microsoft.AspNetCore.Grpc.JsonTranscoding.Tests/UnaryServerCallHandlerTests.cs
  73. 3 3
      src/Grpc/JsonTranscoding/test/Microsoft.AspNetCore.Grpc.Swagger.Tests/Binding/ParametersTests.cs
  74. 6 6
      src/Grpc/JsonTranscoding/test/Microsoft.AspNetCore.Grpc.Swagger.Tests/SchemaGeneratorIntegrationTests.cs
  75. 1 1
      src/Grpc/JsonTranscoding/test/Microsoft.AspNetCore.Grpc.Swagger.Tests/XmlComments/XmlCommentsDocumentFilterTests.cs
  76. 1 1
      src/HealthChecks/HealthChecks/test/DefaultHealthCheckServiceTest.cs
  77. 2 2
      src/Hosting/Hosting/test/WebHostTests.cs
  78. 2 0
      src/Hosting/TestHost/test/ClientHandlerTests.cs
  79. 2 0
      src/Hosting/TestHost/test/HttpContextBuilderTests.cs
  80. 2 2
      src/Hosting/test/FunctionalTests/WebHostBuilderTests.cs
  81. 0 1
      src/Hosting/test/testassets/IStartupInjectionAssemblyName/Program.cs
  82. 16 16
      src/Http/Authentication.Core/test/AuthenticationPropertiesTests.cs
  83. 4 4
      src/Http/Headers/test/CacheControlHeaderValueTest.cs
  84. 24 24
      src/Http/Headers/test/ContentDispositionHeaderValueTest.cs
  85. 4 4
      src/Http/Headers/test/CookieHeaderValueTest.cs
  86. 3 3
      src/Http/Headers/test/EntityTagHeaderValueTest.cs
  87. 6 6
      src/Http/Headers/test/HeaderUtilitiesTest.cs
  88. 15 15
      src/Http/Headers/test/MediaTypeHeaderValueTest.cs
  89. 2 2
      src/Http/Headers/test/RangeConditionHeaderValueTest.cs
  90. 1 1
      src/Http/Headers/test/RangeItemHeaderValueTest.cs
  91. 4 4
      src/Http/Headers/test/SetCookieHeaderValueTest.cs
  92. 1 1
      src/Http/Headers/test/StringWithQualityHeaderValueTest.cs
  93. 1 1
      src/Http/Http.Abstractions/src/Metadata/ISkipStatusCodePagesMetadata.cs
  94. 1 1
      src/Http/Http.Abstractions/test/HostStringTest.cs
  95. 2 2
      src/Http/Http.Abstractions/test/PathStringTests.cs
  96. 5 5
      src/Http/Http.Abstractions/test/QueryStringTests.cs
  97. 1 1
      src/Http/Http.Abstractions/test/UsePathBaseExtensionsTests.cs
  98. 5 0
      src/Http/Http.Extensions/src/RequestDelegateFactory.cs
  99. 1 1
      src/Http/Http.Extensions/test/HttpRequestJsonExtensionsTests.cs
  100. 98 0
      src/Http/Http.Extensions/test/RequestDelegateFactoryTests.EndpointFilters.cs

+ 32 - 0
.azure/pipelines/ci-public.yml

@@ -640,6 +640,38 @@ stages:
           publishOnError: true
           includeForks: true
 
+    # Local development validation
+    - template: jobs/default-build.yml
+      parameters:
+        jobName: Local_Windows
+        jobDisplayName: 'Test: Windows local development validation'
+        agentOs: Windows
+        timeoutInMinutes: 240
+        steps:
+        - script: git submodule update --init
+          displayName: Update submodules
+        - script: ./restore.cmd
+          displayName: Run restore.cmd
+        - script: npm run build
+          displayName: Build JS
+        - script: ./eng/build.cmd -all -noBuildJava -pack -c Debug
+          displayName: Build (Debug)
+        - script: ./eng/build.cmd -all -noBuildJava -pack -c Release
+          displayName: Build (Release)
+        - script: ./src/ProjectTemplates/build.cmd
+                  -test
+                  -NoRestore
+                  -NoBuild
+                  -NoBuildDeps
+                  -configuration Release
+          displayName: Run project template tests
+
+        artifacts:
+        - name: Local_Windows_x64_Logs_Attempt_$(System.JobAttempt)
+          path: artifacts/log/
+          publishOnError: true
+          includeForks: true
+
   # Source build
   - template: /eng/common/templates/job/source-build.yml
     parameters:

+ 33 - 0
.azure/pipelines/ci.yml

@@ -701,6 +701,39 @@ extends:
               publishOnError: true
               includeForks: true
 
+        # Local development validation
+        - ${{ if in(variables['Build.Reason'], 'PullRequest', 'Manual') }}:
+          - template: .azure/pipelines/jobs/default-build.yml@self
+            parameters:
+              jobName: Local_Windows
+              jobDisplayName: 'Test: Windows local development validation'
+              agentOs: Windows
+              timeoutInMinutes: 240
+              steps:
+              - script: git submodule update --init
+                displayName: Update submodules
+              - script: ./restore.cmd
+                displayName: Run restore.cmd
+              - script: npm run build
+                displayName: Build JS
+              - script: ./eng/build.cmd -all -noBuildJava -pack -c Debug
+                displayName: Build (Debug)
+              - script: ./eng/build.cmd -all -noBuildJava -pack -c Release
+                displayName: Build (Release)
+              - script: ./src/ProjectTemplates/build.cmd
+                        -test
+                        -NoRestore
+                        -NoBuild
+                        -NoBuildDeps
+                        -configuration Release
+                displayName: Run project template tests
+
+              artifacts:
+              - name: Local_Windows_x64_Logs_Attempt_$(System.JobAttempt)
+                path: artifacts/log/
+                publishOnError: true
+                includeForks: true
+
       # Source build
       - template: /eng/common/templates-official/job/source-build.yml@self
         parameters:

+ 3 - 0
Directory.Build.props

@@ -130,6 +130,9 @@
     <!-- xUnit1004 = warns about skipped tests. Make this a non-fatal build warning. -->
     <WarningsNotAsErrors>$(WarningsNotAsErrors);xUnit1004</WarningsNotAsErrors>
 
+    <!-- don't warn about calling ConfigureAwait in test methods. we already commonly get off the xunit threads because they cause issues. -->
+    <NoWarn>$(NoWarn);xUnit1030</NoWarn>
+
     <!-- don't warn about unnecessary trim warning suppressions. can be removed with preview 6. -->
     <NoWarn>$(NoWarn);IL2121</NoWarn>
 

+ 3 - 5
NuGet.config

@@ -4,17 +4,15 @@
     <clear />
     <add key="dotnet-eng" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json" />
     <add key="dotnet-tools" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json" />
+    <add key="dotnet10" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet10/nuget/v3/index.json" />
+    <add key="dotnet10-transport" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet10-transport/nuget/v3/index.json" />
     <add key="dotnet9" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet9/nuget/v3/index.json" />
     <add key="dotnet9-transport" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet9-transport/nuget/v3/index.json" />
     <add key="dotnet8" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet8/nuget/v3/index.json" />
-    <add key="dotnet7" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet7/nuget/v3/index.json" />
     <add key="dotnet8-transport" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet8-transport/nuget/v3/index.json" />
     <add key="dotnet-public" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public/nuget/v3/index.json" />
-    <!-- Used for the SiteExtension bits that are included in the 8.0 build -->
-    <add key="dotnet31-transport" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3.1-transport/nuget/v3/index.json" />
-    <add key="dotnet5-transport" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet5-transport/nuget/v3/index.json" />
+    <!-- Used for the SiteExtension bits -->
     <add key="dotnet6-transport" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet6-transport/nuget/v3/index.json" />
-    <add key="dotnet7-transport" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet7-transport/nuget/v3/index.json" />
     <!-- Used for the Rich Navigation indexing task -->
     <add key="richnav" value="https://pkgs.dev.azure.com/azure-public/vside/_packaging/vs-buildservices/nuget/v3/index.json" />
   </packageSources>

+ 3 - 1
eng/Npm.Workspace.nodeproj

@@ -36,7 +36,7 @@
 
     <Message Text="Building NPM packages..." Importance="high" />
 
-    <Exec Condition="'$(ContinuousIntegrationBuild)' == 'true'"
+    <Exec
       Command="node $(MSBuildThisFileDirectory)scripts/npm/pack-workspace.mjs --update-versions $(RepoRoot)package.json $(PackageVersion) $(PackageOutputPath) $(IntermediateOutputPath)"
       EnvironmentVariables="$(_NpmAdditionalEnvironmentVariables)" />
 
@@ -58,6 +58,8 @@
     </PropertyGroup>
     <Message Text="Packing NPM packages..." Importance="high" />
     <MakeDir Directories="$(PackageOutputPath)" Condition="!Exists('$(PackageOutputPath)')" />
+    <MakeDir Directories="$(IntermediateOutputPath)" Condition="!Exists('$(IntermediateOutputPath)')" />
+
     <Exec
       Command="node $(MSBuildThisFileDirectory)scripts/npm/pack-workspace.mjs --create-packages $(RepoRoot)package.json $(PackageVersion) $(PackageOutputPath) $(IntermediateOutputPath)"
       EnvironmentVariables="$(_NpmAdditionalEnvironmentVariables)" />

+ 1 - 1
eng/SourceBuildPrebuiltBaseline.xml

@@ -34,7 +34,7 @@
 
     <!-- These are coming in via runtime but the source-build infra isn't able to automatically pick up the right intermediate. -->
     <UsagePattern IdentityGlob="Microsoft.NET.ILLink.Tasks/*9.0.*" />
-    <UsagePattern IdentityGlob="Microsoft.NETCore.App.Crossgen2.linux-x64/*9.0.*" />
+    <UsagePattern IdentityGlob="Microsoft.NETCore.App.Crossgen2.linux-x64/*10.0.*" />
 
     <!-- Transivite dependency of Microsoft.CodeAnalysis.ExternalAccess.AspNetCore -> Microsoft.CodeAnalysis.Features.
          In product build the dependency is bumped to latest, which also bumps the version of DiaSymReader  -->

+ 182 - 182
eng/Version.Details.xml

@@ -9,325 +9,325 @@
 -->
 <Dependencies>
   <ProductDependencies>
-    <Dependency Name="dotnet-ef" Version="9.0.0-rc.2.24419.9">
+    <Dependency Name="dotnet-ef" Version="10.0.0-alpha.1.24428.1">
       <Uri>https://github.com/dotnet/efcore</Uri>
-      <Sha>d18b30f63dd3473c0d2bc61683eb997a1e8ef6ca</Sha>
+      <Sha>a72420cc913c84213a10db54dffdcfcac13649fe</Sha>
       <SourceBuildTarball RepoName="efcore" ManagedOnly="true" />
     </Dependency>
-    <Dependency Name="Microsoft.EntityFrameworkCore.InMemory" Version="9.0.0-rc.2.24419.9">
+    <Dependency Name="Microsoft.EntityFrameworkCore.InMemory" Version="10.0.0-alpha.1.24428.1">
       <Uri>https://github.com/dotnet/efcore</Uri>
-      <Sha>d18b30f63dd3473c0d2bc61683eb997a1e8ef6ca</Sha>
+      <Sha>a72420cc913c84213a10db54dffdcfcac13649fe</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.EntityFrameworkCore.Relational" Version="9.0.0-rc.2.24419.9">
+    <Dependency Name="Microsoft.EntityFrameworkCore.Relational" Version="10.0.0-alpha.1.24428.1">
       <Uri>https://github.com/dotnet/efcore</Uri>
-      <Sha>d18b30f63dd3473c0d2bc61683eb997a1e8ef6ca</Sha>
+      <Sha>a72420cc913c84213a10db54dffdcfcac13649fe</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.EntityFrameworkCore.Sqlite" Version="9.0.0-rc.2.24419.9">
+    <Dependency Name="Microsoft.EntityFrameworkCore.Sqlite" Version="10.0.0-alpha.1.24428.1">
       <Uri>https://github.com/dotnet/efcore</Uri>
-      <Sha>d18b30f63dd3473c0d2bc61683eb997a1e8ef6ca</Sha>
+      <Sha>a72420cc913c84213a10db54dffdcfcac13649fe</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.EntityFrameworkCore.SqlServer" Version="9.0.0-rc.2.24419.9">
+    <Dependency Name="Microsoft.EntityFrameworkCore.SqlServer" Version="10.0.0-alpha.1.24428.1">
       <Uri>https://github.com/dotnet/efcore</Uri>
-      <Sha>d18b30f63dd3473c0d2bc61683eb997a1e8ef6ca</Sha>
+      <Sha>a72420cc913c84213a10db54dffdcfcac13649fe</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.EntityFrameworkCore.Tools" Version="9.0.0-rc.2.24419.9">
+    <Dependency Name="Microsoft.EntityFrameworkCore.Tools" Version="10.0.0-alpha.1.24428.1">
       <Uri>https://github.com/dotnet/efcore</Uri>
-      <Sha>d18b30f63dd3473c0d2bc61683eb997a1e8ef6ca</Sha>
+      <Sha>a72420cc913c84213a10db54dffdcfcac13649fe</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.EntityFrameworkCore" Version="9.0.0-rc.2.24419.9">
+    <Dependency Name="Microsoft.EntityFrameworkCore" Version="10.0.0-alpha.1.24428.1">
       <Uri>https://github.com/dotnet/efcore</Uri>
-      <Sha>d18b30f63dd3473c0d2bc61683eb997a1e8ef6ca</Sha>
+      <Sha>a72420cc913c84213a10db54dffdcfcac13649fe</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.EntityFrameworkCore.Design" Version="9.0.0-rc.2.24419.9">
+    <Dependency Name="Microsoft.EntityFrameworkCore.Design" Version="10.0.0-alpha.1.24428.1">
       <Uri>https://github.com/dotnet/efcore</Uri>
-      <Sha>d18b30f63dd3473c0d2bc61683eb997a1e8ef6ca</Sha>
+      <Sha>a72420cc913c84213a10db54dffdcfcac13649fe</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.Extensions.Caching.Abstractions" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="Microsoft.Extensions.Caching.Abstractions" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.Extensions.Caching.Memory" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="Microsoft.Extensions.Caching.Memory" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.Extensions.Configuration.Abstractions" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="Microsoft.Extensions.Configuration.Abstractions" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.Extensions.Configuration.Binder" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="Microsoft.Extensions.Configuration.Binder" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.Extensions.Configuration.CommandLine" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="Microsoft.Extensions.Configuration.CommandLine" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.Extensions.Configuration.FileExtensions" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="Microsoft.Extensions.Configuration.FileExtensions" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.Extensions.Configuration.Ini" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="Microsoft.Extensions.Configuration.Ini" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.Extensions.Configuration.Json" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="Microsoft.Extensions.Configuration.Json" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.Extensions.Configuration.UserSecrets" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="Microsoft.Extensions.Configuration.UserSecrets" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.Extensions.Configuration.Xml" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="Microsoft.Extensions.Configuration.Xml" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.Extensions.Configuration" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="Microsoft.Extensions.Configuration" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.Extensions.DependencyInjection.Abstractions" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="Microsoft.Extensions.DependencyInjection.Abstractions" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.Extensions.DependencyInjection" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="Microsoft.Extensions.DependencyInjection" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.Extensions.Diagnostics" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="Microsoft.Extensions.Diagnostics" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.Extensions.Diagnostics.Abstractions" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="Microsoft.Extensions.Diagnostics.Abstractions" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.Extensions.FileProviders.Abstractions" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="Microsoft.Extensions.FileProviders.Abstractions" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.Extensions.FileProviders.Composite" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="Microsoft.Extensions.FileProviders.Composite" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.Extensions.FileProviders.Physical" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="Microsoft.Extensions.FileProviders.Physical" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.Extensions.FileSystemGlobbing" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="Microsoft.Extensions.FileSystemGlobbing" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.Extensions.HostFactoryResolver.Sources" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="Microsoft.Extensions.HostFactoryResolver.Sources" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.Extensions.Hosting.Abstractions" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="Microsoft.Extensions.Hosting.Abstractions" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.Extensions.Hosting" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="Microsoft.Extensions.Hosting" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.Extensions.Http" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="Microsoft.Extensions.Http" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.Extensions.Logging.Abstractions" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="Microsoft.Extensions.Logging.Abstractions" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.Extensions.Logging.Configuration" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="Microsoft.Extensions.Logging.Configuration" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.Extensions.Logging.Console" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="Microsoft.Extensions.Logging.Console" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.Extensions.Logging.Debug" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="Microsoft.Extensions.Logging.Debug" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.Extensions.Logging.EventSource" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="Microsoft.Extensions.Logging.EventSource" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.Extensions.Logging.EventLog" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="Microsoft.Extensions.Logging.EventLog" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.Extensions.Logging.TraceSource" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="Microsoft.Extensions.Logging.TraceSource" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.Extensions.Logging" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="Microsoft.Extensions.Logging" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.Extensions.Options.ConfigurationExtensions" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="Microsoft.Extensions.Options.ConfigurationExtensions" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.Extensions.Options.DataAnnotations" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="Microsoft.Extensions.Options.DataAnnotations" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.Extensions.Options" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="Microsoft.Extensions.Options" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.Extensions.Primitives" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="Microsoft.Extensions.Primitives" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.Internal.Runtime.AspNetCore.Transport" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="Microsoft.Internal.Runtime.AspNetCore.Transport" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="System.Configuration.ConfigurationManager" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="System.Configuration.ConfigurationManager" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="System.Diagnostics.DiagnosticSource" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="System.Diagnostics.DiagnosticSource" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="System.Diagnostics.EventLog" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="System.Diagnostics.EventLog" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="System.DirectoryServices.Protocols" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="System.DirectoryServices.Protocols" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="System.IO.Pipelines" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="System.IO.Pipelines" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="System.Net.Http.Json" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="System.Net.Http.Json" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="System.Net.Http.WinHttpHandler" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="System.Net.Http.WinHttpHandler" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="System.Net.ServerSentEvents" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="System.Net.ServerSentEvents" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="System.Reflection.Metadata" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="System.Reflection.Metadata" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="System.Resources.Extensions" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="System.Resources.Extensions" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="System.Security.Cryptography.Pkcs" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="System.Security.Cryptography.Pkcs" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="System.Security.Cryptography.Xml" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="System.Security.Cryptography.Xml" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="System.Security.Permissions" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="System.Security.Permissions" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="System.ServiceProcess.ServiceController" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="System.ServiceProcess.ServiceController" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="System.Text.Encodings.Web" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="System.Text.Encodings.Web" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="System.Text.Json" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="System.Text.Json" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="System.Threading.AccessControl" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="System.Threading.AccessControl" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="System.Threading.Channels" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="System.Threading.Channels" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="System.Threading.RateLimiting" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="System.Threading.RateLimiting" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.Extensions.DependencyModel" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="Microsoft.Extensions.DependencyModel" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.NETCore.App.Ref" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="Microsoft.NETCore.App.Ref" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.NET.Runtime.MonoAOTCompiler.Task" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="Microsoft.NET.Runtime.MonoAOTCompiler.Task" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.NET.Runtime.WebAssembly.Sdk" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="Microsoft.NET.Runtime.WebAssembly.Sdk" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.Bcl.AsyncInterfaces" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="Microsoft.Bcl.AsyncInterfaces" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
     <!-- Transitive package to provide coherency in dotnet/extensions -->
-    <Dependency Name="Microsoft.Bcl.TimeProvider" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="Microsoft.Bcl.TimeProvider" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="System.Collections.Immutable" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="System.Collections.Immutable" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="System.Diagnostics.PerformanceCounter" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="System.Diagnostics.PerformanceCounter" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="System.IO.Hashing" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="System.IO.Hashing" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="System.Runtime.Caching" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="System.Runtime.Caching" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
     <!--
          Win-x64 is used here because we have picked an arbitrary runtime identifier to flow the version of the latest NETCore.App runtime.
          All Runtime.$rid packages should have the same version.
     -->
-    <Dependency Name="Microsoft.NETCore.App.Runtime.win-x64" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="Microsoft.NETCore.App.Runtime.win-x64" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
     <!-- Intermediate is necessary for source build. -->
-    <Dependency Name="Microsoft.SourceBuild.Intermediate.runtime.linux-x64" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="Microsoft.SourceBuild.Intermediate.runtime.linux-x64" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
       <SourceBuild RepoName="runtime" ManagedOnly="false" />
     </Dependency>
-    <Dependency Name="Microsoft.NETCore.App.Runtime.AOT.win-x64.Cross.browser-wasm" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="Microsoft.NETCore.App.Runtime.AOT.win-x64.Cross.browser-wasm" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.NETCore.BrowserDebugHost.Transport" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="Microsoft.NETCore.BrowserDebugHost.Transport" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
     <Dependency Name="Microsoft.Web.Xdt" Version="9.0.0-preview.24317.2">
       <Uri>https://github.com/dotnet/xdt</Uri>
@@ -339,9 +339,9 @@
       <Sha>0d51607fb791c51a14b552ed24fe3430c252148b</Sha>
       <SourceBuild RepoName="xdt" ManagedOnly="true" />
     </Dependency>
-    <Dependency Name="Microsoft.SourceBuild.Intermediate.source-build-reference-packages" Version="9.0.0-alpha.1.24413.1">
+    <Dependency Name="Microsoft.SourceBuild.Intermediate.source-build-reference-packages" Version="10.0.0-alpha.1.24428.1">
       <Uri>https://github.com/dotnet/source-build-reference-packages</Uri>
-      <Sha>1b838a42e4952b8fdf212cb1b43c5ce4d69f27b3</Sha>
+      <Sha>6bcf90f99d13da86c5e9753a6f34b6484673d0a0</Sha>
       <SourceBuild RepoName="source-build-reference-packages" ManagedOnly="true" />
     </Dependency>
     <!-- Not updated automatically -->
@@ -367,60 +367,60 @@
       <Sha>afa1eb6821f62183651ab017b2f5c3fbeb934904</Sha>
       <SourceBuild RepoName="roslyn" ManagedOnly="true" />
     </Dependency>
-    <Dependency Name="System.Composition" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="System.Composition" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
     <!-- Intermediate is necessary for source build. -->
-    <Dependency Name="Microsoft.SourceBuild.Intermediate.source-build-externals" Version="9.0.0-alpha.1.24407.1">
+    <Dependency Name="Microsoft.SourceBuild.Intermediate.source-build-externals" Version="10.0.0-alpha.1.24415.1">
       <Uri>https://github.com/dotnet/source-build-externals</Uri>
-      <Sha>51b029e3272f35af0af337823cd122725f316c69</Sha>
+      <Sha>2cef086137a68586fdd69848261e2a8cf8c48b73</Sha>
       <SourceBuild RepoName="source-build-externals" ManagedOnly="true" />
     </Dependency>
   </ProductDependencies>
   <ToolsetDependencies>
     <!-- Listed explicitly to workaround https://github.com/dotnet/cli/issues/10528 -->
-    <Dependency Name="Microsoft.NETCore.Platforms" Version="9.0.0-rc.1.24419.2">
+    <Dependency Name="Microsoft.NETCore.Platforms" Version="10.0.0-alpha.1.24428.7">
       <Uri>https://github.com/dotnet/runtime</Uri>
-      <Sha>418c3b9e2753715fa017ace6b3f1f5ec4d4d6aae</Sha>
+      <Sha>4f01cb76d11cf9741df8ee97254a207f7775fd97</Sha>
     </Dependency>
-    <Dependency Name="System.Drawing.Common" Version="9.0.0-rc.1.24411.4">
+    <Dependency Name="System.Drawing.Common" Version="10.0.0-alpha.1.24425.1">
       <Uri>https://github.com/dotnet/winforms</Uri>
-      <Sha>382ad3e43a8e9c81fbb738940a33cdc0f6442a59</Sha>
+      <Sha>42fd47aeb558bb47d5cec60e854da11203df8953</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.DotNet.Arcade.Sdk" Version="9.0.0-beta.24423.2">
+    <Dependency Name="Microsoft.DotNet.Arcade.Sdk" Version="10.0.0-beta.24430.1">
       <Uri>https://github.com/dotnet/arcade</Uri>
-      <Sha>91599268652b51969b8d8088d4f2f2ba7b3ebb19</Sha>
+      <Sha>0ed1d3dc15420cd41c252b0c5d9474f197a29e06</Sha>
     </Dependency>
     <!-- Intermediate is necessary for source build. -->
-    <Dependency Name="Microsoft.SourceBuild.Intermediate.arcade" Version="9.0.0-beta.24423.2">
+    <Dependency Name="Microsoft.SourceBuild.Intermediate.arcade" Version="10.0.0-beta.24430.1">
       <Uri>https://github.com/dotnet/arcade</Uri>
-      <Sha>91599268652b51969b8d8088d4f2f2ba7b3ebb19</Sha>
+      <Sha>0ed1d3dc15420cd41c252b0c5d9474f197a29e06</Sha>
       <SourceBuild RepoName="arcade" ManagedOnly="true" />
     </Dependency>
-    <Dependency Name="Microsoft.DotNet.Build.Tasks.Installers" Version="9.0.0-beta.24423.2">
+    <Dependency Name="Microsoft.DotNet.Build.Tasks.Installers" Version="10.0.0-beta.24430.1">
       <Uri>https://github.com/dotnet/arcade</Uri>
-      <Sha>91599268652b51969b8d8088d4f2f2ba7b3ebb19</Sha>
+      <Sha>0ed1d3dc15420cd41c252b0c5d9474f197a29e06</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.DotNet.Build.Tasks.Templating" Version="9.0.0-beta.24423.2">
+    <Dependency Name="Microsoft.DotNet.Build.Tasks.Templating" Version="10.0.0-beta.24430.1">
       <Uri>https://github.com/dotnet/arcade</Uri>
-      <Sha>91599268652b51969b8d8088d4f2f2ba7b3ebb19</Sha>
+      <Sha>0ed1d3dc15420cd41c252b0c5d9474f197a29e06</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.DotNet.Helix.Sdk" Version="9.0.0-beta.24423.2">
+    <Dependency Name="Microsoft.DotNet.Helix.Sdk" Version="10.0.0-beta.24430.1">
       <Uri>https://github.com/dotnet/arcade</Uri>
-      <Sha>91599268652b51969b8d8088d4f2f2ba7b3ebb19</Sha>
+      <Sha>0ed1d3dc15420cd41c252b0c5d9474f197a29e06</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.DotNet.RemoteExecutor" Version="9.0.0-beta.24423.2">
+    <Dependency Name="Microsoft.DotNet.RemoteExecutor" Version="10.0.0-beta.24430.1">
       <Uri>https://github.com/dotnet/arcade</Uri>
-      <Sha>91599268652b51969b8d8088d4f2f2ba7b3ebb19</Sha>
+      <Sha>0ed1d3dc15420cd41c252b0c5d9474f197a29e06</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.Extensions.Diagnostics.Testing" Version="9.0.0-preview.8.24425.2">
+    <Dependency Name="Microsoft.Extensions.Diagnostics.Testing" Version="9.0.0-preview.8.24431.1">
       <Uri>https://github.com/dotnet/extensions</Uri>
-      <Sha>b0088050a5a6ed6a537eb0624a4bb09bc14b5e83</Sha>
+      <Sha>b9f773ba463e174b296ea90caa59313b61e7eaa4</Sha>
     </Dependency>
-    <Dependency Name="Microsoft.Extensions.TimeProvider.Testing" Version="9.0.0-preview.8.24425.2">
+    <Dependency Name="Microsoft.Extensions.TimeProvider.Testing" Version="9.0.0-preview.8.24431.1">
       <Uri>https://github.com/dotnet/extensions</Uri>
-      <Sha>b0088050a5a6ed6a537eb0624a4bb09bc14b5e83</Sha>
+      <Sha>b9f773ba463e174b296ea90caa59313b61e7eaa4</Sha>
     </Dependency>
     <Dependency Name="NuGet.Frameworks" Version="6.2.4">
       <Uri>https://github.com/nuget/nuget.client</Uri>

+ 97 - 97
eng/Versions.props

@@ -6,7 +6,7 @@
 -->
 <Project>
   <PropertyGroup Label="Version settings">
-    <AspNetCoreMajorVersion>9</AspNetCoreMajorVersion>
+    <AspNetCoreMajorVersion>10</AspNetCoreMajorVersion>
     <AspNetCoreMinorVersion>0</AspNetCoreMinorVersion>
     <AspNetCorePatchVersion>0</AspNetCorePatchVersion>
     <PreReleaseVersionIteration>2</PreReleaseVersionIteration>
@@ -18,8 +18,8 @@
     -->
     <StabilizePackageVersion Condition="'$(StabilizePackageVersion)' == ''">false</StabilizePackageVersion>
     <DotNetFinalVersionKind Condition="'$(StabilizePackageVersion)' == 'true'">release</DotNetFinalVersionKind>
-    <PreReleaseVersionLabel>rc</PreReleaseVersionLabel>
-    <PreReleaseBrandingLabel>Release Candidate $(PreReleaseVersionIteration)</PreReleaseBrandingLabel>
+    <PreReleaseVersionLabel>alpha</PreReleaseVersionLabel>
+    <PreReleaseBrandingLabel>Alpha $(PreReleaseVersionIteration)</PreReleaseBrandingLabel>
     <IncludePreReleaseLabelInPackageVersion>true</IncludePreReleaseLabelInPackageVersion>
     <IncludePreReleaseLabelInPackageVersion Condition=" '$(DotNetFinalVersionKind)' == 'release' ">false</IncludePreReleaseLabelInPackageVersion>
     <AspNetCoreMajorMinorVersion>$(AspNetCoreMajorVersion).$(AspNetCoreMinorVersion)</AspNetCoreMajorMinorVersion>
@@ -67,92 +67,92 @@
   -->
   <PropertyGroup Label="Automated">
     <!-- Packages from dotnet/runtime -->
-    <MicrosoftExtensionsDependencyModelVersion>9.0.0-rc.1.24419.2</MicrosoftExtensionsDependencyModelVersion>
-    <MicrosoftNETCoreAppRefVersion>9.0.0-rc.1.24419.2</MicrosoftNETCoreAppRefVersion>
-    <MicrosoftNETCoreAppRuntimewinx64Version>9.0.0-rc.1.24419.2</MicrosoftNETCoreAppRuntimewinx64Version>
-    <MicrosoftNETRuntimeMonoAOTCompilerTaskVersion>9.0.0-rc.1.24419.2</MicrosoftNETRuntimeMonoAOTCompilerTaskVersion>
-    <MicrosoftNETRuntimeWebAssemblySdkVersion>9.0.0-rc.1.24419.2</MicrosoftNETRuntimeWebAssemblySdkVersion>
-    <MicrosoftNETCoreAppRuntimeAOTwinx64CrossbrowserwasmVersion>9.0.0-rc.1.24419.2</MicrosoftNETCoreAppRuntimeAOTwinx64CrossbrowserwasmVersion>
-    <MicrosoftNETCoreBrowserDebugHostTransportVersion>9.0.0-rc.1.24419.2</MicrosoftNETCoreBrowserDebugHostTransportVersion>
-    <MicrosoftExtensionsCachingAbstractionsVersion>9.0.0-rc.1.24419.2</MicrosoftExtensionsCachingAbstractionsVersion>
-    <MicrosoftExtensionsCachingMemoryVersion>9.0.0-rc.1.24419.2</MicrosoftExtensionsCachingMemoryVersion>
-    <MicrosoftExtensionsConfigurationAbstractionsVersion>9.0.0-rc.1.24419.2</MicrosoftExtensionsConfigurationAbstractionsVersion>
-    <MicrosoftExtensionsConfigurationBinderVersion>9.0.0-rc.1.24419.2</MicrosoftExtensionsConfigurationBinderVersion>
-    <MicrosoftExtensionsConfigurationCommandLineVersion>9.0.0-rc.1.24419.2</MicrosoftExtensionsConfigurationCommandLineVersion>
-    <MicrosoftExtensionsConfigurationEnvironmentVariablesVersion>9.0.0-rc.1.24419.2</MicrosoftExtensionsConfigurationEnvironmentVariablesVersion>
-    <MicrosoftExtensionsConfigurationFileExtensionsVersion>9.0.0-rc.1.24419.2</MicrosoftExtensionsConfigurationFileExtensionsVersion>
-    <MicrosoftExtensionsConfigurationIniVersion>9.0.0-rc.1.24419.2</MicrosoftExtensionsConfigurationIniVersion>
-    <MicrosoftExtensionsConfigurationJsonVersion>9.0.0-rc.1.24419.2</MicrosoftExtensionsConfigurationJsonVersion>
-    <MicrosoftExtensionsConfigurationVersion>9.0.0-rc.1.24419.2</MicrosoftExtensionsConfigurationVersion>
-    <MicrosoftExtensionsConfigurationUserSecretsVersion>9.0.0-rc.1.24419.2</MicrosoftExtensionsConfigurationUserSecretsVersion>
-    <MicrosoftExtensionsConfigurationXmlVersion>9.0.0-rc.1.24419.2</MicrosoftExtensionsConfigurationXmlVersion>
-    <MicrosoftExtensionsDependencyInjectionAbstractionsVersion>9.0.0-rc.1.24419.2</MicrosoftExtensionsDependencyInjectionAbstractionsVersion>
-    <MicrosoftExtensionsDependencyInjectionVersion>9.0.0-rc.1.24419.2</MicrosoftExtensionsDependencyInjectionVersion>
-    <MicrosoftExtensionsDiagnosticsAbstractionsVersion>9.0.0-rc.1.24419.2</MicrosoftExtensionsDiagnosticsAbstractionsVersion>
-    <MicrosoftExtensionsDiagnosticsVersion>9.0.0-rc.1.24419.2</MicrosoftExtensionsDiagnosticsVersion>
-    <MicrosoftExtensionsFileProvidersAbstractionsVersion>9.0.0-rc.1.24419.2</MicrosoftExtensionsFileProvidersAbstractionsVersion>
-    <MicrosoftExtensionsFileProvidersCompositeVersion>9.0.0-rc.1.24419.2</MicrosoftExtensionsFileProvidersCompositeVersion>
-    <MicrosoftExtensionsFileProvidersPhysicalVersion>9.0.0-rc.1.24419.2</MicrosoftExtensionsFileProvidersPhysicalVersion>
-    <MicrosoftExtensionsFileSystemGlobbingVersion>9.0.0-rc.1.24419.2</MicrosoftExtensionsFileSystemGlobbingVersion>
-    <MicrosoftExtensionsHostFactoryResolverSourcesVersion>9.0.0-rc.1.24419.2</MicrosoftExtensionsHostFactoryResolverSourcesVersion>
-    <MicrosoftExtensionsHostingAbstractionsVersion>9.0.0-rc.1.24419.2</MicrosoftExtensionsHostingAbstractionsVersion>
-    <MicrosoftExtensionsHostingVersion>9.0.0-rc.1.24419.2</MicrosoftExtensionsHostingVersion>
-    <MicrosoftExtensionsHttpVersion>9.0.0-rc.1.24419.2</MicrosoftExtensionsHttpVersion>
-    <MicrosoftExtensionsLoggingAbstractionsVersion>9.0.0-rc.1.24419.2</MicrosoftExtensionsLoggingAbstractionsVersion>
-    <MicrosoftExtensionsLoggingConfigurationVersion>9.0.0-rc.1.24419.2</MicrosoftExtensionsLoggingConfigurationVersion>
-    <MicrosoftExtensionsLoggingConsoleVersion>9.0.0-rc.1.24419.2</MicrosoftExtensionsLoggingConsoleVersion>
-    <MicrosoftExtensionsLoggingDebugVersion>9.0.0-rc.1.24419.2</MicrosoftExtensionsLoggingDebugVersion>
-    <MicrosoftExtensionsLoggingEventSourceVersion>9.0.0-rc.1.24419.2</MicrosoftExtensionsLoggingEventSourceVersion>
-    <MicrosoftExtensionsLoggingEventLogVersion>9.0.0-rc.1.24419.2</MicrosoftExtensionsLoggingEventLogVersion>
-    <MicrosoftExtensionsLoggingVersion>9.0.0-rc.1.24419.2</MicrosoftExtensionsLoggingVersion>
-    <MicrosoftExtensionsLoggingTraceSourceVersion>9.0.0-rc.1.24419.2</MicrosoftExtensionsLoggingTraceSourceVersion>
-    <MicrosoftExtensionsOptionsConfigurationExtensionsVersion>9.0.0-rc.1.24419.2</MicrosoftExtensionsOptionsConfigurationExtensionsVersion>
-    <MicrosoftExtensionsOptionsDataAnnotationsVersion>9.0.0-rc.1.24419.2</MicrosoftExtensionsOptionsDataAnnotationsVersion>
-    <MicrosoftExtensionsOptionsVersion>9.0.0-rc.1.24419.2</MicrosoftExtensionsOptionsVersion>
-    <MicrosoftExtensionsPrimitivesVersion>9.0.0-rc.1.24419.2</MicrosoftExtensionsPrimitivesVersion>
-    <MicrosoftInternalRuntimeAspNetCoreTransportVersion>9.0.0-rc.1.24419.2</MicrosoftInternalRuntimeAspNetCoreTransportVersion>
-    <MicrosoftSourceBuildIntermediateruntimelinuxx64Version>9.0.0-rc.1.24419.2</MicrosoftSourceBuildIntermediateruntimelinuxx64Version>
-    <SystemCompositionVersion>9.0.0-rc.1.24419.2</SystemCompositionVersion>
-    <SystemConfigurationConfigurationManagerVersion>9.0.0-rc.1.24419.2</SystemConfigurationConfigurationManagerVersion>
-    <SystemDiagnosticsDiagnosticSourceVersion>9.0.0-rc.1.24419.2</SystemDiagnosticsDiagnosticSourceVersion>
-    <SystemDiagnosticsEventLogVersion>9.0.0-rc.1.24419.2</SystemDiagnosticsEventLogVersion>
-    <SystemDirectoryServicesProtocolsVersion>9.0.0-rc.1.24419.2</SystemDirectoryServicesProtocolsVersion>
-    <SystemIOPipelinesVersion>9.0.0-rc.1.24419.2</SystemIOPipelinesVersion>
-    <SystemNetHttpJsonVersion>9.0.0-rc.1.24419.2</SystemNetHttpJsonVersion>
-    <SystemNetHttpWinHttpHandlerVersion>9.0.0-rc.1.24419.2</SystemNetHttpWinHttpHandlerVersion>
-    <SystemNetServerSentEventsVersion>9.0.0-rc.1.24419.2</SystemNetServerSentEventsVersion>
-    <SystemReflectionMetadataVersion>9.0.0-rc.1.24419.2</SystemReflectionMetadataVersion>
-    <SystemResourcesExtensionsVersion>9.0.0-rc.1.24419.2</SystemResourcesExtensionsVersion>
-    <SystemSecurityCryptographyPkcsVersion>9.0.0-rc.1.24419.2</SystemSecurityCryptographyPkcsVersion>
-    <SystemSecurityCryptographyXmlVersion>9.0.0-rc.1.24419.2</SystemSecurityCryptographyXmlVersion>
-    <SystemSecurityPermissionsVersion>9.0.0-rc.1.24419.2</SystemSecurityPermissionsVersion>
-    <SystemServiceProcessServiceControllerVersion>9.0.0-rc.1.24419.2</SystemServiceProcessServiceControllerVersion>
-    <SystemTextEncodingsWebVersion>9.0.0-rc.1.24419.2</SystemTextEncodingsWebVersion>
-    <SystemTextJsonVersion>9.0.0-rc.1.24419.2</SystemTextJsonVersion>
-    <SystemThreadingAccessControlVersion>9.0.0-rc.1.24419.2</SystemThreadingAccessControlVersion>
-    <SystemThreadingChannelsVersion>9.0.0-rc.1.24419.2</SystemThreadingChannelsVersion>
-    <SystemThreadingRateLimitingVersion>9.0.0-rc.1.24419.2</SystemThreadingRateLimitingVersion>
+    <MicrosoftExtensionsDependencyModelVersion>10.0.0-alpha.1.24428.7</MicrosoftExtensionsDependencyModelVersion>
+    <MicrosoftNETCoreAppRefVersion>10.0.0-alpha.1.24428.7</MicrosoftNETCoreAppRefVersion>
+    <MicrosoftNETCoreAppRuntimewinx64Version>10.0.0-alpha.1.24428.7</MicrosoftNETCoreAppRuntimewinx64Version>
+    <MicrosoftNETRuntimeMonoAOTCompilerTaskVersion>10.0.0-alpha.1.24428.7</MicrosoftNETRuntimeMonoAOTCompilerTaskVersion>
+    <MicrosoftNETRuntimeWebAssemblySdkVersion>10.0.0-alpha.1.24428.7</MicrosoftNETRuntimeWebAssemblySdkVersion>
+    <MicrosoftNETCoreAppRuntimeAOTwinx64CrossbrowserwasmVersion>10.0.0-alpha.1.24428.7</MicrosoftNETCoreAppRuntimeAOTwinx64CrossbrowserwasmVersion>
+    <MicrosoftNETCoreBrowserDebugHostTransportVersion>10.0.0-alpha.1.24428.7</MicrosoftNETCoreBrowserDebugHostTransportVersion>
+    <MicrosoftExtensionsCachingAbstractionsVersion>10.0.0-alpha.1.24428.7</MicrosoftExtensionsCachingAbstractionsVersion>
+    <MicrosoftExtensionsCachingMemoryVersion>10.0.0-alpha.1.24428.7</MicrosoftExtensionsCachingMemoryVersion>
+    <MicrosoftExtensionsConfigurationAbstractionsVersion>10.0.0-alpha.1.24428.7</MicrosoftExtensionsConfigurationAbstractionsVersion>
+    <MicrosoftExtensionsConfigurationBinderVersion>10.0.0-alpha.1.24428.7</MicrosoftExtensionsConfigurationBinderVersion>
+    <MicrosoftExtensionsConfigurationCommandLineVersion>10.0.0-alpha.1.24428.7</MicrosoftExtensionsConfigurationCommandLineVersion>
+    <MicrosoftExtensionsConfigurationEnvironmentVariablesVersion>10.0.0-alpha.1.24428.7</MicrosoftExtensionsConfigurationEnvironmentVariablesVersion>
+    <MicrosoftExtensionsConfigurationFileExtensionsVersion>10.0.0-alpha.1.24428.7</MicrosoftExtensionsConfigurationFileExtensionsVersion>
+    <MicrosoftExtensionsConfigurationIniVersion>10.0.0-alpha.1.24428.7</MicrosoftExtensionsConfigurationIniVersion>
+    <MicrosoftExtensionsConfigurationJsonVersion>10.0.0-alpha.1.24428.7</MicrosoftExtensionsConfigurationJsonVersion>
+    <MicrosoftExtensionsConfigurationVersion>10.0.0-alpha.1.24428.7</MicrosoftExtensionsConfigurationVersion>
+    <MicrosoftExtensionsConfigurationUserSecretsVersion>10.0.0-alpha.1.24428.7</MicrosoftExtensionsConfigurationUserSecretsVersion>
+    <MicrosoftExtensionsConfigurationXmlVersion>10.0.0-alpha.1.24428.7</MicrosoftExtensionsConfigurationXmlVersion>
+    <MicrosoftExtensionsDependencyInjectionAbstractionsVersion>10.0.0-alpha.1.24428.7</MicrosoftExtensionsDependencyInjectionAbstractionsVersion>
+    <MicrosoftExtensionsDependencyInjectionVersion>10.0.0-alpha.1.24428.7</MicrosoftExtensionsDependencyInjectionVersion>
+    <MicrosoftExtensionsDiagnosticsAbstractionsVersion>10.0.0-alpha.1.24428.7</MicrosoftExtensionsDiagnosticsAbstractionsVersion>
+    <MicrosoftExtensionsDiagnosticsVersion>10.0.0-alpha.1.24428.7</MicrosoftExtensionsDiagnosticsVersion>
+    <MicrosoftExtensionsFileProvidersAbstractionsVersion>10.0.0-alpha.1.24428.7</MicrosoftExtensionsFileProvidersAbstractionsVersion>
+    <MicrosoftExtensionsFileProvidersCompositeVersion>10.0.0-alpha.1.24428.7</MicrosoftExtensionsFileProvidersCompositeVersion>
+    <MicrosoftExtensionsFileProvidersPhysicalVersion>10.0.0-alpha.1.24428.7</MicrosoftExtensionsFileProvidersPhysicalVersion>
+    <MicrosoftExtensionsFileSystemGlobbingVersion>10.0.0-alpha.1.24428.7</MicrosoftExtensionsFileSystemGlobbingVersion>
+    <MicrosoftExtensionsHostFactoryResolverSourcesVersion>10.0.0-alpha.1.24428.7</MicrosoftExtensionsHostFactoryResolverSourcesVersion>
+    <MicrosoftExtensionsHostingAbstractionsVersion>10.0.0-alpha.1.24428.7</MicrosoftExtensionsHostingAbstractionsVersion>
+    <MicrosoftExtensionsHostingVersion>10.0.0-alpha.1.24428.7</MicrosoftExtensionsHostingVersion>
+    <MicrosoftExtensionsHttpVersion>10.0.0-alpha.1.24428.7</MicrosoftExtensionsHttpVersion>
+    <MicrosoftExtensionsLoggingAbstractionsVersion>10.0.0-alpha.1.24428.7</MicrosoftExtensionsLoggingAbstractionsVersion>
+    <MicrosoftExtensionsLoggingConfigurationVersion>10.0.0-alpha.1.24428.7</MicrosoftExtensionsLoggingConfigurationVersion>
+    <MicrosoftExtensionsLoggingConsoleVersion>10.0.0-alpha.1.24428.7</MicrosoftExtensionsLoggingConsoleVersion>
+    <MicrosoftExtensionsLoggingDebugVersion>10.0.0-alpha.1.24428.7</MicrosoftExtensionsLoggingDebugVersion>
+    <MicrosoftExtensionsLoggingEventSourceVersion>10.0.0-alpha.1.24428.7</MicrosoftExtensionsLoggingEventSourceVersion>
+    <MicrosoftExtensionsLoggingEventLogVersion>10.0.0-alpha.1.24428.7</MicrosoftExtensionsLoggingEventLogVersion>
+    <MicrosoftExtensionsLoggingVersion>10.0.0-alpha.1.24428.7</MicrosoftExtensionsLoggingVersion>
+    <MicrosoftExtensionsLoggingTraceSourceVersion>10.0.0-alpha.1.24428.7</MicrosoftExtensionsLoggingTraceSourceVersion>
+    <MicrosoftExtensionsOptionsConfigurationExtensionsVersion>10.0.0-alpha.1.24428.7</MicrosoftExtensionsOptionsConfigurationExtensionsVersion>
+    <MicrosoftExtensionsOptionsDataAnnotationsVersion>10.0.0-alpha.1.24428.7</MicrosoftExtensionsOptionsDataAnnotationsVersion>
+    <MicrosoftExtensionsOptionsVersion>10.0.0-alpha.1.24428.7</MicrosoftExtensionsOptionsVersion>
+    <MicrosoftExtensionsPrimitivesVersion>10.0.0-alpha.1.24428.7</MicrosoftExtensionsPrimitivesVersion>
+    <MicrosoftInternalRuntimeAspNetCoreTransportVersion>10.0.0-alpha.1.24428.7</MicrosoftInternalRuntimeAspNetCoreTransportVersion>
+    <MicrosoftSourceBuildIntermediateruntimelinuxx64Version>10.0.0-alpha.1.24428.7</MicrosoftSourceBuildIntermediateruntimelinuxx64Version>
+    <SystemCompositionVersion>10.0.0-alpha.1.24428.7</SystemCompositionVersion>
+    <SystemConfigurationConfigurationManagerVersion>10.0.0-alpha.1.24428.7</SystemConfigurationConfigurationManagerVersion>
+    <SystemDiagnosticsDiagnosticSourceVersion>10.0.0-alpha.1.24428.7</SystemDiagnosticsDiagnosticSourceVersion>
+    <SystemDiagnosticsEventLogVersion>10.0.0-alpha.1.24428.7</SystemDiagnosticsEventLogVersion>
+    <SystemDirectoryServicesProtocolsVersion>10.0.0-alpha.1.24428.7</SystemDirectoryServicesProtocolsVersion>
+    <SystemIOPipelinesVersion>10.0.0-alpha.1.24428.7</SystemIOPipelinesVersion>
+    <SystemNetHttpJsonVersion>10.0.0-alpha.1.24428.7</SystemNetHttpJsonVersion>
+    <SystemNetHttpWinHttpHandlerVersion>10.0.0-alpha.1.24428.7</SystemNetHttpWinHttpHandlerVersion>
+    <SystemNetServerSentEventsVersion>10.0.0-alpha.1.24428.7</SystemNetServerSentEventsVersion>
+    <SystemReflectionMetadataVersion>10.0.0-alpha.1.24428.7</SystemReflectionMetadataVersion>
+    <SystemResourcesExtensionsVersion>10.0.0-alpha.1.24428.7</SystemResourcesExtensionsVersion>
+    <SystemSecurityCryptographyPkcsVersion>10.0.0-alpha.1.24428.7</SystemSecurityCryptographyPkcsVersion>
+    <SystemSecurityCryptographyXmlVersion>10.0.0-alpha.1.24428.7</SystemSecurityCryptographyXmlVersion>
+    <SystemSecurityPermissionsVersion>10.0.0-alpha.1.24428.7</SystemSecurityPermissionsVersion>
+    <SystemServiceProcessServiceControllerVersion>10.0.0-alpha.1.24428.7</SystemServiceProcessServiceControllerVersion>
+    <SystemTextEncodingsWebVersion>10.0.0-alpha.1.24428.7</SystemTextEncodingsWebVersion>
+    <SystemTextJsonVersion>10.0.0-alpha.1.24428.7</SystemTextJsonVersion>
+    <SystemThreadingAccessControlVersion>10.0.0-alpha.1.24428.7</SystemThreadingAccessControlVersion>
+    <SystemThreadingChannelsVersion>10.0.0-alpha.1.24428.7</SystemThreadingChannelsVersion>
+    <SystemThreadingRateLimitingVersion>10.0.0-alpha.1.24428.7</SystemThreadingRateLimitingVersion>
     <!-- Only listed explicitly to workaround https://github.com/dotnet/cli/issues/10528 -->
-    <MicrosoftNETCorePlatformsVersion>9.0.0-rc.1.24419.2</MicrosoftNETCorePlatformsVersion>
-    <MicrosoftBclAsyncInterfacesVersion>9.0.0-rc.1.24419.2</MicrosoftBclAsyncInterfacesVersion>
+    <MicrosoftNETCorePlatformsVersion>10.0.0-alpha.1.24428.7</MicrosoftNETCorePlatformsVersion>
+    <MicrosoftBclAsyncInterfacesVersion>10.0.0-alpha.1.24428.7</MicrosoftBclAsyncInterfacesVersion>
     <!-- Transitive package to provide coherency in dotnet/extensions -->
-    <MicrosoftBclTimeProviderVersion>9.0.0-rc.1.24419.2</MicrosoftBclTimeProviderVersion>
-    <SystemCollectionsImmutableVersion>9.0.0-rc.1.24419.2</SystemCollectionsImmutableVersion>
-    <SystemDiagnosticsPerformanceCounterVersion>9.0.0-rc.1.24419.2</SystemDiagnosticsPerformanceCounterVersion>
-    <SystemIOHashingVersion>9.0.0-rc.1.24419.2</SystemIOHashingVersion>
-    <SystemRuntimeCachingVersion>9.0.0-rc.1.24419.2</SystemRuntimeCachingVersion>
+    <MicrosoftBclTimeProviderVersion>10.0.0-alpha.1.24428.7</MicrosoftBclTimeProviderVersion>
+    <SystemCollectionsImmutableVersion>10.0.0-alpha.1.24428.7</SystemCollectionsImmutableVersion>
+    <SystemDiagnosticsPerformanceCounterVersion>10.0.0-alpha.1.24428.7</SystemDiagnosticsPerformanceCounterVersion>
+    <SystemIOHashingVersion>10.0.0-alpha.1.24428.7</SystemIOHashingVersion>
+    <SystemRuntimeCachingVersion>10.0.0-alpha.1.24428.7</SystemRuntimeCachingVersion>
     <!-- Packages from dotnet/extensions -->
-    <MicrosoftExtensionsDiagnosticsTestingVersion>9.0.0-preview.8.24425.2</MicrosoftExtensionsDiagnosticsTestingVersion>
-    <MicrosoftExtensionsTimeProviderTestingVersion>9.0.0-preview.8.24425.2</MicrosoftExtensionsTimeProviderTestingVersion>
+    <MicrosoftExtensionsDiagnosticsTestingVersion>9.0.0-preview.8.24431.1</MicrosoftExtensionsDiagnosticsTestingVersion>
+    <MicrosoftExtensionsTimeProviderTestingVersion>9.0.0-preview.8.24431.1</MicrosoftExtensionsTimeProviderTestingVersion>
     <!-- Packages from dotnet/efcore -->
-    <dotnetefVersion>9.0.0-rc.2.24419.9</dotnetefVersion>
-    <MicrosoftEntityFrameworkCoreInMemoryVersion>9.0.0-rc.2.24419.9</MicrosoftEntityFrameworkCoreInMemoryVersion>
-    <MicrosoftEntityFrameworkCoreRelationalVersion>9.0.0-rc.2.24419.9</MicrosoftEntityFrameworkCoreRelationalVersion>
-    <MicrosoftEntityFrameworkCoreSqliteVersion>9.0.0-rc.2.24419.9</MicrosoftEntityFrameworkCoreSqliteVersion>
-    <MicrosoftEntityFrameworkCoreSqlServerVersion>9.0.0-rc.2.24419.9</MicrosoftEntityFrameworkCoreSqlServerVersion>
-    <MicrosoftEntityFrameworkCoreToolsVersion>9.0.0-rc.2.24419.9</MicrosoftEntityFrameworkCoreToolsVersion>
-    <MicrosoftEntityFrameworkCoreVersion>9.0.0-rc.2.24419.9</MicrosoftEntityFrameworkCoreVersion>
-    <MicrosoftEntityFrameworkCoreDesignVersion>9.0.0-rc.2.24419.9</MicrosoftEntityFrameworkCoreDesignVersion>
+    <dotnetefVersion>10.0.0-alpha.1.24428.1</dotnetefVersion>
+    <MicrosoftEntityFrameworkCoreInMemoryVersion>10.0.0-alpha.1.24428.1</MicrosoftEntityFrameworkCoreInMemoryVersion>
+    <MicrosoftEntityFrameworkCoreRelationalVersion>10.0.0-alpha.1.24428.1</MicrosoftEntityFrameworkCoreRelationalVersion>
+    <MicrosoftEntityFrameworkCoreSqliteVersion>10.0.0-alpha.1.24428.1</MicrosoftEntityFrameworkCoreSqliteVersion>
+    <MicrosoftEntityFrameworkCoreSqlServerVersion>10.0.0-alpha.1.24428.1</MicrosoftEntityFrameworkCoreSqlServerVersion>
+    <MicrosoftEntityFrameworkCoreToolsVersion>10.0.0-alpha.1.24428.1</MicrosoftEntityFrameworkCoreToolsVersion>
+    <MicrosoftEntityFrameworkCoreVersion>10.0.0-alpha.1.24428.1</MicrosoftEntityFrameworkCoreVersion>
+    <MicrosoftEntityFrameworkCoreDesignVersion>10.0.0-alpha.1.24428.1</MicrosoftEntityFrameworkCoreDesignVersion>
     <!-- Packages from dotnet/roslyn -->
     <MicrosoftCodeAnalysisCommonVersion>4.11.0-1.24218.5</MicrosoftCodeAnalysisCommonVersion>
     <MicrosoftCodeAnalysisExternalAccessAspNetCoreVersion>4.11.0-1.24218.5</MicrosoftCodeAnalysisExternalAccessAspNetCoreVersion>
@@ -165,18 +165,18 @@
     <NuGetVersioningVersion>6.2.4</NuGetVersioningVersion>
     <NuGetFrameworksVersion>6.2.4</NuGetFrameworksVersion>
     <!-- Packages from dotnet/arcade -->
-    <MicrosoftDotNetBuildTasksInstallersVersion>9.0.0-beta.24423.2</MicrosoftDotNetBuildTasksInstallersVersion>
-    <MicrosoftDotNetBuildTasksTemplatingVersion>9.0.0-beta.24423.2</MicrosoftDotNetBuildTasksTemplatingVersion>
-    <MicrosoftDotNetRemoteExecutorVersion>9.0.0-beta.24423.2</MicrosoftDotNetRemoteExecutorVersion>
-    <MicrosoftSourceBuildIntermediatearcadeVersion>9.0.0-beta.24423.2</MicrosoftSourceBuildIntermediatearcadeVersion>
+    <MicrosoftDotNetBuildTasksInstallersVersion>10.0.0-beta.24430.1</MicrosoftDotNetBuildTasksInstallersVersion>
+    <MicrosoftDotNetBuildTasksTemplatingVersion>10.0.0-beta.24430.1</MicrosoftDotNetBuildTasksTemplatingVersion>
+    <MicrosoftDotNetRemoteExecutorVersion>10.0.0-beta.24430.1</MicrosoftDotNetRemoteExecutorVersion>
+    <MicrosoftSourceBuildIntermediatearcadeVersion>10.0.0-beta.24430.1</MicrosoftSourceBuildIntermediatearcadeVersion>
     <!-- Packages from dotnet/source-build-externals -->
-    <MicrosoftSourceBuildIntermediatesourcebuildexternalsVersion>9.0.0-alpha.1.24407.1</MicrosoftSourceBuildIntermediatesourcebuildexternalsVersion>
+    <MicrosoftSourceBuildIntermediatesourcebuildexternalsVersion>10.0.0-alpha.1.24415.1</MicrosoftSourceBuildIntermediatesourcebuildexternalsVersion>
     <!-- Packages from dotnet/source-build-reference-packages -->
-    <MicrosoftSourceBuildIntermediatesourcebuildreferencepackagesVersion>9.0.0-alpha.1.24413.1</MicrosoftSourceBuildIntermediatesourcebuildreferencepackagesVersion>
+    <MicrosoftSourceBuildIntermediatesourcebuildreferencepackagesVersion>10.0.0-alpha.1.24428.1</MicrosoftSourceBuildIntermediatesourcebuildreferencepackagesVersion>
     <!-- Packages from dotnet/symreader -->
     <MicrosoftSourceBuildIntermediatesymreaderVersion>2.2.0-beta.24327.2</MicrosoftSourceBuildIntermediatesymreaderVersion>
     <!-- Packages from dotnet/winforms -->
-    <SystemDrawingCommonVersion>9.0.0-rc.1.24411.4</SystemDrawingCommonVersion>
+    <SystemDrawingCommonVersion>10.0.0-alpha.1.24425.1</SystemDrawingCommonVersion>
     <!-- Packages from dotnet/xdt -->
     <MicrosoftWebXdtVersion>9.0.0-preview.24317.2</MicrosoftWebXdtVersion>
     <MicrosoftSourceBuildIntermediatexdtVersion>9.0.0-preview.24317.2</MicrosoftSourceBuildIntermediatexdtVersion>
@@ -313,8 +313,8 @@
     <MicrosoftPlaywrightVersion>1.45.1</MicrosoftPlaywrightVersion>
     <PollyExtensionsHttpVersion>3.0.0</PollyExtensionsHttpVersion>
     <PollyVersion>7.2.4</PollyVersion>
-    <SeleniumSupportVersion>4.22.0</SeleniumSupportVersion>
-    <SeleniumWebDriverVersion>4.22.0</SeleniumWebDriverVersion>
+    <SeleniumSupportVersion>4.24.0</SeleniumSupportVersion>
+    <SeleniumWebDriverVersion>4.24.0</SeleniumWebDriverVersion>
     <SerilogExtensionsLoggingVersion>1.4.0</SerilogExtensionsLoggingVersion>
     <SerilogSinksFileVersion>4.0.0</SerilogSinksFileVersion>
     <StackExchangeRedisVersion>2.7.27</StackExchangeRedisVersion>
@@ -322,12 +322,12 @@
     <SwashbuckleAspNetCoreVersion>6.6.2</SwashbuckleAspNetCoreVersion>
     <VerifyXunitVersion>19.14.0</VerifyXunitVersion>
     <XunitAbstractionsVersion>2.0.3</XunitAbstractionsVersion>
-    <XunitAnalyzersVersion>1.0.0</XunitAnalyzersVersion>
-    <XunitVersion>2.4.2</XunitVersion>
+    <XunitAnalyzersVersion>1.15.0</XunitAnalyzersVersion>
+    <XunitVersion>2.9.0</XunitVersion>
     <XunitAssertVersion>$(XunitVersion)</XunitAssertVersion>
     <XunitExtensibilityCoreVersion>$(XunitVersion)</XunitExtensibilityCoreVersion>
     <XunitExtensibilityExecutionVersion>$(XunitVersion)</XunitExtensibilityExecutionVersion>
-    <XUnitRunnerVisualStudioVersion>2.4.3</XUnitRunnerVisualStudioVersion>
+    <XUnitRunnerVisualStudioVersion>2.8.2</XUnitRunnerVisualStudioVersion>
     <MicrosoftDataSqlClientVersion>4.0.5</MicrosoftDataSqlClientVersion>
     <MicrosoftOpenApiVersion>1.6.17</MicrosoftOpenApiVersion>
     <MicrosoftOpenApiReadersVersion>1.6.17</MicrosoftOpenApiReadersVersion>

+ 1 - 0
eng/common/core-templates/steps/publish-logs.yml

@@ -45,6 +45,7 @@ steps:
     SourceFolder: '$(Build.SourcesDirectory)/PostBuildLogs'
     Contents: '**'
     TargetFolder: '$(Build.ArtifactStagingDirectory)/PostBuildLogs'
+  condition: always()
 
 - template: /eng/common/core-templates/steps/publish-build-artifacts.yml
   parameters:

+ 3 - 2
eng/test-configuration.json

@@ -7,10 +7,11 @@
     {"testName": {"contains": "MaxRequestBufferSizeTests.LargeUpload" }}, // tries to manipulate the state of the server's buffer
     {"testName": {"contains": "CertificateChangedOnDisk"}}, // depends on FS event timing
     {"testName": {"contains": "CertificateChangedOnDisk_Symlink"}}, // depends on FS event timing
-    {"testName": {"contains": "POST_ServerAbort_ClientReceivesAbort"}},
     {"testName": {"contains": "CanLaunchPhotinoWebViewAndClickButton"}},
     {"testName": {"contains": "CheckInvalidHostingModelParameter"}},
-    {"testName": {"contains": "CanSendAndReceiveUserMessagesFromMultipleConnectionsWithSameUser"}},
+    {"testName": {"contains": "CheckNewShimIsUsed"}}, // Issue: https://github.com/dotnet/aspnetcore/issues/57538
+    {"testName": {"contains": "ComponentLifecycleMethodThrowsExceptionTerminatesTheCircuit"}}, // Issue: https://github.com/dotnet/aspnetcore/issues/57551
+    {"testName": {"contains": "ComponentDisposeMethodThrowsExceptionTerminatesTheCircuit"}}, // Issue: https://github.com/dotnet/aspnetcore/issues/57551
     {"testAssembly": {"contains": "IIS"}},
     {"testAssembly": {"contains": "Template"}},
     {"failureMessage": {"contains":"(Site is started but no worker process found)"}},

+ 74 - 0
eng/tools/RepoTasks/GenerateTestDevCert.cs

@@ -0,0 +1,74 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System;
+using System.Linq;
+using System.Text.Json;
+using System.Threading;
+using Microsoft.Build.Framework;
+using Microsoft.Build.Utilities;
+
+namespace RepoTasks;
+
+/// <summary>
+/// Generates the test HTTPs certificate used by the template tests
+/// </summary>
+public class GenerateTestDevCert : Task
+{
+    [Required]
+    public string CertificatePath { get; private set; }
+
+    public override bool Execute()
+    {
+        Mutex mutex = null;
+        try
+        {
+            // MSBuild will potentially invoke this task in parallel across different subprocesses/nodes.
+            // The build is configured to generate the certificate in a single location, but multiple projects
+            // import the same targets that will use this task, which will result in multiple calls.
+            // To avoid issues where we try to generate multiple certificates on the same location, we wrap the
+            // usage in a named mutex which guarantees that only one instance will run at a time.
+            mutex = new(initiallyOwned: true, "Global\\GenerateTestDevCert", out var createdNew);
+            if (!createdNew)
+            {
+                // The mutex already exists, wait for it to be released.
+                mutex.WaitOne();
+            }
+
+            if (File.Exists(CertificatePath))
+            {
+                Log.LogMessage(MessageImportance.Normal, $"A test certificate already exists at {CertificatePath}");
+                return true;
+            }
+
+            var cert = DevelopmentCertificate.Create(CertificatePath);
+
+            var devCertJsonFile = Path.ChangeExtension(CertificatePath, ".json");
+            var devCertJson = new CertificateInfo
+            {
+                Password = cert.CertificatePassword,
+                Thumbprint = cert.CertificateThumbprint
+            };
+
+            using var file = File.OpenWrite(devCertJsonFile);
+            file.SetLength(0);
+            JsonSerializer.Serialize(file, devCertJson);
+        }
+        catch (Exception e)
+        {
+            Log.LogErrorFromException(e, showStackTrace: true);
+        }
+        finally
+        {
+            mutex.ReleaseMutex();
+        }
+
+        return !Log.HasLoggedErrors;
+    }
+
+    private class CertificateInfo
+    {
+        public string Password { get; set; }
+        public string Thumbprint { get; set; }
+    }
+}

+ 10 - 0
eng/tools/RepoTasks/RepoTasks.csproj

@@ -22,6 +22,15 @@
     <PackageReference Include="Microsoft.Extensions.DependencyModel" Version="$(MicrosoftExtensionsDependencyModelVersion)" />
   </ItemGroup>
 
+  <ItemGroup Condition="'$(TargetFramework)' != 'net472'">
+    <Compile Include="$(SharedSourceRoot)CertificateGeneration\**\*.cs" LinkBase="shared\CertificateGeneration" />
+  </ItemGroup>
+
+  <ItemGroup Condition="'$(TargetFramework)' == 'net472'">
+    <Compile Remove="GenerateTestDevCert.cs" />
+    <Compile Remove="shared\CertificateGeneration\*.cs" />
+  </ItemGroup>
+
   <ItemGroup Condition="'$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)'">
     <PackageReference Include="Microsoft.Build.Framework" Version="$(MicrosoftBuildFrameworkVersion)" />
     <PackageReference Include="Microsoft.Build.Tasks.Core" Version="$(MicrosoftBuildTasksCoreVersion)" />
@@ -46,4 +55,5 @@
       <HintPath>$(WiXSdkPath)\Microsoft.Deployment.WindowsInstaller.Package.dll</HintPath>
     </Reference>
   </ItemGroup>
+
 </Project>

+ 1 - 0
eng/tools/RepoTasks/RepoTasks.tasks

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

+ 45 - 0
eng/tools/RepoTasks/shared/CertificateGeneration/DevelopmentCertificate.cs

@@ -0,0 +1,45 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Certificates.Generation;
+
+namespace RepoTasks;
+
+public readonly struct DevelopmentCertificate
+{
+    public DevelopmentCertificate(string certificatePath, string certificatePassword, string certificateThumbprint)
+    {
+        CertificatePath = certificatePath;
+        CertificatePassword = certificatePassword;
+        CertificateThumbprint = certificateThumbprint;
+    }
+
+    public readonly string CertificatePath { get; }
+    public readonly string CertificatePassword { get; }
+    public readonly string CertificateThumbprint { get; }
+
+    public static DevelopmentCertificate Create(string certificatePath)
+    {
+        var certificatePassword = "";
+        var certificateThumbprint = EnsureDevelopmentCertificates(certificatePath, certificatePassword);
+
+        return new DevelopmentCertificate(certificatePath, certificatePassword, certificateThumbprint);
+    }
+
+    private static string EnsureDevelopmentCertificates(string certificatePath, string certificatePassword)
+    {
+        var now = DateTimeOffset.Now;
+        var manager = CertificateManager.Instance;
+        var certificate = manager.CreateAspNetCoreHttpsDevelopmentCertificate(now, now.AddYears(1));
+        var certificateThumbprint = certificate.Thumbprint;
+        manager.ExportCertificate(certificate, path: certificatePath, includePrivateKey: true, certificatePassword, CertificateKeyExportFormat.Pfx);
+
+        return certificateThumbprint;
+    }
+}

+ 6 - 0
eng/tools/RepoTasks/shared/CertificateGeneration/Global.cs

@@ -0,0 +1,6 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+global using System;
+global using System.Collections.Generic;
+global using System.IO;

+ 2 - 2
global.json

@@ -27,7 +27,7 @@
     "jdk": "11"
   },
   "msbuild-sdks": {
-    "Microsoft.DotNet.Arcade.Sdk": "9.0.0-beta.24423.2",
-    "Microsoft.DotNet.Helix.Sdk": "9.0.0-beta.24423.2"
+    "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.24430.1",
+    "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.24430.1"
   }
 }

+ 3 - 3
package-lock.json

@@ -20768,7 +20768,7 @@
     },
     "src/JSInterop/Microsoft.JSInterop.JS/src": {
       "name": "@microsoft/dotnet-js-interop",
-      "version": "8.0.0-dev",
+      "version": "10.0.0-dev",
       "license": "MIT",
       "devDependencies": {
         "@typescript-eslint/eslint-plugin": "^6.15.0",
@@ -21272,7 +21272,7 @@
     },
     "src/SignalR/clients/ts/signalr": {
       "name": "@microsoft/signalr",
-      "version": "5.0.0-dev",
+      "version": "10.0.0-dev",
       "license": "MIT",
       "dependencies": {
         "abort-controller": "^3.0.0",
@@ -21284,7 +21284,7 @@
     },
     "src/SignalR/clients/ts/signalr-protocol-msgpack": {
       "name": "@microsoft/signalr-protocol-msgpack",
-      "version": "5.0.0-dev",
+      "version": "10.0.0-dev",
       "license": "MIT",
       "dependencies": {
         "@microsoft/signalr": "*",

+ 2 - 16
src/Analyzers/Microsoft.AspNetCore.Analyzer.Testing/src/Assert.cs

@@ -18,7 +18,7 @@ public class AnalyzerAssert
         {
             if (actualLinePosition.Line + 1 != expected.Line)
             {
-                throw new DiagnosticLocationAssertException(
+                throw EqualException.ForMismatchedValues(
                     expected,
                     actual,
                     $"Expected diagnostic to be on line \"{expected.Line}\" was actually on line \"{actualLinePosition.Line + 1}\"");
@@ -30,25 +30,11 @@ public class AnalyzerAssert
         {
             if (actualLinePosition.Character + 1 != expected.Column)
             {
-                throw new DiagnosticLocationAssertException(
+                throw EqualException.ForMismatchedValues(
                     expected,
                     actual,
                     $"Expected diagnostic to start at column \"{expected.Column}\" was actually on column \"{actualLinePosition.Character + 1}\"");
             }
         }
     }
-
-    private sealed class DiagnosticLocationAssertException : EqualException
-    {
-        public DiagnosticLocationAssertException(
-            DiagnosticLocation expected,
-            Location actual,
-            string message)
-            : base(expected, actual)
-        {
-            Message = message;
-        }
-
-        public override string Message { get; }
-    }
 }

+ 2 - 2
src/Antiforgery/test/BinaryBlobTest.cs

@@ -56,10 +56,10 @@ public class BinaryBlobTest
     [Theory]
     [InlineData((object[]?)null)]
     [InlineData(new byte[] { 0x01, 0x02, 0x03 })]
-    public void Ctor_Data_Bad(byte[] data)
+    public void Ctor_Data_Bad(byte[]? data)
     {
         // Act & assert
-        var ex = Assert.Throws<ArgumentOutOfRangeException>(() => new BinaryBlob(32, data));
+        var ex = Assert.Throws<ArgumentOutOfRangeException>(() => new BinaryBlob(32, data!));
         Assert.Equal("data", ex.ParamName);
     }
 

+ 1 - 1
src/Antiforgery/test/DefaultAntiforgeryTest.cs

@@ -1079,7 +1079,7 @@ public class DefaultAntiforgeryTest
     [InlineData(true, null)]
     public void SetCookieTokenAndHeader_AddsXFrameOptionsHeader(
         bool suppressXFrameOptions,
-        string expectedHeaderValue)
+        string? expectedHeaderValue)
     {
         // Arrange
         var options = new AntiforgeryOptions()

+ 1 - 1
src/Antiforgery/test/DefaultAntiforgeryTokenStoreTest.cs

@@ -396,7 +396,7 @@ public class DefaultAntiforgeryTokenStoreTest
     [InlineData("/", "/")]
     [InlineData("/vdir1", "/vdir1")]
     [InlineData("/vdir1/vdir2", "/vdir1/vdir2")]
-    public void SaveCookieToken_SetsCookieWithApproriatePathBase(string requestPathBase, string expectedCookiePath)
+    public void SaveCookieToken_SetsCookieWithApproriatePathBase(string? requestPathBase, string expectedCookiePath)
     {
         // Arrange
         var token = "serialized-value";

+ 1 - 1
src/Components/Analyzers/test/Verifiers/CodeFixVerifier.cs

@@ -109,7 +109,7 @@ public abstract partial class CodeFixVerifier : DiagnosticVerifier
                 document = document.WithSyntaxRoot(Formatter.Format(document.GetSyntaxRootAsync().Result, Formatter.Annotation, document.Project.Solution.Workspace));
                 newCompilerDiagnostics = GetNewDiagnostics(compilerDiagnostics, GetCompilerDiagnostics(document));
 
-                Assert.True(false,
+                Assert.Fail(
                     string.Format(
                         CultureInfo.InvariantCulture,
                         "Fix introduced new compiler diagnostics:\r\n{0}\r\n\r\nNew document:\r\n{1}\r\n",

+ 8 - 8
src/Components/Analyzers/test/Verifiers/DiagnosticVerifier.cs

@@ -112,7 +112,7 @@ public abstract partial class DiagnosticVerifier
         {
             string diagnosticsOutput = actualResults.Any() ? FormatDiagnostics(analyzer, actualResults.ToArray()) : "    NONE.";
 
-            Assert.True(false,
+            Assert.Fail(
                 string.Format(CultureInfo.InvariantCulture, "Mismatch between number of diagnostics returned, expected \"{0}\" actual \"{1}\"\r\n\r\nDiagnostics:\r\n{2}\r\n", expectedCount, actualCount, diagnosticsOutput));
         }
 
@@ -125,7 +125,7 @@ public abstract partial class DiagnosticVerifier
             {
                 if (actual.Location != Location.None)
                 {
-                    Assert.True(false,
+                    Assert.Fail(
                         string.Format(CultureInfo.InvariantCulture, "Expected:\nA project diagnostic with No location\nActual:\n{0}",
                         FormatDiagnostics(analyzer, actual)));
                 }
@@ -137,7 +137,7 @@ public abstract partial class DiagnosticVerifier
 
                 if (additionalLocations.Length != expected.Locations.Length - 1)
                 {
-                    Assert.True(false,
+                    Assert.Fail(
                         string.Format(
                             CultureInfo.InvariantCulture,
                             "Expected {0} additional locations but got {1} for Diagnostic:\r\n    {2}\r\n",
@@ -153,7 +153,7 @@ public abstract partial class DiagnosticVerifier
 
             if (actual.Id != expected.Id)
             {
-                Assert.True(false,
+                Assert.Fail(
                     string.Format(
                         CultureInfo.InvariantCulture,
                         "Expected diagnostic id to be \"{0}\" was \"{1}\"\r\n\r\nDiagnostic:\r\n    {2}\r\n",
@@ -162,7 +162,7 @@ public abstract partial class DiagnosticVerifier
 
             if (actual.Severity != expected.Severity)
             {
-                Assert.True(false,
+                Assert.Fail(
                     string.Format(
                         CultureInfo.InvariantCulture,
                         "Expected diagnostic severity to be \"{0}\" was \"{1}\"\r\n\r\nDiagnostic:\r\n    {2}\r\n",
@@ -171,7 +171,7 @@ public abstract partial class DiagnosticVerifier
 
             if (actual.GetMessage(CultureInfo.InvariantCulture) != expected.Message)
             {
-                Assert.True(false,
+                Assert.Fail(
                     string.Format(
                         CultureInfo.InvariantCulture,
                         "Expected diagnostic message to be \"{0}\" was \"{1}\"\r\n\r\nDiagnostic:\r\n    {2}\r\n",
@@ -204,7 +204,7 @@ public abstract partial class DiagnosticVerifier
         {
             if (actualLinePosition.Line + 1 != expected.Line)
             {
-                Assert.True(false,
+                Assert.Fail(
                     string.Format(
                         CultureInfo.InvariantCulture,
                         "Expected diagnostic to be on line \"{0}\" was actually on line \"{1}\"\r\n\r\nDiagnostic:\r\n    {2}\r\n",
@@ -217,7 +217,7 @@ public abstract partial class DiagnosticVerifier
         {
             if (actualLinePosition.Character + 1 != expected.Column)
             {
-                Assert.True(false,
+                Assert.Fail(
                     string.Format(
                         CultureInfo.InvariantCulture,
                         "Expected diagnostic to start at column \"{0}\" was actually at column \"{1}\"\r\n\r\nDiagnostic:\r\n    {2}\r\n",

+ 3 - 3
src/Components/Authorization/test/AuthorizeViewTest.cs

@@ -321,7 +321,7 @@ public class AuthorizeViewTest
         // (This wouldn't happen under the sync context or in wasm)
         var renderTcs = new TaskCompletionSource();
         renderer.OnUpdateDisplayComplete = () => renderTcs.SetResult();
-        authTcs.SetResult(CreateAuthenticationState("Monsieur").Result);
+        authTcs.SetResult(await CreateAuthenticationState("Monsieur"));
 
         await renderTcs.Task;
         Assert.Equal(2, renderer.Batches.Count);
@@ -347,7 +347,7 @@ public class AuthorizeViewTest
     }
 
     [Fact]
-    public void RendersAuthorizingUntilAuthorizationCompleted()
+    public async Task RendersAuthorizingUntilAuthorizationCompleted()
     {
         // Arrange
         var @event = new ManualResetEventSlim();
@@ -377,7 +377,7 @@ public class AuthorizeViewTest
 
         // Act/Assert 2: Auth process completes asynchronously
         @event.Reset();
-        authTcs.SetResult(CreateAuthenticationState("Monsieur").Result);
+        authTcs.SetResult(await CreateAuthenticationState("Monsieur"));
 
         // We need to wait here because the continuations of SetResult will be scheduled to run asynchronously.
         @event.Wait(Timeout);

+ 3 - 1
src/Components/Components/src/RouteAttribute.cs

@@ -1,6 +1,8 @@
 // Licensed to the .NET Foundation under one or more agreements.
 // The .NET Foundation licenses this file to you under the MIT license.
 
+using System.Diagnostics.CodeAnalysis;
+
 namespace Microsoft.AspNetCore.Components;
 
 /// <summary>
@@ -13,7 +15,7 @@ public sealed class RouteAttribute : Attribute
     /// Constructs an instance of <see cref="RouteAttribute"/>.
     /// </summary>
     /// <param name="template">The route template.</param>
-    public RouteAttribute(string template)
+    public RouteAttribute([StringSyntax("Route")] string template)
     {
         ArgumentNullException.ThrowIfNull(template);
 

+ 2 - 2
src/Components/Components/test/LayoutViewTest.cs

@@ -178,7 +178,7 @@ public class LayoutViewTest
         // Assert
         Assert.Equal(2, _renderer.Batches.Count);
         var batch = _renderer.Batches[1];
-        Assert.Equal(0, batch.DisposedComponentIDs.Count);
+        Assert.Empty(batch.DisposedComponentIDs);
         Assert.Collection(batch.DiffsInOrder,
             diff => Assert.Empty(diff.Edits), // LayoutView rerendered, but with no changes
             diff => Assert.Empty(diff.Edits), // RootLayout rerendered, but with no changes
@@ -220,7 +220,7 @@ public class LayoutViewTest
         Assert.True(setParametersTask2.IsCompletedSuccessfully);
         Assert.Equal(2, _renderer.Batches.Count);
         var batch = _renderer.Batches[1];
-        Assert.Equal(1, batch.DisposedComponentIDs.Count); // Disposes NestedLayout
+        Assert.Single(batch.DisposedComponentIDs); // Disposes NestedLayout
         Assert.Collection(batch.DiffsInOrder,
             diff => Assert.Empty(diff.Edits), // LayoutView rerendered, but with no changes
             diff =>

+ 22 - 2
src/Components/Components/test/NavigationManagerTest.cs

@@ -223,7 +223,9 @@ public class NavigationManagerTest
 
         // Assert
         Assert.True(navigation1.IsCompletedSuccessfully);
+#pragma warning disable xUnit1031 // Do not use blocking task operations in test method
         Assert.True(navigation1.Result);
+#pragma warning restore xUnit1031 // Do not use blocking task operations in test method
 
         static ValueTask HandleLocationChanging(LocationChangingContext context)
         {
@@ -250,7 +252,9 @@ public class NavigationManagerTest
 
         // Assert
         Assert.True(navigation1.IsCompletedSuccessfully);
+#pragma warning disable xUnit1031 // Do not use blocking task operations in test method
         Assert.True(navigation1.Result);
+#pragma warning restore xUnit1031 // Do not use blocking task operations in test method
         Assert.Equal(initialHandlerCount, completedHandlerCount);
 
         ValueTask HandleLocationChanging(LocationChangingContext context)
@@ -276,7 +280,9 @@ public class NavigationManagerTest
         Assert.False(navigation1.IsCompleted);
         tcs.SetResult();
         Assert.True(navigation1.IsCompletedSuccessfully);
+#pragma warning disable xUnit1031 // Do not use blocking task operations in test method
         Assert.True(navigation1.Result);
+#pragma warning restore xUnit1031 // Do not use blocking task operations in test method
 
         async ValueTask HandleLocationChanging(LocationChangingContext context)
         {
@@ -328,7 +334,9 @@ public class NavigationManagerTest
 
         // Assert
         Assert.True(navigation1.IsCompletedSuccessfully);
+#pragma warning disable xUnit1031 // Do not use blocking task operations in test method
         Assert.False(navigation1.Result);
+#pragma warning restore xUnit1031 // Do not use blocking task operations in test method
 
         static ValueTask HandleLocationChanging(LocationChangingContext context)
         {
@@ -357,7 +365,9 @@ public class NavigationManagerTest
 
         // Assert
         Assert.True(navigation1.IsCompletedSuccessfully);
+#pragma warning disable xUnit1031 // Do not use blocking task operations in test method
         Assert.False(navigation1.Result);
+#pragma warning restore xUnit1031 // Do not use blocking task operations in test method
         Assert.Equal(expectedInvokedHandlerCount, invokedHandlerCount);
 
         ValueTask HandleLocationChanging_AllowNavigation(LocationChangingContext context)
@@ -391,7 +401,9 @@ public class NavigationManagerTest
 
         // Assert
         Assert.True(navigation1.IsCompletedSuccessfully);
+#pragma warning disable xUnit1031 // Do not use blocking task operations in test method
         Assert.False(navigation1.Result);
+#pragma warning restore xUnit1031 // Do not use blocking task operations in test method
         Assert.True(currentContext.DidPreventNavigation);
         Assert.True(currentContext.CancellationToken.IsCancellationRequested);
         Assert.False(isHandlerCompleted);
@@ -428,7 +440,9 @@ public class NavigationManagerTest
 
         // Assert
         Assert.True(navigation1.IsCompletedSuccessfully);
+#pragma warning disable xUnit1031 // Do not use blocking task operations in test method
         Assert.False(navigation1.Result);
+#pragma warning restore xUnit1031 // Do not use blocking task operations in test method
         Assert.True(currentContext.DidPreventNavigation);
         Assert.True(currentContext.CancellationToken.IsCancellationRequested);
         Assert.False(isFirstHandlerCompleted);
@@ -455,7 +469,7 @@ public class NavigationManagerTest
     }
 
     [Fact]
-    public async void LocationChangingHandlers_CanCancelTheNavigationAsynchronously_WhenOneHandlerIsRegistered()
+    public async Task LocationChangingHandlers_CanCancelTheNavigationAsynchronously_WhenOneHandlerIsRegistered()
     {
         // Arrange
         var baseUri = "scheme://host/";
@@ -479,7 +493,7 @@ public class NavigationManagerTest
     }
 
     [Fact]
-    public async void LocationChangingHandlers_CanCancelTheNavigationAsynchronously_WhenMultipleHandlersAreRegistered()
+    public async Task LocationChangingHandlers_CanCancelTheNavigationAsynchronously_WhenMultipleHandlersAreRegistered()
     {
         // Arrange
         var baseUri = "scheme://host/";
@@ -503,7 +517,9 @@ public class NavigationManagerTest
 
         // Assert
         Assert.True(navigation1.IsCompletedSuccessfully);
+#pragma warning disable xUnit1031 // Do not use blocking task operations in test method
         Assert.False(navigation1.Result);
+#pragma warning restore xUnit1031 // Do not use blocking task operations in test method
         Assert.Equal(blockNavigationHandlerCount, canceledBlockNavigationHandlerCount);
 
         async ValueTask HandleLocationChanging_BlockNavigation(LocationChangingContext context)
@@ -556,11 +572,13 @@ public class NavigationManagerTest
         await tcs.Task.WaitAsync(Timeout);
 
         // Assert
+#pragma warning disable xUnit1031 // Do not use blocking task operations in test method
         Assert.True(navigation1.IsCompletedSuccessfully);
         Assert.False(navigation1.Result);
 
         Assert.True(navigation2.IsCompletedSuccessfully);
         Assert.True(navigation2.Result);
+#pragma warning restore xUnit1031 // Do not use blocking task operations in test method
 
         async ValueTask HandleLocationChanging(LocationChangingContext context)
         {
@@ -615,6 +633,7 @@ public class NavigationManagerTest
         await tcs.Task.WaitAsync(Timeout);
 
         // Assert
+#pragma warning disable xUnit1031 // Do not use blocking task operations in test method
         Assert.True(navigation1.IsCompletedSuccessfully);
         Assert.False(navigation1.Result);
 
@@ -623,6 +642,7 @@ public class NavigationManagerTest
 
         Assert.True(navigation3.IsCompletedSuccessfully);
         Assert.True(navigation3.Result);
+#pragma warning restore xUnit1031 // Do not use blocking task operations in test method
 
         Assert.Equal(expectedCanceledHandlerCount, canceledHandlerCount);
         Assert.Equal(0, completedHandlerCount);

+ 3 - 3
src/Components/Components/test/RendererTest.cs

@@ -3065,8 +3065,8 @@ public class RendererTest
         // Assert: correct render result
         Assert.True(renderTask.IsCompletedSuccessfully);
         var newBatch = renderer.Batches.Skip(1).Single();
-        Assert.Equal(1, newBatch.DisposedComponentIDs.Count);
-        Assert.Equal(1, newBatch.DiffsByComponentId.Count);
+        Assert.Single(newBatch.DisposedComponentIDs);
+        Assert.Single(newBatch.DiffsByComponentId);
         Assert.Collection(newBatch.DiffsByComponentId[componentId].Single().Edits,
             edit =>
             {
@@ -3433,7 +3433,7 @@ public class RendererTest
         // Assert: Only the re-rendered component was notified of "after render"
         var batch2 = renderer.Batches.Skip(1).Single();
         Assert.Equal(2, batch2.DiffsInOrder.Count); // Parent and first child
-        Assert.Equal(1, batch2.DisposedComponentIDs.Count); // Third child
+        Assert.Single(batch2.DisposedComponentIDs); // Third child
         Assert.Equal(2, childComponents[0].OnAfterRenderCallCount); // Retained and re-rendered
         Assert.Equal(1, childComponents[1].OnAfterRenderCallCount); // Retained and not re-rendered
         Assert.Equal(1, childComponents[2].OnAfterRenderCallCount); // Disposed

+ 1 - 1
src/Components/Components/test/ResourceAssetCollectionTest.cs

@@ -17,7 +17,7 @@ public class ResourceAssetCollectionTest
         var collectionAsReadOnlyList = resourceAssetCollection as IReadOnlyList<ResourceAsset>;
 
         // Assert
-        Assert.Equal(1, collectionAsReadOnlyList.Count);
+        Assert.Single(collectionAsReadOnlyList);
         Assert.Equal("image1.jpg", collectionAsReadOnlyList[0].Url);
     }
 

+ 2 - 2
src/Components/Components/test/Routing/RouterTest.cs

@@ -111,7 +111,7 @@ public class RouterTest
                 Assert.True(true);
                 return;
             }
-            Assert.True(false, "OnUpdateDisplay called more than once.");
+            Assert.Fail("OnUpdateDisplay called more than once.");
         };
         _router.OnNavigateAsync = new EventCallback<NavigationContext>(null, OnNavigateAsync);
 
@@ -164,7 +164,7 @@ public class RouterTest
                 Assert.True(true);
                 return;
             }
-            Assert.True(false, "OnUpdateDisplay called more than once.");
+            Assert.Fail("OnUpdateDisplay called more than once.");
         };
         _router.OnNavigateAsync = new EventCallback<NavigationContext>(null, OnNavigateAsync);
 

+ 6 - 6
src/Components/Endpoints/test/Builder/RazorComponentsEndpointConventionBuilderExtensionsTest.cs

@@ -74,7 +74,7 @@ public class RazorComponentsEndpointConventionBuilderExtensionsTest
             var metadata = e.Metadata.GetMetadata<ResourceAssetCollection>();
             Assert.NotNull(metadata);
             var list = Assert.IsAssignableFrom<IReadOnlyList<ResourceAsset>>(metadata);
-            Assert.Equal(1, list.Count);
+            Assert.Single(list);
             Assert.Equal("named.css", list[0].Url);
         });
     }
@@ -95,7 +95,7 @@ public class RazorComponentsEndpointConventionBuilderExtensionsTest
             var metadata = e.Metadata.GetMetadata<ResourceAssetCollection>();
             Assert.NotNull(metadata);
             var list = Assert.IsAssignableFrom<IReadOnlyList<ResourceAsset>>(metadata);
-            Assert.Equal(1, list.Count);
+            Assert.Single(list);
             Assert.Equal("default.css", list[0].Url);
         });
     }
@@ -117,7 +117,7 @@ public class RazorComponentsEndpointConventionBuilderExtensionsTest
             var metadata = e.Metadata.GetMetadata<ResourceAssetCollection>();
             Assert.NotNull(metadata);
             var list = Assert.IsAssignableFrom<IReadOnlyList<ResourceAsset>>(metadata);
-            Assert.Equal(1, list.Count);
+            Assert.Single(list);
             Assert.Equal("default.css", list[0].Url);
         });
     }
@@ -139,7 +139,7 @@ public class RazorComponentsEndpointConventionBuilderExtensionsTest
             var metadata = e.Metadata.GetMetadata<ResourceAssetCollection>();
             Assert.NotNull(metadata);
             var list = Assert.IsAssignableFrom<IReadOnlyList<ResourceAsset>>(metadata);
-            Assert.Equal(1, list.Count);
+            Assert.Single(list);
             Assert.Equal("default.css", list[0].Url);
         });
     }
@@ -162,7 +162,7 @@ public class RazorComponentsEndpointConventionBuilderExtensionsTest
             var metadata = e.Metadata.GetMetadata<ResourceAssetCollection>();
             Assert.NotNull(metadata);
             var list = Assert.IsAssignableFrom<IReadOnlyList<ResourceAsset>>(metadata);
-            Assert.Equal(1, list.Count);
+            Assert.Single(list);
             Assert.Equal("named.css", list[0].Url);
         });
     }
@@ -188,7 +188,7 @@ public class RazorComponentsEndpointConventionBuilderExtensionsTest
             var metadata = e.Metadata.GetMetadata<ResourceAssetCollection>();
             Assert.NotNull(metadata);
             var list = Assert.IsAssignableFrom<IReadOnlyList<ResourceAsset>>(metadata);
-            Assert.Equal(1, list.Count);
+            Assert.Single(list);
             Assert.Equal("named.css", list[0].Url);
         });
     }

+ 1 - 1
src/Components/Endpoints/test/EndpointHtmlRendererTest.cs

@@ -823,7 +823,7 @@ public class EndpointHtmlRendererTest
     }
 
     [Fact]
-    public async void Duplicate_NamedEventHandlers_AcrossComponents_ThowsOnDispatch()
+    public async Task Duplicate_NamedEventHandlers_AcrossComponents_ThowsOnDispatch()
     {
         // Arrange
         var expectedError = @"There is more than one named submit event with the name 'default'. Ensure named submit events have unique names, or are in scopes with distinct names. The following components use this name:

+ 2 - 2
src/Components/Endpoints/test/RazorComponentResultTest.cs

@@ -34,7 +34,7 @@ public class RazorComponentResultTest
     {
         var paramsDict = new Dictionary<string, object> { { "First", 123 } };
         var result = new RazorComponentResult(typeof(SimpleComponent), paramsDict);
-        Assert.Equal(1, result.Parameters.Count);
+        Assert.Single(result.Parameters);
         Assert.Equal(123, result.Parameters["First"]);
         Assert.Same(paramsDict, result.Parameters);
     }
@@ -168,7 +168,7 @@ public class RazorComponentResultTest
         Assert.Equal(
             expectedInitialHtml,
             MaskComponentIds(GetStringContent(responseBody)));
-        
+
         // Act/Assert 2: When loading completes, it emits a streaming batch update in which the
         // child is present only within the parent markup, not as a separate entry
         tcs.SetResult();

+ 2 - 6
src/Components/Endpoints/test/RazorComponentsServiceCollectionExtensionsTest.cs

@@ -128,15 +128,11 @@ public class RazorComponentsServiceCollectionExtensionsTest
 
         if (implementationTypes.Length == 0)
         {
-            Assert.True(
-                false,
-                $"Could not find an implementation type for {serviceType}");
+            Assert.Fail($"Could not find an implementation type for {serviceType}");
         }
         else if (implementationTypes.Length != implementationTypes.Distinct().Count())
         {
-            Assert.True(
-                false,
-                $"Found duplicate implementation types for {serviceType}. Implementation types: {string.Join(", ", implementationTypes.Select(x => x.ToString()))}");
+            Assert.Fail($"Found duplicate implementation types for {serviceType}. Implementation types: {string.Join(", ", implementationTypes.Select(x => x.ToString()))}");
         }
     }
 

+ 2 - 2
src/Components/Server/src/Circuits/CircuitHost.cs

@@ -104,7 +104,7 @@ internal partial class CircuitHost : IAsyncDisposable
     {
         Log.InitializationStarted(_logger);
 
-        return Renderer.Dispatcher.InvokeAsync(async () =>
+        return HandleInboundActivityAsync(() => Renderer.Dispatcher.InvokeAsync(async () =>
         {
             if (_initialized)
             {
@@ -165,7 +165,7 @@ internal partial class CircuitHost : IAsyncDisposable
                 UnhandledException?.Invoke(this, new UnhandledExceptionEventArgs(ex, isTerminating: false));
                 await TryNotifyClientErrorAsync(Client, GetClientErrorMessage(ex), ex);
             }
-        });
+        }));
     }
 
     // We handle errors in DisposeAsync because there's no real value in letting it propagate.

+ 2 - 0
src/Components/Server/test/Circuits/RemoteRendererTest.cs

@@ -183,7 +183,9 @@ public class RemoteRendererTest
 
         // Assert
         Assert.Equal(new long[] { 2, 3, 4 }, renderIds);
+#pragma warning disable xUnit1031 // Do not use blocking task operations in test method
         Assert.True(task.Wait(3000), "One or more render batches weren't acknowledged");
+#pragma warning restore xUnit1031 // Do not use blocking task operations in test method
 
         await task;
     }

File diff suppressed because it is too large
+ 0 - 0
src/Components/Web.JS/dist/Release/blazor.server.js


File diff suppressed because it is too large
+ 0 - 0
src/Components/Web.JS/dist/Release/blazor.web.js


+ 2 - 2
src/Components/Web/test/Forms/InputBaseTest.cs

@@ -451,7 +451,7 @@ public class InputBaseTest
         var component = (TestInputComponent<string>)componentFrame1.Component;
         Assert.Equal("invalid", component.CssClass);
         Assert.NotNull(component.AdditionalAttributes);
-        Assert.Equal(1, component.AdditionalAttributes.Count);
+        Assert.Single(component.AdditionalAttributes);
         //Check for "true" see https://www.w3.org/TR/wai-aria-1.1/#aria-invalid
         Assert.Equal("true", component.AdditionalAttributes["aria-invalid"]);
     }
@@ -486,7 +486,7 @@ public class InputBaseTest
         var component = (TestInputComponent<string>)componentFrame1.Component;
         Assert.Equal("invalid", component.CssClass);
         Assert.NotNull(component.AdditionalAttributes);
-        Assert.Equal(1, component.AdditionalAttributes.Count);
+        Assert.Single(component.AdditionalAttributes);
         Assert.Equal("userSpecifiedValue", component.AdditionalAttributes["aria-invalid"]);
     }
 

+ 1 - 1
src/Components/WebAssembly/WebAssembly.Authentication/test/AuthorizationMessageHandlerTests.cs

@@ -190,7 +190,7 @@ public class AuthorizationMessageHandlerTests
         _ = await new HttpClient(handler).GetAsync("https://localhost:5001/weather");
 
         // Assert
-        Assert.Equal(1, tokenProvider.Invocations.Count);
+        Assert.Single(tokenProvider.Invocations);
     }
 }
 

+ 22 - 11
src/Components/test/E2ETest/ServerExecutionTests/CircuitContextTest.cs

@@ -22,28 +22,39 @@ public class CircuitContextTest : ServerTestBase<BasicTestAppServerSiteFixture<S
     {
     }
 
-    protected override void InitializeAsyncCore()
+    [Fact]
+    public void ComponentMethods_HaveCircuitContext()
     {
         Navigate(ServerPathBase);
         Browser.MountTestComponent<CircuitContextComponent>();
-        Browser.Equal("Circuit Context", () => Browser.Exists(By.TagName("h1")).Text);
+        TestCircuitContextCore(Browser);
     }
 
     [Fact]
-    public void ComponentMethods_HaveCircuitContext()
+    public void ComponentMethods_HaveCircuitContext_OnInitialPageLoad()
     {
-        Browser.Click(By.Id("trigger-click-event-button"));
+        // https://github.com/dotnet/aspnetcore/issues/57481
+        Navigate($"{ServerPathBase}?initial-component-type={typeof(CircuitContextComponent).AssemblyQualifiedName}");
+        TestCircuitContextCore(Browser);
+    }
+
+    // Internal for reuse in Blazor Web tests
+    internal static void TestCircuitContextCore(IWebDriver browser)
+    {
+        browser.Equal("Circuit Context", () => browser.Exists(By.TagName("h1")).Text);
+
+        browser.Click(By.Id("trigger-click-event-button"));
 
-        Browser.True(() => HasCircuitContext("SetParametersAsync"));
-        Browser.True(() => HasCircuitContext("OnInitializedAsync"));
-        Browser.True(() => HasCircuitContext("OnParametersSetAsync"));
-        Browser.True(() => HasCircuitContext("OnAfterRenderAsync"));
-        Browser.True(() => HasCircuitContext("InvokeDotNet"));
-        Browser.True(() => HasCircuitContext("OnClickEvent"));
+        browser.True(() => HasCircuitContext("SetParametersAsync"));
+        browser.True(() => HasCircuitContext("OnInitializedAsync"));
+        browser.True(() => HasCircuitContext("OnParametersSetAsync"));
+        browser.True(() => HasCircuitContext("OnAfterRenderAsync"));
+        browser.True(() => HasCircuitContext("InvokeDotNet"));
+        browser.True(() => HasCircuitContext("OnClickEvent"));
 
         bool HasCircuitContext(string eventName)
         {
-            var resultText = Browser.FindElement(By.Id($"circuit-context-result-{eventName}")).Text;
+            var resultText = browser.FindElement(By.Id($"circuit-context-result-{eventName}")).Text;
             var result = bool.Parse(resultText);
             return result;
         }

+ 3 - 0
src/Components/test/E2ETest/ServerExecutionTests/NavigationLockPrerenderingTest.cs

@@ -21,6 +21,9 @@ public class NavigationLockPrerenderingTest : ServerTestBase<BasicTestAppServerS
     {
     }
 
+    public override Task InitializeAsync()
+        => InitializeAsync(BrowserFixture.RoutingTestContext);
+
     [Fact]
     [QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/57153")]
     public void NavigationIsLockedAfterPrerendering()

+ 5 - 5
src/Components/test/E2ETest/ServerRenderingTests/BlazorWebJsInitializersTest.cs

@@ -28,7 +28,7 @@ public class BlazorWebJsInitializersTest : ServerTestBase<BasicTestAppServerSite
 
     [Theory]
     [MemberData(nameof(InitializerTestData))]
-    public void InitializersRunsModernCallbacksByDefaultWhenPresent(bool streaming, bool webassembly, bool server, List<string> expectedInvokedCallbacks)
+    public void InitializersRunsModernCallbacksByDefaultWhenPresent(bool streaming, bool webassembly, bool server, string[] expectedInvokedCallbacks)
     {
         var url = $"{ServerPathBase}/initializers?streaming={streaming}&wasm={webassembly}&server={server}";
         Navigate(url);
@@ -38,7 +38,7 @@ public class BlazorWebJsInitializersTest : ServerTestBase<BasicTestAppServerSite
             Browser.Exists(By.Id(callback));
         }
 
-        Browser.Equal(expectedInvokedCallbacks.Count, () => Browser.FindElements(By.CssSelector("#initializers-content > p")).Count);
+        Browser.Equal(expectedInvokedCallbacks.Length, () => Browser.FindElements(By.CssSelector("#initializers-content > p")).Count);
 
         if (server)
         {
@@ -49,7 +49,7 @@ public class BlazorWebJsInitializersTest : ServerTestBase<BasicTestAppServerSite
 
     [Theory]
     [MemberData(nameof(InitializerTestData))]
-    public void InitializersRunsClassicInitializersWhenEnabled(bool streaming, bool webassembly, bool server, List<string> expectedInvokedCallbacks)
+    public void InitializersRunsClassicInitializersWhenEnabled(bool streaming, bool webassembly, bool server, string[] expectedInvokedCallbacks)
     {
         EnableClassicInitializers(Browser);
         List<string> expectedCallbacks = ["classic-before-start", "classic-after-started", ..expectedInvokedCallbacks];
@@ -76,9 +76,9 @@ public class BlazorWebJsInitializersTest : ServerTestBase<BasicTestAppServerSite
         ((IJavaScriptExecutor)browser).ExecuteScript("sessionStorage.setItem('enable-classic-initializers', 'true')");
     }
 
-    public static TheoryData<bool, bool, bool, List<string>> InitializerTestData()
+    public static TheoryData<bool, bool, bool, string[]> InitializerTestData()
     {
-        var result = new TheoryData<bool, bool, bool, List<string>>
+        var result = new TheoryData<bool, bool, bool, string[]>
         {
             { false, false, false, ["classic-and-modern-before-web-start", "classic-and-modern-after-web-started","modern-before-web-start", "modern-after-web-started"] },
             { false, false, true, ["classic-and-modern-before-web-start", "classic-and-modern-after-web-started", "classic-and-modern-before-server-start", "classic-and-modern-after-server-started", "classic-and-modern-circuit-opened", "modern-before-web-start", "modern-after-web-started", "modern-before-server-start", "modern-after-server-started", "modern-circuit-opened" ] },

+ 14 - 3
src/Components/test/E2ETest/ServerRenderingTests/FormHandlingTests/FormWithParentBindingContextTest.cs

@@ -1466,7 +1466,6 @@ public class FormWithParentBindingContextTest : ServerTestBase<BasicTestAppServe
     }
 
     [Fact]
-    [QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/54757")]
     public void EnhancedFormThatCallsNavigationManagerRefreshDoesNotPushHistoryEntry()
     {
         Navigate("about:blank");
@@ -1489,7 +1488,6 @@ public class FormWithParentBindingContextTest : ServerTestBase<BasicTestAppServe
     }
 
     [Fact]
-    [QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/54757")]
     public void EnhancedFormThatCallsNavigationManagerRefreshDoesNotPushHistoryEntry_Streaming()
     {
         Navigate("about:blank");
@@ -1596,7 +1594,7 @@ public class FormWithParentBindingContextTest : ServerTestBase<BasicTestAppServe
             if (!dispatch.FormIsEnhanced)
             {
                 // Verify the same form element is *not* still in the page
-                Assert.Throws<StaleElementReferenceException>(() => form.GetAttribute("method"));
+                Browser.True(() => IsElementStale(form));
             }
             else if (!dispatch.SuppressEnhancedNavigation)
             {
@@ -1648,6 +1646,19 @@ public class FormWithParentBindingContextTest : ServerTestBase<BasicTestAppServe
         Navigate($"{ServerPathBase}/{relativePath}");
     }
 
+    private static bool IsElementStale(IWebElement element)
+    {
+        try
+        {
+            _ = element.Enabled;
+            return false;
+        }
+        catch (StaleElementReferenceException)
+        {
+            return true;
+        }
+    }
+
     private struct TempFile
     {
         public string Name { get; }

+ 2 - 2
src/Components/test/E2ETest/ServerRenderingTests/InteractivityTest.cs

@@ -4,6 +4,7 @@
 using Components.TestServer.RazorComponents;
 using Microsoft.AspNetCore.Components.E2ETest.Infrastructure;
 using Microsoft.AspNetCore.Components.E2ETest.Infrastructure.ServerFixtures;
+using Microsoft.AspNetCore.Components.E2ETests.ServerExecutionTests;
 using Microsoft.AspNetCore.E2ETesting;
 using OpenQA.Selenium;
 using TestServer;
@@ -1142,8 +1143,7 @@ public class InteractivityTest : ServerTestBase<BasicTestAppServerSiteFixture<Ra
     public void InteractiveServerRootComponent_CanAccessCircuitContext()
     {
         Navigate($"{ServerPathBase}/interactivity/circuit-context");
-
-        Browser.Equal("True", () => Browser.FindElement(By.Id("has-circuit-context")).Text);
+        CircuitContextTest.TestCircuitContextCore(Browser);
     }
 
     [Fact]

+ 1 - 1
src/Components/test/E2ETest/ServerRenderingTests/StreamingRenderingTest.cs

@@ -245,7 +245,7 @@ public class StreamingRenderingTest : ServerTestBase<BasicTestAppServerSiteFixtu
     [Theory]
     [InlineData(false)]
     [InlineData(true)]
-    public async void StopsProcessingStreamingOutputFromPreviousRequestAfterEnhancedNav(bool duringEnhancedNavigation)
+    public async Task StopsProcessingStreamingOutputFromPreviousRequestAfterEnhancedNav(bool duringEnhancedNavigation)
     {
         IWebElement originalH1Elem;
 

+ 4 - 4
src/Components/test/E2ETest/Tests/BootResourceCachingTest.cs

@@ -60,13 +60,13 @@ public partial class BootResourceCachingTest
         WaitUntilLoaded();
         var subsequentResourcesRequested = GetAndClearRequestedPaths();
         Assert.NotEmpty(initialResourcesRequested.Where(path => path.EndsWith("/blazor.boot.json", StringComparison.Ordinal)));
-        Assert.Empty(subsequentResourcesRequested.Where(path =>
+        Assert.DoesNotContain(subsequentResourcesRequested, path =>
             path.Contains("/dotnet.native.", StringComparison.Ordinal) &&
-            path.EndsWith(".wasm", StringComparison.Ordinal)));
+            path.EndsWith(".wasm", StringComparison.Ordinal));
         Assert.NotEmpty(subsequentResourcesRequested.Where(path => path.EndsWith(".js", StringComparison.Ordinal)));
-        Assert.Empty(subsequentResourcesRequested.Where(path =>
+        Assert.DoesNotContain(subsequentResourcesRequested, path =>
             !path.Contains("/dotnet.native.", StringComparison.Ordinal) &&
-            path.EndsWith(".wasm", StringComparison.Ordinal)));
+            path.EndsWith(".wasm", StringComparison.Ordinal));
     }
 
     [Fact]

+ 0 - 1
src/Components/test/E2ETest/Tests/EventTest.cs

@@ -199,7 +199,6 @@ public class EventTest : ServerTestBase<ToggleExecutionModeServerFixture<Program
     }
 
     [Fact]
-    [QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/52783")]
     public void Cancel_CanTrigger()
     {
         Browser.MountTestComponent<DialogEventsComponent>();

+ 1 - 1
src/Components/test/E2ETest/Tests/HostedInAlternativeBasePathTest.cs

@@ -32,7 +32,7 @@ public class HostedInAlternativeBasePathTest : ServerTestBase<AspNetSiteServerFi
     public void CanLoadBlazorAppFromSubPath()
     {
         Assert.Equal("App loaded on custom path", Browser.Title);
-        Assert.Equal(0, Browser.GetBrowserLogs(LogLevel.Severe).Count);
+        Assert.Empty(Browser.GetBrowserLogs(LogLevel.Severe));
     }
 
     private void WaitUntilLoaded()

+ 1 - 1
src/Components/test/E2ETest/Tests/InteropTest.cs

@@ -186,7 +186,7 @@ public class InteropTest : ServerTestBase<ToggleExecutionModeServerFixture<Progr
             {
                 if (expectedValue.Value != actualValue)
                 {
-                    throw new AssertActualExpectedException(expectedValue.Value, actualValue, $"Scenario '{expectedValue.Key}' failed. Expected '{expectedValue.Value}, Actual {actualValue}");
+                    throw EqualException.ForMismatchedValues(expectedValue.Value, actualValue, $"Scenario '{expectedValue.Key}' failed. Expected '{expectedValue.Value}, Actual {actualValue}");
                 }
             }
         }

+ 1 - 1
src/Components/test/E2ETest/Tests/MultipleHostedAppTest.cs

@@ -34,7 +34,7 @@ public class MultipleHostedAppTest : ServerTestBase<AspNetSiteServerFixture>
         Navigate("/app/");
         WaitUntilLoaded();
         Assert.Equal("App loaded on custom path", Browser.Title);
-        Assert.Equal(0, Browser.GetBrowserLogs(LogLevel.Severe).Count);
+        Assert.Empty(Browser.GetBrowserLogs(LogLevel.Severe));
     }
 
     [Fact]

+ 3 - 0
src/Components/test/E2ETest/Tests/RoutingTest.cs

@@ -26,6 +26,9 @@ public class RoutingTest : ServerTestBase<ToggleExecutionModeServerFixture<Progr
     {
     }
 
+    public override Task InitializeAsync()
+        => InitializeAsync(BrowserFixture.RoutingTestContext);
+
     protected override void InitializeAsyncCore()
     {
         Navigate(ServerPathBase);

+ 11 - 0
src/Components/test/testassets/BasicTestApp/Index.razor

@@ -1,4 +1,6 @@
 @using Microsoft.AspNetCore.Components.Rendering
+@using System.Web
+@inject NavigationManager NavigationManager
 <div id="test-selector">
     Select test:
     <select id="test-selector-select" @bind=SelectedComponentTypeName>
@@ -137,6 +139,15 @@
     Type SelectedComponentType
         => SelectedComponentTypeName == "none" ? null : Type.GetType(SelectedComponentTypeName, throwOnError: true);
 
+    protected override void OnInitialized()
+    {
+        var uri = new Uri(NavigationManager.Uri);
+        if (HttpUtility.ParseQueryString(uri.Query)["initial-component-type"] is { Length: > 0 } initialComponentTypeName)
+        {
+            SelectedComponentTypeName = initialComponentTypeName;
+        }
+    }
+
     void RenderSelectedComponent(RenderTreeBuilder builder)
     {
         if (SelectedComponentType != null)

+ 1 - 0
src/Components/test/testassets/Components.TestServer/RazorComponents/App.razor

@@ -25,6 +25,7 @@
     </script>
     <script src="_framework/blazor.web.js" autostart="false" suppress-error="BL9992"></script>
     <script src="_content/TestContentPackage/counterInterop.js"></script>
+    <script src="js/circuitContextTest.js"></script>
     <script>
         // This is called by the Components.WasmMinimal project.
         function getQueryParam(key) {

+ 1 - 23
src/Components/test/testassets/Components.TestServer/RazorComponents/Pages/Interactivity/CircuitContextPage.razor

@@ -1,25 +1,3 @@
 @page "/interactivity/circuit-context"
-@rendermode RenderMode.InteractiveServer
-@inject TestCircuitContextAccessor CircuitContextAccessor
 
-<h1>Circuit context</h1>
-
-<p>
-    Has circuit context: <span id="has-circuit-context">@_hasCircuitContext</span>
-</p>
-
-@code {
-    private bool _hasCircuitContext;
-
-    protected override async Task OnAfterRenderAsync(bool firstRender)
-    {
-        if (firstRender)
-        {
-            await Task.Yield();
-
-            _hasCircuitContext = CircuitContextAccessor.HasCircuitContext;
-
-            StateHasChanged();
-        }
-    }
-}
+<CircuitContextComponent @rendermode="RenderMode.InteractiveServer" />

+ 1 - 1
src/DataProtection/Cryptography.Internal/test/Cng/BCryptUtilTests.cs

@@ -55,6 +55,6 @@ public unsafe class BCryptUtilTests
             }
         }
 
-        Assert.True(false, "Buffer was not filled as expected.");
+        Assert.Fail("Buffer was not filled as expected.");
     }
 }

+ 2 - 2
src/DataProtection/DataProtection/test/Microsoft.AspNetCore.DataProtection.Tests/AuthenticatedEncryption/ConfigurationModel/AuthenticatedEncryptorDescriptorTests.cs

@@ -101,8 +101,8 @@ public class AuthenticatedEncryptorDescriptorTests
         Assert.Equal(plaintext, roundTripPlaintext);
     }
 
-    public static TheoryData CreateAuthenticatedEncryptor_RoundTripsData_ManagedImplementationData
-        => new TheoryData<EncryptionAlgorithm, ValidationAlgorithm, Func<HMAC>>
+    public static TheoryData<EncryptionAlgorithm, ValidationAlgorithm, Func<HMAC>> CreateAuthenticatedEncryptor_RoundTripsData_ManagedImplementationData
+        => new()
         {
                 { EncryptionAlgorithm.AES_128_CBC, ValidationAlgorithm.HMACSHA256, () => new HMACSHA256() },
                 { EncryptionAlgorithm.AES_192_CBC, ValidationAlgorithm.HMACSHA256, () => new HMACSHA256() },

+ 2 - 0
src/DataProtection/DataProtection/test/Microsoft.AspNetCore.DataProtection.Tests/KeyManagement/KeyRingProviderTests.cs

@@ -709,8 +709,10 @@ public class KeyRingProviderTests
         Assert.True(mreBackgroundThreadHasCalledGetCurrentKeyRing.Wait(testTimeout), "Test timed out.");
         mreForegroundThreadIsCallingGetCurrentKeyRing.Set();
         var foregroundRetVal = keyRingProvider.GetCurrentKeyRingCore(now);
+#pragma warning disable xUnit1031 // Do not use blocking task operations in test method
         backgroundGetKeyRingTask.Wait(testTimeout);
         var backgroundRetVal = backgroundGetKeyRingTask.GetAwaiter().GetResult();
+#pragma warning restore xUnit1031 // Do not use blocking task operations in test method
 
         // Assert - underlying provider only should have been called once
         Assert.Same(expectedKeyRing, foregroundRetVal);

+ 1 - 1
src/DataProtection/DataProtection/test/Microsoft.AspNetCore.DataProtection.Tests/KeyManagement/XmlKeyManagerTests.cs

@@ -328,7 +328,7 @@ public class XmlKeyManagerTests
         var keys = RunGetAllKeysCore(xml, activator);
 
         // Assert
-        Assert.Equal(0, keys.Count);
+        Assert.Empty(keys);
     }
 
     [Fact]

+ 1 - 1
src/DataProtection/DataProtection/test/Microsoft.AspNetCore.DataProtection.Tests/Repositories/EphemeralXmlRepositoryTests.cs

@@ -99,7 +99,7 @@ public class EphemeralXmlRepositoryTests
             // Now that the repository has read the element from the registry, delete it out-of-band.
             repository.DeleteElements(deletableElements => deletableElements.First().DeletionOrder = 1);
 
-            Assert.Equal(1, deletableElements.Count);
+            Assert.Single(deletableElements);
 
             deletableElements.First().DeletionOrder = 1;
         }));

+ 2 - 2
src/DataProtection/DataProtection/test/Microsoft.AspNetCore.DataProtection.Tests/Repositories/FileSystemXmlRepositoryTests.cs

@@ -55,7 +55,7 @@ public class FileSystemXmlRepositoryTests
             var allElements = repository.GetAllElements();
 
             // Assert
-            Assert.Equal(0, allElements.Count);
+            Assert.Empty(allElements);
         });
     }
 
@@ -264,7 +264,7 @@ public class FileSystemXmlRepositoryTests
                 // Now that the repository has read the element from disk, delete it out-of-band.
                 File.Delete(filePath);
 
-                Assert.Equal(1, deletableElements.Count);
+                Assert.Single(deletableElements);
 
                 deletableElements.First().DeletionOrder = 1;
             }));

+ 2 - 2
src/DataProtection/DataProtection/test/Microsoft.AspNetCore.DataProtection.Tests/Repositories/RegistryXmlRepositoryTests.cs

@@ -42,7 +42,7 @@ public class RegistryXmlRepositoryTests
             var allElements = repository.GetAllElements();
 
             // Assert
-            Assert.Equal(0, allElements.Count);
+            Assert.Empty(allElements);
         });
     }
 
@@ -206,7 +206,7 @@ public class RegistryXmlRepositoryTests
                 // Now that the repository has read the element from the registry, delete it out-of-band.
                 regKey.DeleteValue("friendly1");
 
-                Assert.Equal(1, deletableElements.Count);
+                Assert.Single(deletableElements);
 
                 deletableElements.First().DeletionOrder = 1;
             }));

+ 1 - 1
src/DataProtection/DataProtection/test/Microsoft.AspNetCore.DataProtection.Tests/XmlAssert.cs

@@ -33,7 +33,7 @@ public static class XmlAssert
 
         if (!Core.AreEqual(expected, actual))
         {
-            Assert.True(false,
+            Assert.Fail(
                    "Expected element:" + Environment.NewLine
                    + expected.ToString() + Environment.NewLine
                    + "Actual element:" + Environment.NewLine

+ 1 - 1
src/DefaultBuilder/test/Microsoft.AspNetCore.FunctionalTests/WebHostFunctionalTests.cs

@@ -126,7 +126,7 @@ public class WebHostFunctionalTests : LoggedTest
 
                 logger.Log(LogLevel.Information, 0, "Message", null, (s, e) =>
                 {
-                    Assert.True(false, "Information log when log level set to warning in config");
+                    Assert.Fail("Information log when log level set to warning in config");
                     return string.Empty;
                 });
 

+ 5 - 5
src/DefaultBuilder/test/Microsoft.AspNetCore.Tests/WebApplicationTests.cs

@@ -1770,10 +1770,10 @@ public class WebApplicationTests
     {
         var builder = WebApplication.CreateEmptyBuilder(new());
 
-        Assert.Empty(builder.Services.Where(descriptor => descriptor.ServiceType == typeof(IConfigureOptions<LoggerFactoryOptions>)));
-        Assert.Empty(builder.Services.Where(descriptor => descriptor.ServiceType == typeof(IOptionsChangeTokenSource<HostFilteringOptions>)));
-        Assert.Empty(builder.Services.Where(descriptor => descriptor.ServiceType == typeof(IServer)));
-        Assert.Empty(builder.Services.Where(descriptor => descriptor.ServiceType == typeof(EndpointDataSource)));
+        Assert.DoesNotContain(builder.Services, descriptor => descriptor.ServiceType == typeof(IConfigureOptions<LoggerFactoryOptions>));
+        Assert.DoesNotContain(builder.Services, descriptor => descriptor.ServiceType == typeof(IOptionsChangeTokenSource<HostFilteringOptions>));
+        Assert.DoesNotContain(builder.Services, descriptor => descriptor.ServiceType == typeof(IServer));
+        Assert.DoesNotContain(builder.Services, descriptor => descriptor.ServiceType == typeof(EndpointDataSource));
 
         // These services are still necessary
         Assert.Single(builder.Services.Where(descriptor => descriptor.ServiceType == typeof(IWebHostEnvironment)));
@@ -1932,7 +1932,7 @@ public class WebApplicationTests
         await app.StartAsync();
 
         var ds = app.Services.GetRequiredService<EndpointDataSource>();
-        Assert.Equal(1, ds.Endpoints.Count);
+        Assert.Single(ds.Endpoints);
         Assert.Equal("One", ds.Endpoints[0].DisplayName);
 
         var client = app.GetTestClient();

+ 2 - 2
src/Features/JsonPatch/test/IntegrationTests/DictionaryIntegrationTest.cs

@@ -57,7 +57,7 @@ public class DictionaryTest
         patchDocument.ApplyTo(model);
 
         // Assert
-        Assert.Equal(1, model.DictionaryOfStringToInteger.Count);
+        Assert.Single(model.DictionaryOfStringToInteger);
         Assert.Equal(1, model.DictionaryOfStringToInteger["one"]);
     }
 
@@ -75,7 +75,7 @@ public class DictionaryTest
         patchDocument.ApplyTo(model);
 
         // Assert
-        Assert.Equal(1, model.DictionaryOfStringToInteger.Count);
+        Assert.Single(model.DictionaryOfStringToInteger);
         Assert.Equal(1, model.DictionaryOfStringToInteger["two"]);
     }
 

+ 3 - 3
src/FileProviders/Embedded/test/EmbeddedFileProviderTests.cs

@@ -83,7 +83,7 @@ public class EmbeddedFileProviderTests
         Assert.False(fileInfo.Exists);
     }
 
-    public static TheoryData GetFileInfo_LocatesFilesUnderSpecifiedNamespaceData
+    public static TheoryData<string> GetFileInfo_LocatesFilesUnderSpecifiedNamespaceData
     {
         get
         {
@@ -121,7 +121,7 @@ public class EmbeddedFileProviderTests
         Assert.Equal("File3.txt", fileInfo.Name);
     }
 
-    public static TheoryData GetFileInfo_LocatesFilesUnderSubDirectoriesData
+    public static TheoryData<string> GetFileInfo_LocatesFilesUnderSubDirectoriesData
     {
         get
         {
@@ -159,7 +159,7 @@ public class EmbeddedFileProviderTests
         Assert.Equal("File.txt", fileInfo.Name);
     }
 
-    public static TheoryData GetFileInfo_LocatesFilesUnderSubDirectories_IfDirectoriesContainsInvalidEverettCharData
+    public static TheoryData<string> GetFileInfo_LocatesFilesUnderSubDirectories_IfDirectoriesContainsInvalidEverettCharData
     {
         get
         {

+ 2 - 2
src/Framework/AspNetCoreAnalyzers/test/RouteEmbeddedLanguage/RoutePatternParserTests.cs

@@ -176,7 +176,7 @@ public partial class RoutePatternParserTests
 
                 // Ensure the diagnostic we emit is the same as the .NET one. Note: we can only
                 // do this in en as that's the only culture where we control the text exactly
-                // and can ensure it exactly matches RoutePattern. We depend on localization to do a 
+                // and can ensure it exactly matches RoutePattern. We depend on localization to do a
                 // good enough job here for other languages.
                 if (Thread.CurrentThread.CurrentCulture.Parent.Name == "en")
                 {
@@ -195,7 +195,7 @@ public partial class RoutePatternParserTests
         if (!tree.Diagnostics.IsEmpty && !allowDiagnosticsMismatch)
         {
             var expectedDiagnostics = CreateDiagnosticsElement(sourceText, tree);
-            Assert.False(true, $"Parsing '{token.ValueText}' didn't throw an error for expected diagnostics: \r\n" + expectedDiagnostics.ToString().Replace(@"""", @""""""));
+            Assert.Fail($"Parsing '{token.ValueText}' didn't throw an error for expected diagnostics: \r\n" + expectedDiagnostics.ToString().Replace(@"""", @""""""));
         }
 
         if (parsedRoutePatterns != null)

+ 1 - 1
src/Framework/test/TargetingPackTests.cs

@@ -183,7 +183,7 @@ public class TargetingPackTests
             }
             else
             {
-                Assert.True(false, $"{packageName} is not a recognized aspNetCore or runtime dependency");
+                Assert.Fail($"{packageName} is not a recognized aspNetCore or runtime dependency");
             }
         });
     }

+ 1 - 0
src/Grpc/JsonTranscoding/perf/Microsoft.AspNetCore.Grpc.Microbenchmarks/Microsoft.AspNetCore.Grpc.Microbenchmarks.csproj

@@ -6,6 +6,7 @@
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
     <TieredCompilation>false</TieredCompilation>
     <DefineConstants>$(DefineConstants);IS_BENCHMARKS</DefineConstants>
+    <SkipMicrobenchmarksValidation>true</SkipMicrobenchmarksValidation>
   </PropertyGroup>
 
   <ItemGroup>

+ 1 - 1
src/Grpc/JsonTranscoding/test/Microsoft.AspNetCore.Grpc.JsonTranscoding.Tests/JsonTranscodingServiceMethodProviderTests.cs

@@ -29,7 +29,7 @@ public class JsonTranscodingServiceMethodProviderTests
 
         Assert.Equal("GET", endpoint.Metadata.GetMetadata<IHttpMethodMetadata>()?.HttpMethods.Single());
         Assert.Equal("/v1/greeter/{name}", endpoint.RoutePattern.RawText);
-        Assert.Equal(1, endpoint.RoutePattern.Parameters.Count);
+        Assert.Single(endpoint.RoutePattern.Parameters);
         Assert.Equal("name", endpoint.RoutePattern.Parameters[0].Name);
     }
 

+ 1 - 1
src/Grpc/JsonTranscoding/test/Microsoft.AspNetCore.Grpc.JsonTranscoding.Tests/UnaryServerCallHandlerTests.cs

@@ -791,7 +791,7 @@ public class UnaryServerCallHandlerTests : LoggedTest
     [Theory]
     [InlineData(null)]
     [InlineData("text/html")]
-    public async Task HandleCallAsync_BadContentType_BadRequestReturned(string contentType)
+    public async Task HandleCallAsync_BadContentType_BadRequestReturned(string? contentType)
     {
         // Arrange
         UnaryServerMethod<JsonTranscodingGreeterService, HelloRequest, HelloReply> invoker = (s, r, c) =>

+ 3 - 3
src/Grpc/JsonTranscoding/test/Microsoft.AspNetCore.Grpc.Swagger.Tests/Binding/ParametersTests.cs

@@ -67,7 +67,7 @@ public class ParametersTests
         Assert.Equal("parameterThree", operation.Parameters[2].Name);
         // body with one parameter
         Assert.NotNull(operation.RequestBody);
-        Assert.Equal(1, swagger.Components.Schemas["RequestBody"].Properties.Count);
+        Assert.Single(swagger.Components.Schemas["RequestBody"].Properties);
     }
 
     [Fact]
@@ -79,7 +79,7 @@ public class ParametersTests
         // Assert
         var path = swagger.Paths["/v1/parameters4/{parameterTwo}"];
         Assert.True(path.Operations.TryGetValue(OperationType.Post, out var operation));
-        Assert.Equal(1, operation.Parameters.Count);
+        Assert.Single(operation.Parameters);
         Assert.Equal(ParameterLocation.Path, operation.Parameters[0].In);
         Assert.Equal("parameterTwo", operation.Parameters[0].Name);
         // body with four parameters
@@ -110,7 +110,7 @@ public class ParametersTests
         // Assert
         var path = swagger.Paths["/v1/parameters6"];
         Assert.True(path.Operations.TryGetValue(OperationType.Get, out var operation));
-        Assert.Equal(1, operation.Parameters.Count);
+        Assert.Single(operation.Parameters);
         Assert.Equal(ParameterLocation.Query, operation.Parameters[0].In);
         Assert.Equal("parameterOne", operation.Parameters[0].Name);
         Assert.Equal("array", operation.Parameters[0].Schema.Type);

+ 6 - 6
src/Grpc/JsonTranscoding/test/Microsoft.AspNetCore.Grpc.Swagger.Tests/SchemaGeneratorIntegrationTests.cs

@@ -38,7 +38,7 @@ public class SchemaGeneratorIntegrationTests
         // Assert
         schema = repository.Schemas[schema.Reference.Id];
         Assert.Equal("object", schema.Type);
-        Assert.Equal(1, schema.Properties.Count);
+        Assert.Single(schema.Properties);
 
         var enumSchema = repository.Schemas[schema.Properties["enumValue"].Reference.Id];
         Assert.Equal("string", enumSchema.Type);
@@ -99,7 +99,7 @@ public class SchemaGeneratorIntegrationTests
         // Assert
         schema = repository.Schemas[schema.Reference.Id];
         Assert.Equal("object", schema.Type);
-        Assert.Equal(1, schema.Properties.Count);
+        Assert.Single(schema.Properties);
         Assert.Equal("RecursiveMessage", schema.Properties["child"].Reference.Id);
     }
 
@@ -143,7 +143,7 @@ public class SchemaGeneratorIntegrationTests
         var resolvedSchema = repository.Schemas[schema.Reference.Id];
 
         Assert.Equal("object", resolvedSchema.Type);
-        Assert.Equal(0, resolvedSchema.Properties.Count);
+        Assert.Empty(resolvedSchema.Properties);
         Assert.NotNull(resolvedSchema.AdditionalProperties);
         Assert.Null(resolvedSchema.AdditionalProperties.Type);
     }
@@ -159,7 +159,7 @@ public class SchemaGeneratorIntegrationTests
         Assert.Equal("object", schema.Type);
         Assert.NotNull(schema.AdditionalProperties);
         Assert.Null(schema.AdditionalProperties.Type);
-        Assert.Equal(1, schema.Properties.Count);
+        Assert.Single(schema.Properties);
         Assert.Equal("string", schema.Properties["@type"].Type);
     }
 
@@ -189,7 +189,7 @@ public class SchemaGeneratorIntegrationTests
         // Assert
         schema = repository.Schemas[schema.Reference.Id];
         Assert.Equal("object", schema.Type);
-        Assert.Equal(1, schema.Properties.Count);
+        Assert.Single(schema.Properties);
         Assert.Equal("object", schema.Properties["mapValue"].Type);
         Assert.Equal("number", schema.Properties["mapValue"].AdditionalProperties.Type);
         Assert.Equal("double", schema.Properties["mapValue"].AdditionalProperties.Format);
@@ -204,7 +204,7 @@ public class SchemaGeneratorIntegrationTests
         // Assert
         schema = repository.Schemas[schema.Reference.Id];
         Assert.Equal("object", schema.Type);
-        Assert.Equal(1, schema.Properties.Count);
+        Assert.Single(schema.Properties);
         Assert.Equal("string", schema.Properties["fieldMaskValue"].Type);
     }
 }

+ 1 - 1
src/Grpc/JsonTranscoding/test/Microsoft.AspNetCore.Grpc.Swagger.Tests/XmlComments/XmlCommentsDocumentFilterTests.cs

@@ -40,7 +40,7 @@ public class XmlCommentsDocumentFilterTests
 
         Subject().Apply(document, filterContext);
 
-        Assert.Equal(1, document.Tags.Count);
+        Assert.Single(document.Tags);
         Assert.Equal(expectedDescription, document.Tags[0].Description);
 
         static ApiDescription CreateApiDescription(Type serviceType)

+ 1 - 1
src/HealthChecks/HealthChecks/test/DefaultHealthCheckServiceTest.cs

@@ -517,7 +517,7 @@ public class DefaultHealthCheckServiceTest
         await checkHealthTask;
 
         // Assert
-        Assert.Collection(checkHealthTask.Result.Entries,
+        Assert.Collection((await checkHealthTask).Entries,
             entry =>
             {
                 Assert.Equal("test1", entry.Key);

+ 2 - 2
src/Hosting/Hosting/test/WebHostTests.cs

@@ -143,7 +143,7 @@ public partial class WebHostTests
         {
             var server = (FakeServer)host.Services.GetRequiredService<IServer>();
             Assert.NotNull(host);
-            Assert.Equal(1, server.StartInstances.Count);
+            Assert.Single(server.StartInstances);
             Assert.Equal(0, server.StartInstances[0].DisposeCalls);
 
             host.Dispose();
@@ -174,7 +174,7 @@ public partial class WebHostTests
             lifetime.ApplicationStarted.WaitHandle.WaitOne();
             Assert.True(lifetime2.ApplicationStarted.IsCancellationRequested);
 
-            Assert.Equal(1, server.StartInstances.Count);
+            Assert.Single(server.StartInstances);
             Assert.Equal(0, server.StartInstances[0].DisposeCalls);
 
             cts.Cancel();

+ 2 - 0
src/Hosting/TestHost/test/ClientHandlerTests.cs

@@ -392,7 +392,9 @@ public class ClientHandlerTests
         var httpClient = new HttpClient(handler);
         Task<HttpResponseMessage> task = httpClient.GetAsync("https://example.com/");
         Assert.False(task.IsCompleted);
+#pragma warning disable xUnit1031 // Do not use blocking task operations in test method
         Assert.False(task.Wait(50));
+#pragma warning restore xUnit1031 // Do not use blocking task operations in test method
         block.Set();
         HttpResponseMessage response = await task;
     }

+ 2 - 0
src/Hosting/TestHost/test/HttpContextBuilderTests.cs

@@ -107,7 +107,9 @@ public class HttpContextBuilderTests
         var task = server.SendAsync(c => { });
 
         Assert.False(task.IsCompleted);
+#pragma warning disable xUnit1031 // Do not use blocking task operations in test method
         Assert.False(task.Wait(50));
+#pragma warning restore xUnit1031 // Do not use blocking task operations in test method
         block.Set();
         var context = await task;
     }

+ 2 - 2
src/Hosting/test/FunctionalTests/WebHostBuilderTests.cs

@@ -44,11 +44,11 @@ public class WebHostBuilderTests : LoggedTest
                     if (!string.IsNullOrWhiteSpace(data))
                     {
                         output += data + '\n';
-                        tcs.TrySetResult();
                     }
                 };
 
-                await deployer.DeployAsync();
+                var deploymentResult = await deployer.DeployAsync();
+                deploymentResult.HostShutdownToken.Register(tcs.SetResult);
 
                 try
                 {

+ 0 - 1
src/Hosting/test/testassets/IStartupInjectionAssemblyName/Program.cs

@@ -14,7 +14,6 @@ public class Program
         var webHost = CreateWebHostBuilder(args).Build();
         var applicationName = webHost.Services.GetRequiredService<IHostEnvironment>().ApplicationName;
         Console.WriteLine(applicationName);
-        Console.ReadKey();
     }
 
     // Do not change the signature of this method. It's used for tests.

+ 16 - 16
src/Http/Authentication.Core/test/AuthenticationPropertiesTests.cs

@@ -77,17 +77,17 @@ public class AuthenticationPropertiesTests
     {
         var props = new AuthenticationProperties();
         Assert.Null(props.GetString("foo"));
-        Assert.Equal(0, props.Items.Count);
+        Assert.Empty(props.Items);
 
         props.SetString("foo", "foo bar");
         Assert.Equal("foo bar", props.GetString("foo"));
         Assert.Equal("foo bar", props.Items["foo"]);
-        Assert.Equal(1, props.Items.Count);
+        Assert.Single(props.Items);
 
         props.SetString("foo", "foo baz");
         Assert.Equal("foo baz", props.GetString("foo"));
         Assert.Equal("foo baz", props.Items["foo"]);
-        Assert.Equal(1, props.Items.Count);
+        Assert.Single(props.Items);
 
         props.SetString("bar", "xy");
         Assert.Equal("xy", props.GetString("bar"));
@@ -100,11 +100,11 @@ public class AuthenticationPropertiesTests
 
         props.SetString("foo", null);
         Assert.Null(props.GetString("foo"));
-        Assert.Equal(1, props.Items.Count);
+        Assert.Single(props.Items);
 
         props.SetString("doesntexist", null);
         Assert.False(props.Items.ContainsKey("doesntexist"));
-        Assert.Equal(1, props.Items.Count);
+        Assert.Single(props.Items);
     }
 
     [Fact]
@@ -112,17 +112,17 @@ public class AuthenticationPropertiesTests
     {
         var props = new AuthenticationProperties();
         Assert.Null(props.GetParameter<string>("foo"));
-        Assert.Equal(0, props.Parameters.Count);
+        Assert.Empty(props.Parameters);
 
         props.SetParameter<string>("foo", "foo bar");
         Assert.Equal("foo bar", props.GetParameter<string>("foo"));
         Assert.Equal("foo bar", props.Parameters["foo"]);
-        Assert.Equal(1, props.Parameters.Count);
+        Assert.Single(props.Parameters);
 
         props.SetParameter<string?>("foo", null);
         Assert.Null(props.GetParameter<string>("foo"));
         Assert.Null(props.Parameters["foo"]);
-        Assert.Equal(1, props.Parameters.Count);
+        Assert.Single(props.Parameters);
     }
 
     [Fact]
@@ -130,17 +130,17 @@ public class AuthenticationPropertiesTests
     {
         var props = new AuthenticationProperties();
         Assert.Null(props.GetParameter<int?>("foo"));
-        Assert.Equal(0, props.Parameters.Count);
+        Assert.Empty(props.Parameters);
 
         props.SetParameter<int?>("foo", 123);
         Assert.Equal(123, props.GetParameter<int?>("foo"));
         Assert.Equal(123, props.Parameters["foo"]);
-        Assert.Equal(1, props.Parameters.Count);
+        Assert.Single(props.Parameters);
 
         props.SetParameter<int?>("foo", null);
         Assert.Null(props.GetParameter<int?>("foo"));
         Assert.Null(props.Parameters["foo"]);
-        Assert.Equal(1, props.Parameters.Count);
+        Assert.Single(props.Parameters);
     }
 
     [Fact]
@@ -148,18 +148,18 @@ public class AuthenticationPropertiesTests
     {
         var props = new AuthenticationProperties();
         Assert.Null(props.GetParameter<int?>("foo"));
-        Assert.Equal(0, props.Parameters.Count);
+        Assert.Empty(props.Parameters);
 
         var list = new string[] { "a", "b", "c" };
         props.SetParameter<ICollection<string>>("foo", list);
         Assert.Equal(new string[] { "a", "b", "c" }, props.GetParameter<ICollection<string>>("foo"));
         Assert.Same(list, props.Parameters["foo"]);
-        Assert.Equal(1, props.Parameters.Count);
+        Assert.Single(props.Parameters);
 
         props.SetParameter<ICollection<string>?>("foo", null);
         Assert.Null(props.GetParameter<ICollection<string>>("foo"));
         Assert.Null(props.Parameters["foo"]);
-        Assert.Equal(1, props.Parameters.Count);
+        Assert.Single(props.Parameters);
     }
 
     [Fact]
@@ -341,7 +341,7 @@ public class AuthenticationPropertiesTests
 
         // Ensure that parameters are not round-tripped
         Assert.NotNull(deserialized.Parameters);
-        Assert.Equal(0, deserialized.Parameters.Count);
+        Assert.Empty(deserialized.Parameters);
     }
 
     [Fact]
@@ -355,7 +355,7 @@ public class AuthenticationPropertiesTests
 
         // Ensure that parameters is not deserialized from a raw payload
         Assert.NotNull(deserialized!.Parameters);
-        Assert.Equal(0, deserialized.Parameters.Count);
+        Assert.Empty(deserialized.Parameters);
     }
 
     [Fact]

+ 4 - 4
src/Http/Headers/test/CacheControlHeaderValueTest.cs

@@ -46,21 +46,21 @@ public class CacheControlHeaderValueTest
         Assert.Throws<ArgumentException>(() => cacheControl.NoCacheHeaders.Add(null));
         Assert.Throws<FormatException>(() => cacheControl.NoCacheHeaders.Add("invalid PLACEHOLDER"));
         cacheControl.NoCacheHeaders.Add("PLACEHOLDER");
-        Assert.Equal(1, cacheControl.NoCacheHeaders.Count);
+        Assert.Single(cacheControl.NoCacheHeaders);
         Assert.Equal("PLACEHOLDER", cacheControl.NoCacheHeaders.First());
 
         Assert.NotNull(cacheControl.PrivateHeaders);
         Assert.Throws<ArgumentException>(() => cacheControl.PrivateHeaders.Add(null));
         Assert.Throws<FormatException>(() => cacheControl.PrivateHeaders.Add("invalid PLACEHOLDER"));
         cacheControl.PrivateHeaders.Add("PLACEHOLDER");
-        Assert.Equal(1, cacheControl.PrivateHeaders.Count);
+        Assert.Single(cacheControl.PrivateHeaders);
         Assert.Equal("PLACEHOLDER", cacheControl.PrivateHeaders.First());
 
         // NameValueHeaderValue collection property
         Assert.NotNull(cacheControl.Extensions);
         Assert.Throws<ArgumentNullException>(() => cacheControl.Extensions.Add(null!));
         cacheControl.Extensions.Add(new NameValueHeaderValue("name", "value"));
-        Assert.Equal(1, cacheControl.Extensions.Count);
+        Assert.Single(cacheControl.Extensions);
         Assert.Equal(new NameValueHeaderValue("name", "value"), cacheControl.Extensions.First());
     }
 
@@ -468,7 +468,7 @@ public class CacheControlHeaderValueTest
     [InlineData("s-maxage=1.5")]
     // Invalid Extension values
     [InlineData("custom value")]
-    public void TryParse_DifferentInvalidScenarios_ReturnsFalse(string input)
+    public void TryParse_DifferentInvalidScenarios_ReturnsFalse(string? input)
     {
         CheckInvalidTryParse(input);
     }

+ 24 - 24
src/Http/Headers/test/ContentDispositionHeaderValueTest.cs

@@ -43,7 +43,7 @@ public class ContentDispositionHeaderValueTest
     {
         var contentDisposition = new ContentDispositionHeaderValue("inline");
         Assert.Equal("inline", contentDisposition.DispositionType);
-        Assert.Equal(0, contentDisposition.Parameters.Count);
+        Assert.Empty(contentDisposition.Parameters);
         Assert.Null(contentDisposition.Name.Value);
         Assert.Null(contentDisposition.FileName.Value);
         Assert.Null(contentDisposition.CreationDate);
@@ -75,12 +75,12 @@ public class ContentDispositionHeaderValueTest
         var contentDisposition = new ContentDispositionHeaderValue("inline");
         contentDisposition.Name = "myname";
         Assert.Equal("myname", contentDisposition.Name);
-        Assert.Equal(1, contentDisposition.Parameters.Count);
+        Assert.Single(contentDisposition.Parameters);
         Assert.Equal("name", contentDisposition.Parameters.First().Name);
 
         contentDisposition.Name = null;
         Assert.Null(contentDisposition.Name.Value);
-        Assert.Equal(0, contentDisposition.Parameters.Count);
+        Assert.Empty(contentDisposition.Parameters);
         contentDisposition.Name = null; // It's OK to set it again to null; no exception.
     }
 
@@ -92,12 +92,12 @@ public class ContentDispositionHeaderValueTest
         // Note that uppercase letters are used. Comparison should happen case-insensitive.
         NameValueHeaderValue name = new NameValueHeaderValue("NAME", "old_name");
         contentDisposition.Parameters.Add(name);
-        Assert.Equal(1, contentDisposition.Parameters.Count);
+        Assert.Single(contentDisposition.Parameters);
         Assert.Equal("NAME", contentDisposition.Parameters.First().Name);
 
         contentDisposition.Name = "new_name";
         Assert.Equal("new_name", contentDisposition.Name);
-        Assert.Equal(1, contentDisposition.Parameters.Count);
+        Assert.Single(contentDisposition.Parameters);
         Assert.Equal("NAME", contentDisposition.Parameters.First().Name);
 
         contentDisposition.Parameters.Remove(name);
@@ -112,12 +112,12 @@ public class ContentDispositionHeaderValueTest
         // Note that uppercase letters are used. Comparison should happen case-insensitive.
         var fileName = new NameValueHeaderValue("FILENAME", "old_name");
         contentDisposition.Parameters.Add(fileName);
-        Assert.Equal(1, contentDisposition.Parameters.Count);
+        Assert.Single(contentDisposition.Parameters);
         Assert.Equal("FILENAME", contentDisposition.Parameters.First().Name);
 
         contentDisposition.FileName = "new_name";
         Assert.Equal("new_name", contentDisposition.FileName);
-        Assert.Equal(1, contentDisposition.Parameters.Count);
+        Assert.Single(contentDisposition.Parameters);
         Assert.Equal("FILENAME", contentDisposition.Parameters.First().Name);
 
         contentDisposition.Parameters.Remove(fileName);
@@ -131,7 +131,7 @@ public class ContentDispositionHeaderValueTest
 
         contentDisposition.FileName = "FileÃName.bat";
         Assert.Equal("FileÃName.bat", contentDisposition.FileName);
-        Assert.Equal(1, contentDisposition.Parameters.Count);
+        Assert.Single(contentDisposition.Parameters);
         Assert.Equal("filename", contentDisposition.Parameters.First().Name);
         Assert.Equal("\"=?utf-8?B?RmlsZcODTmFtZS5iYXQ=?=\"", contentDisposition.Parameters.First().Value);
 
@@ -146,7 +146,7 @@ public class ContentDispositionHeaderValueTest
 
         contentDisposition.FileName = "File\nName.bat";
         Assert.Equal("File\nName.bat", contentDisposition.FileName);
-        Assert.Equal(1, contentDisposition.Parameters.Count);
+        Assert.Single(contentDisposition.Parameters);
         Assert.Equal("filename", contentDisposition.Parameters.First().Name);
         Assert.Equal("\"=?utf-8?B?RmlsZQpOYW1lLmJhdA==?=\"", contentDisposition.Parameters.First().Value);
 
@@ -162,14 +162,14 @@ public class ContentDispositionHeaderValueTest
         // Note that uppercase letters are used. Comparison should happen case-insensitive.
         var fileName = new NameValueHeaderValue("FILENAME", "\"=?utf-99?Q?R=mlsZcODTmFtZS5iYXQ=?=\"");
         contentDisposition.Parameters.Add(fileName);
-        Assert.Equal(1, contentDisposition.Parameters.Count);
+        Assert.Single(contentDisposition.Parameters);
         Assert.Equal("FILENAME", contentDisposition.Parameters.First().Name);
         Assert.Equal("\"=?utf-99?Q?R=mlsZcODTmFtZS5iYXQ=?=\"", contentDisposition.Parameters.First().Value);
         Assert.Equal("=?utf-99?Q?R=mlsZcODTmFtZS5iYXQ=?=", contentDisposition.FileName);
 
         contentDisposition.FileName = "new_name";
         Assert.Equal("new_name", contentDisposition.FileName);
-        Assert.Equal(1, contentDisposition.Parameters.Count);
+        Assert.Single(contentDisposition.Parameters);
         Assert.Equal("FILENAME", contentDisposition.Parameters.First().Name);
 
         contentDisposition.Parameters.Remove(fileName);
@@ -184,13 +184,13 @@ public class ContentDispositionHeaderValueTest
         // Note that uppercase letters are used. Comparison should happen case-insensitive.
         var fileNameStar = new NameValueHeaderValue("FILENAME*", "old_name");
         contentDisposition.Parameters.Add(fileNameStar);
-        Assert.Equal(1, contentDisposition.Parameters.Count);
+        Assert.Single(contentDisposition.Parameters);
         Assert.Equal("FILENAME*", contentDisposition.Parameters.First().Name);
         Assert.Null(contentDisposition.FileNameStar.Value); // Decode failure
 
         contentDisposition.FileNameStar = "new_name";
         Assert.Equal("new_name", contentDisposition.FileNameStar);
-        Assert.Equal(1, contentDisposition.Parameters.Count);
+        Assert.Single(contentDisposition.Parameters);
         Assert.Equal("FILENAME*", contentDisposition.Parameters.First().Name);
         Assert.Equal("UTF-8\'\'new_name", contentDisposition.Parameters.First().Value);
 
@@ -205,7 +205,7 @@ public class ContentDispositionHeaderValueTest
 
         contentDisposition.FileNameStar = "FileÃName.bat";
         Assert.Equal("FileÃName.bat", contentDisposition.FileNameStar);
-        Assert.Equal(1, contentDisposition.Parameters.Count);
+        Assert.Single(contentDisposition.Parameters);
         Assert.Equal("filename*", contentDisposition.Parameters.First().Name);
         Assert.Equal("UTF-8\'\'File%C3%83Name.bat", contentDisposition.Parameters.First().Value);
 
@@ -268,14 +268,14 @@ public class ContentDispositionHeaderValueTest
         // Note that uppercase letters are used. Comparison should happen case-insensitive.
         var fileNameStar = new NameValueHeaderValue("FILENAME*", "utf-99'lang'File%CZName.bat");
         contentDisposition.Parameters.Add(fileNameStar);
-        Assert.Equal(1, contentDisposition.Parameters.Count);
+        Assert.Single(contentDisposition.Parameters);
         Assert.Equal("FILENAME*", contentDisposition.Parameters.First().Name);
         Assert.Equal("utf-99'lang'File%CZName.bat", contentDisposition.Parameters.First().Value);
         Assert.Null(contentDisposition.FileNameStar.Value); // Decode failure
 
         contentDisposition.FileNameStar = "new_name";
         Assert.Equal("new_name", contentDisposition.FileNameStar);
-        Assert.Equal(1, contentDisposition.Parameters.Count);
+        Assert.Single(contentDisposition.Parameters);
         Assert.Equal("FILENAME*", contentDisposition.Parameters.First().Name);
 
         contentDisposition.Parameters.Remove(fileNameStar);
@@ -309,7 +309,7 @@ public class ContentDispositionHeaderValueTest
         // Note that uppercase letters are used. Comparison should happen case-insensitive.
         var dateParameter = new NameValueHeaderValue("Creation-DATE", validDateString);
         contentDisposition.Parameters.Add(dateParameter);
-        Assert.Equal(1, contentDisposition.Parameters.Count);
+        Assert.Single(contentDisposition.Parameters);
         Assert.Equal("Creation-DATE", contentDisposition.Parameters.First().Name);
 
         Assert.Equal(validDate, contentDisposition.CreationDate);
@@ -317,7 +317,7 @@ public class ContentDispositionHeaderValueTest
         var newDate = validDate.AddSeconds(1);
         contentDisposition.CreationDate = newDate;
         Assert.Equal(newDate, contentDisposition.CreationDate);
-        Assert.Equal(1, contentDisposition.Parameters.Count);
+        Assert.Single(contentDisposition.Parameters);
         Assert.Equal("Creation-DATE", contentDisposition.Parameters.First().Name);
         Assert.Equal("\"Tue, 15 Nov 1994 08:12:32 GMT\"", contentDisposition.Parameters.First().Value);
 
@@ -335,14 +335,14 @@ public class ContentDispositionHeaderValueTest
         // Note that uppercase letters are used. Comparison should happen case-insensitive.
         var dateParameter = new NameValueHeaderValue("read-DATE", invalidDateString);
         contentDisposition.Parameters.Add(dateParameter);
-        Assert.Equal(1, contentDisposition.Parameters.Count);
+        Assert.Single(contentDisposition.Parameters);
         Assert.Equal("read-DATE", contentDisposition.Parameters.First().Name);
 
         Assert.Null(contentDisposition.ReadDate);
 
         contentDisposition.ReadDate = null;
         Assert.Null(contentDisposition.ReadDate);
-        Assert.Equal(0, contentDisposition.Parameters.Count);
+        Assert.Empty(contentDisposition.Parameters);
     }
 
     [Fact]
@@ -353,13 +353,13 @@ public class ContentDispositionHeaderValueTest
         // Note that uppercase letters are used. Comparison should happen case-insensitive.
         var sizeParameter = new NameValueHeaderValue("SIZE", "279172874239");
         contentDisposition.Parameters.Add(sizeParameter);
-        Assert.Equal(1, contentDisposition.Parameters.Count);
+        Assert.Single(contentDisposition.Parameters);
         Assert.Equal("SIZE", contentDisposition.Parameters.First().Name);
         Assert.Equal(279172874239, contentDisposition.Size);
 
         contentDisposition.Size = 279172874240;
         Assert.Equal(279172874240, contentDisposition.Size);
-        Assert.Equal(1, contentDisposition.Parameters.Count);
+        Assert.Single(contentDisposition.Parameters);
         Assert.Equal("SIZE", contentDisposition.Parameters.First().Name);
 
         contentDisposition.Parameters.Remove(sizeParameter);
@@ -374,14 +374,14 @@ public class ContentDispositionHeaderValueTest
         // Note that uppercase letters are used. Comparison should happen case-insensitive.
         var sizeParameter = new NameValueHeaderValue("SIZE", "-279172874239");
         contentDisposition.Parameters.Add(sizeParameter);
-        Assert.Equal(1, contentDisposition.Parameters.Count);
+        Assert.Single(contentDisposition.Parameters);
         Assert.Equal("SIZE", contentDisposition.Parameters.First().Name);
         Assert.Null(contentDisposition.Size);
 
         // Negatives not allowed
         Assert.Throws<ArgumentOutOfRangeException>(() => contentDisposition.Size = -279172874240);
         Assert.Null(contentDisposition.Size);
-        Assert.Equal(1, contentDisposition.Parameters.Count);
+        Assert.Single(contentDisposition.Parameters);
         Assert.Equal("SIZE", contentDisposition.Parameters.First().Name);
 
         contentDisposition.Parameters.Remove(sizeParameter);

+ 4 - 4
src/Http/Headers/test/CookieHeaderValueTest.cs

@@ -278,7 +278,7 @@ public class CookieHeaderValueTest
 
     [Theory]
     [MemberData(nameof(ListWithInvalidCookieHeaderDataSet))]
-    public void CookieHeaderValue_ParseList_ExcludesInvalidValues(IList<CookieHeaderValue> cookies, string[] input)
+    public void CookieHeaderValue_ParseList_ExcludesInvalidValues(IList<CookieHeaderValue>? cookies, string[] input)
     {
         var results = CookieHeaderValue.ParseList(input);
         // ParseList always returns a list, even if empty. TryParseList may return null (via out).
@@ -287,7 +287,7 @@ public class CookieHeaderValueTest
 
     [Theory]
     [MemberData(nameof(ListWithInvalidCookieHeaderDataSet))]
-    public void CookieHeaderValue_TryParseList_ExcludesInvalidValues(IList<CookieHeaderValue> cookies, string[] input)
+    public void CookieHeaderValue_TryParseList_ExcludesInvalidValues(IList<CookieHeaderValue>? cookies, string[] input)
     {
         var result = CookieHeaderValue.TryParseList(input, out var results);
         Assert.Equal(cookies, results);
@@ -298,7 +298,7 @@ public class CookieHeaderValueTest
     [MemberData(nameof(ListWithInvalidCookieHeaderDataSet))]
     public void CookieHeaderValue_ParseStrictList_ThrowsForAnyInvalidValues(
 #pragma warning disable xUnit1026 // Theory methods should use all of their parameters
-            IList<CookieHeaderValue> cookies,
+            IList<CookieHeaderValue>? cookies,
 #pragma warning restore xUnit1026 // Theory methods should use all of their parameters
             string[] input)
     {
@@ -309,7 +309,7 @@ public class CookieHeaderValueTest
     [MemberData(nameof(ListWithInvalidCookieHeaderDataSet))]
     public void CookieHeaderValue_TryParseStrictList_FailsForAnyInvalidValues(
 #pragma warning disable xUnit1026 // Theory methods should use all of their parameters
-            IList<CookieHeaderValue> cookies,
+            IList<CookieHeaderValue>? cookies,
 #pragma warning restore xUnit1026 // Theory methods should use all of their parameters
             string[] input)
     {

+ 3 - 3
src/Http/Headers/test/EntityTagHeaderValueTest.cs

@@ -245,15 +245,15 @@ public class EntityTagHeaderValueTest
     {
         var result = EntityTagHeaderValue.ParseList(null);
         Assert.NotNull(result);
-        Assert.Equal(0, result.Count);
+        Assert.Empty(result);
 
         result = EntityTagHeaderValue.ParseList(new string[0]);
         Assert.NotNull(result);
-        Assert.Equal(0, result.Count);
+        Assert.Empty(result);
 
         result = EntityTagHeaderValue.ParseList(new string[] { "" });
         Assert.NotNull(result);
-        Assert.Equal(0, result.Count);
+        Assert.Empty(result);
     }
 
     [Fact]

+ 6 - 6
src/Http/Headers/test/HeaderUtilitiesTest.cs

@@ -90,10 +90,10 @@ public class HeaderUtilitiesTest
     [InlineData("directive1, directive2=80", "directive")]
     [InlineData("directive1=;, directive2=10", "directive1")]
     [InlineData("directive1;directive2=10", "directive2")]
-    public void TryParseSeconds_Fails(string headerValues, string targetValue)
+    public void TryParseSeconds_Fails(string? headerValues, string? targetValue)
     {
         TimeSpan? value;
-        Assert.False(HeaderUtilities.TryParseSeconds(new StringValues(headerValues), targetValue, out value));
+        Assert.False(HeaderUtilities.TryParseSeconds(new StringValues(headerValues), targetValue!, out value));
     }
 
     [Theory]
@@ -168,9 +168,9 @@ public class HeaderUtilitiesTest
     [InlineData("directive1, directive2=80", "directive", false)]
     [InlineData("directive1;, directive2=80", "directive", false)]
     [InlineData("directive1=value;q=0.6;directive2 = 42 ", "directive2", false)]
-    public void ContainsCacheDirective_MatchesExactValue(string headerValues, string targetValue, bool contains)
+    public void ContainsCacheDirective_MatchesExactValue(string? headerValues, string? targetValue, bool contains)
     {
-        Assert.Equal(contains, HeaderUtilities.ContainsCacheDirective(new StringValues(headerValues), targetValue));
+        Assert.Equal(contains, HeaderUtilities.ContainsCacheDirective(new StringValues(headerValues), targetValue!));
     }
 
     [Theory]
@@ -180,7 +180,7 @@ public class HeaderUtilitiesTest
     [InlineData("a")]
     [InlineData("1.1")]
     [InlineData("9223372036854775808")] // long.MaxValue + 1
-    public void TryParseNonNegativeInt64_Fails(string valueString)
+    public void TryParseNonNegativeInt64_Fails(string? valueString)
     {
         long value = 1;
         Assert.False(HeaderUtilities.TryParseNonNegativeInt64(valueString, out value));
@@ -205,7 +205,7 @@ public class HeaderUtilitiesTest
     [InlineData("1.1")]
     [InlineData("1,000")]
     [InlineData("2147483648")] // int.MaxValue + 1
-    public void TryParseNonNegativeInt32_Fails(string valueString)
+    public void TryParseNonNegativeInt32_Fails(string? valueString)
     {
         int value = 1;
         Assert.False(HeaderUtilities.TryParseNonNegativeInt32(valueString, out value));

+ 15 - 15
src/Http/Headers/test/MediaTypeHeaderValueTest.cs

@@ -49,7 +49,7 @@ public class MediaTypeHeaderValueTest
 
     [Theory]
     [MemberData(nameof(MediaTypesWithSuffixes))]
-    public void Ctor_CanParseSuffixedMediaTypes(string mediaType, string expectedSubTypeWithoutSuffix, string expectedSubTypeSuffix)
+    public void Ctor_CanParseSuffixedMediaTypes(string mediaType, string expectedSubTypeWithoutSuffix, string? expectedSubTypeSuffix)
     {
         var result = new MediaTypeHeaderValue(mediaType);
 
@@ -103,7 +103,7 @@ public class MediaTypeHeaderValueTest
     {
         var mediaType = new MediaTypeHeaderValue("text/plain");
         Assert.Equal("text/plain", mediaType.MediaType);
-        Assert.Equal(0, mediaType.Parameters.Count);
+        Assert.Empty(mediaType.Parameters);
         Assert.Null(mediaType.Charset.Value);
     }
 
@@ -113,7 +113,7 @@ public class MediaTypeHeaderValueTest
         var mediaType = new MediaTypeHeaderValue("application/xml", 0.08);
         Assert.Equal(0.08, mediaType.Quality);
         Assert.Equal("application/xml", mediaType.MediaType);
-        Assert.Equal(1, mediaType.Parameters.Count);
+        Assert.Single(mediaType.Parameters);
     }
 
     [Fact]
@@ -233,12 +233,12 @@ public class MediaTypeHeaderValueTest
         var mediaType = new MediaTypeHeaderValue("text/plain");
         mediaType.Charset = "mycharset";
         Assert.Equal("mycharset", mediaType.Charset);
-        Assert.Equal(1, mediaType.Parameters.Count);
+        Assert.Single(mediaType.Parameters);
         Assert.Equal("charset", mediaType.Parameters.First().Name);
 
         mediaType.Charset = null;
         Assert.Null(mediaType.Charset.Value);
-        Assert.Equal(0, mediaType.Parameters.Count);
+        Assert.Empty(mediaType.Parameters);
         mediaType.Charset = null; // It's OK to set it again to null; no exception.
     }
 
@@ -250,12 +250,12 @@ public class MediaTypeHeaderValueTest
         // Note that uppercase letters are used. Comparison should happen case-insensitive.
         var charset = new NameValueHeaderValue("CHARSET", "old_charset");
         mediaType.Parameters.Add(charset);
-        Assert.Equal(1, mediaType.Parameters.Count);
+        Assert.Single(mediaType.Parameters);
         Assert.Equal("CHARSET", mediaType.Parameters.First().Name);
 
         mediaType.Charset = "new_charset";
         Assert.Equal("new_charset", mediaType.Charset);
-        Assert.Equal(1, mediaType.Parameters.Count);
+        Assert.Single(mediaType.Parameters);
         Assert.Equal("CHARSET", mediaType.Parameters.First().Name);
 
         mediaType.Parameters.Remove(charset);
@@ -268,13 +268,13 @@ public class MediaTypeHeaderValueTest
         var mediaType = new MediaTypeHeaderValue("text/plain");
         mediaType.Quality = 0.563156454;
         Assert.Equal(0.563, mediaType.Quality);
-        Assert.Equal(1, mediaType.Parameters.Count);
+        Assert.Single(mediaType.Parameters);
         Assert.Equal("q", mediaType.Parameters.First().Name);
         Assert.Equal("0.563", mediaType.Parameters.First().Value);
 
         mediaType.Quality = null;
         Assert.Null(mediaType.Quality);
-        Assert.Equal(0, mediaType.Parameters.Count);
+        Assert.Empty(mediaType.Parameters);
         mediaType.Quality = null; // It's OK to set it again to null; no exception.
     }
 
@@ -285,13 +285,13 @@ public class MediaTypeHeaderValueTest
 
         var quality = new NameValueHeaderValue("q", "0.132");
         mediaType.Parameters.Add(quality);
-        Assert.Equal(1, mediaType.Parameters.Count);
+        Assert.Single(mediaType.Parameters);
         Assert.Equal("q", mediaType.Parameters.First().Name);
         Assert.Equal(0.132, mediaType.Quality);
 
         mediaType.Quality = 0.9;
         Assert.Equal(0.9, mediaType.Quality);
-        Assert.Equal(1, mediaType.Parameters.Count);
+        Assert.Single(mediaType.Parameters);
         Assert.Equal("q", mediaType.Parameters.First().Name);
 
         mediaType.Parameters.Remove(quality);
@@ -305,7 +305,7 @@ public class MediaTypeHeaderValueTest
 
         var quality = new NameValueHeaderValue("Q", "0.132");
         mediaType.Parameters.Add(quality);
-        Assert.Equal(1, mediaType.Parameters.Count);
+        Assert.Single(mediaType.Parameters);
         Assert.Equal("Q", mediaType.Parameters.First().Name);
         Assert.Equal(0.132, mediaType.Quality);
     }
@@ -518,15 +518,15 @@ public class MediaTypeHeaderValueTest
     {
         var results = MediaTypeHeaderValue.ParseList(null);
         Assert.NotNull(results);
-        Assert.Equal(0, results.Count);
+        Assert.Empty(results);
 
         results = MediaTypeHeaderValue.ParseList(new string[0]);
         Assert.NotNull(results);
-        Assert.Equal(0, results.Count);
+        Assert.Empty(results);
 
         results = MediaTypeHeaderValue.ParseList(new string[] { "" });
         Assert.NotNull(results);
-        Assert.Equal(0, results.Count);
+        Assert.Empty(results);
     }
 
     [Fact]

+ 2 - 2
src/Http/Headers/test/RangeConditionHeaderValueTest.cs

@@ -115,7 +115,7 @@ public class RangeConditionHeaderValueTest
     [InlineData("W/Wed 09 Nov 1994 08:49:37 GMT")]
     [InlineData("\"x\",")]
     [InlineData("Wed 09 Nov 1994 08:49:37 GMT,")]
-    public void Parse_SetOfInvalidValueStrings_Throws(string input)
+    public void Parse_SetOfInvalidValueStrings_Throws(string? input)
     {
         Assert.Throws<FormatException>(() => RangeConditionHeaderValue.Parse(input));
     }
@@ -144,7 +144,7 @@ public class RangeConditionHeaderValueTest
     [InlineData("W/Wed 09 Nov 1994 08:49:37 GMT")]
     [InlineData("\"x\",")]
     [InlineData("Wed 09 Nov 1994 08:49:37 GMT,")]
-    public void TryParse_SetOfInvalidValueStrings_ReturnsFalse(string input)
+    public void TryParse_SetOfInvalidValueStrings_ReturnsFalse(string? input)
     {
         Assert.False(RangeConditionHeaderValue.TryParse(input, out var result));
         Assert.Null(result);

+ 1 - 1
src/Http/Headers/test/RangeItemHeaderValueTest.cs

@@ -119,7 +119,7 @@ public class RangeItemHeaderValueTest
     [InlineData("-12345678901234567890123")] // >>Int64.MaxValue
     [InlineData("9999999999999999999-")] // 19-digit numbers outside the Int64 range.
     [InlineData("-9999999999999999999")] // 19-digit numbers outside the Int64 range.
-    public void TryParse_DifferentInvalidScenarios_AllReturnFalse(string input)
+    public void TryParse_DifferentInvalidScenarios_AllReturnFalse(string? input)
     {
         RangeHeaderValue? result;
         Assert.False(RangeHeaderValue.TryParse("byte=" + input, out result));

+ 4 - 4
src/Http/Headers/test/SetCookieHeaderValueTest.cs

@@ -447,7 +447,7 @@ public class SetCookieHeaderValueTest
 
     [Theory]
     [MemberData(nameof(ListWithInvalidSetCookieHeaderDataSet))]
-    public void SetCookieHeaderValue_ParseList_ExcludesInvalidValues(IList<SetCookieHeaderValue> cookies, string[] input)
+    public void SetCookieHeaderValue_ParseList_ExcludesInvalidValues(IList<SetCookieHeaderValue>? cookies, string[] input)
     {
         var results = SetCookieHeaderValue.ParseList(input);
         // ParseList always returns a list, even if empty. TryParseList may return null (via out).
@@ -456,7 +456,7 @@ public class SetCookieHeaderValueTest
 
     [Theory]
     [MemberData(nameof(ListWithInvalidSetCookieHeaderDataSet))]
-    public void SetCookieHeaderValue_TryParseList_ExcludesInvalidValues(IList<SetCookieHeaderValue> cookies, string[] input)
+    public void SetCookieHeaderValue_TryParseList_ExcludesInvalidValues(IList<SetCookieHeaderValue>? cookies, string[] input)
     {
         bool result = SetCookieHeaderValue.TryParseList(input, out var results);
         Assert.Equal(cookies, results);
@@ -467,7 +467,7 @@ public class SetCookieHeaderValueTest
     [MemberData(nameof(ListWithInvalidSetCookieHeaderDataSet))]
     public void SetCookieHeaderValue_ParseStrictList_ThrowsForAnyInvalidValues(
 #pragma warning disable xUnit1026 // Theory methods should use all of their parameters
-            IList<SetCookieHeaderValue> cookies,
+            IList<SetCookieHeaderValue>? cookies,
 #pragma warning restore xUnit1026 // Theory methods should use all of their parameters
             string[] input)
     {
@@ -478,7 +478,7 @@ public class SetCookieHeaderValueTest
     [MemberData(nameof(ListWithInvalidSetCookieHeaderDataSet))]
     public void SetCookieHeaderValue_TryParseStrictList_FailsForAnyInvalidValues(
 #pragma warning disable xUnit1026 // Theory methods should use all of their parameters
-            IList<SetCookieHeaderValue> cookies,
+            IList<SetCookieHeaderValue>? cookies,
 #pragma warning restore xUnit1026 // Theory methods should use all of their parameters
             string[] input)
     {

+ 1 - 1
src/Http/Headers/test/StringWithQualityHeaderValueTest.cs

@@ -156,7 +156,7 @@ public class StringWithQualityHeaderValueTest
     [InlineData("decimal_part_too_long;q=0.123456789")]
     [InlineData("decimal_part_too_long;q=0.123456789 ")]
     [InlineData("no_integer_part;q=.1")]
-    public void Parse_SetOfInvalidValueStrings_Throws(string input)
+    public void Parse_SetOfInvalidValueStrings_Throws(string? input)
     {
         Assert.Throws<FormatException>(() => StringWithQualityHeaderValue.Parse(input));
     }

+ 1 - 1
src/Http/Http.Abstractions/src/Metadata/IStatusCodePagesMetadata.cs → src/Http/Http.Abstractions/src/Metadata/ISkipStatusCodePagesMetadata.cs

@@ -9,4 +9,4 @@ namespace Microsoft.AspNetCore.Http.Metadata;
 /// </summary>
 public interface ISkipStatusCodePagesMetadata
 {
-}
+}

+ 1 - 1
src/Http/Http.Abstractions/test/HostStringTest.cs

@@ -27,7 +27,7 @@ public class HostStringTests
     [InlineData("1.2.3.4:5000", "1.2.3.4")]
     [InlineData("[2001:db8:a0b:12f0::1]:5000", "[2001:db8:a0b:12f0::1]")]
     [InlineData("本地主機:5000", "本地主機")]
-    public void Domain_ExtractsHostFromValue(string sourceValue, string expectedDomain)
+    public void Domain_ExtractsHostFromValue(string? sourceValue, string expectedDomain)
     {
         // Arrange
         var hostString = new HostString(sourceValue);

+ 2 - 2
src/Http/Http.Abstractions/test/PathStringTests.cs

@@ -57,7 +57,7 @@ public class PathStringTests
     [Theory]
     [InlineData(null, null)]
     [InlineData("", null)]
-    public void AddPathString_HandlesNullAndEmptyStrings(string appString, string concatString)
+    public void AddPathString_HandlesNullAndEmptyStrings(string? appString, string? concatString)
     {
         // Arrange
         var appPath = new PathString(appString);
@@ -77,7 +77,7 @@ public class PathStringTests
     [InlineData("/", "/test", "/test")]
     [InlineData("/myapp/", "/test/bar", "/myapp/test/bar")]
     [InlineData("/myapp/", "/test/bar/", "/myapp/test/bar/")]
-    public void AddPathString_HandlesLeadingAndTrailingSlashes(string appString, string concatString, string expected)
+    public void AddPathString_HandlesLeadingAndTrailingSlashes(string appString, string? concatString, string expected)
     {
         // Arrange
         var appPath = new PathString(appString);

+ 5 - 5
src/Http/Http.Abstractions/test/QueryStringTests.cs

@@ -54,9 +54,9 @@ public class QueryStringTests
     [InlineData("", "value", "?=value")]
     [InlineData("", "", "?=")]
     [InlineData("", null, "?=")]
-    public void CreateNameValue_Success(string name, string value, string expected)
+    public void CreateNameValue_Success(string name, string? value, string expected)
     {
-        var query = QueryString.Create(name, value);
+        var query = QueryString.Create(name, value!);
         Assert.Equal(expected, query.Value);
     }
 
@@ -98,7 +98,7 @@ public class QueryStringTests
     [InlineData("?name1=value1", "", "?name1=value1")]
     [InlineData("?name1=value1", "?", "?name1=value1")]
     [InlineData("?name1=value1", "?name2=value2", "?name1=value1&name2=value2")]
-    public void AddQueryString_Success(string query1, string query2, string expected)
+    public void AddQueryString_Success(string? query1, string? query2, string? expected)
     {
         var q1 = new QueryString(query1);
         var q2 = new QueryString(query2);
@@ -120,10 +120,10 @@ public class QueryStringTests
     [InlineData("?name1=value1", "", null, "?name1=value1&=")]
     [InlineData("?name1=value1", "name2", "", "?name1=value1&name2=")]
     [InlineData("?name1=value1", "name2", null, "?name1=value1&name2=")]
-    public void AddNameValue_Success(string query1, string name2, string value2, string expected)
+    public void AddNameValue_Success(string query1, string name2, string? value2, string expected)
     {
         var q1 = new QueryString(query1);
-        var q2 = q1.Add(name2, value2);
+        var q2 = q1.Add(name2, value2!);
         Assert.Equal(expected, q2.Value);
     }
 

+ 1 - 1
src/Http/Http.Abstractions/test/UsePathBaseExtensionsTests.cs

@@ -13,7 +13,7 @@ public class UsePathBaseExtensionsTests
     [InlineData(null)]
     [InlineData("")]
     [InlineData("/")]
-    public void EmptyOrNullPathBase_DoNotAddMiddleware(string pathBase)
+    public void EmptyOrNullPathBase_DoNotAddMiddleware(string? pathBase)
     {
         // Arrange
         var useCalled = false;

+ 5 - 0
src/Http/Http.Extensions/src/RequestDelegateFactory.cs

@@ -543,6 +543,11 @@ public static partial class RequestDelegateFactory
             }
         }
 
+        if (returnType.IsValueType)
+        {
+            return Expression.Call(WrapObjectAsValueTaskMethod, Expression.Convert(methodCall, typeof(object)));
+        }
+
         return Expression.Call(WrapObjectAsValueTaskMethod, methodCall);
     }
 

+ 1 - 1
src/Http/Http.Extensions/test/HttpRequestJsonExtensionsTests.cs

@@ -23,7 +23,7 @@ public class HttpRequestJsonExtensionsTests
     [InlineData("APPLICATION/JSON", true)]
     [InlineData("APPLICATION/JSON; CHARSET=UTF-8", true)]
     [InlineData("APPLICATION/LD+JSON", true)]
-    public void HasJsonContentType(string contentType, bool hasJsonContentType)
+    public void HasJsonContentType(string? contentType, bool hasJsonContentType)
     {
         var request = new DefaultHttpContext().Request;
         request.ContentType = contentType;

+ 98 - 0
src/Http/Http.Extensions/test/RequestDelegateFactoryTests.EndpointFilters.cs

@@ -0,0 +1,98 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.InternalTesting;
+
+namespace Microsoft.AspNetCore.Routing.Internal;
+
+public partial class RequestDelegateFactoryTests : LoggedTest
+{
+    public static object[][] ValueTypeReturningDelegates =>
+    [
+        [(Func<HttpContext, int>)((HttpContext httpContext) => 42)],
+        [(Func<HttpContext, char>)((HttpContext httpContext) => 'b')],
+        [(Func<HttpContext, bool>)((HttpContext httpContext) => true)],
+        [(Func<HttpContext, float>)((HttpContext httpContext) => 4.2f)],
+        [(Func<HttpContext, double>)((HttpContext httpContext) => 4.2)],
+        [(Func<HttpContext, decimal>)((HttpContext httpContext) => 4.2m)],
+        [(Func<HttpContext, long>)((HttpContext httpContext) => 42)],
+        [(Func<HttpContext, short>)((HttpContext httpContext) => 42)],
+        [(Func<HttpContext, byte>)((HttpContext httpContext) => 42)],
+        [(Func<HttpContext, uint>)((HttpContext httpContext) => 42)],
+        [(Func<HttpContext, ulong>)((HttpContext httpContext) => 42)],
+        [(Func<HttpContext, ushort>)((HttpContext httpContext) => 42)],
+        [(Func<HttpContext, sbyte>)((HttpContext httpContext) => 42)]
+    ];
+
+    [Theory]
+    [MemberData(nameof(ValueTypeReturningDelegates))]
+    public void Create_WithEndpointFilterOnBuiltInValueTypeReturningDelegate_Works(Delegate @delegate)
+    {
+        var invokeCount = 0;
+
+        RequestDelegateFactoryOptions options = new()
+        {
+            EndpointBuilder = CreateEndpointBuilderFromFilterFactories(
+            [
+                (routeHandlerContext, next) =>
+                {
+                    invokeCount++;
+                    return next;
+                },
+                (routeHandlerContext, next) =>
+                {
+                    invokeCount++;
+                    return next;
+                },
+            ]),
+        };
+
+        var result = RequestDelegateFactory.Create(@delegate, options);
+        Assert.Equal(2, invokeCount);
+    }
+
+    public static object[][] NullableValueTypeReturningDelegates =>
+    [
+        [(Func<HttpContext, int?>)((HttpContext httpContext) => 42)],
+        [(Func<HttpContext, char?>)((HttpContext httpContext) => 'b')],
+        [(Func<HttpContext, bool?>)((HttpContext httpContext) => true)],
+        [(Func<HttpContext, float?>)((HttpContext httpContext) => 4.2f)],
+        [(Func<HttpContext, double?>)((HttpContext httpContext) => 4.2)],
+        [(Func<HttpContext, decimal?>)((HttpContext httpContext) => 4.2m)],
+        [(Func<HttpContext, long?>)((HttpContext httpContext) => 42)],
+        [(Func<HttpContext, short?>)((HttpContext httpContext) => 42)],
+        [(Func<HttpContext, byte?>)((HttpContext httpContext) => 42)],
+        [(Func<HttpContext, uint?>)((HttpContext httpContext) => 42)],
+        [(Func<HttpContext, ulong?>)((HttpContext httpContext) => 42)],
+        [(Func<HttpContext, ushort?>)((HttpContext httpContext) => 42)],
+        [(Func<HttpContext, sbyte?>)((HttpContext httpContext) => 42)]
+    ];
+
+    [Theory]
+    [MemberData(nameof(NullableValueTypeReturningDelegates))]
+    public void Create_WithEndpointFilterOnNullableBuiltInValueTypeReturningDelegate_Works(Delegate @delegate)
+    {
+        var invokeCount = 0;
+
+        RequestDelegateFactoryOptions options = new()
+        {
+            EndpointBuilder = CreateEndpointBuilderFromFilterFactories(
+            [
+                (routeHandlerContext, next) =>
+                {
+                    invokeCount++;
+                    return next;
+                },
+                (routeHandlerContext, next) =>
+                {
+                    invokeCount++;
+                    return next;
+                },
+            ]),
+        };
+
+        var result = RequestDelegateFactory.Create(@delegate, options);
+        Assert.Equal(2, invokeCount);
+    }
+}

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