diff --git a/NuGet.config b/NuGet.config
index 226fcd23c..c6dfa67b0 100644
--- a/NuGet.config
+++ b/NuGet.config
@@ -15,6 +15,8 @@
+
+
diff --git a/eng/Versions.props b/eng/Versions.props
index f33b39270..33fa1c88c 100644
--- a/eng/Versions.props
+++ b/eng/Versions.props
@@ -144,6 +144,10 @@
2.0.0
16.10.0-preview-20210304-04
+
+ 11.2.0-ci.d16-9.0
+ 6.0.0-preview.3.21161.5
+
2.0.1-servicing-26011-01
diff --git a/src/redist/redist.csproj b/src/redist/redist.csproj
index b9c93ddf5..e9c30d1da 100644
--- a/src/redist/redist.csproj
+++ b/src/redist/redist.csproj
@@ -31,6 +31,7 @@
+
diff --git a/src/redist/targets/BundledManifests.targets b/src/redist/targets/BundledManifests.targets
new file mode 100644
index 000000000..e87265be4
--- /dev/null
+++ b/src/redist/targets/BundledManifests.targets
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $(ArtifactsNonShippingPackagesDir)dotnet-sdkmanifests-$(FullNugetVersion)-$(ProductMonikerRid)$(InstallerExtension)
+ SDK_Manifests_$([System.String]::Copy('$(Version)').Replace('-', '_'))
+ Microsoft .NET SDK Workload Manifests $(Version)
+ $(BaseOutputPath)$(Configuration)\sdk-manifests
+
+
+
+
+
+
+
+
+
+
+
+
+ $(NuGetPackageRoot)%(Identity)/%(Version)
+
+
+
+
+
+
+
diff --git a/src/redist/targets/GenerateLayout.targets b/src/redist/targets/GenerateLayout.targets
index 302efe16c..6ba43cc96 100644
--- a/src/redist/targets/GenerateLayout.targets
+++ b/src/redist/targets/GenerateLayout.targets
@@ -501,6 +501,7 @@
GenerateBundledVersions;
LayoutRuntimeGraph;
LayoutTemplates;
+ LayoutManifests;
LayoutBundledTools;
RetargetTools;
CrossgenLayout;
diff --git a/src/redist/targets/GenerateMSIs.targets b/src/redist/targets/GenerateMSIs.targets
index a1365b5db..0c69a4db7 100644
--- a/src/redist/targets/GenerateMSIs.targets
+++ b/src/redist/targets/GenerateMSIs.targets
@@ -97,6 +97,7 @@
+
+
+
+
+ $(MSBuildThisFileDirectory)packaging/windows/clisdk/generatemanifestsmsi.ps1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/redist/targets/packaging/windows/clisdk/generatebundle.ps1 b/src/redist/targets/packaging/windows/clisdk/generatebundle.ps1
index d4eb57dfa..58bbdde7a 100644
--- a/src/redist/targets/packaging/windows/clisdk/generatebundle.ps1
+++ b/src/redist/targets/packaging/windows/clisdk/generatebundle.ps1
@@ -17,6 +17,7 @@ param(
[Parameter(Mandatory=$true)][string]$AspNetTargetingPackMSIFile,
[Parameter(Mandatory=$true)][string]$WindowsDesktopTargetingPackMSIFile,
[Parameter(Mandatory=$true)][string]$TemplatesMSIFile,
+ [Parameter(Mandatory=$true)][string]$ManifestsMSIFile,
[Parameter(Mandatory=$true)][string]$DotnetBundleOutput,
[Parameter(Mandatory=$true)][string]$WixRoot,
[Parameter(Mandatory=$true)][string]$ProductMoniker,
@@ -63,6 +64,7 @@ function RunCandleForBundle
-dAspNetTargetingPackMsiSourcePath="$AspNetTargetingPackMSIFile" `
-dWindowsDesktopTargetingPackMsiSourcePath="$WindowsDesktopTargetingPackMSIFile" `
-dTemplatesMsiSourcePath="$TemplatesMSIFile" `
+ -dManifestsMsiSourcePath="$ManifestsMSIFile" `
-dWinFormsAndWpfVersion="$WindowsDesktopVersion" `
-dAdditionalSharedFXMsiSourcePath="$AdditionalSharedFxMSIFile" `
-dAdditionalHostFXRMsiSourcePath="$AdditionalHostFxrMSIFile" `
diff --git a/src/redist/targets/packaging/windows/clisdk/generatemanifestsmsi.ps1 b/src/redist/targets/packaging/windows/clisdk/generatemanifestsmsi.ps1
new file mode 100644
index 000000000..4ef97e1dc
--- /dev/null
+++ b/src/redist/targets/packaging/windows/clisdk/generatemanifestsmsi.ps1
@@ -0,0 +1,151 @@
+# Copyright (c) .NET Foundation and contributors. All rights reserved.
+# Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+param(
+ [Parameter(Mandatory=$true)][string]$inputDir,
+ [Parameter(Mandatory=$true)][string]$DotnetMSIOutput,
+ [Parameter(Mandatory=$true)][string]$WixRoot,
+ [Parameter(Mandatory=$true)][string]$ProductMoniker,
+ [Parameter(Mandatory=$true)][string]$DotnetMSIVersion,
+ [Parameter(Mandatory=$true)][string]$SDKBundleVersion,
+ [Parameter(Mandatory=$true)][string]$DotnetCLINugetVersion,
+ [Parameter(Mandatory=$true)][string]$UpgradeCode,
+ [Parameter(Mandatory=$true)][string]$DependencyKeyName,
+ [Parameter(Mandatory=$true)][string]$Architecture
+)
+
+$InstallFileswsx = ".\manifest-install-files.wxs"
+$InstallFilesWixobj = "manifest-install-files.wixobj"
+
+function RunHeat
+{
+ $result = $true
+ pushd "$WixRoot"
+
+ Write-Information "Running heat.."
+
+ $heatOutput = .\heat.exe dir `"$inputDir`" -template fragment `
+ -sreg -ag `
+ -var var.DotnetSrc `
+ -cg InstallFiles `
+ -srd `
+ -dr DOTNETHOME `
+ -out manifest-install-files.wxs
+
+ Write-Information "Heat output: $heatOutput"
+
+ if($LastExitCode -ne 0)
+ {
+ $result = $false
+ Write-Information "Heat failed with exit code $LastExitCode."
+ }
+
+ popd
+ Write-Information "RunHeat result: $result"
+ return $result
+}
+
+function RunCandle
+{
+ $result = $true
+ pushd "$WixRoot"
+
+ Write-Information "Running candle.."
+
+ $candleOutput = .\candle.exe -nologo `
+ -dDotnetSrc="$inputDir" `
+ -dMicrosoftEula="$PSScriptRoot\dummyeula.rtf" `
+ -dProductMoniker="$ProductMoniker" `
+ -dBuildVersion="$DotnetMSIVersion" `
+ -dSDKBundleVersion="$SDKBundleVersion" `
+ -dNugetVersion="$DotnetCLINugetVersion" `
+ -dUpgradeCode="$UpgradeCode" `
+ -dDependencyKeyName="$DependencyKeyName" `
+ -arch "$Architecture" `
+ -ext WixDependencyExtension.dll `
+ "$PSScriptRoot\manifests.wxs" `
+ "$PSScriptRoot\provider.wxs" `
+ $InstallFileswsx
+
+ Write-Information "Candle output: $candleOutput"
+
+ if($LastExitCode -ne 0)
+ {
+ $result = $false
+ Write-Information "Candle failed with exit code $LastExitCode."
+ }
+
+ popd
+ return $result
+}
+
+function RunLight
+{
+ $result = $true
+ pushd "$WixRoot"
+
+ Write-Information "Running light.."
+ $CabCache = Join-Path $WixRoot "cabcache"
+
+ $lightOutput = .\light.exe -nologo -ext WixUIExtension -ext WixDependencyExtension -ext WixUtilExtension `
+ -cultures:en-us `
+ manifests.wixobj `
+ provider.wixobj `
+ $InstallFilesWixobj `
+ -b "$inputDir" `
+ -b "$PSScriptRoot" `
+ -reusecab `
+ -cc "$CabCache" `
+ -out $DotnetMSIOutput
+
+ Write-Information "Light output: $lightOutput"
+
+ if($LastExitCode -ne 0)
+ {
+ $result = $false
+ Write-Information "Light failed with exit code $LastExitCode."
+ }
+
+ popd
+ return $result
+}
+
+if(!(Test-Path $inputDir))
+{
+ throw "$inputDir not found"
+}
+
+Write-Information "Creating manifests MSI at $DotnetMSIOutput"
+
+if([string]::IsNullOrEmpty($WixRoot))
+{
+ Exit -1
+}
+
+if(-Not (RunHeat))
+{
+ Write-Information "Heat failed"
+ Exit -1
+}
+
+if(-Not (RunCandle))
+{
+ Write-Information "Candle failed"
+ Exit -1
+}
+
+if(-Not (RunLight))
+{
+ Write-Information "Light failed"
+ Exit -1
+}
+
+if(!(Test-Path $DotnetMSIOutput))
+{
+ throw "Unable to create the manifests MSI."
+ Exit -1
+}
+
+Write-Information "Successfully created manifests MSI - $DotnetMSIOutput"
+
+exit $LastExitCode
diff --git a/src/redist/targets/packaging/windows/clisdk/manifests.wxs b/src/redist/targets/packaging/windows/clisdk/manifests.wxs
new file mode 100644
index 000000000..a2ef49c4b
--- /dev/null
+++ b/src/redist/targets/packaging/windows/clisdk/manifests.wxs
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+ Installed OR ALLOWMSIINSTALL
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+