diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json
index d2091cfc6d0c..1e8a5573d472 100644
--- a/.config/dotnet-tools.json
+++ b/.config/dotnet-tools.json
@@ -3,7 +3,7 @@
"isRoot": true,
"tools": {
"microsoft.dotnet.helix.jobmonitor": {
- "version": "11.0.0-beta.26427.10",
+ "version": "11.0.0-beta.26431.116",
"commands": [
"dotnet-helix-job-monitor"
]
diff --git a/eng/Version.Details.props b/eng/Version.Details.props
index 1a5f4d52a025..5750df9bab38 100644
--- a/eng/Version.Details.props
+++ b/eng/Version.Details.props
@@ -11,131 +11,131 @@ This file should be imported by eng/Versions.props
11.0.0-preview.5.26272.112
11.0.0-preview.5.26272.112
11.0.0-preview.5.26272.112
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 11.1.0-preview.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 18.11.0-1.26410.101
- 18.11.0-1.26410.101
- 7.11.0-rc.41101
- 18.11.0-1.26410.101
- 11.0.100-rc.1.26410.101
- 5.11.0-1.26410.101
- 5.11.0-1.26410.101
- 5.11.0-1.26410.101
- 5.11.0-1.26410.101
- 5.11.0-1.26410.101
- 5.11.0-1.26410.101
- 5.11.0-1.26410.101
- 5.11.0-1.26410.101
- 5.11.0-1.26410.101
- 11.1.0-preview.26410.101
- 5.11.0-1.26410.101
- 5.11.0-1.26410.101
- 2.0.0-preview.1.26410.101
- 3.0.0-rc.1.26410.101
- 11.0.0-beta.26410.101
- 11.0.0-beta.26410.101
- 11.0.0-beta.26410.101
- 11.0.0-beta.26410.101
- 11.0.0-beta.26427.10
- 11.0.0-beta.26410.101
- 11.0.0-beta.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-beta.26410.101
- 11.0.0-beta.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 15.2.101-rc1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 5.11.0-1.26410.101
- 5.11.0-1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-preview.7.26360.111
- 11.1.0-preview.26410.101
- 11.0.0-rc.1.26410.101
- 18.11.0-preview-26410-101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.100-rc.1.26410.101
- 11.0.100-rc.1.26410.101
- 11.0.100-rc.1.26410.101
- 11.0.100-rc.1.26410.101
- 11.0.100-rc.1.26410.101
- 18.11.0-preview-26410-101
- 18.11.0-preview-26410-101
- 3.3.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 7.11.0-rc.41101
- 7.11.0-rc.41101
- 7.11.0-rc.41101
- 7.11.0-rc.41101
- 7.11.0-rc.41101
- 7.11.0-rc.41101
- 7.11.0-rc.41101
- 7.11.0-rc.41101
- 7.11.0-rc.41101
- 7.11.0-rc.41101
- 7.11.0-rc.41101
- 7.11.0-rc.41101
- 7.11.0-rc.41101
- 7.11.0-rc.41101
- 7.11.0-rc.41101
- 7.11.0-rc.41101
- 11.0.0-rc.1.26410.101
- 3.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
- 11.0.0-rc.1.26410.101
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.1.0-preview.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 18.12.0-1.26431.116
+ 18.12.0-1.26431.116
+ 7.11.0-rc.43216
+ 18.12.0-1.26431.116
+ 11.0.100-rc.2.26431.116
+ 5.12.0-1.26431.116
+ 5.12.0-1.26431.116
+ 5.12.0-1.26431.116
+ 5.12.0-1.26431.116
+ 5.12.0-1.26431.116
+ 5.12.0-1.26431.116
+ 5.12.0-1.26431.116
+ 5.12.0-1.26431.116
+ 5.12.0-1.26431.116
+ 11.1.0-preview.26431.116
+ 5.12.0-1.26431.116
+ 5.12.0-1.26431.116
+ 2.0.0-preview.1.26431.116
+ 3.0.0-rc.2.26431.116
+ 11.0.0-beta.26431.116
+ 11.0.0-beta.26431.116
+ 11.0.0-beta.26431.116
+ 11.0.0-beta.26431.116
+ 11.0.0-beta.26431.116
+ 11.0.0-beta.26431.116
+ 11.0.0-beta.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-beta.26431.116
+ 11.0.0-beta.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 15.2.101-rc2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 5.12.0-1.26431.116
+ 5.12.0-1.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.1.0-preview.26431.116
+ 11.0.0-rc.2.26431.116
+ 18.11.0-release-26431-116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.100-rc.2.26431.116
+ 11.0.100-rc.2.26431.116
+ 11.0.100-rc.2.26431.116
+ 11.0.100-rc.2.26431.116
+ 11.0.100-rc.2.26431.116
+ 18.11.0-release-26431-116
+ 18.11.0-release-26431-116
+ 3.3.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 7.11.0-rc.43216
+ 7.11.0-rc.43216
+ 7.11.0-rc.43216
+ 7.11.0-rc.43216
+ 7.11.0-rc.43216
+ 7.11.0-rc.43216
+ 7.11.0-rc.43216
+ 7.11.0-rc.43216
+ 7.11.0-rc.43216
+ 7.11.0-rc.43216
+ 7.11.0-rc.43216
+ 7.11.0-rc.43216
+ 7.11.0-rc.43216
+ 7.11.0-rc.43216
+ 7.11.0-rc.43216
+ 7.11.0-rc.43216
+ 11.0.0-rc.2.26431.116
+ 3.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
+ 11.0.0-rc.2.26431.116
2.4.0-preview.26429.4
2.3.0-preview.26330.8
@@ -220,7 +220,7 @@ This file should be imported by eng/Versions.props
$(MicrosoftNetCompilersToolsetFrameworkPackageVersion)
$(MicrosoftNETHostModelPackageVersion)
$(MicrosoftNETILLinkTasksPackageVersion)
- $(MicrosoftNETRuntimeEmscripten506Cachewinx64PackageVersion)
+ $(MicrosoftNETRuntimeEmscriptenInternalPackageVersion)
$(MicrosoftNETSdkRazorSourceGeneratorsTransportPackageVersion)
$(MicrosoftNETSdkWindowsDesktopPackageVersion)
$(MicrosoftNETTestSdkPackageVersion)
diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml
index c40901232898..73cbc881a3f3 100644
--- a/eng/Version.Details.xml
+++ b/eng/Version.Details.xml
@@ -1,26 +1,26 @@
-
+
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
@@ -28,174 +28,174 @@
https://github.com/dotnet/core-setup
7d57652f33493fa022125b7f63aad0d70c52d810
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
https://github.com/dotnet/dotnet
@@ -242,304 +242,304 @@
https://github.com/dotnet/dotnet
85ca690954a6f5e988d523dec249b57b84d1ad0d
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 50dbab4de210e882172b07934e9666313b7065f1
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
- https://github.com/dotnet/arcade
- 2cdfe99944d984749c8bdfc7d8d6a2589ed15d6d
+
+ https://github.com/dotnet/dotnet
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
-
+
https://github.com/dotnet/dotnet
- 64a29867c5c5c8e0babc9e31313cf3b6e50f0193
+ f8a811758057986566da27d06d8f03a7e5e226bf
diff --git a/eng/common/Get-GitHubAppToken.ps1 b/eng/common/Get-GitHubAppToken.ps1
index 6b5899d7a299..9c7e3dcd6ac4 100644
--- a/eng/common/Get-GitHubAppToken.ps1
+++ b/eng/common/Get-GitHubAppToken.ps1
@@ -113,10 +113,13 @@ try {
$installations = @()
$page = 1
do {
- $pageInstallations = @(Invoke-RestMethod `
+ # Assign the response before wrapping it in @(). PowerShell otherwise
+ # preserves a top-level JSON array as one nested pipeline object.
+ $pageResponse = Invoke-RestMethod `
-Uri "https://api.github.com/app/installations?per_page=100&page=$page" `
-Headers $headers `
- -Method Get)
+ -Method Get
+ $pageInstallations = @($pageResponse)
$installations += $pageInstallations
$page++
} while ($pageInstallations.Count -eq 100)
@@ -125,12 +128,19 @@ catch {
Write-PipelineTelemetryError -Category 'Build' -Message "Failed to list GitHub App installations: $_. The signed JWT may be invalid or the App's Client ID ('$AppClientId') may be incorrect."
exit 1
}
-$installation = $installations | Where-Object { $_.account.login -ieq $InstallationOwner } | Select-Object -First 1
-if (-not $installation) {
+$matchingInstallations = @($installations | Where-Object { $_.account.login -ieq $InstallationOwner })
+if ($matchingInstallations.Count -eq 0) {
$found = ($installations | ForEach-Object { $_.account.login }) -join ', '
Write-PipelineTelemetryError -Category 'Build' -Message "No installation found for '$InstallationOwner'. App is installed on: $found"
exit 1
}
+if ($matchingInstallations.Count -ne 1) {
+ $matchingIds = ($matchingInstallations | ForEach-Object { $_.id }) -join ', '
+ Write-PipelineTelemetryError -Category 'Build' -Message "Found multiple installations for '$InstallationOwner': $matchingIds"
+ exit 1
+}
+$installation = $matchingInstallations[0]
+Write-Host "Using installation $($installation.id) for '$($installation.account.login)'."
try {
$tokenResponse = Invoke-RestMethod `
diff --git a/eng/common/SetupNugetSources.ps1 b/eng/common/SetupNugetSources.ps1
index b3bddff355e7..b7a3769364dd 100644
--- a/eng/common/SetupNugetSources.ps1
+++ b/eng/common/SetupNugetSources.ps1
@@ -11,7 +11,7 @@
# condition: eq(variables['Agent.OS'], 'Windows_NT')
# inputs:
# filePath: $(System.DefaultWorkingDirectory)/eng/common/SetupNugetSources.ps1
-# arguments: -ConfigFile $(System.DefaultWorkingDirectory)/NuGet.config -Password $Env:Token
+# arguments: -ConfigFile $(System.DefaultWorkingDirectory)/NuGet.config
# env:
# Token: $(InternalFeedToken)
#
@@ -29,12 +29,14 @@
[CmdletBinding()]
param (
[Parameter(Mandatory = $true)][string]$ConfigFile,
- $Password
+ # Keep the legacy name as an alias while callers migrate secrets to the Token environment variable.
+ [Alias("Password")]$Credential
)
$ErrorActionPreference = "Stop"
Set-StrictMode -Version 2.0
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
+$feedCredential = if ($env:Token) { $env:Token } else { $Credential }
# This script only consumes helper functions from tools.ps1 to configure NuGet feeds.
# Skip importing configure-toolset.ps1 so that repo-specific toolset setup (e.g. acquiring
@@ -44,14 +46,14 @@ $disableConfigureToolsetImport = $true
. $PSScriptRoot\tools.ps1
# Adds or enables the package source with the given name
-function AddOrEnablePackageSource($sources, $disabledPackageSources, $SourceName, $SourceEndPoint, $creds, $Username, $pwd) {
- if ($disabledPackageSources -eq $null -or -not (EnableInternalPackageSource -DisabledPackageSources $disabledPackageSources -Creds $creds -PackageSourceName $SourceName)) {
- AddPackageSource -Sources $sources -SourceName $SourceName -SourceEndPoint $SourceEndPoint -Creds $creds -Username $userName -pwd $Password
+function AddOrEnablePackageSource($sources, $disabledPackageSources, $SourceName, $SourceEndPoint, $creds, $Username, $credential) {
+ if ($disabledPackageSources -eq $null -or -not (EnableInternalPackageSource -DisabledPackageSources $disabledPackageSources -Creds $creds -PackageSourceName $SourceName -Credential $credential)) {
+ AddPackageSource -Sources $sources -SourceName $SourceName -SourceEndPoint $SourceEndPoint -Creds $creds -Username $Username -credential $credential
}
}
# Add source entry to PackageSources
-function AddPackageSource($sources, $SourceName, $SourceEndPoint, $creds, $Username, $pwd) {
+function AddPackageSource($sources, $SourceName, $SourceEndPoint, $creds, $Username, $credential) {
$packageSource = $sources.SelectSingleNode("add[@key='$SourceName']")
if ($packageSource -eq $null)
@@ -67,13 +69,13 @@ function AddPackageSource($sources, $SourceName, $SourceEndPoint, $creds, $Usern
Write-Host "Package source $SourceName already present and enabled."
}
- AddCredential -Creds $creds -Source $SourceName -Username $Username -pwd $pwd
+ AddCredential -Creds $creds -Source $SourceName -Username $Username -credential $credential
}
# Add a credential node for the specified source
-function AddCredential($creds, $source, $username, $pwd) {
+function AddCredential($creds, $source, $username, $credential) {
# If no cred supplied, don't do anything.
- if (!$pwd) {
+ if (!$credential) {
return;
}
@@ -108,19 +110,19 @@ function AddCredential($creds, $source, $username, $pwd) {
$sourceElement.AppendChild($passwordElement) | Out-Null
}
- $passwordElement.SetAttribute("value", $pwd)
+ $passwordElement.SetAttribute("value", $credential)
}
# Enable all darc-int package sources.
-function EnableMaestroInternalPackageSources($DisabledPackageSources, $Creds) {
+function EnableMaestroInternalPackageSources($DisabledPackageSources, $Creds, $Credential) {
$maestroInternalSources = $DisabledPackageSources.SelectNodes("add[contains(@key,'darc-int')]")
ForEach ($DisabledPackageSource in $maestroInternalSources) {
- EnableInternalPackageSource -DisabledPackageSources $DisabledPackageSources -Creds $Creds -PackageSourceName $DisabledPackageSource.key
+ EnableInternalPackageSource -DisabledPackageSources $DisabledPackageSources -Creds $Creds -PackageSourceName $DisabledPackageSource.key -Credential $Credential
}
}
# Enables an internal package source by name, if found. Returns true if the package source was found and enabled, false otherwise.
-function EnableInternalPackageSource($DisabledPackageSources, $Creds, $PackageSourceName) {
+function EnableInternalPackageSource($DisabledPackageSources, $Creds, $PackageSourceName, $Credential) {
$DisabledPackageSource = $DisabledPackageSources.SelectSingleNode("add[@key='$PackageSourceName']")
if ($DisabledPackageSource) {
Write-Host "Enabling internal source '$($DisabledPackageSource.key)'."
@@ -128,7 +130,7 @@ function EnableInternalPackageSource($DisabledPackageSources, $Creds, $PackageSo
# Due to https://github.com/NuGet/Home/issues/10291, we must actually remove the disabled entries
$DisabledPackageSources.RemoveChild($DisabledPackageSource)
- AddCredential -Creds $creds -Source $DisabledPackageSource.Key -Username $userName -pwd $Password
+ AddCredential -Creds $creds -Source $DisabledPackageSource.Key -Username $userName -credential $credential
return $true
}
return $false
@@ -153,7 +155,7 @@ if ($sources -eq $null) {
$creds = $null
$feedSuffix = "v3/index.json"
-if ($Password) {
+if ($feedCredential) {
$feedSuffix = "v2"
# Looks for a node. Create it if none is found.
$creds = $doc.DocumentElement.SelectSingleNode("packageSourceCredentials")
@@ -169,7 +171,7 @@ $userName = "dn-bot"
$disabledSources = $doc.DocumentElement.SelectSingleNode("disabledPackageSources")
if ($disabledSources -ne $null) {
Write-Host "Checking for any darc-int disabled package sources in the disabledPackageSources node"
- EnableMaestroInternalPackageSources -DisabledPackageSources $disabledSources -Creds $creds
+ EnableMaestroInternalPackageSources -DisabledPackageSources $disabledSources -Creds $creds -Credential $feedCredential
}
$dotnetVersions = @('5','6','7','8','9','10')
@@ -177,8 +179,8 @@ foreach ($dotnetVersion in $dotnetVersions) {
$feedPrefix = "dotnet" + $dotnetVersion;
$dotnetSource = $sources.SelectSingleNode("add[@key='$feedPrefix']")
if ($dotnetSource -ne $null) {
- AddOrEnablePackageSource -Sources $sources -DisabledPackageSources $disabledSources -SourceName "$feedPrefix-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$feedPrefix-internal/nuget/$feedSuffix" -Creds $creds -Username $userName -pwd $Password
- AddOrEnablePackageSource -Sources $sources -DisabledPackageSources $disabledSources -SourceName "$feedPrefix-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$feedPrefix-internal-transport/nuget/$feedSuffix" -Creds $creds -Username $userName -pwd $Password
+ AddOrEnablePackageSource -Sources $sources -DisabledPackageSources $disabledSources -SourceName "$feedPrefix-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$feedPrefix-internal/nuget/$feedSuffix" -Creds $creds -Username $userName -credential $feedCredential
+ AddOrEnablePackageSource -Sources $sources -DisabledPackageSources $disabledSources -SourceName "$feedPrefix-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$feedPrefix-internal-transport/nuget/$feedSuffix" -Creds $creds -Username $userName -credential $feedCredential
}
}
diff --git a/eng/common/SetupNugetSources.sh b/eng/common/SetupNugetSources.sh
index 67e7e0942ca1..c3ae8ac054fe 100755
--- a/eng/common/SetupNugetSources.sh
+++ b/eng/common/SetupNugetSources.sh
@@ -24,7 +24,9 @@
# This logic is also abstracted into enable-internal-sources.yml.
ConfigFile=$1
-CredToken=$2
+# Prefer the environment variable so credentials do not appear in process arguments.
+# Retain the positional argument as a compatibility fallback for existing callers.
+CredToken=${Token:-$2}
NL='\n'
TB=' '
diff --git a/eng/common/build.ps1 b/eng/common/build.ps1
index dd84699f500c..fee2f839919a 100644
--- a/eng/common/build.ps1
+++ b/eng/common/build.ps1
@@ -8,6 +8,7 @@ Param(
[bool] $warnAsError = $true,
[string] $warnNotAsError = '',
[bool] $nodeReuse = $true,
+ [bool][Alias('mt')]$msbuildMultiThreaded = $false,
[switch] $buildCheck = $false,
[switch][Alias('r')]$restore,
[switch] $deployDeps,
@@ -79,6 +80,7 @@ function Print-Usage() {
Write-Host " -excludePrereleaseVS Set to exclude build engines in prerelease versions of Visual Studio"
Write-Host " -nativeToolsOnMachine Sets the native tools on machine environment variable (indicating that the script should use native tools on machine)"
Write-Host " -nodeReuse Sets nodereuse msbuild parameter ('true' or 'false')"
+ Write-Host " -msbuildMultiThreaded Sets MSBuild's multi-threaded mode, i.e. the -mt switch ('1' or '0') (short: -mt)"
Write-Host " -buildCheck Sets /check msbuild parameter"
Write-Host " -fromVMR Set when building from within the VMR"
Write-Host " -disablePipelineSetResult Set to disable masking the actual exit code in the pipeline when the build fails"
@@ -175,9 +177,8 @@ try {
if (-not $excludeCIBinarylog) {
$binaryLog = $true
}
- # Disable node reuse on CI unless explicitly opted in via MSBUILD_NODEREUSE_ENABLED.
- # Internal testing only; this env var will be replaced with a switch (https://github.com/dotnet/arcade/issues/17013) and must not be depended on.
- if ($env:MSBUILD_NODEREUSE_ENABLED -ne "1") {
+ # Node reuse isn't used on CI unless it was explicitly requested via -nodeReuse.
+ if (-not $PSBoundParameters.ContainsKey('nodeReuse')) {
$nodeReuse = $false
}
}
diff --git a/eng/common/build.sh b/eng/common/build.sh
index e37edd6cff34..109d83ff73f7 100755
--- a/eng/common/build.sh
+++ b/eng/common/build.sh
@@ -43,6 +43,7 @@ usage()
echo " --pipelinesLog Promote msbuild errors/warnings to Azure Pipelines timeline issues; defaults to on in CI (short: -pl)"
echo " --prepareMachine Prepare machine for CI run, clean up processes after build"
echo " --nodeReuse Sets nodereuse msbuild parameter ('true' or 'false')"
+ echo " --msbuildMultiThreaded Sets MSBuild's multi-threaded mode, i.e. the -mt switch ('true' or 'false') (short: --mt)"
echo " --warnAsError Sets warnaserror msbuild parameter ('true' or 'false')"
echo " --warnNotAsError Sets a semi-colon delimited list of warning codes that should not be treated as errors"
echo " --buildCheck Sets /check msbuild parameter"
@@ -84,7 +85,9 @@ clean=false
warn_as_error=true
warn_not_as_error=''
-node_reuse=true
+# Empty means "not specified"; tools.sh defaults these to on for local builds and off on CI.
+node_reuse=''
+msbuild_multi_threaded=''
build_check=false
binary_log=false
binary_log_name=''
@@ -199,6 +202,10 @@ while [[ $# -gt 0 ]]; do
node_reuse=$2
shift
;;
+ -msbuildmultithreaded|-mt)
+ msbuild_multi_threaded=$2
+ shift
+ ;;
-buildcheck)
build_check=true
;;
@@ -224,11 +231,6 @@ fi
if [[ "$ci" == true ]]; then
pipelines_log=true
- # Disable node reuse on CI unless explicitly opted in via MSBUILD_NODEREUSE_ENABLED.
- # Internal testing only; this env var will be replaced with a switch (https://github.com/dotnet/arcade/issues/17013) and must not be depended on.
- if [[ "${MSBUILD_NODEREUSE_ENABLED:-}" != "1" ]]; then
- node_reuse=false
- fi
if [[ "$exclude_ci_binary_log" == false ]]; then
binary_log=true
fi
diff --git a/eng/common/core-templates/job/helix-job-monitor.yml b/eng/common/core-templates/job/helix-job-monitor.yml
index a65b50d0a787..53bbf74927e7 100644
--- a/eng/common/core-templates/job/helix-job-monitor.yml
+++ b/eng/common/core-templates/job/helix-job-monitor.yml
@@ -62,6 +62,12 @@ parameters:
type: number
default: 30
+# Maximum number of work items whose results may be downloaded, parsed, and
+# uploaded concurrently.
+- name: testResultUploadParallelism
+ type: number
+ default: 48
+
# When 'true' (the default), Helix work items that exit 0 but have failed AzDO test results
# are treated as failed: they count toward the monitor's exit code and are resubmitted by a
# later invocation's retry pass. Set to 'false' to fall back to exit-code-only outcomes.
@@ -84,6 +90,15 @@ parameters:
type: boolean
default: false
+# Controls per-test output attachments. Defaults to Failed.
+- name: testResultAttachmentMode
+ type: string
+ default: Failed
+ values:
+ - Failed
+ - All
+ - None
+
# Advanced: optional pipeline artifact (produced earlier in this run) that contains the tool
# nupkg. When set, the artifact is downloaded and the tool is installed from the nupkg into
# a local tool-path; this bypasses the repo's .config/dotnet-tools.json manifest and is
@@ -206,10 +221,13 @@ jobs:
--max-wait-minutes "$((${{ parameters.timeoutInMinutes }} - 5))" # Set the tool's timeout slightly lower than the Azure DevOps job timeout to allow it to exit gracefully.
--stage-name '$(System.StageName)'
--stage-attempt '$(System.StageAttempt)'
+ --job-attempt '$(System.JobAttempt)'
+ --test-result-upload-parallelism '${{ parameters.testResultUploadParallelism }}'
)
organization='${{ parameters.organization }}'
repository='${{ parameters.repository }}'
+ testResultAttachmentMode='${{ parameters.testResultAttachmentMode }}'
# Fall back to Azure DevOps-provided environment variables when the caller did not
# supply organization / repository explicitly. BUILD_REPOSITORY_NAME is typically
@@ -232,6 +250,9 @@ jobs:
if [ -n "$organization" ]; then toolArgs+=( --organization "$organization" ); fi
if [ -n "$repository" ]; then toolArgs+=( --repository "$repository" ); fi
+ if [ -n "$testResultAttachmentMode" ]; then
+ toolArgs+=( --test-result-attachment-mode "$testResultAttachmentMode" )
+ fi
# Build.Reason and Build.SourceBranch are required to derive the Helix source filter
# the same way the Helix SDK submitter does (PR -> 'pr', internal -> 'official',
diff --git a/eng/common/core-templates/job/onelocbuild.yml b/eng/common/core-templates/job/onelocbuild.yml
index 4f5653d73ac7..ce077368e40d 100644
--- a/eng/common/core-templates/job/onelocbuild.yml
+++ b/eng/common/core-templates/job/onelocbuild.yml
@@ -14,10 +14,11 @@ parameters:
# exist, and any pipeline that sets this to '' fall back to PAT-based auth via the CeapexPat parameter.
CeapexServiceConnection: 'dnceng-onelocbuild-ceapex'
- # GitHub App authentication for the OneLoc check-in PR (dnceng/internal only).
- # The infrastructure identifiers are centralized here and the App path is enabled by default.
- # DevDiv requires its own project-scoped service connection before this path can be enabled there.
+ # GitHub App authentication for the OneLoc check-in PR.
+ # dnceng/internal and DevDiv/DevDiv are enabled by default with their project-scoped service
+ # connections. Other projects must explicitly opt in after provisioning equivalent infrastructure.
UseGitHubAppAuthentication: true
+ UseGitHubAppAuthenticationInOtherProjects: false
GitHubAppServiceConnection: 'dnceng-oneloc-githubapp'
GitHubAppClientId: 'Iv23lijBU8x3gc9lDOc9'
GitHubAppKeyVaultName: 'EngKeyVault'
@@ -98,13 +99,16 @@ jobs:
outputVariableName: 'CeapexEntraToken'
condition: ${{ parameters.condition }}
- # Mint a short-lived GitHub App installation token for the loc check-in PR (dnceng/internal only).
- # All other projects fall back to PAT-based auth, since the app service connection is scoped to dnceng/internal.
- - ${{ if and(eq(parameters.RepoType, 'gitHub'), eq(parameters.UseGitHubAppAuthentication, true), eq(variables['System.TeamProject'], 'internal')) }}:
+ # Mint a short-lived GitHub App installation token for the loc check-in PR. Use the connection
+ # provisioned in each supported project; other projects must explicitly opt in and override it.
+ - ${{ if and(eq(parameters.RepoType, 'gitHub'), eq(parameters.UseGitHubAppAuthentication, true), or(eq(variables['System.TeamProject'], 'internal'), eq(variables['System.TeamProject'], 'DevDiv'), eq(parameters.UseGitHubAppAuthenticationInOtherProjects, true))) }}:
- template: /eng/common/core-templates/steps/get-github-app-token.yml
parameters:
is1ESPipeline: ${{ parameters.is1ESPipeline }}
- azureSubscription: ${{ parameters.GitHubAppServiceConnection }}
+ ${{ if and(eq(variables['System.TeamProject'], 'DevDiv'), eq(parameters.GitHubAppServiceConnection, 'dnceng-oneloc-githubapp')) }}:
+ azureSubscription: 'devdiv-oneloc-githubapp'
+ ${{ else }}:
+ azureSubscription: ${{ parameters.GitHubAppServiceConnection }}
keyVaultName: ${{ parameters.GitHubAppKeyVaultName }}
keyName: ${{ parameters.GitHubAppKeyName }}
appClientId: ${{ parameters.GitHubAppClientId }}
@@ -133,9 +137,9 @@ jobs:
patVariable: ${{ parameters.CeapexPat }}
${{ if eq(parameters.RepoType, 'gitHub') }}:
repoType: ${{ parameters.RepoType }}
- ${{ if and(eq(parameters.UseGitHubAppAuthentication, true), eq(variables['System.TeamProject'], 'internal')) }}:
+ ${{ if and(eq(parameters.UseGitHubAppAuthentication, true), or(eq(variables['System.TeamProject'], 'internal'), eq(variables['System.TeamProject'], 'DevDiv'), eq(parameters.UseGitHubAppAuthenticationInOtherProjects, true))) }}:
gitHubPatVariable: "$(GitHubAppInstallationToken)"
- ${{ if or(eq(parameters.UseGitHubAppAuthentication, false), ne(variables['System.TeamProject'], 'internal')) }}:
+ ${{ else }}:
gitHubPatVariable: "${{ parameters.GithubPat }}"
${{ if ne(parameters.MirrorRepo, '') }}:
isMirrorRepoSelected: true
diff --git a/eng/common/core-templates/post-build/post-build.yml b/eng/common/core-templates/post-build/post-build.yml
index 9d951352696e..6dcee6664d68 100644
--- a/eng/common/core-templates/post-build/post-build.yml
+++ b/eng/common/core-templates/post-build/post-build.yml
@@ -236,6 +236,7 @@ stages:
StageLabel: 'Validation'
JobLabel: 'Signing'
BinlogToolVersion: $(BinlogToolVersion)
+ enableInternalRuntimes: false
# SourceLink validation has been removed — the underlying CLI tool
# (targeting netcoreapp2.1) has not functioned for years.
diff --git a/eng/common/core-templates/steps/enable-internal-sources.yml b/eng/common/core-templates/steps/enable-internal-sources.yml
index 51af9a017091..843cdff7821e 100644
--- a/eng/common/core-templates/steps/enable-internal-sources.yml
+++ b/eng/common/core-templates/steps/enable-internal-sources.yml
@@ -19,7 +19,7 @@ steps:
displayName: Setup Internal Feeds
inputs:
filePath: $(System.DefaultWorkingDirectory)/eng/common/SetupNugetSources.ps1
- arguments: -ConfigFile $(System.DefaultWorkingDirectory)/NuGet.config -Password $Env:Token
+ arguments: -ConfigFile $(System.DefaultWorkingDirectory)/NuGet.config
env:
Token: ${{ parameters.legacyCredential }}
- task: Bash@3
@@ -28,7 +28,7 @@ steps:
inputs:
targetType: inline
script: |
- "$(System.DefaultWorkingDirectory)/eng/common/SetupNugetSources.sh" "$(System.DefaultWorkingDirectory)/NuGet.config" "$Token"
+ "$(System.DefaultWorkingDirectory)/eng/common/SetupNugetSources.sh" "$(System.DefaultWorkingDirectory)/NuGet.config"
env:
Token: ${{ parameters.legacyCredential }}
# If running on dnceng (internal project), just use the default behavior for NuGetAuthenticate.
@@ -58,13 +58,17 @@ steps:
displayName: Setup Internal Feeds
inputs:
filePath: $(System.DefaultWorkingDirectory)/eng/common/SetupNugetSources.ps1
- arguments: -ConfigFile $(System.DefaultWorkingDirectory)/NuGet.config -Password $(dnceng-artifacts-feeds-read-access-token)
+ arguments: -ConfigFile $(System.DefaultWorkingDirectory)/NuGet.config
+ env:
+ Token: $(dnceng-artifacts-feeds-read-access-token)
- task: Bash@3
condition: and(succeeded(), ne(variables['Agent.Os'], 'Windows_NT'))
displayName: Setup Internal Feeds
inputs:
filePath: $(System.DefaultWorkingDirectory)/eng/common/SetupNugetSources.sh
- arguments: $(System.DefaultWorkingDirectory)/NuGet.config $(dnceng-artifacts-feeds-read-access-token)
+ arguments: $(System.DefaultWorkingDirectory)/NuGet.config
+ env:
+ Token: $(dnceng-artifacts-feeds-read-access-token)
# This is required in certain scenarios to install the ADO credential provider.
# It installed by default in some msbuild invocations (e.g. VS msbuild), but needs to be installed for others
# (e.g. dotnet msbuild).
diff --git a/eng/common/core-templates/steps/publish-logs.yml b/eng/common/core-templates/steps/publish-logs.yml
index 2c1e0ab11620..244fef0890e9 100644
--- a/eng/common/core-templates/steps/publish-logs.yml
+++ b/eng/common/core-templates/steps/publish-logs.yml
@@ -5,6 +5,7 @@ parameters:
# A default - in case value from eng/common/core-templates/post-build/common-variables.yml is not passed
BinlogToolVersion: '1.0.11'
is1ESPipeline: false
+ enableInternalRuntimes: true
steps:
- task: Powershell@2
@@ -25,13 +26,20 @@ steps:
# Sensitive data can as well be added to $(System.DefaultWorkingDirectory)/eng/BinlogSecretsRedactionFile.txt'
# If the file exists - sensitive data for redaction will be sourced from it
# (single entry per line, lines starting with '# ' are considered comments and skipped)
- arguments: -InputPath '$(System.DefaultWorkingDirectory)/PostBuildLogs'
- -BinlogToolVersion '${{parameters.BinlogToolVersion}}'
- -TokensFilePath '$(System.DefaultWorkingDirectory)/eng/BinlogSecretsRedactionFile.txt'
- -runtimeSourceFeed https://ci.dot.net/internal
- -runtimeSourceFeedKey '$(dotnetbuilds-internal-container-read-token-base64)'
- '$(System.AccessToken)'
- ${{parameters.CustomSensitiveDataList}}
+ ${{ if and(eq(parameters.enableInternalRuntimes, true), ne(variables['System.TeamProject'], 'public')) }}:
+ arguments: -InputPath '$(System.DefaultWorkingDirectory)/PostBuildLogs'
+ -BinlogToolVersion '${{parameters.BinlogToolVersion}}'
+ -TokensFilePath '$(System.DefaultWorkingDirectory)/eng/BinlogSecretsRedactionFile.txt'
+ -runtimeSourceFeed https://ci.dot.net/internal
+ -runtimeSourceFeedKey '$(dotnetbuilds-internal-container-read-token-base64)'
+ '$(System.AccessToken)'
+ ${{parameters.CustomSensitiveDataList}}
+ ${{ else }}:
+ arguments: -InputPath '$(System.DefaultWorkingDirectory)/PostBuildLogs'
+ -BinlogToolVersion '${{parameters.BinlogToolVersion}}'
+ -TokensFilePath '$(System.DefaultWorkingDirectory)/eng/BinlogSecretsRedactionFile.txt'
+ '$(System.AccessToken)'
+ ${{parameters.CustomSensitiveDataList}}
continueOnError: true
condition: always()
diff --git a/eng/common/msbuild.ps1 b/eng/common/msbuild.ps1
index 495d533a9098..b6dfb570ea50 100644
--- a/eng/common/msbuild.ps1
+++ b/eng/common/msbuild.ps1
@@ -3,6 +3,7 @@ Param(
[string] $verbosity = 'minimal',
[bool] $warnAsError = $true,
[bool] $nodeReuse = $true,
+ [bool][Alias('mt')]$msbuildMultiThreaded = $false,
[switch] $ci,
[switch] $prepareMachine,
[switch] $excludePrereleaseVS,
@@ -13,12 +14,9 @@ Param(
. $PSScriptRoot\tools.ps1
try {
- if ($ci) {
- # Disable node reuse on CI unless explicitly opted in via MSBUILD_NODEREUSE_ENABLED.
- # Internal testing only; this env var will be replaced with a switch (https://github.com/dotnet/arcade/issues/17013) and must not be depended on.
- if ($env:MSBUILD_NODEREUSE_ENABLED -ne "1") {
- $nodeReuse = $false
- }
+ # Node reuse isn't used on CI unless it was explicitly requested via -nodeReuse.
+ if ($ci -and -not $PSBoundParameters.ContainsKey('nodeReuse')) {
+ $nodeReuse = $false
}
MSBuild @extraArgs
diff --git a/eng/common/msbuild.sh b/eng/common/msbuild.sh
index 333be3232fcf..a40c101237b1 100755
--- a/eng/common/msbuild.sh
+++ b/eng/common/msbuild.sh
@@ -14,7 +14,9 @@ scriptroot="$( cd -P "$( dirname "$source" )" && pwd )"
verbosity='minimal'
warn_as_error=true
-node_reuse=true
+# Empty means "not specified"; tools.sh defaults these to on for local builds and off on CI.
+node_reuse=''
+msbuild_multi_threaded=''
prepare_machine=false
extra_args=''
@@ -33,6 +35,10 @@ while (($# > 0)); do
node_reuse=$2
shift 2
;;
+ --msbuildmultithreaded|--mt)
+ msbuild_multi_threaded=$2
+ shift 2
+ ;;
--ci)
ci=true
shift 1
@@ -50,13 +56,5 @@ done
. "$scriptroot/tools.sh"
-if [[ "$ci" == true ]]; then
- # Disable node reuse on CI unless explicitly opted in via MSBUILD_NODEREUSE_ENABLED.
- # Internal testing only; this env var will be replaced with a switch (https://github.com/dotnet/arcade/issues/17013) and must not be depended on.
- if [[ "${MSBUILD_NODEREUSE_ENABLED:-}" != "1" ]]; then
- node_reuse=false
- fi
-fi
-
MSBuild $extra_args
ExitWithExitCode 0
diff --git a/eng/common/tools.ps1 b/eng/common/tools.ps1
index da07386ff1fe..e84033dad90c 100644
--- a/eng/common/tools.ps1
+++ b/eng/common/tools.ps1
@@ -31,11 +31,16 @@
# Set to true to reuse msbuild nodes. Recommended to not reuse on CI.
[bool]$nodeReuse = if (Test-Path variable:nodeReuse) { $nodeReuse } else { !$ci }
+# Set to true to build with MSBuild's multi-threaded mode (-mt). Opt-in for now, so off unless it was
+# explicitly requested. It's intended to become the default for local builds once it has proven out.
+[bool]$msbuildMultiThreaded = if (Test-Path variable:msbuildMultiThreaded) { $msbuildMultiThreaded } else { $false }
+
# Configures warning treatment in msbuild.
[bool]$warnAsError = if (Test-Path variable:warnAsError) { $warnAsError } else { $true }
# Specifies semi-colon delimited list of warning codes that should not be treated as errors.
-[string]$warnNotAsError = if (Test-Path variable:warnNotAsError) { $warnNotAsError } else { '' }
+# Defaults to NuGet Audit warning codes NU1901-NU1904.
+[string]$warnNotAsError = if ((Test-Path variable:warnNotAsError) -and $warnNotAsError) { $warnNotAsError } else { 'NU1901;NU1902;NU1903;NU1904' }
# Specifies which msbuild engine to use for build: 'vs', 'dotnet' or unspecified (determined based on presence of tools.vs in global.json).
[string]$msbuildEngine = if (Test-Path variable:msbuildEngine) { $msbuildEngine } else { $null }
@@ -808,8 +813,8 @@ function MSBuild() {
$cmdArgs = "$($buildTool.Command) /m /nologo /clp:Summary /v:$verbosity /nr:$nodeReuse /p:ContinuousIntegrationBuild=$ci"
- # Add -mt flag for MSBuild multithreaded mode if enabled via environment variable
- if ($env:MSBUILD_MT_ENABLED -eq "1") {
+ # Build with MSBuild's multi-threaded mode.
+ if ($msbuildMultiThreaded) {
$cmdArgs += ' -mt'
}
diff --git a/eng/common/tools.sh b/eng/common/tools.sh
index 20f791c11dee..4d14b100b063 100755
--- a/eng/common/tools.sh
+++ b/eng/common/tools.sh
@@ -1,5 +1,15 @@
#!/usr/bin/env bash
+# Normalizes the value of a boolean build argument. Accepts 1/0 in addition to true/false so that
+# the same value works with the PowerShell scripts, whose [bool] parameters only bind 1/0.
+function NormalizeBoolArg {
+ case "${1:-}" in
+ 1) echo true ;;
+ 0) echo false ;;
+ *) echo "${1:-}" ;;
+ esac
+}
+
# Initialize variables if they aren't already defined.
# CI mode - set to true on CI server for PR validation build or official build.
@@ -43,17 +53,25 @@ restore=${restore:-true}
verbosity=${verbosity:-'minimal'}
# Set to true to reuse msbuild nodes. Recommended to not reuse on CI.
+node_reuse=$(NormalizeBoolArg "${node_reuse:-}")
if [[ "$ci" == true ]]; then
node_reuse=${node_reuse:-false}
else
node_reuse=${node_reuse:-true}
fi
+# Set to true to build with MSBuild's multi-threaded mode (-mt). Opt-in for now, so off unless it was
+# explicitly requested. It's intended to become the default for local builds once it has proven out.
+msbuild_multi_threaded=$(NormalizeBoolArg "${msbuild_multi_threaded:-}")
+msbuild_multi_threaded=${msbuild_multi_threaded:-false}
+
# Configures warning treatment in msbuild.
+warn_as_error=$(NormalizeBoolArg "${warn_as_error:-}")
warn_as_error=${warn_as_error:-true}
# Specifies semi-colon delimited list of warning codes that should not be treated as errors.
-warn_not_as_error=${warn_not_as_error:-''}
+# Defaults to NuGet Audit warning codes NU1901-NU1904.
+warn_not_as_error="${warn_not_as_error:-NU1901;NU1902;NU1903;NU1904}"
# True to attempt using .NET Core already that meets requirements specified in global.json
# installed on the machine instead of downloading one.
@@ -587,9 +605,9 @@ function MSBuild {
}
}
- # Add -mt flag for MSBuild multithreaded mode if enabled via environment variable
+ # Build with MSBuild's multi-threaded mode.
local mt_switch=""
- if [[ "${MSBUILD_MT_ENABLED:-}" == "1" ]]; then
+ if [[ "$msbuild_multi_threaded" == true ]]; then
mt_switch="-mt"
fi
diff --git a/global.json b/global.json
index 39fe6e71ddd4..7c80a0f85f3f 100644
--- a/global.json
+++ b/global.json
@@ -5,12 +5,12 @@
"$host$"
],
"errorMessage": "The .NET SDK is not installed or is not configured correctly. Please run ./build to install the correct SDK version locally.",
- "version": "11.0.100-preview.6.26359.118",
+ "version": "11.0.100-rc.1.26420.103",
"allowPrerelease": true,
"rollForward": "latestFeature"
},
"tools": {
- "dotnet": "11.0.100-preview.6.26359.118",
+ "dotnet": "11.0.100-rc.1.26420.103",
"runtimes": {
"dotnet": [
"$(MicrosoftNETCorePlatformsPackageVersion)"
@@ -27,8 +27,8 @@
"runner": "Microsoft.Testing.Platform"
},
"msbuild-sdks": {
- "Microsoft.DotNet.Arcade.Sdk": "11.0.0-beta.26410.101",
- "Microsoft.DotNet.Helix.Sdk": "11.0.0-beta.26410.101",
+ "Microsoft.DotNet.Arcade.Sdk": "11.0.0-beta.26431.116",
+ "Microsoft.DotNet.Helix.Sdk": "11.0.0-beta.26431.116",
"Microsoft.Build.NoTargets": "3.7.134",
"Microsoft.Build.Traversal": "4.1.82",
"Microsoft.WixToolset.Sdk": "6.0.3-dotnet.6",
diff --git a/src/Cli/dotnet/Commands/Run/CSharpCompilerCommand.Generated.cs b/src/Cli/dotnet/Commands/Run/CSharpCompilerCommand.Generated.cs
index 19d768d4f347..6fedfd39b6ac 100644
--- a/src/Cli/dotnet/Commands/Run/CSharpCompilerCommand.Generated.cs
+++ b/src/Cli/dotnet/Commands/Run/CSharpCompilerCommand.Generated.cs
@@ -35,7 +35,7 @@ .. GetFrameworkReferenceArguments(),
"/warnaserror-",
"/utf8output",
"/deterministic+",
- "/langversion:14.0",
+ "/langversion:15.0",
"/features:FileBasedProgram",
$"/analyzerconfig:{SdkPath}/Sdks/Microsoft.NET.Sdk/codestyle/cs/build/config/analysislevelstyle_default.globalconfig",
$"/analyzerconfig:{objDir}/{FileName}.GeneratedMSBuildEditorConfig.editorconfig",
diff --git a/src/Cli/dotnet/Commands/Run/CSharpCompilerCommand.cs b/src/Cli/dotnet/Commands/Run/CSharpCompilerCommand.cs
index 33f2f9a29a65..1e0b1923aa0f 100644
--- a/src/Cli/dotnet/Commands/Run/CSharpCompilerCommand.cs
+++ b/src/Cli/dotnet/Commands/Run/CSharpCompilerCommand.cs
@@ -110,6 +110,7 @@ public int Execute(out bool fallbackToNormalBuild)
buildRequest,
pipeName: pipeName,
clientDirectory: ClientDirectory,
+ buildEnvironment: StandardBuildEnvironment.Instance,
logger,
cancellationToken: default);
diff --git a/src/RazorSdk/Tool/Json/ObjectReaders_TagHelpers.cs b/src/RazorSdk/Tool/Json/ObjectReaders_TagHelpers.cs
index 33a7d473b578..77ef662f9042 100644
--- a/src/RazorSdk/Tool/Json/ObjectReaders_TagHelpers.cs
+++ b/src/RazorSdk/Tool/Json/ObjectReaders_TagHelpers.cs
@@ -229,6 +229,7 @@ static MetadataObject ReadMetadata(JsonDataReader reader, string propertyName)
MetadataKind.Component => reader.ReadNonNullObjectOrDefault(propertyName, ReadComponentMetadata, defaultValue: ComponentMetadata.Default),
MetadataKind.EventHandler => reader.ReadNonNullObject(propertyName, ReadEventHandlerMetadata),
MetadataKind.ViewComponent => reader.ReadNonNullObject(propertyName, ReadViewComponentMetadata),
+ MetadataKind.AssetPath => reader.ReadNonNullObject(propertyName, ReadAssetPathMetadata),
_ => Assumed.Unreachable($"Unexpected MetadataKind '{metadataKind}'."),
};
}
@@ -255,7 +256,19 @@ static PropertyMetadata ReadPropertyMetadata(JsonDataReader reader)
IsDelegateSignature = reader.ReadBooleanOrFalse(nameof(PropertyMetadata.IsDelegateSignature)),
IsDelegateWithAwaitableResult = reader.ReadBooleanOrFalse(nameof(PropertyMetadata.IsDelegateWithAwaitableResult)),
IsGenericTyped = reader.ReadBooleanOrFalse(nameof(PropertyMetadata.IsGenericTyped)),
- IsInitOnlyProperty = reader.ReadBooleanOrFalse(nameof(PropertyMetadata.IsInitOnlyProperty))
+ IsInitOnlyProperty = reader.ReadBooleanOrFalse(nameof(PropertyMetadata.IsInitOnlyProperty)),
+ AcceptsAssetPath = reader.ReadBooleanOrFalse(nameof(PropertyMetadata.AcceptsAssetPath))
+ };
+
+ return builder.Build();
+ }
+
+ static AssetPathMetadata ReadAssetPathMetadata(JsonDataReader reader)
+ {
+ var builder = new AssetPathMetadata.Builder
+ {
+ Element = reader.ReadNonNullString(nameof(AssetPathMetadata.Element)),
+ Attribute = reader.ReadNonNullString(nameof(AssetPathMetadata.Attribute))
};
return builder.Build();
diff --git a/src/RazorSdk/Tool/Json/ObjectWriters_TagHelpers.cs b/src/RazorSdk/Tool/Json/ObjectWriters_TagHelpers.cs
index 266b51bed47b..7768c35381f7 100644
--- a/src/RazorSdk/Tool/Json/ObjectWriters_TagHelpers.cs
+++ b/src/RazorSdk/Tool/Json/ObjectWriters_TagHelpers.cs
@@ -200,6 +200,10 @@ static void WriteMetadata(JsonDataWriter writer, string propertyName, MetadataOb
WriteViewComponentMetadata(writer, (ViewComponentMetadata)value);
break;
+ case MetadataKind.AssetPath:
+ WriteAssetPathMetadata(writer, (AssetPathMetadata)value);
+ break;
+
default:
Debug.Fail($"Unsupported metadata kind '{value.Kind}'.");
break;
@@ -222,6 +226,7 @@ static void WritePropertyMetadata(JsonDataWriter writer, PropertyMetadata metada
writer.WriteIfNotFalse(nameof(metadata.IsDelegateWithAwaitableResult), metadata.IsDelegateWithAwaitableResult);
writer.WriteIfNotFalse(nameof(metadata.IsGenericTyped), metadata.IsGenericTyped);
writer.WriteIfNotFalse(nameof(metadata.IsInitOnlyProperty), metadata.IsInitOnlyProperty);
+ writer.WriteIfNotFalse(nameof(metadata.AcceptsAssetPath), metadata.AcceptsAssetPath);
}
static void WriteBindMetadata(JsonDataWriter writer, BindMetadata metadata)
@@ -250,6 +255,12 @@ static void WriteViewComponentMetadata(JsonDataWriter writer, ViewComponentMetad
{
writer.Write(nameof(metadata.Name), metadata.Name);
}
+
+ static void WriteAssetPathMetadata(JsonDataWriter writer, AssetPathMetadata metadata)
+ {
+ writer.Write(nameof(metadata.Element), metadata.Element);
+ writer.Write(nameof(metadata.Attribute), metadata.Attribute);
+ }
}
}
}
diff --git a/src/Workloads/VSInsertion/workloads.csproj b/src/Workloads/VSInsertion/workloads.csproj
index 075e90b68398..ec8ed766e155 100644
--- a/src/Workloads/VSInsertion/workloads.csproj
+++ b/src/Workloads/VSInsertion/workloads.csproj
@@ -116,9 +116,10 @@
-
+
-
+
(roundTripped[0].Metadata);
+ var metadata = (AssetPathMetadata)roundTripped[0].Metadata;
+ Assert.AreEqual("img", metadata.Element);
+ Assert.AreEqual("src", metadata.Attribute);
+ }
+
+ [TestMethod]
+ public void RoundTrip_ComponentPropertyAcceptingAssetPath_PreservesMetadata()
+ {
+ var json = """
+ [
+ {
+ "Flags": 1,
+ "Name": "MyComponent",
+ "AssemblyName": "ComponentAssembly",
+ "TypeName": "ComponentNamespace.MyComponent",
+ "BoundAttributes": [
+ {
+ "Flags": 0,
+ "Name": "source",
+ "PropertyName": "Source",
+ "TypeName": "System.String",
+ "DisplayName": "Source",
+ "MetadataKind": 2,
+ "Metadata": {
+ "AcceptsAssetPath": true
+ }
+ }
+ ]
+ }
+ ]
+ """;
+
+ var deserialized = Deserialize(json);
+ var reserialized = Serialize(deserialized);
+ var roundTripped = Deserialize(reserialized);
+
+ Assert.ContainsSingle(roundTripped);
+ Assert.ContainsSingle(roundTripped[0].BoundAttributes);
+ Assert.IsInstanceOfType(roundTripped[0].BoundAttributes[0].Metadata);
+ var metadata = (PropertyMetadata)roundTripped[0].BoundAttributes[0].Metadata;
+ Assert.IsTrue(metadata.AcceptsAssetPath);
+ }
+
[TestMethod]
public void RoundTrip_MultipleTagHelpers_PreservesAll()
{