diff --git a/src/SourceBuild/content/eng/Version.Details.xml b/src/SourceBuild/content/eng/Version.Details.xml
index c804e3b53f98..28c92659c573 100644
--- a/src/SourceBuild/content/eng/Version.Details.xml
+++ b/src/SourceBuild/content/eng/Version.Details.xml
@@ -2,13 +2,13 @@
-
+
https://github.com/dotnet/arcade
- 1560b3406a8ebf9e267f7a1dddbf5238dd378081
+ 3fddad170a95109a19a1fee78a83a87cd2e2bb79
https://github.com/dotnet/arcade
- 1560b3406a8ebf9e267f7a1dddbf5238dd378081
+ 3fddad170a95109a19a1fee78a83a87cd2e2bb79
diff --git a/src/SourceBuild/content/eng/Versions.props b/src/SourceBuild/content/eng/Versions.props
index 6b1f0a0bc63f..99cea19ffe89 100644
--- a/src/SourceBuild/content/eng/Versions.props
+++ b/src/SourceBuild/content/eng/Versions.props
@@ -23,8 +23,8 @@
of a .NET major or minor release, prebuilts may be needed. When the release is mature, prebuilts
are not necessary, and this property is removed from the file.
-->
- 10.0.100-preview.4.25178.1
- 10.0.100-preview.4.25178.1
+ 10.0.100-preview.4.25203.1
+ 10.0.100-preview.4.25203.1
10.0.0-beta.25110.3
diff --git a/src/SourceBuild/content/global.json b/src/SourceBuild/content/global.json
index ea20daa2d5f0..efaa4d9fb549 100644
--- a/src/SourceBuild/content/global.json
+++ b/src/SourceBuild/content/global.json
@@ -1,10 +1,10 @@
{
"tools": {
- "dotnet": "10.0.100-preview.4.25177.22"
+ "dotnet": "10.0.100-preview.4.25203.20"
},
"msbuild-sdks": {
"Microsoft.Build.NoTargets": "3.7.0",
"Microsoft.Build.Traversal": "3.4.0",
- "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.25175.4"
+ "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.25202.1"
}
}
diff --git a/src/SourceBuild/patches/aspnetcore/0001-IDE0031-fixes.patch b/src/SourceBuild/patches/aspnetcore/0001-IDE0031-fixes.patch
new file mode 100644
index 000000000000..cdfc5c9faa7a
--- /dev/null
+++ b/src/SourceBuild/patches/aspnetcore/0001-IDE0031-fixes.patch
@@ -0,0 +1,294 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: "Nikola Milosavljevic (CLR) false"
+Date: Mon, 7 Apr 2025 19:28:29 -0700
+Subject: [PATCH] IDE0031 fixes
+
+Backport: https://github.com/dotnet/aspnetcore/pull/61244
+---
+ src/Components/Server/src/Circuits/CircuitHost.cs | 5 +----
+ .../Hosting/src/Http/DefaultHttpContextFactory.cs | 15 +++------------
+ src/Http/Http/src/HttpContextAccessor.cs | 8 ++------
+ src/Middleware/Rewrite/src/RewriteMiddleware.cs | 6 +-----
+ .../src/UrlActions/CustomResponseAction.cs | 7 ++-----
+ .../StaticFiles/src/StaticFileContext.cs | 6 +-----
+ .../ModelBinding/Validation/ValidationVisitor.cs | 7 +------
+ .../src/Filters/SaveTempDataFilter.cs | 13 ++-----------
+ .../src/SkipStatusCodePagesAttribute.cs | 8 ++------
+ .../Negotiate/src/NegotiateHandler.cs | 5 +----
+ .../HttpSys/src/RequestProcessing/Request.cs | 5 +----
+ .../HttpSys/src/RequestProcessing/Response.cs | 5 +----
+ src/Shared/HttpExtensions.cs | 6 +-----
+ .../dotnet-user-jwts/src/Helpers/JwtStore.cs | 5 +----
+ 14 files changed, 20 insertions(+), 81 deletions(-)
+
+diff --git a/src/Components/Server/src/Circuits/CircuitHost.cs b/src/Components/Server/src/Circuits/CircuitHost.cs
+index 66c636ba01..3a9bea6bd8 100644
+--- a/src/Components/Server/src/Circuits/CircuitHost.cs
++++ b/src/Components/Server/src/Circuits/CircuitHost.cs
+@@ -828,10 +828,7 @@ internal partial class CircuitHost : IAsyncDisposable
+ operation.Descriptor.ComponentType,
+ operation.Marker.Value.Key,
+ operation.Descriptor.Parameters);
+- if (pendingTasks != null)
+- {
+- pendingTasks[i] = task;
+- }
++ pendingTasks?[i] = task;
+ break;
+ case RootComponentOperationType.Update:
+ // We don't need to await component updates as any unhandled exception will be reported and terminate the circuit.
+diff --git a/src/Hosting/Hosting/src/Http/DefaultHttpContextFactory.cs b/src/Hosting/Hosting/src/Http/DefaultHttpContextFactory.cs
+index a5b6541b0f..d087dc54d9 100644
+--- a/src/Hosting/Hosting/src/Http/DefaultHttpContextFactory.cs
++++ b/src/Hosting/Hosting/src/Http/DefaultHttpContextFactory.cs
+@@ -58,10 +58,7 @@ public class DefaultHttpContextFactory : IHttpContextFactory
+
+ httpContext.Initialize(featureCollection);
+
+- if (_httpContextAccessor != null)
+- {
+- _httpContextAccessor.HttpContext = httpContext;
+- }
++ _httpContextAccessor?.HttpContext = httpContext;
+
+ httpContext.FormOptions = _formOptions;
+ httpContext.ServiceScopeFactory = _serviceScopeFactory;
+@@ -72,18 +69,12 @@ public class DefaultHttpContextFactory : IHttpContextFactory
+ ///
+ public void Dispose(HttpContext httpContext)
+ {
+- if (_httpContextAccessor != null)
+- {
+- _httpContextAccessor.HttpContext = null;
+- }
++ _httpContextAccessor?.HttpContext = null;
+ }
+
+ internal void Dispose(DefaultHttpContext httpContext)
+ {
+- if (_httpContextAccessor != null)
+- {
+- _httpContextAccessor.HttpContext = null;
+- }
++ _httpContextAccessor?.HttpContext = null;
+
+ httpContext.Uninitialize();
+ }
+diff --git a/src/Http/Http/src/HttpContextAccessor.cs b/src/Http/Http/src/HttpContextAccessor.cs
+index f71a6ef7c0..d306a8dbeb 100644
+--- a/src/Http/Http/src/HttpContextAccessor.cs
++++ b/src/Http/Http/src/HttpContextAccessor.cs
+@@ -22,12 +22,8 @@ public class HttpContextAccessor : IHttpContextAccessor
+ }
+ set
+ {
+- var holder = _httpContextCurrent.Value;
+- if (holder != null)
+- {
+- // Clear current HttpContext trapped in the AsyncLocals, as its done.
+- holder.Context = null;
+- }
++ // Clear current HttpContext trapped in the AsyncLocals, as its done.
++ _httpContextCurrent.Value?.Context = null;
+
+ if (value != null)
+ {
+diff --git a/src/Middleware/Rewrite/src/RewriteMiddleware.cs b/src/Middleware/Rewrite/src/RewriteMiddleware.cs
+index d76ea33d21..7dcd2ca11b 100644
+--- a/src/Middleware/Rewrite/src/RewriteMiddleware.cs
++++ b/src/Middleware/Rewrite/src/RewriteMiddleware.cs
+@@ -77,11 +77,7 @@ public class RewriteMiddleware
+ // An endpoint may have already been set. Since we're going to re-invoke the middleware pipeline we need to reset
+ // the endpoint and route values to ensure things are re-calculated.
+ context.SetEndpoint(endpoint: null);
+- var routeValuesFeature = context.Features.Get();
+- if (routeValuesFeature is not null)
+- {
+- routeValuesFeature.RouteValues = null!;
+- }
++ context.Features.Get()?.RouteValues = null!;
+ return _options.BranchedNext(context);
+ }
+ }
+diff --git a/src/Middleware/Rewrite/src/UrlActions/CustomResponseAction.cs b/src/Middleware/Rewrite/src/UrlActions/CustomResponseAction.cs
+index 4c29d034ae..3954db7a70 100644
+--- a/src/Middleware/Rewrite/src/UrlActions/CustomResponseAction.cs
++++ b/src/Middleware/Rewrite/src/UrlActions/CustomResponseAction.cs
+@@ -31,11 +31,8 @@ internal sealed class CustomResponseAction : UrlAction
+
+ if (!string.IsNullOrEmpty(StatusDescription))
+ {
+- var feature = context.HttpContext.Features.Get();
+- if (feature != null)
+- {
+- feature.AllowSynchronousIO = true;
+- }
++ context.HttpContext.Features.Get()?.AllowSynchronousIO = true;
++
+ var content = Encoding.UTF8.GetBytes(StatusDescription);
+ response.ContentLength = content.Length;
+ response.ContentType = "text/plain; charset=utf-8";
+diff --git a/src/Middleware/StaticFiles/src/StaticFileContext.cs b/src/Middleware/StaticFiles/src/StaticFileContext.cs
+index 69e8d8c595..48bd869249 100644
+--- a/src/Middleware/StaticFiles/src/StaticFileContext.cs
++++ b/src/Middleware/StaticFiles/src/StaticFileContext.cs
+@@ -407,11 +407,7 @@ internal struct StaticFileContext
+ // Only called when we expect to serve the body.
+ private void SetCompressionMode()
+ {
+- var responseCompressionFeature = _context.Features.Get();
+- if (responseCompressionFeature != null)
+- {
+- responseCompressionFeature.Mode = _options.HttpsCompression;
+- }
++ _context.Features.Get()?.Mode = _options.HttpsCompression;
+ }
+
+ internal enum PreconditionState : byte
+diff --git a/src/Mvc/Mvc.Core/src/ModelBinding/Validation/ValidationVisitor.cs b/src/Mvc/Mvc.Core/src/ModelBinding/Validation/ValidationVisitor.cs
+index 68c71a5e48..48e1580609 100644
+--- a/src/Mvc/Mvc.Core/src/ModelBinding/Validation/ValidationVisitor.cs
++++ b/src/Mvc/Mvc.Core/src/ModelBinding/Validation/ValidationVisitor.cs
+@@ -248,12 +248,7 @@ public class ValidationVisitor
+ {
+ // If the field has an entry in ModelState, then record it as valid. Don't create
+ // extra entries if they don't exist already.
+- var entry = ModelState[Key];
+- if (entry != null)
+- {
+- entry.ValidationState = ModelValidationState.Valid;
+- }
+-
++ ModelState[Key]?.ValidationState = ModelValidationState.Valid;
+ return true;
+ }
+ }
+diff --git a/src/Mvc/Mvc.ViewFeatures/src/Filters/SaveTempDataFilter.cs b/src/Mvc/Mvc.ViewFeatures/src/Filters/SaveTempDataFilter.cs
+index 2da398ae0e..20e78949b6 100644
+--- a/src/Mvc/Mvc.ViewFeatures/src/Filters/SaveTempDataFilter.cs
++++ b/src/Mvc/Mvc.ViewFeatures/src/Filters/SaveTempDataFilter.cs
+@@ -83,11 +83,7 @@ internal sealed class SaveTempDataFilter : IResourceFilter, IResultFilter
+ // not be available.
+ if (!context.HttpContext.Response.HasStarted && context.Exception != null)
+ {
+- var saveTempDataContext = GetTempDataContext(context.HttpContext);
+- if (saveTempDataContext != null)
+- {
+- saveTempDataContext.RequestHasUnhandledException = true;
+- }
++ GetTempDataContext(context.HttpContext)?.RequestHasUnhandledException = true;
+ }
+ }
+
+@@ -105,12 +101,7 @@ internal sealed class SaveTempDataFilter : IResourceFilter, IResultFilter
+ if (!context.HttpContext.Response.HasStarted)
+ {
+ SaveTempData(context.Result, _factory, context.Filters, context.HttpContext);
+-
+- var saveTempDataContext = GetTempDataContext(context.HttpContext);
+- if (saveTempDataContext != null)
+- {
+- saveTempDataContext.TempDataSaved = true;
+- }
++ GetTempDataContext(context.HttpContext)?.TempDataSaved = true;
+ }
+ }
+
+diff --git a/src/Mvc/Mvc.ViewFeatures/src/SkipStatusCodePagesAttribute.cs b/src/Mvc/Mvc.ViewFeatures/src/SkipStatusCodePagesAttribute.cs
+index c0abec8fa2..ebf3a237b9 100644
+--- a/src/Mvc/Mvc.ViewFeatures/src/SkipStatusCodePagesAttribute.cs
++++ b/src/Mvc/Mvc.ViewFeatures/src/SkipStatusCodePagesAttribute.cs
+@@ -23,11 +23,7 @@ public class SkipStatusCodePagesAttribute : Attribute, IResourceFilter, ISkipSta
+ {
+ ArgumentNullException.ThrowIfNull(context);
+
+- var statusCodeFeature = context.HttpContext.Features.Get();
+- if (statusCodeFeature != null)
+- {
+- // Turn off the StatusCodePages feature.
+- statusCodeFeature.Enabled = false;
+- }
++ // Turn off the StatusCodePages feature.
++ context.HttpContext.Features.Get()?.Enabled = false;
+ }
+ }
+diff --git a/src/Security/Authentication/Negotiate/src/NegotiateHandler.cs b/src/Security/Authentication/Negotiate/src/NegotiateHandler.cs
+index b1909d52cc..ace6899428 100644
+--- a/src/Security/Authentication/Negotiate/src/NegotiateHandler.cs
++++ b/src/Security/Authentication/Negotiate/src/NegotiateHandler.cs
+@@ -126,10 +126,7 @@ public class NegotiateHandler : AuthenticationHandler, IAuthen
+ Logger.Reauthenticating();
+ _negotiateState.Dispose();
+ _negotiateState = null;
+- if (persistence != null)
+- {
+- persistence.State = null;
+- }
++ persistence?.State = null;
+ }
+
+ _negotiateState ??= Options.StateFactory.CreateInstance();
+diff --git a/src/Servers/HttpSys/src/RequestProcessing/Request.cs b/src/Servers/HttpSys/src/RequestProcessing/Request.cs
+index b32a973a5f..8e4babf7ca 100644
+--- a/src/Servers/HttpSys/src/RequestProcessing/Request.cs
++++ b/src/Servers/HttpSys/src/RequestProcessing/Request.cs
+@@ -264,10 +264,7 @@ internal sealed partial class Request
+ set
+ {
+ EnsureRequestStream();
+- if (_nativeStream != null)
+- {
+- _nativeStream.MaxSize = value;
+- }
++ _nativeStream?.MaxSize = value;
+ }
+ }
+
+diff --git a/src/Servers/HttpSys/src/RequestProcessing/Response.cs b/src/Servers/HttpSys/src/RequestProcessing/Response.cs
+index f2f550544e..541199729a 100644
+--- a/src/Servers/HttpSys/src/RequestProcessing/Response.cs
++++ b/src/Servers/HttpSys/src/RequestProcessing/Response.cs
+@@ -186,10 +186,7 @@ internal sealed class Response
+ // callers if they try to add them too late. E.g. after Content-Length or CompleteAsync().
+ internal void MakeTrailersReadOnly()
+ {
+- if (_trailers != null)
+- {
+- _trailers.IsReadOnly = true;
+- }
++ _trailers?.IsReadOnly = true;
+ }
+
+ internal void Abort()
+diff --git a/src/Shared/HttpExtensions.cs b/src/Shared/HttpExtensions.cs
+index 4a0d50de25..3e2bde30e8 100644
+--- a/src/Shared/HttpExtensions.cs
++++ b/src/Shared/HttpExtensions.cs
+@@ -58,10 +58,6 @@ internal static class HttpExtensions
+ context.SetEndpoint(endpoint: null);
+ }
+
+- var routeValuesFeature = context.Features.Get();
+- if (routeValuesFeature != null)
+- {
+- routeValuesFeature.RouteValues = null!;
+- }
++ context.Features.Get()?.RouteValues = null!;
+ }
+ }
+diff --git a/src/Tools/dotnet-user-jwts/src/Helpers/JwtStore.cs b/src/Tools/dotnet-user-jwts/src/Helpers/JwtStore.cs
+index 79ca7f05c9..d32affe119 100644
+--- a/src/Tools/dotnet-user-jwts/src/Helpers/JwtStore.cs
++++ b/src/Tools/dotnet-user-jwts/src/Helpers/JwtStore.cs
+@@ -18,10 +18,7 @@ public class JwtStore
+ Load();
+
+ // For testing.
+- if (program is not null)
+- {
+- program.UserJwtsFilePath = _filePath;
+- }
++ program?.UserJwtsFilePath = _filePath;
+ }
+
+ public IDictionary Jwts { get; private set; } = new Dictionary();
diff --git a/src/SourceBuild/patches/winforms/0001-Suppress-IDE0031-warnings-in-VMR.patch b/src/SourceBuild/patches/winforms/0001-Suppress-IDE0031-warnings-in-VMR.patch
new file mode 100644
index 000000000000..d59c7d53336c
--- /dev/null
+++ b/src/SourceBuild/patches/winforms/0001-Suppress-IDE0031-warnings-in-VMR.patch
@@ -0,0 +1,37 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: "Nikola Milosavljevic (CLR) false"
+Date: Mon, 7 Apr 2025 19:53:52 -0700
+Subject: [PATCH] Suppress IDE0031 warnings in VMR
+
+Backport: https://github.com/dotnet/winforms/pull/13260
+---
+ .../src/System.Private.Windows.Core.csproj | 2 ++
+ src/System.Windows.Forms/System.Windows.Forms.csproj | 2 ++
+ 2 files changed, 4 insertions(+)
+
+diff --git a/src/System.Private.Windows.Core/src/System.Private.Windows.Core.csproj b/src/System.Private.Windows.Core/src/System.Private.Windows.Core.csproj
+index a57794cc6..e45a43938 100644
+--- a/src/System.Private.Windows.Core/src/System.Private.Windows.Core.csproj
++++ b/src/System.Private.Windows.Core/src/System.Private.Windows.Core.csproj
+@@ -21,6 +21,8 @@
+ SYSLIB5005: System.Formats.Nrbf is experimental
+ -->
+ $(NoWarn);CS3016;SYSLIB5005
++
++ $(NoWarn);IDE0031
+ true
+ true
+ false
+diff --git a/src/System.Windows.Forms/System.Windows.Forms.csproj b/src/System.Windows.Forms/System.Windows.Forms.csproj
+index 7c7a32335..fd2949433 100644
+--- a/src/System.Windows.Forms/System.Windows.Forms.csproj
++++ b/src/System.Windows.Forms/System.Windows.Forms.csproj
+@@ -15,6 +15,8 @@
+ SYSLIB5005: System.Formats.Nrbf is experimental
+ -->
+ $(NoWarn);SYSLIB5005
++
++ $(NoWarn);IDE0031
+ Resources\System\Windows\Forms\XPThemes.manifest
+ true
+ true
diff --git a/src/SourceBuild/patches/winforms/0002-Suppress-IDE0031-warnings-more.patch b/src/SourceBuild/patches/winforms/0002-Suppress-IDE0031-warnings-more.patch
new file mode 100644
index 000000000000..efbac19bbdad
--- /dev/null
+++ b/src/SourceBuild/patches/winforms/0002-Suppress-IDE0031-warnings-more.patch
@@ -0,0 +1,24 @@
+From 6bc59e27382c765d92731e2994a2e38ddea81895 Mon Sep 17 00:00:00 2001
+From: Viktor Hofer
+Date: Tue, 8 Apr 2025 12:15:49 +0200
+Subject: [PATCH] Update System.Windows.Forms.Design.csproj
+
+Backport: https://github.com/dotnet/winforms/pull/13265
+
+---
+ .../src/System.Windows.Forms.Design.csproj | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/src/System.Windows.Forms.Design/src/System.Windows.Forms.Design.csproj b/src/System.Windows.Forms.Design/src/System.Windows.Forms.Design.csproj
+index 8257230b1d1..fa028d37515 100644
+--- a/src/System.Windows.Forms.Design/src/System.Windows.Forms.Design.csproj
++++ b/src/System.Windows.Forms.Design/src/System.Windows.Forms.Design.csproj
+@@ -15,6 +15,8 @@
+ $(NoWarn);IL2026;IL2046;IL2057;IL2067;IL2070;IL2072;IL2075;IL2094;IL2111
+ true
+ true
++
++ $(NoWarn);IDE0031
+
+
+