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
@@ -40,14 +45,16 @@ public override bool Execute()
4045 ExecuteInternal (
4146 File . ReadAllText ( Stage0MicrosoftNETCoreAppRefPackageVersionPath ) ,
4247 MicrosoftNETCoreAppRefPackageVersion ,
43- NewSDKVersion ) ) ;
48+ NewSDKVersion ,
49+ Log ) ) ;
4450 return true ;
4551 }
4652
4753 public static string ExecuteInternal (
4854 string stage0MicrosoftNETCoreAppRefPackageVersionContent ,
4955 string microsoftNETCoreAppRefPackageVersion ,
50- string newSDKVersion )
56+ string newSDKVersion ,
57+ TaskLoggingHelper log = null )
5158 {
5259 var projectXml = XDocument . Parse ( stage0MicrosoftNETCoreAppRefPackageVersionContent ) ;
5360
@@ -77,6 +84,7 @@ public static string ExecuteInternal(
7784 propertyGroup . Element ( ns + "BundledNETCoreAppPackageVersion" ) . Value = newBundledPackageVersion ;
7885
7986 var isNETServicing = IsNETServicing ( originalBundledNETCoreAppPackageVersion ) ;
87+ var currentTargetFramework = $ "net{ parsedMicrosoftNETCoreAppRefPackageVersion . Major } .0";
8088
8189 void CheckAndReplaceElement ( XElement element )
8290 {
@@ -87,7 +95,7 @@ void CheckAndReplaceElement(XElement element)
8795 element . ToString ( ) , element . Value , originalBundledNETCoreAppPackageVersion ) ) ;
8896 }
8997
90- Log . LogMessage ( MessageImportance . High ,
98+ log ? . LogMessage ( MessageImportance . High ,
9199 $ "Replacing element { element . Name } value '{ element . Value } ' with '{ newBundledPackageVersion } '") ;
92100 element . Value = newBundledPackageVersion ;
93101 }
@@ -103,7 +111,7 @@ void CheckAndReplaceAttribute(XAttribute attribute)
103111 originalBundledNETCoreAppPackageVersion ) ) ;
104112 }
105113
106- Log . LogMessage ( MessageImportance . High ,
114+ log ? . LogMessage ( MessageImportance . High ,
107115 $ "Replacing attribute { attribute . Name } value '{ attribute . Value } ' with '{ newBundledPackageVersion } ' in element { attribute . Parent . Name } ") ;
108116 attribute . Value = newBundledPackageVersion ;
109117 }
@@ -117,29 +125,60 @@ void CheckAndReplaceAttribute(XAttribute attribute)
117125
118126 if ( ! isNETServicing )
119127 {
120- CheckAndReplaceAttribute ( itemGroup
121- . Elements ( ns + "KnownFrameworkReference" ) . First ( ) . Attribute ( "DefaultRuntimeFrameworkVersion" ) ) ;
122- CheckAndReplaceAttribute ( itemGroup
123- . Elements ( ns + "KnownFrameworkReference" ) . First ( ) . Attribute ( "TargetingPackVersion" ) ) ;
128+ foreach ( var element in itemGroup . Elements ( ns + "KnownFrameworkReference" )
129+ . Where ( e => e . Attribute ( "TargetFramework" ) ? . Value == currentTargetFramework ) )
130+ {
131+ CheckAndReplaceAttribute ( element . Attribute ( "DefaultRuntimeFrameworkVersion" ) ) ;
132+ CheckAndReplaceAttribute ( element . Attribute ( "TargetingPackVersion" ) ) ;
133+ }
124134 }
125135
126- CheckAndReplaceAttribute ( itemGroup
127- . Elements ( ns + "KnownFrameworkReference" ) . First ( ) . Attribute ( "LatestRuntimeFrameworkVersion" ) ) ;
128- CheckAndReplaceAttribute ( itemGroup
129- . Elements ( ns + "KnownAppHostPack" ) . First ( ) . Attribute ( "AppHostPackVersion" ) ) ;
130- CheckAndReplaceAttribute ( itemGroup
131- . Elements ( ns + "KnownCrossgen2Pack" ) . First ( ) . Attribute ( "Crossgen2PackVersion" ) ) ;
132- CheckAndReplaceAttribute ( itemGroup
133- . Elements ( ns + "KnownILCompilerPack" ) . First ( ) . Attribute ( "ILCompilerPackVersion" ) ) ;
134- CheckAndReplaceAttribute ( itemGroup
135- . Elements ( ns + "KnownILLinkPack" ) . First ( ) . Attribute ( "ILLinkPackVersion" ) ) ;
136- CheckAndReplaceAttribute ( itemGroup
137- . Elements ( ns + "KnownWebAssemblySdkPack" ) . First ( ) . Attribute ( "WebAssemblySdkPackVersion" ) ) ;
138- CheckAndReplaceAttribute ( itemGroup
139- . Elements ( ns + "KnownAspNetCorePack" ) . First ( ) . Attribute ( "AspNetCorePackVersion" ) ) ;
140-
141- CheckAndReplaceAttribute ( itemGroup
142- . Elements ( ns + "KnownRuntimePack" ) . First ( ) . Attribute ( "LatestRuntimeFrameworkVersion" ) ) ;
136+ foreach ( var element in itemGroup . Elements ( ns + "KnownFrameworkReference" )
137+ . Where ( e => e . Attribute ( "TargetFramework" ) ? . Value == currentTargetFramework ) )
138+ {
139+ CheckAndReplaceAttribute ( element . Attribute ( "LatestRuntimeFrameworkVersion" ) ) ;
140+ }
141+ foreach ( var element in itemGroup . Elements ( ns + "KnownAppHostPack" )
142+ . Where ( e => e . Attribute ( "TargetFramework" ) ? . Value == currentTargetFramework ) )
143+ {
144+ CheckAndReplaceAttribute ( element . Attribute ( "AppHostPackVersion" ) ) ;
145+ }
146+
147+ foreach ( var element in itemGroup . Elements ( ns + "KnownCrossgen2Pack" )
148+ . Where ( e => e . Attribute ( "TargetFramework" ) ? . Value == currentTargetFramework ) )
149+ {
150+ CheckAndReplaceAttribute ( element . Attribute ( "Crossgen2PackVersion" ) ) ;
151+ }
152+
153+ foreach ( var element in itemGroup . Elements ( ns + "KnownILCompilerPack" )
154+ . Where ( e => e . Attribute ( "TargetFramework" ) ? . Value == currentTargetFramework ) )
155+ {
156+ CheckAndReplaceAttribute ( element . Attribute ( "ILCompilerPackVersion" ) ) ;
157+ }
158+
159+ foreach ( var element in itemGroup . Elements ( ns + "KnownILLinkPack" )
160+ . Where ( e => e . Attribute ( "TargetFramework" ) ? . Value == currentTargetFramework ) )
161+ {
162+ CheckAndReplaceAttribute ( element . Attribute ( "ILLinkPackVersion" ) ) ;
163+ }
164+
165+ // web assembly packs always use the latest regardless of the TFM
166+ foreach ( var element in itemGroup . Elements ( ns + "KnownWebAssemblySdkPack" ) )
167+ {
168+ CheckAndReplaceAttribute ( element . Attribute ( "WebAssemblySdkPackVersion" ) ) ;
169+ }
170+
171+ foreach ( var element in itemGroup . Elements ( ns + "KnownAspNetCorePack" )
172+ . Where ( e => e . Attribute ( "TargetFramework" ) ? . Value == currentTargetFramework ) )
173+ {
174+ CheckAndReplaceAttribute ( element . Attribute ( "AspNetCorePackVersion" ) ) ;
175+ }
176+
177+ foreach ( var element in itemGroup . Elements ( ns + "KnownRuntimePack" )
178+ . Where ( e => e . Attribute ( "TargetFramework" ) ? . Value == currentTargetFramework ) )
179+ {
180+ CheckAndReplaceAttribute ( element . Attribute ( "LatestRuntimeFrameworkVersion" ) ) ;
181+ }
143182
144183 return projectXml . ToString ( ) ;
145184 }
0 commit comments