Skip to content

Commit f03600d

Browse files
authored
Update overlay SDK to include the stage0 downlevel implicit versions (#50344) (#50418)
2 parents d5aca53 + c847ca6 commit f03600d

File tree

2 files changed

+86
-19
lines changed

2 files changed

+86
-19
lines changed

src/Layout/redist/targets/OverlaySdkOnLKG.targets

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@
77
<_DotNetHiveRoot Condition="!HasTrailingSlash('$(_DotNetHiveRoot)')">$(_DotNetHiveRoot)/</_DotNetHiveRoot>
88
</PropertyGroup>
99

10+
<!-- Get stage 0 SDK version without having to duplicate the LKG SDK property between the global.json
11+
and a property. -->
12+
<Exec Command="$(DotnetTool) --version" ConsoleToMsbuild="true">
13+
<Output TaskParameter="ConsoleOutput" PropertyName="Stage0SdkVersion"/>
14+
</Exec>
15+
1016
<!-- Copy artifacts from the stage0 SDK folder.
1117
Ignore the sdk, templates and host files for which only live built artifacts should be used. -->
1218
<ItemGroup>
@@ -29,6 +35,13 @@
2935
SourceFiles="@(InstallerOutputFile->Metadata('Source'))"
3036
SkipUnchangedFiles="true"
3137
UseHardLinksIfPossible="true" />
38+
39+
<OverrideAndCreateBundledNETCoreAppPackageVersion
40+
Stage0MicrosoftNETCoreAppRefPackageVersionPath="$(_DotNetHiveRoot)/sdk/$(Stage0SdkVersion)/Microsoft.NETCoreSdk.BundledVersions.props"
41+
MicrosoftNETCoreAppRefPackageVersion="$(MicrosoftNETCoreAppRefPackageVersion)"
42+
NewSDKVersion="$(Version)"
43+
TargetRid="$(TargetRid)"
44+
OutputPath="$(TestHostDotNetRoot)/sdk/$(Version)/Microsoft.NETCoreSdk.BundledVersions.props"/>
3245
</Target>
3346

3447
<Target Name="PublishTestWorkloads"

src/Tasks/sdk-tasks/OverrideAndCreateBundledNETCoreAppPackageVersion.cs

Lines changed: 73 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,12 @@
33

44
#nullable disable
55

6+
using System;
7+
using System.IO;
8+
using System.Linq;
9+
using System.Xml.Linq;
610
using Microsoft.Build.Framework;
11+
using Microsoft.Build.Utilities;
712
using NuGet.Versioning;
813

914
namespace Microsoft.DotNet.Build.Tasks
@@ -15,6 +20,7 @@ namespace Microsoft.DotNet.Build.Tasks
1520
/// and then update the stage 0 back.
1621
///
1722
/// Override NETCoreSdkVersion to stage 0 sdk version like 6.0.100-dev
23+
/// Override NETCoreSdkRuntimeIdentifier and NETCoreSdkPortableRuntimeIdentifier to match the target RID
1824
///
1925
/// Use a task to override since it was generated as a string literal replace anyway.
2026
/// And using C# can have better error when anything goes wrong.
@@ -32,6 +38,8 @@ public sealed class OverrideAndCreateBundledNETCoreAppPackageVersion : Task
3238

3339
[Required] public string NewSDKVersion { get; set; }
3440

41+
[Required] public string TargetRid { get; set; }
42+
3543
[Required] public string OutputPath { get; set; }
3644

3745
public override bool Execute()
@@ -40,14 +48,18 @@ public override bool Execute()
4048
ExecuteInternal(
4149
File.ReadAllText(Stage0MicrosoftNETCoreAppRefPackageVersionPath),
4250
MicrosoftNETCoreAppRefPackageVersion,
43-
NewSDKVersion));
51+
NewSDKVersion,
52+
TargetRid,
53+
Log));
4454
return true;
4555
}
4656

4757
public static string ExecuteInternal(
4858
string stage0MicrosoftNETCoreAppRefPackageVersionContent,
4959
string microsoftNETCoreAppRefPackageVersion,
50-
string newSDKVersion)
60+
string newSDKVersion,
61+
string targetRid,
62+
TaskLoggingHelper log)
5163
{
5264
var projectXml = XDocument.Parse(stage0MicrosoftNETCoreAppRefPackageVersionContent);
5365

@@ -56,6 +68,8 @@ public static string ExecuteInternal(
5668
var propertyGroup = projectXml.Root.Elements(ns + "PropertyGroup").First();
5769

5870
propertyGroup.Element(ns + "NETCoreSdkVersion").Value = newSDKVersion;
71+
propertyGroup.Element(ns + "NETCoreSdkRuntimeIdentifier").Value = targetRid;
72+
propertyGroup.Element(ns + "NETCoreSdkPortableRuntimeIdentifier").Value = targetRid;
5973

6074

6175
var originalBundledNETCoreAppPackageVersion = propertyGroup.Element(ns + "BundledNETCoreAppPackageVersion").Value;
@@ -77,6 +91,7 @@ public static string ExecuteInternal(
7791
propertyGroup.Element(ns + "BundledNETCoreAppPackageVersion").Value = newBundledPackageVersion;
7892

7993
var isNETServicing = IsNETServicing(originalBundledNETCoreAppPackageVersion);
94+
var currentTargetFramework = $"net{parsedMicrosoftNETCoreAppRefPackageVersion.Major}.0";
8095

8196
void CheckAndReplaceElement(XElement element)
8297
{
@@ -87,6 +102,8 @@ void CheckAndReplaceElement(XElement element)
87102
element.ToString(), element.Value, originalBundledNETCoreAppPackageVersion));
88103
}
89104

105+
log.LogMessage(MessageImportance.High,
106+
$"Replacing element {element.Name} value '{element.Value}' with '{newBundledPackageVersion}'");
90107
element.Value = newBundledPackageVersion;
91108
}
92109

