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