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
@@ -15,6 +20,7 @@ namespace Microsoft.DotNet.Build.Tasks
15
20
/// and then update the stage 0 back.
16
21
///
17
22
/// Override NETCoreSdkVersion to stage 0 sdk version like 6.0.100-dev
23
+ /// Override NETCoreSdkRuntimeIdentifier and NETCoreSdkPortableRuntimeIdentifier to match the target RID
18
24
///
19
25
/// Use a task to override since it was generated as a string literal replace anyway.
20
26
/// And using C# can have better error when anything goes wrong.
@@ -32,6 +38,8 @@ public sealed class OverrideAndCreateBundledNETCoreAppPackageVersion : Task
32
38
33
39
[ Required ] public string NewSDKVersion { get ; set ; }
34
40
41
+ [ Required ] public string TargetRid { get ; set ; }
42
+
35
43
[ Required ] public string OutputPath { get ; set ; }
36
44
37
45
public override bool Execute ( )
@@ -40,14 +48,18 @@ public override bool Execute()
40
48
ExecuteInternal (
41
49
File . ReadAllText ( Stage0MicrosoftNETCoreAppRefPackageVersionPath ) ,
42
50
MicrosoftNETCoreAppRefPackageVersion ,
43
- NewSDKVersion ) ) ;
51
+ NewSDKVersion ,
52
+ TargetRid ,
53
+ Log ) ) ;
44
54
return true ;
45
55
}
46
56
47
57
public static string ExecuteInternal (
48
58
string stage0MicrosoftNETCoreAppRefPackageVersionContent ,
49
59
string microsoftNETCoreAppRefPackageVersion ,
50
- string newSDKVersion )
60
+ string newSDKVersion ,
61
+ string targetRid ,
62
+ TaskLoggingHelper log )
51
63
{
52
64
var projectXml = XDocument . Parse ( stage0MicrosoftNETCoreAppRefPackageVersionContent ) ;
53
65
@@ -56,6 +68,8 @@ public static string ExecuteInternal(
56
68
var propertyGroup = projectXml . Root . Elements ( ns + "PropertyGroup" ) . First ( ) ;
57
69
58
70
propertyGroup . Element ( ns + "NETCoreSdkVersion" ) . Value = newSDKVersion ;
71
+ propertyGroup . Element ( ns + "NETCoreSdkRuntimeIdentifier" ) . Value = targetRid ;
72
+ propertyGroup . Element ( ns + "NETCoreSdkPortableRuntimeIdentifier" ) . Value = targetRid ;
59
73
60
74
61
75
var originalBundledNETCoreAppPackageVersion = propertyGroup . Element ( ns + "BundledNETCoreAppPackageVersion" ) . Value ;
@@ -77,6 +91,7 @@ public static string ExecuteInternal(
77
91
propertyGroup . Element ( ns + "BundledNETCoreAppPackageVersion" ) . Value = newBundledPackageVersion ;
78
92
79
93
var isNETServicing = IsNETServicing ( originalBundledNETCoreAppPackageVersion ) ;
94
+ var currentTargetFramework = $ "net{ parsedMicrosoftNETCoreAppRefPackageVersion . Major } .0";
80
95
81
96
void CheckAndReplaceElement ( XElement element )
82
97
{
@@ -87,6 +102,8 @@ void CheckAndReplaceElement(XElement element)
87
102
element . ToString ( ) , element . Value , originalBundledNETCoreAppPackageVersion ) ) ;
88
103
}
89
104
105
+ log . LogMessage ( MessageImportance . High ,
106
+ $ "Replacing element { element . Name } value '{ element . Value } ' with '{ newBundledPackageVersion } '") ;
90
107
element . Value = newBundledPackageVersion ;
91
108
}
92
109
@@ -100,6 +117,8 @@ void CheckAndReplaceAttribute(XAttribute attribute)
100
117
originalBundledNETCoreAppPackageVersion ) ) ;
101
118
}
102
119
120
+ log . LogMessage ( MessageImportance . High ,
121
+ $ "Replacing attribute { attribute . Name } value '{ attribute . Value } ' with '{ newBundledPackageVersion } ' in element { attribute . Parent . Name } ") ;
103
122
attribute . Value = newBundledPackageVersion ;
104
123
}
105
124
@@ -112,25 +131,60 @@ void CheckAndReplaceAttribute(XAttribute attribute)
112
131
113
132
if ( ! isNETServicing )
114
133
{
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" ) ) ;
119
181
}
120
182
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
+ }
134
188
135
189
return projectXml . ToString ( ) ;
136
190
}
0 commit comments