33
44#nullable disable
55
6+ using System ;
7+ using System . IO ;
8+ using System . Linq ;
9+ using System . Xml . Linq ;
610using Microsoft . Build . Framework ;
11+ using Microsoft . Build . Utilities ;
712using NuGet . Versioning ;
813
914namespace 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