@@ -100,6 +117,8 @@ void CheckAndReplaceAttribute(XAttribute attribute)
100117
originalBundledNETCoreAppPackageVersion));
101118
}
102119

120+
log.LogMessage(MessageImportance.High,
121+
$"Replacing attribute {attribute.Name} value '{attribute.Value}' with '{newBundledPackageVersion}' in element {attribute.Parent.Name}");
103122
attribute.Value = newBundledPackageVersion;
104123
}
105124

@@ -112,25 +131,60 @@ void CheckAndReplaceAttribute(XAttribute attribute)
112131

113132
if (!isNETServicing)
114133
{
115-
CheckAndReplaceAttribute(itemGroup
116-
.Elements(ns + "KnownFrameworkReference").First().Attribute("DefaultRuntimeFrameworkVersion"));
117-
CheckAndReplaceAttribute(itemGroup
118-
.Elements(ns + "KnownFrameworkReference").First().Attribute("TargetingPackVersion"));
134+
foreach (var element in itemGroup.Elements(ns + "KnownFrameworkReference")
135+
.Where(e => e.Attribute("TargetFramework")?.Value == currentTargetFramework))
136+
{
137+
CheckAndReplaceAttribute(element.Attribute("DefaultRuntimeFrameworkVersion"));
138+
CheckAndReplaceAttribute(element.Attribute("TargetingPackVersion"));
139+
}
140+
}
141+
142+
foreach (var element in itemGroup.Elements(ns + "KnownFrameworkReference")
143+
.Where(e => e.Attribute("TargetFramework")?.Value == currentTargetFramework))
144+
{
145+
CheckAndReplaceAttribute(element.Attribute("LatestRuntimeFrameworkVersion"));
146+
}
147+
foreach (var element in itemGroup.Elements(ns + "KnownAppHostPack")
148+
.Where(e => e.Attribute("TargetFramework")?.Value == currentTargetFramework))
149+
{
150+
CheckAndReplaceAttribute(element.Attribute("AppHostPackVersion"));
151+
}
152+
153+
foreach (var element in itemGroup.Elements(ns + "KnownCrossgen2Pack")
154+
.Where(e => e.Attribute("TargetFramework")?.Value == currentTargetFramework))
155+
{
156+
CheckAndReplaceAttribute(element.Attribute("Crossgen2PackVersion"));
157+
}
158+
159+
foreach (var element in itemGroup.Elements(ns + "KnownILCompilerPack")
160+
.Where(e => e.Attribute("TargetFramework")?.Value == currentTargetFramework))
161+
{
162+
CheckAndReplaceAttribute(element.Attribute("ILCompilerPackVersion"));
163+
}
164+
165+
foreach (var element in itemGroup.Elements(ns + "KnownILLinkPack")
166+
.Where(e => e.Attribute("TargetFramework")?.Value == currentTargetFramework))
167+
{
168+
CheckAndReplaceAttribute(element.Attribute("ILLinkPackVersion"));
169+
}
170+
171+
// web assembly packs always use the latest regardless of the TFM
172+
foreach (var element in itemGroup.Elements(ns + "KnownWebAssemblySdkPack"))
173+
{
174+
CheckAndReplaceAttribute(element.Attribute("WebAssemblySdkPackVersion"));
175+
}
176+
177+
foreach (var element in itemGroup.Elements(ns + "KnownAspNetCorePack")
178+
.Where(e => e.Attribute("TargetFramework")?.Value == currentTargetFramework))
179+
{
180+
CheckAndReplaceAttribute(element.Attribute("AspNetCorePackVersion"));
119181
}
120182

121-
CheckAndReplaceAttribute(itemGroup
122-
.Elements(ns + "KnownFrameworkReference").First().Attribute("LatestRuntimeFrameworkVersion"));
123-
CheckAndReplaceAttribute(itemGroup
124-
.Elements(ns + "KnownAppHostPack").First().Attribute("AppHostPackVersion"));
125-
CheckAndReplaceAttribute(itemGroup
126-
.Elements(ns + "KnownCrossgen2Pack").First().Attribute("Crossgen2PackVersion"));
127-
CheckAndReplaceAttribute(itemGroup
128-
.Elements(ns + "KnownILCompilerPack").First().Attribute("ILCompilerPackVersion"));
129-
CheckAndReplaceAttribute(itemGroup
130-
.Elements(ns + "KnownILLinkPack").First().Attribute("ILLinkPackVersion"));
131-
132-
CheckAndReplaceAttribute(itemGroup
133-
.Elements(ns + "KnownRuntimePack").First().Attribute("LatestRuntimeFrameworkVersion"));
183+
foreach (var element in itemGroup.Elements(ns + "KnownRuntimePack")
184+
.Where(e => e.Attribute("TargetFramework")?.Value == currentTargetFramework))
185+
{
186+
CheckAndReplaceAttribute(element.Attribute("LatestRuntimeFrameworkVersion"));
187+
}
134188

135189
return projectXml.ToString();
136190
}

0 commit comments

Comments
 (0)