3
3
4
4
#nullable disable
5
5
6
+ using System ;
7
+ using System . IO ;
8
+ using System . Linq ;
9
+ using System . Xml . Linq ;
6
10
using Microsoft . Build . Framework ;
11
+ using Microsoft . Build . Utilities ;
7
12
using NuGet . Versioning ;
8
13
9
14
namespace Microsoft . DotNet . Build . Tasks
@@ -40,14 +45,16 @@ public override bool Execute()
40
45
ExecuteInternal (
41
46
File . ReadAllText ( Stage0MicrosoftNETCoreAppRefPackageVersionPath ) ,
42
47
MicrosoftNETCoreAppRefPackageVersion ,
43
- NewSDKVersion ) ) ;
48
+ NewSDKVersion ,
49
+ Log ) ) ;
44
50
return true ;
45
51
}
46
52
47
53
public static string ExecuteInternal (
48
54
string stage0MicrosoftNETCoreAppRefPackageVersionContent ,
49
55
string microsoftNETCoreAppRefPackageVersion ,
50
- string newSDKVersion )
56
+ string newSDKVersion ,
57
+ TaskLoggingHelper log = null )
51
58
{
52
59
var projectXml = XDocument . Parse ( stage0MicrosoftNETCoreAppRefPackageVersionContent ) ;
53
60
@@ -77,6 +84,7 @@ public static string ExecuteInternal(
77
84
propertyGroup . Element ( ns + "BundledNETCoreAppPackageVersion" ) . Value = newBundledPackageVersion ;
78
85
79
86
var isNETServicing = IsNETServicing ( originalBundledNETCoreAppPackageVersion ) ;
87
+ var currentTargetFramework = $ "net{ parsedMicrosoftNETCoreAppRefPackageVersion . Major } .0";
80
88
81
89
void CheckAndReplaceElement ( XElement element )
82
90
{
@@ -87,7 +95,7 @@ void CheckAndReplaceElement(XElement element)
87
95
element . ToString ( ) , element . Value , originalBundledNETCoreAppPackageVersion ) ) ;
88
96
}
89
97
90
- Log . LogMessage ( MessageImportance . High ,
98
+ log ? . LogMessage ( MessageImportance . High ,
91
99
$ "Replacing element { element . Name } value '{ element . Value } ' with '{ newBundledPackageVersion } '") ;
92
100
element . Value = newBundledPackageVersion ;
93
101
}
@@ -103,7 +111,7 @@ void CheckAndReplaceAttribute(XAttribute attribute)
103
111
originalBundledNETCoreAppPackageVersion ) ) ;
104
112
}
105
113
106
- Log . LogMessage ( MessageImportance . High ,
114
+ log ? . LogMessage ( MessageImportance . High ,
107
115
$ "Replacing attribute { attribute . Name } value '{ attribute . Value } ' with '{ newBundledPackageVersion } ' in element { attribute . Parent . Name } ") ;
108
116
attribute . Value = newBundledPackageVersion ;
109
117
}
@@ -117,29 +125,60 @@ void CheckAndReplaceAttribute(XAttribute attribute)
117
125
118
126
if ( ! isNETServicing )
119
127
{
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
+ }
124
134
}
125
135
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
+ }
143
182
144
183
return projectXml . ToString ( ) ;
145
184
}
0 commit comments