@@ -124,10 +124,32 @@ public void RefreshWorkloadManifests()
124124 _useManifestsFromInstallState = true ;
125125 var availableWorkloadSets = GetAvailableWorkloadSets ( ) ;
126126
127+ bool TryGetWorkloadSet ( string workloadSetVersion , out WorkloadSet ? workloadSet )
128+ {
129+ if ( availableWorkloadSets . TryGetValue ( workloadSetVersion , out workloadSet ) )
130+ {
131+ return true ;
132+ }
133+
134+ // Check to see if workload set is from a different feature band
135+ WorkloadSet . WorkloadSetVersionToWorkloadSetPackageVersion ( workloadSetVersion , out SdkFeatureBand workloadSetFeatureBand ) ;
136+ if ( ! workloadSetFeatureBand . Equals ( _sdkVersionBand ) )
137+ {
138+ var featureBandWorkloadSets = GetAvailableWorkloadSets ( workloadSetFeatureBand ) ;
139+ if ( featureBandWorkloadSets . TryGetValue ( workloadSetVersion , out workloadSet ) )
140+ {
141+ return true ;
142+ }
143+ }
144+
145+ workloadSet = null ;
146+ return false ;
147+ }
148+
127149 if ( _workloadSetVersionFromConstructor != null )
128150 {
129151 _useManifestsFromInstallState = false ;
130- if ( ! availableWorkloadSets . TryGetValue ( _workloadSetVersionFromConstructor , out _workloadSet ) )
152+ if ( ! TryGetWorkloadSet ( _workloadSetVersionFromConstructor , out _workloadSet ) )
131153 {
132154 throw new FileNotFoundException ( string . Format ( Strings . WorkloadVersionNotFound , _workloadSetVersionFromConstructor ) ) ;
133155 }
@@ -139,7 +161,7 @@ public void RefreshWorkloadManifests()
139161 if ( _globalJsonWorkloadSetVersion != null )
140162 {
141163 _useManifestsFromInstallState = false ;
142- if ( ! availableWorkloadSets . TryGetValue ( _globalJsonWorkloadSetVersion , out _workloadSet ) )
164+ if ( ! TryGetWorkloadSet ( _globalJsonWorkloadSetVersion , out _workloadSet ) )
143165 {
144166 _exceptionToThrow = new FileNotFoundException ( string . Format ( Strings . WorkloadVersionFromGlobalJsonNotFound , _globalJsonWorkloadSetVersion , _globalJsonPathFromConstructor ) ) ;
145167 return ;
@@ -155,7 +177,7 @@ public void RefreshWorkloadManifests()
155177 var installState = InstallStateContents . FromPath ( installStateFilePath ) ;
156178 if ( ! string . IsNullOrEmpty ( installState . WorkloadVersion ) )
157179 {
158- if ( ! availableWorkloadSets . TryGetValue ( installState . WorkloadVersion ! , out _workloadSet ) )
180+ if ( ! TryGetWorkloadSet ( installState . WorkloadVersion ! , out _workloadSet ) )
159181 {
160182 throw new FileNotFoundException ( string . Format ( Strings . WorkloadVersionFromInstallStateNotFound , installState . WorkloadVersion , installStateFilePath ) ) ;
161183 }
@@ -446,18 +468,24 @@ void ProbeDirectory(string manifestDirectory, string featureBand)
446468 /// </summary>
447469 public Dictionary < string , WorkloadSet > GetAvailableWorkloadSets ( )
448470 {
471+ return GetAvailableWorkloadSets ( _sdkVersionBand ) ;
472+ }
473+
474+ public Dictionary < string , WorkloadSet > GetAvailableWorkloadSets ( SdkFeatureBand workloadSetFeatureBand )
475+ {
476+ // How to deal with cross-band workload sets?
449477 Dictionary < string , WorkloadSet > availableWorkloadSets = new Dictionary < string , WorkloadSet > ( ) ;
450478
451479 foreach ( var manifestRoot in _manifestRoots . Reverse ( ) )
452480 {
453- // Workload sets must match the SDK feature band, we don't support any fallback to a previous band
454- var workloadSetsRoot = Path . Combine ( manifestRoot , _sdkVersionBand . ToString ( ) , WorkloadSetsFolderName ) ;
481+ // We don't automatically fall back to a previous band
482+ var workloadSetsRoot = Path . Combine ( manifestRoot , workloadSetFeatureBand . ToString ( ) , WorkloadSetsFolderName ) ;
455483 if ( Directory . Exists ( workloadSetsRoot ) )
456484 {
457485 foreach ( var workloadSetDirectory in Directory . GetDirectories ( workloadSetsRoot ) )
458486 {
459487 var workloadSetVersion = Path . GetFileName ( workloadSetDirectory ) ;
460- var workloadSet = WorkloadSet . FromWorkloadSetFolder ( workloadSetDirectory , workloadSetVersion , _sdkVersionBand ) ;
488+ var workloadSet = WorkloadSet . FromWorkloadSetFolder ( workloadSetDirectory , workloadSetVersion , workloadSetFeatureBand ) ;
461489 availableWorkloadSets [ workloadSet . Version ! ] = workloadSet ;
462490 }
463491 }
0 commit comments