diff --git a/eng/Build.props b/eng/Build.props
index dbaf0c170561..82b60be223a2 100644
--- a/eng/Build.props
+++ b/eng/Build.props
@@ -56,14 +56,14 @@
$(RepoRoot)src\SignalR\perf\benchmarkapps\**\*.csproj;
" />
-
+
-
+
-
+
@@ -264,7 +264,7 @@
<_VcxTargetPlatform Condition="'$(TargetArchitecture)' == 'arm64'">ARM64
-
+
diff --git a/eng/Common.props b/eng/Common.props
index 6c75a0f82850..fe70563343fd 100644
--- a/eng/Common.props
+++ b/eng/Common.props
@@ -11,7 +11,7 @@
$(TargetOsName)-$(TargetArchitecture)
true
- $(TargetRuntimeIdentifier)
+ $(TargetRuntimeIdentifier)
$(BuildNodeJSUnlessSourcebuild)
false
diff --git a/eng/Dependencies.props b/eng/Dependencies.props
index cc03487fc95b..7d944888c843 100644
--- a/eng/Dependencies.props
+++ b/eng/Dependencies.props
@@ -258,4 +258,23 @@ and are generated based on the last package release.
Condition=" $([System.String]::new('%(Identity)').StartsWith('Microsoft.NETCore.App.Runtime.')) or $([System.String]::new('%(Identity)').StartsWith('Microsoft.NETCore.App.Crossgen2.'))">$(MicrosoftNETCoreAppRefVersion)
+
+
+
+
+ $(MicrosoftCodeAnalysisVersion_LatestVS)
+
+
+ $(MicrosoftCodeAnalysisVersion_LatestVS)
+
+
+ $(MicrosoftCodeAnalysisVersion_LatestVS)
+
+
+ $(MicrosoftCodeAnalysisVersion_LatestVS)
+
+
+ $(MicrosoftCodeAnalysisVersion_LatestVS)
+
+
diff --git a/eng/Publishing.props b/eng/Publishing.props
index 0fe48f75295b..f53bb87814a6 100644
--- a/eng/Publishing.props
+++ b/eng/Publishing.props
@@ -1,15 +1,14 @@
+
true
-
+
false
+ '$(DotNetBuild)' != 'true'">false
false
diff --git a/eng/SharedFramework.External.props b/eng/SharedFramework.External.props
index 8b5b19fb9861..9096f00ebe40 100644
--- a/eng/SharedFramework.External.props
+++ b/eng/SharedFramework.External.props
@@ -43,6 +43,7 @@
+
-
+
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
@@ -357,52 +357,52 @@
https://github.com/dotnet/roslyn
afdd413cee50c16318620252e4e64dc326e2d300
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
-
+
https://github.com/dotnet/dotnet
- ad8565092bbfdd5c8b4a94a718d10b2d394f7aee
+ a4d6fdc935d5da12efb00a0b3b693ff1439e0b41
https://github.com/dotnet/extensions
diff --git a/eng/Versions.props b/eng/Versions.props
index d0b63dadd600..27753b41d821 100644
--- a/eng/Versions.props
+++ b/eng/Versions.props
@@ -67,97 +67,97 @@
-->
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
- 10.0.0-preview.5.25265.101
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
+ 10.0.0-preview.5.25270.108
9.6.0-preview.1.25260.2
9.6.0-preview.1.25260.2
- 10.0.0-preview.4.25265.101
- 10.0.0-preview.4.25265.101
- 10.0.0-preview.4.25265.101
- 10.0.0-preview.4.25265.101
- 10.0.0-preview.4.25265.101
- 10.0.0-preview.4.25265.101
- 10.0.0-preview.4.25265.101
- 10.0.0-preview.4.25265.101
+ 10.0.0-preview.4.25270.108
+ 10.0.0-preview.4.25270.108
+ 10.0.0-preview.4.25270.108
+ 10.0.0-preview.4.25270.108
+ 10.0.0-preview.4.25270.108
+ 10.0.0-preview.4.25270.108
+ 10.0.0-preview.4.25270.108
+ 10.0.0-preview.4.25270.108
- 10.0.100-preview.5.25265.101
- 10.0.100-preview.5.25265.101
+ 10.0.100-preview.5.25270.108
+ 10.0.100-preview.5.25270.108
4.13.0-3.24613.7
@@ -170,12 +170,12 @@
6.2.4
6.2.4
- 10.0.0-beta.25265.101
- 10.0.0-beta.25265.101
- 10.0.0-beta.25265.101
- 10.0.0-beta.25265.101
+ 10.0.0-beta.25270.108
+ 10.0.0-beta.25270.108
+ 10.0.0-beta.25270.108
+ 10.0.0-beta.25270.108
- 10.0.0-preview.25265.101
+ 10.0.0-preview.25270.108
1.0.0-prerelease.25217.3
1.0.0-prerelease.25217.3
diff --git a/eng/build.ps1 b/eng/build.ps1
index 96bc05a6cbe0..6af494960f92 100644
--- a/eng/build.ps1
+++ b/eng/build.ps1
@@ -282,7 +282,7 @@ $MSBuildArguments += "/p:Publish=$Publish"
$MSBuildArguments += "/p:TargetArchitecture=$Architecture"
$MSBuildArguments += "/p:TargetOsName=win"
-if ($ProductBuild) { $MSBuildArguments += "/p:DotNetBuildRepo=$ProductBuild" }
+if ($ProductBuild) { $MSBuildArguments += "/p:DotNetBuild=$ProductBuild" }
if (-not $Configuration) {
$Configuration = if ($CI) { 'Release' } else { 'Debug' }
@@ -298,7 +298,7 @@ if ($RuntimeSourceFeed -or $RuntimeSourceFeedKey) {
$ToolsetBuildArguments += $runtimeFeedArg
$ToolsetBuildArguments += $runtimeFeedKeyArg
}
-if ($ProductBuild) { $ToolsetBuildArguments += "/p:DotNetBuildRepo=$ProductBuild" }
+if ($ProductBuild) { $ToolsetBuildArguments += "/p:DotNetBuild=$ProductBuild" }
# Split build categories between dotnet msbuild and desktop msbuild. Use desktop msbuild as little as possible.
[string[]]$dotnetBuildArguments = ''
diff --git a/eng/build.sh b/eng/build.sh
index 5bbb20c685c9..e18c217d4189 100755
--- a/eng/build.sh
+++ b/eng/build.sh
@@ -323,7 +323,7 @@ fi
[ ! -z "$build_nodejs" ] && msbuild_args[${#msbuild_args[*]}]="-p:BuildNodeJSUnlessSourcebuild=$build_nodejs"
[ ! -z "$build_managed" ] && msbuild_args[${#msbuild_args[*]}]="-p:BuildManaged=$build_managed"
[ ! -z "$build_installers" ] && msbuild_args[${#msbuild_args[*]}]="-p:BuildInstallers=$build_installers"
-[ ! -z "$product_build" ] && msbuild_args[${#msbuild_args[*]}]="-p:DotNetBuildRepo=$product_build"
+[ ! -z "$product_build" ] && msbuild_args[${#msbuild_args[*]}]="-p:DotNetBuild=$product_build"
[ ! -z "$source_build" ] && msbuild_args[${#msbuild_args[*]}]="-p:DotNetBuildSourceOnly=$source_build"
# Run restore by default unless --no-restore or --no-build was specified.
@@ -361,7 +361,7 @@ if [ ! -z "$runtime_source_feed$runtime_source_feed_key" ]; then
toolset_build_args[${#toolset_build_args[*]}]=$runtimeFeedArg
toolset_build_args[${#toolset_build_args[*]}]=$runtimeFeedKeyArg
fi
-[ ! -z "$product_build" ] && toolset_build_args[${#toolset_build_args[*]}]="-p:DotNetBuildRepo=$product_build"
+[ ! -z "$product_build" ] && toolset_build_args[${#toolset_build_args[*]}]="-p:DotNetBuild=$product_build"
[ ! -z "$source_build" ] && toolset_build_args[${#toolset_build_args[*]}]="-p:DotNetBuildSourceOnly=$source_build"
# Initialize global variables need to be set before the import of Arcade is imported
diff --git a/eng/common/build.ps1 b/eng/common/build.ps1
index 6b3be1916fca..ae2309e312d7 100644
--- a/eng/common/build.ps1
+++ b/eng/common/build.ps1
@@ -127,7 +127,7 @@ function Build {
/p:Deploy=$deploy `
/p:Test=$test `
/p:Pack=$pack `
- /p:DotNetBuildRepo=$productBuild `
+ /p:DotNetBuild=$productBuild `
/p:IntegrationTest=$integrationTest `
/p:PerformanceTest=$performanceTest `
/p:Sign=$sign `
diff --git a/eng/common/build.sh b/eng/common/build.sh
index 27ae2c85601f..da906da20262 100755
--- a/eng/common/build.sh
+++ b/eng/common/build.sh
@@ -129,14 +129,14 @@ while [[ $# > 0 ]]; do
-pack)
pack=true
;;
- -sourcebuild|-sb)
+ -sourcebuild|-source-build|-sb)
build=true
source_build=true
product_build=true
restore=true
pack=true
;;
- -productbuild|-pb)
+ -productbuild|-product-build|-pb)
build=true
product_build=true
restore=true
@@ -241,7 +241,7 @@ function Build {
/p:RepoRoot="$repo_root" \
/p:Restore=$restore \
/p:Build=$build \
- /p:DotNetBuildRepo=$product_build \
+ /p:DotNetBuild=$product_build \
/p:DotNetBuildSourceOnly=$source_build \
/p:Rebuild=$rebuild \
/p:Test=$test \
diff --git a/eng/common/templates/steps/vmr-sync.yml b/eng/common/templates/steps/vmr-sync.yml
new file mode 100644
index 000000000000..599afb6186b8
--- /dev/null
+++ b/eng/common/templates/steps/vmr-sync.yml
@@ -0,0 +1,207 @@
+### These steps synchronize new code from product repositories into the VMR (https://github.com/dotnet/dotnet).
+### They initialize the darc CLI and pull the new updates.
+### Changes are applied locally onto the already cloned VMR (located in $vmrPath).
+
+parameters:
+- name: targetRef
+ displayName: Target revision in dotnet/ to synchronize
+ type: string
+ default: $(Build.SourceVersion)
+
+- name: vmrPath
+ displayName: Path where the dotnet/dotnet is checked out to
+ type: string
+ default: $(Agent.BuildDirectory)/vmr
+
+- name: additionalSyncs
+ displayName: Optional list of package names whose repo's source will also be synchronized in the local VMR, e.g. NuGet.Protocol
+ type: object
+ default: []
+
+steps:
+- checkout: vmr
+ displayName: Clone dotnet/dotnet
+ path: vmr
+ clean: true
+
+- checkout: self
+ displayName: Clone $(Build.Repository.Name)
+ path: repo
+ fetchDepth: 0
+
+# This step is needed so that when we get a detached HEAD / shallow clone,
+# we still pull the commit into the temporary repo clone to use it during the sync.
+# Also unshallow the clone so that forwardflow command would work.
+- script: |
+ git branch repo-head
+ git rev-parse HEAD
+ displayName: Label PR commit
+ workingDirectory: $(Agent.BuildDirectory)/repo
+
+- script: |
+ vmr_sha=$(grep -oP '(?<=Sha=")[^"]*' $(Agent.BuildDirectory)/repo/eng/Version.Details.xml)
+ echo "##vso[task.setvariable variable=vmr_sha]$vmr_sha"
+ displayName: Obtain the vmr sha from Version.Details.xml (Unix)
+ condition: ne(variables['Agent.OS'], 'Windows_NT')
+ workingDirectory: $(Agent.BuildDirectory)/repo
+
+- powershell: |
+ [xml]$xml = Get-Content -Path $(Agent.BuildDirectory)/repo/eng/Version.Details.xml
+ $vmr_sha = $xml.SelectSingleNode("//Source").Sha
+ Write-Output "##vso[task.setvariable variable=vmr_sha]$vmr_sha"
+ displayName: Obtain the vmr sha from Version.Details.xml (Windows)
+ condition: eq(variables['Agent.OS'], 'Windows_NT')
+ workingDirectory: $(Agent.BuildDirectory)/repo
+
+- script: |
+ git fetch --all
+ git checkout $(vmr_sha)
+ displayName: Checkout VMR at correct sha for repo flow
+ workingDirectory: ${{ parameters.vmrPath }}
+
+- script: |
+ git config --global user.name "dotnet-maestro[bot]"
+ git config --global user.email "dotnet-maestro[bot]@users.noreply.github.com"
+ displayName: Set git author to dotnet-maestro[bot]
+ workingDirectory: ${{ parameters.vmrPath }}
+
+- script: |
+ ./eng/common/vmr-sync.sh \
+ --vmr ${{ parameters.vmrPath }} \
+ --tmp $(Agent.TempDirectory) \
+ --azdev-pat '$(dn-bot-all-orgs-code-r)' \
+ --ci \
+ --debug
+
+ if [ "$?" -ne 0 ]; then
+ echo "##vso[task.logissue type=error]Failed to synchronize the VMR"
+ exit 1
+ fi
+ displayName: Sync repo into VMR (Unix)
+ condition: ne(variables['Agent.OS'], 'Windows_NT')
+ workingDirectory: $(Agent.BuildDirectory)/repo
+
+- script: |
+ git config --global diff.astextplain.textconv echo
+ git config --system core.longpaths true
+ displayName: Configure Windows git (longpaths, astextplain)
+ condition: eq(variables['Agent.OS'], 'Windows_NT')
+
+- powershell: |
+ ./eng/common/vmr-sync.ps1 `
+ -vmr ${{ parameters.vmrPath }} `
+ -tmp $(Agent.TempDirectory) `
+ -azdevPat '$(dn-bot-all-orgs-code-r)' `
+ -ci `
+ -debugOutput
+
+ if ($LASTEXITCODE -ne 0) {
+ echo "##vso[task.logissue type=error]Failed to synchronize the VMR"
+ exit 1
+ }
+ displayName: Sync repo into VMR (Windows)
+ condition: eq(variables['Agent.OS'], 'Windows_NT')
+ workingDirectory: $(Agent.BuildDirectory)/repo
+
+- ${{ if eq(variables['Build.Reason'], 'PullRequest') }}:
+ - task: CopyFiles@2
+ displayName: Collect failed patches
+ condition: failed()
+ inputs:
+ SourceFolder: '$(Agent.TempDirectory)'
+ Contents: '*.patch'
+ TargetFolder: '$(Build.ArtifactStagingDirectory)/FailedPatches'
+
+ - publish: '$(Build.ArtifactStagingDirectory)/FailedPatches'
+ artifact: $(System.JobDisplayName)_FailedPatches
+ displayName: Upload failed patches
+ condition: failed()
+
+- ${{ each assetName in parameters.additionalSyncs }}:
+ # The vmr-sync script ends up staging files in the local VMR so we have to commit those
+ - script:
+ git commit --allow-empty -am "Forward-flow $(Build.Repository.Name)"
+ displayName: Commit local VMR changes
+ workingDirectory: ${{ parameters.vmrPath }}
+
+ - script: |
+ set -ex
+
+ echo "Searching for details of asset ${{ assetName }}..."
+
+ # Use darc to get dependencies information
+ dependencies=$(./.dotnet/dotnet darc get-dependencies --name '${{ assetName }}' --ci)
+
+ # Extract repository URL and commit hash
+ repository=$(echo "$dependencies" | grep 'Repo:' | sed 's/Repo:[[:space:]]*//' | head -1)
+
+ if [ -z "$repository" ]; then
+ echo "##vso[task.logissue type=error]Asset ${{ assetName }} not found in the dependency list"
+ exit 1
+ fi
+
+ commit=$(echo "$dependencies" | grep 'Commit:' | sed 's/Commit:[[:space:]]*//' | head -1)
+
+ echo "Updating the VMR from $repository / $commit..."
+ cd ..
+ git clone $repository ${{ assetName }}
+ cd ${{ assetName }}
+ git checkout $commit
+ git branch "sync/$commit"
+
+ ./eng/common/vmr-sync.sh \
+ --vmr ${{ parameters.vmrPath }} \
+ --tmp $(Agent.TempDirectory) \
+ --azdev-pat '$(dn-bot-all-orgs-code-r)' \
+ --ci \
+ --debug
+
+ if [ "$?" -ne 0 ]; then
+ echo "##vso[task.logissue type=error]Failed to synchronize the VMR"
+ exit 1
+ fi
+ displayName: Sync ${{ assetName }} into (Unix)
+ condition: ne(variables['Agent.OS'], 'Windows_NT')
+ workingDirectory: $(Agent.BuildDirectory)/repo
+
+ - powershell: |
+ $ErrorActionPreference = 'Stop'
+
+ Write-Host "Searching for details of asset ${{ assetName }}..."
+
+ $dependencies = .\.dotnet\dotnet darc get-dependencies --name '${{ assetName }}' --ci
+
+ $repository = $dependencies | Select-String -Pattern 'Repo:\s+([^\s]+)' | Select-Object -First 1
+ $repository -match 'Repo:\s+([^\s]+)' | Out-Null
+ $repository = $matches[1]
+
+ if ($repository -eq $null) {
+ Write-Error "Asset ${{ assetName }} not found in the dependency list"
+ exit 1
+ }
+
+ $commit = $dependencies | Select-String -Pattern 'Commit:\s+([^\s]+)' | Select-Object -First 1
+ $commit -match 'Commit:\s+([^\s]+)' | Out-Null
+ $commit = $matches[1]
+
+ Write-Host "Updating the VMR from $repository / $commit..."
+ cd ..
+ git clone $repository ${{ assetName }}
+ cd ${{ assetName }}
+ git checkout $commit
+ git branch "sync/$commit"
+
+ .\eng\common\vmr-sync.ps1 `
+ -vmr ${{ parameters.vmrPath }} `
+ -tmp $(Agent.TempDirectory) `
+ -azdevPat '$(dn-bot-all-orgs-code-r)' `
+ -ci `
+ -debugOutput
+
+ if ($LASTEXITCODE -ne 0) {
+ echo "##vso[task.logissue type=error]Failed to synchronize the VMR"
+ exit 1
+ }
+ displayName: Sync ${{ assetName }} into (Windows)
+ condition: ne(variables['Agent.OS'], 'Windows_NT')
+ workingDirectory: $(Agent.BuildDirectory)/repo
diff --git a/eng/common/templates/vmr-build-pr.yml b/eng/common/templates/vmr-build-pr.yml
new file mode 100644
index 000000000000..670cf32c3bd1
--- /dev/null
+++ b/eng/common/templates/vmr-build-pr.yml
@@ -0,0 +1,33 @@
+trigger: none
+pr:
+ branches:
+ include:
+ - main
+ - release/*
+ paths:
+ exclude:
+ - documentation/*
+ - README.md
+ - CODEOWNERS
+
+variables:
+- template: /eng/common/templates/variables/pool-providers.yml@self
+
+- name: skipComponentGovernanceDetection # we run CG on internal builds only
+ value: true
+
+- name: Codeql.Enabled # we run CodeQL on internal builds only
+ value: false
+
+resources:
+ repositories:
+ - repository: vmr
+ type: github
+ name: dotnet/dotnet
+ endpoint: dotnet
+
+stages:
+- template: /eng/pipelines/templates/stages/vmr-build.yml@vmr
+ parameters:
+ isBuiltFromVmr: false
+ scope: lite
diff --git a/eng/common/vmr-sync.ps1 b/eng/common/vmr-sync.ps1
new file mode 100755
index 000000000000..8c3c91ce8ded
--- /dev/null
+++ b/eng/common/vmr-sync.ps1
@@ -0,0 +1,138 @@
+<#
+.SYNOPSIS
+
+This script is used for synchronizing the current repository into a local VMR.
+It pulls the current repository's code into the specified VMR directory for local testing or
+Source-Build validation.
+
+.DESCRIPTION
+
+The tooling used for synchronization will clone the VMR repository into a temporary folder if
+it does not already exist. These clones can be reused in future synchronizations, so it is
+recommended to dedicate a folder for this to speed up re-runs.
+
+.EXAMPLE
+ Synchronize current repository into a local VMR:
+ ./vmr-sync.ps1 -vmrDir "$HOME/repos/dotnet" -tmpDir "$HOME/repos/tmp"
+
+.PARAMETER tmpDir
+Required. Path to the temporary folder where repositories will be cloned
+
+.PARAMETER vmrBranch
+Optional. Branch of the 'dotnet/dotnet' repo to synchronize. The VMR will be checked out to this branch
+
+.PARAMETER azdevPat
+Optional. Azure DevOps PAT to use for cloning private repositories.
+
+.PARAMETER vmrDir
+Optional. Path to the dotnet/dotnet repository. When null, gets cloned to the temporary folder
+
+.PARAMETER debugOutput
+Optional. Enables debug logging in the darc vmr command.
+
+.PARAMETER ci
+Optional. Denotes that the script is running in a CI environment.
+#>
+param (
+ [Parameter(Mandatory=$true, HelpMessage="Path to the temporary folder where repositories will be cloned")]
+ [string][Alias('t', 'tmp')]$tmpDir,
+ [string][Alias('b', 'branch')]$vmrBranch,
+ [string]$remote,
+ [string]$azdevPat,
+ [string][Alias('v', 'vmr')]$vmrDir,
+ [switch]$ci,
+ [switch]$debugOutput
+)
+
+function Fail {
+ Write-Host "> $($args[0])" -ForegroundColor 'Red'
+}
+
+function Highlight {
+ Write-Host "> $($args[0])" -ForegroundColor 'Cyan'
+}
+
+$verbosity = 'verbose'
+if ($debugOutput) {
+ $verbosity = 'debug'
+}
+# Validation
+
+if (-not $tmpDir) {
+ Fail "Missing -tmpDir argument. Please specify the path to the temporary folder where the repositories will be cloned"
+ exit 1
+}
+
+# Sanitize the input
+
+if (-not $vmrDir) {
+ $vmrDir = Join-Path $tmpDir 'dotnet'
+}
+
+if (-not (Test-Path -Path $tmpDir -PathType Container)) {
+ New-Item -ItemType Directory -Path $tmpDir | Out-Null
+}
+
+# Prepare the VMR
+
+if (-not (Test-Path -Path $vmrDir -PathType Container)) {
+ Highlight "Cloning 'dotnet/dotnet' into $vmrDir.."
+ git clone https://github.com/dotnet/dotnet $vmrDir
+
+ if ($vmrBranch) {
+ git -C $vmrDir switch -c $vmrBranch
+ }
+}
+else {
+ if ((git -C $vmrDir diff --quiet) -eq $false) {
+ Fail "There are changes in the working tree of $vmrDir. Please commit or stash your changes"
+ exit 1
+ }
+
+ if ($vmrBranch) {
+ Highlight "Preparing $vmrDir"
+ git -C $vmrDir checkout $vmrBranch
+ git -C $vmrDir pull
+ }
+}
+
+Set-StrictMode -Version Latest
+
+# Prepare darc
+
+Highlight 'Installing .NET, preparing the tooling..'
+. .\eng\common\tools.ps1
+$dotnetRoot = InitializeDotNetCli -install:$true
+$dotnet = "$dotnetRoot\dotnet.exe"
+& "$dotnet" tool restore
+
+Highlight "Starting the synchronization of VMR.."
+
+# Synchronize the VMR
+$darcArgs = (
+ "darc", "vmr", "forwardflow",
+ "--tmp", $tmpDir,
+ "--$verbosity",
+ $vmrDir
+)
+
+if ($ci) {
+ $darcArgs += ("--ci")
+}
+
+if ($azdevPat) {
+ $darcArgs += ("--azdev-pat", $azdevPat)
+}
+
+& "$dotnet" $darcArgs
+
+if ($LASTEXITCODE -eq 0) {
+ Highlight "Synchronization succeeded"
+}
+else {
+ Fail "Synchronization of repo to VMR failed!"
+ Fail "'$vmrDir' is left in its last state (re-run of this script will reset it)."
+ Fail "Please inspect the logs which contain path to the failing patch file (use -debugOutput to get all the details)."
+ Fail "Once you make changes to the conflicting VMR patch, commit it locally and re-run this script."
+ exit 1
+}
diff --git a/eng/common/vmr-sync.sh b/eng/common/vmr-sync.sh
new file mode 100755
index 000000000000..86d77ccf5b48
--- /dev/null
+++ b/eng/common/vmr-sync.sh
@@ -0,0 +1,205 @@
+#!/bin/bash
+
+### This script is used for synchronizing the current repository into a local VMR.
+### It pulls the current repository's code into the specified VMR directory for local testing or
+### Source-Build validation.
+###
+### The tooling used for synchronization will clone the VMR repository into a temporary folder if
+### it does not already exist. These clones can be reused in future synchronizations, so it is
+### recommended to dedicate a folder for this to speed up re-runs.
+###
+### USAGE:
+### Synchronize current repository into a local VMR:
+### ./vmr-sync.sh --tmp "$HOME/repos/tmp" "$HOME/repos/dotnet"
+###
+### Options:
+### -t, --tmp, --tmp-dir PATH
+### Required. Path to the temporary folder where repositories will be cloned
+###
+### -b, --branch, --vmr-branch BRANCH_NAME
+### Optional. Branch of the 'dotnet/dotnet' repo to synchronize. The VMR will be checked out to this branch
+###
+### --debug
+### Optional. Turns on the most verbose logging for the VMR tooling
+###
+### --remote name:URI
+### Optional. Additional remote to use during the synchronization
+### This can be used to synchronize to a commit from a fork of the repository
+### Example: 'runtime:https://github.com/yourfork/runtime'
+###
+### --azdev-pat
+### Optional. Azure DevOps PAT to use for cloning private repositories.
+###
+### -v, --vmr, --vmr-dir PATH
+### Optional. Path to the dotnet/dotnet repository. When null, gets cloned to the temporary folder
+
+source="${BASH_SOURCE[0]}"
+
+# resolve $source until the file is no longer a symlink
+while [[ -h "$source" ]]; do
+ scriptroot="$( cd -P "$( dirname "$source" )" && pwd )"
+ source="$(readlink "$source")"
+ # if $source was a relative symlink, we need to resolve it relative to the path where the
+ # symlink file was located
+ [[ $source != /* ]] && source="$scriptroot/$source"
+done
+scriptroot="$( cd -P "$( dirname "$source" )" && pwd )"
+
+function print_help () {
+ sed -n '/^### /,/^$/p' "$source" | cut -b 5-
+}
+
+COLOR_RED=$(tput setaf 1 2>/dev/null || true)
+COLOR_CYAN=$(tput setaf 6 2>/dev/null || true)
+COLOR_CLEAR=$(tput sgr0 2>/dev/null || true)
+COLOR_RESET=uniquesearchablestring
+FAILURE_PREFIX='> '
+
+function fail () {
+ echo "${COLOR_RED}$FAILURE_PREFIX${1//${COLOR_RESET}/${COLOR_RED}}${COLOR_CLEAR}" >&2
+}
+
+function highlight () {
+ echo "${COLOR_CYAN}$FAILURE_PREFIX${1//${COLOR_RESET}/${COLOR_CYAN}}${COLOR_CLEAR}"
+}
+
+tmp_dir=''
+vmr_dir=''
+vmr_branch=''
+additional_remotes=''
+verbosity=verbose
+azdev_pat=''
+ci=false
+
+while [[ $# -gt 0 ]]; do
+ opt="$(echo "$1" | tr "[:upper:]" "[:lower:]")"
+ case "$opt" in
+ -t|--tmp|--tmp-dir)
+ tmp_dir=$2
+ shift
+ ;;
+ -v|--vmr|--vmr-dir)
+ vmr_dir=$2
+ shift
+ ;;
+ -b|--branch|--vmr-branch)
+ vmr_branch=$2
+ shift
+ ;;
+ --remote)
+ additional_remotes="$additional_remotes $2"
+ shift
+ ;;
+ --azdev-pat)
+ azdev_pat=$2
+ shift
+ ;;
+ --ci)
+ ci=true
+ ;;
+ -d|--debug)
+ verbosity=debug
+ ;;
+ -h|--help)
+ print_help
+ exit 0
+ ;;
+ *)
+ fail "Invalid argument: $1"
+ print_help
+ exit 1
+ ;;
+ esac
+
+ shift
+done
+
+# Validation
+
+if [[ -z "$tmp_dir" ]]; then
+ fail "Missing --tmp-dir argument. Please specify the path to the temporary folder where the repositories will be cloned"
+ exit 1
+fi
+
+# Sanitize the input
+
+if [[ -z "$vmr_dir" ]]; then
+ vmr_dir="$tmp_dir/dotnet"
+fi
+
+if [[ ! -d "$tmp_dir" ]]; then
+ mkdir -p "$tmp_dir"
+fi
+
+if [[ "$verbosity" == "debug" ]]; then
+ set -x
+fi
+
+# Prepare the VMR
+
+if [[ ! -d "$vmr_dir" ]]; then
+ highlight "Cloning 'dotnet/dotnet' into $vmr_dir.."
+ git clone https://github.com/dotnet/dotnet "$vmr_dir"
+
+ if [[ -n "$vmr_branch" ]]; then
+ git -C "$vmr_dir" switch -c "$vmr_branch"
+ fi
+else
+ if ! git -C "$vmr_dir" diff --quiet; then
+ fail "There are changes in the working tree of $vmr_dir. Please commit or stash your changes"
+ exit 1
+ fi
+
+ if [[ -n "$vmr_branch" ]]; then
+ highlight "Preparing $vmr_dir"
+ git -C "$vmr_dir" checkout "$vmr_branch"
+ git -C "$vmr_dir" pull
+ fi
+fi
+
+set -e
+
+# Prepare darc
+
+highlight 'Installing .NET, preparing the tooling..'
+source "./eng/common/tools.sh"
+InitializeDotNetCli true
+dotnetDir=$( cd ./.dotnet/; pwd -P )
+dotnet=$dotnetDir/dotnet
+"$dotnet" tool restore
+
+highlight "Starting the synchronization of VMR.."
+set +e
+
+if [[ -n "$additional_remotes" ]]; then
+ additional_remotes="--additional-remotes $additional_remotes"
+fi
+
+if [[ -n "$azdev_pat" ]]; then
+ azdev_pat="--azdev-pat $azdev_pat"
+fi
+
+ci_arg=''
+if [[ "$ci" == "true" ]]; then
+ ci_arg="--ci"
+fi
+
+# Synchronize the VMR
+
+"$dotnet" darc vmr forwardflow \
+ --tmp "$tmp_dir" \
+ $azdev_pat \
+ --$verbosity \
+ $ci_arg \
+ $additional_remotes \
+ "$vmr_dir"
+
+if [[ $? == 0 ]]; then
+ highlight "Synchronization succeeded"
+else
+ fail "Synchronization of repo to VMR failed!"
+ fail "'$vmr_dir' is left in its last state (re-run of this script will reset it)."
+ fail "Please inspect the logs which contain path to the failing patch file (use --debug to get all the details)."
+ fail "Once you make changes to the conflicting VMR patch, commit it locally and re-run this script."
+ exit 1
+fi
diff --git a/eng/configure-toolset.sh b/eng/configure-toolset.sh
index 4d6e51f58de1..776adaa0d0a2 100755
--- a/eng/configure-toolset.sh
+++ b/eng/configure-toolset.sh
@@ -2,7 +2,7 @@
# We could potentially try to find an existing installation that has all the required runtimes,
# but it's unlikely one will be available.
-if [ "${DotNetBuild:-false}" = false ]; then
+if [ "$product_build" = false ]; then
use_installed_dotnet_cli="false"
fi
diff --git a/eng/tools/GenerateFiles/Directory.Build.targets.in b/eng/tools/GenerateFiles/Directory.Build.targets.in
index fb93cb806019..c63b8b21c92d 100644
--- a/eng/tools/GenerateFiles/Directory.Build.targets.in
+++ b/eng/tools/GenerateFiles/Directory.Build.targets.in
@@ -64,7 +64,7 @@
-
+
${MicrosoftNETCoreAppRefVersion}
@@ -84,7 +84,7 @@
%(RuntimePackRuntimeIdentifiers);$(TargetRuntimeIdentifier)
-
+
${MicrosoftNETCoreAppRefVersion}
diff --git a/global.json b/global.json
index fb35fa5b26ca..7e3e135d091d 100644
--- a/global.json
+++ b/global.json
@@ -1,9 +1,9 @@
{
"sdk": {
- "version": "10.0.100-preview.4.25216.37"
+ "version": "10.0.100-preview.5.25265.106"
},
"tools": {
- "dotnet": "10.0.100-preview.4.25216.37",
+ "dotnet": "10.0.100-preview.5.25265.106",
"runtimes": {
"dotnet/x86": [
"$(MicrosoftInternalRuntimeAspNetCoreTransportVersion)"
@@ -27,9 +27,9 @@
"jdk": "latest"
},
"msbuild-sdks": {
- "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.25265.101",
- "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.25265.101",
- "Microsoft.DotNet.SharedFramework.Sdk": "10.0.0-beta.25265.101",
+ "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.25270.108",
+ "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.25270.108",
+ "Microsoft.DotNet.SharedFramework.Sdk": "10.0.0-beta.25270.108",
"Microsoft.Build.NoTargets": "3.7.0",
"Microsoft.Build.Traversal": "3.4.0"
}
diff --git a/src/Framework/test/TestData.cs b/src/Framework/test/TestData.cs
index 6d7176d53b31..9c052bda0e51 100644
--- a/src/Framework/test/TestData.cs
+++ b/src/Framework/test/TestData.cs
@@ -157,6 +157,7 @@ static TestData()
"System.Diagnostics.EventLog.Messages",
"System.Security.Cryptography.Pkcs",
"System.Security.Cryptography.Xml",
+ "System.Threading.AccessControl",
"System.Threading.RateLimiting",
};
@@ -306,6 +307,7 @@ static TestData()
{ "Microsoft.Net.Http.Headers" },
{ "System.Diagnostics.EventLog" },
{ "System.Security.Cryptography.Xml" },
+ { "System.Threading.AccessControl" },
{ "System.Threading.RateLimiting" },
};
diff --git a/src/Hosting/Hosting/src/Internal/WebHostLifetime.cs b/src/Hosting/Hosting/src/Internal/WebHostLifetime.cs
index 00481689ce09..ba2bb10c0ac1 100644
--- a/src/Hosting/Hosting/src/Internal/WebHostLifetime.cs
+++ b/src/Hosting/Hosting/src/Internal/WebHostLifetime.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.Runtime.InteropServices;
+
namespace Microsoft.AspNetCore.Hosting;
internal sealed class WebHostLifetime : IDisposable
@@ -9,8 +11,11 @@ internal sealed class WebHostLifetime : IDisposable
private readonly ManualResetEventSlim _resetEvent;
private readonly string _shutdownMessage;
+ private readonly PosixSignalRegistration _sigIntRegistration;
+ private readonly PosixSignalRegistration _sigQuitRegistration;
+ private readonly PosixSignalRegistration _sigTermRegistration;
+
private bool _disposed;
- private bool _exitedGracefully;
public WebHostLifetime(CancellationTokenSource cts, ManualResetEventSlim resetEvent, string shutdownMessage)
{
@@ -18,13 +23,10 @@ public WebHostLifetime(CancellationTokenSource cts, ManualResetEventSlim resetEv
_resetEvent = resetEvent;
_shutdownMessage = shutdownMessage;
- AppDomain.CurrentDomain.ProcessExit += ProcessExit;
- Console.CancelKeyPress += CancelKeyPress;
- }
-
- internal void SetExitedGracefully()
- {
- _exitedGracefully = true;
+ Action handler = HandlePosixSignal;
+ _sigIntRegistration = PosixSignalRegistration.Create(PosixSignal.SIGINT, handler);
+ _sigQuitRegistration = PosixSignalRegistration.Create(PosixSignal.SIGQUIT, handler);
+ _sigTermRegistration = PosixSignalRegistration.Create(PosixSignal.SIGTERM, handler);
}
public void Dispose()
@@ -35,26 +37,18 @@ public void Dispose()
}
_disposed = true;
- AppDomain.CurrentDomain.ProcessExit -= ProcessExit;
- Console.CancelKeyPress -= CancelKeyPress;
- }
- private void CancelKeyPress(object? sender, ConsoleCancelEventArgs eventArgs)
- {
- Shutdown();
- // Don't terminate the process immediately, wait for the Main thread to exit gracefully.
- eventArgs.Cancel = true;
+ _sigIntRegistration.Dispose();
+ _sigQuitRegistration.Dispose();
+ _sigTermRegistration.Dispose();
}
- private void ProcessExit(object? sender, EventArgs eventArgs)
+ private void HandlePosixSignal(PosixSignalContext context)
{
Shutdown();
- if (_exitedGracefully)
- {
- // On Linux if the shutdown is triggered by SIGTERM then that's signaled with the 143 exit code.
- // Suppress that since we shut down gracefully. https://github.com/dotnet/aspnetcore/issues/6526
- Environment.ExitCode = 0;
- }
+
+ // Don't terminate the process immediately, wait for the Main thread to exit gracefully.
+ context.Cancel = true;
}
private void Shutdown()
diff --git a/src/Hosting/Hosting/src/WebHostExtensions.cs b/src/Hosting/Hosting/src/WebHostExtensions.cs
index 1d4d115f904d..41c8e385d141 100644
--- a/src/Hosting/Hosting/src/WebHostExtensions.cs
+++ b/src/Hosting/Hosting/src/WebHostExtensions.cs
@@ -52,7 +52,6 @@ public static async Task WaitForShutdownAsync(this IWebHost host, CancellationTo
try
{
await host.WaitForTokenShutdownAsync(cts.Token);
- lifetime.SetExitedGracefully();
}
finally
{
@@ -95,7 +94,6 @@ public static async Task RunAsync(this IWebHost host, CancellationToken token =
try
{
await host.RunAsync(cts.Token, "Application started. Press Ctrl+C to shut down.");
- lifetime.SetExitedGracefully();
}
finally
{
diff --git a/src/Hosting/test/FunctionalTests/ShutdownTests.cs b/src/Hosting/test/FunctionalTests/ShutdownTests.cs
index e366e632e72e..f639f8051238 100644
--- a/src/Hosting/test/FunctionalTests/ShutdownTests.cs
+++ b/src/Hosting/test/FunctionalTests/ShutdownTests.cs
@@ -97,7 +97,7 @@ private async Task ExecuteShutdownTest(string testName, string shutdownMechanic)
throw new InvalidOperationException("Timeout while waiting for host process to output started message.", ex);
}
- SendSIGINT(deployer.HostProcess.Id);
+ SendSIGTERM(deployer.HostProcess.Id);
WaitForExitOrKill(deployer.HostProcess);
@@ -117,7 +117,7 @@ private async Task ExecuteShutdownTest(string testName, string shutdownMechanic)
}
}
- private static void SendSIGINT(int processId)
+ private static void SendSIGTERM(int processId)
{
var startInfo = new ProcessStartInfo
{
diff --git a/src/Servers/IIS/IIS/src/Microsoft.AspNetCore.Server.IIS.csproj b/src/Servers/IIS/IIS/src/Microsoft.AspNetCore.Server.IIS.csproj
index ef46ff81213d..a456190bc234 100644
--- a/src/Servers/IIS/IIS/src/Microsoft.AspNetCore.Server.IIS.csproj
+++ b/src/Servers/IIS/IIS/src/Microsoft.AspNetCore.Server.IIS.csproj
@@ -45,7 +45,7 @@
-
+