Skip to content

Commit 769b812

Browse files
committed
Permit loose manifest priority
1 parent 4f75e80 commit 769b812

File tree

2 files changed

+26
-14
lines changed

2 files changed

+26
-14
lines changed

src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/SdkDirectoryWorkloadManifestProvider.cs

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -169,28 +169,24 @@ bool TryGetWorkloadSet(string workloadSetVersion, out WorkloadSet? workloadSet)
169169
}
170170
}
171171

172+
_installStateFilePath = Path.Combine(WorkloadInstallType.GetInstallStateFolder(_sdkVersionBand, _sdkRootPath), "default.json");
173+
var installState = InstallStateContents.FromPath(_installStateFilePath);
172174
if (_workloadSet is null)
173175
{
174-
var installStateFilePath = Path.Combine(WorkloadInstallType.GetInstallStateFolder(_sdkVersionBand, _sdkRootPath), "default.json");
175-
if (File.Exists(installStateFilePath))
176+
if (!string.IsNullOrEmpty(installState.WorkloadVersion))
176177
{
177-
var installState = InstallStateContents.FromPath(installStateFilePath);
178-
if (!string.IsNullOrEmpty(installState.WorkloadVersion))
178+
if (!TryGetWorkloadSet(installState.WorkloadVersion!, out _workloadSet))
179179
{
180-
if (!TryGetWorkloadSet(installState.WorkloadVersion!, out _workloadSet))
181-
{
182-
throw new FileNotFoundException(string.Format(Strings.WorkloadVersionFromInstallStateNotFound, installState.WorkloadVersion, installStateFilePath));
183-
}
180+
throw new FileNotFoundException(string.Format(Strings.WorkloadVersionFromInstallStateNotFound, installState.WorkloadVersion, _installStateFilePath));
184181
}
185-
186-
// Note: It is possible here to have both a workload set and loose manifests listed in the install state. This might happen if there is a
187-
// third-party workload manifest installed that's not part of the workload set
188-
_manifestsFromInstallState = installState.Manifests is null ? null : WorkloadSet.FromDictionaryForJson(installState.Manifests, _sdkVersionBand);
189-
_installStateFilePath = installStateFilePath;
190182
}
183+
184+
// Note: It is possible here to have both a workload set and loose manifests listed in the install state. This might happen if there is a
185+
// third-party workload manifest installed that's not part of the workload set
186+
_manifestsFromInstallState = installState.Manifests is null ? null : WorkloadSet.FromDictionaryForJson(installState.Manifests, _sdkVersionBand);
191187
}
192188

193-
if (_workloadSet == null && availableWorkloadSets.Any())
189+
if (_workloadSet == null && installState.UseWorkloadSets == true && availableWorkloadSets.Any())
194190
{
195191
var maxWorkloadSetVersion = availableWorkloadSets.Keys.Aggregate((s1, s2) => VersionCompare(s1, s2) >= 0 ? s1 : s2);
196192
_workloadSet = availableWorkloadSets[maxWorkloadSetVersion.ToString()];

src/Tests/Microsoft.NET.Sdk.WorkloadManifestReader.Tests/SdkDirectoryWorkloadManifestProviderTests.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using System.Diagnostics.CodeAnalysis;
55
using System.Runtime.CompilerServices;
66
using Microsoft.DotNet.Cli;
7+
using Microsoft.DotNet.Workloads.Workload;
78
using Microsoft.NET.Sdk.Localization;
89
using Microsoft.NET.Sdk.WorkloadManifestReader;
910

@@ -418,6 +419,13 @@ public void WorkloadSetCanIncludeMultipleJsonFiles()
418419
CreateMockManifest(_manifestRoot, "8.0.200", "android", "33.0.2-rc.1", true);
419420
CreateMockManifest(_manifestRoot, "8.0.200", "android", "33.0.2", true);
420421

422+
// To prepare the resolver to work with workload sets, we need to specify 'workload sets' in the install state file.
423+
var installStateLocation = WorkloadInstallType.GetInstallStateFolder(new SdkFeatureBand("8.0.200"), Path.GetDirectoryName(_manifestRoot)!);
424+
var installStateFilePath = Path.Combine(installStateLocation, "default.json");
425+
var installState = InstallStateContents.FromPath(installStateFilePath);
426+
installState.UseWorkloadSets = true;
427+
Directory.CreateDirectory(installStateLocation);
428+
File.WriteAllText(installStateFilePath, installState.ToString());
421429

422430
var workloadSetDirectory = Path.Combine(_manifestRoot, "8.0.200", "workloadsets", "8.0.200");
423431
Directory.CreateDirectory(workloadSetDirectory);
@@ -1254,6 +1262,14 @@ private void CreateMockManifest(string manifestRoot, string featureBand, string
12541262

12551263
private void CreateMockWorkloadSet(string manifestRoot, string featureBand, string workloadSetVersion, string workloadSetContents)
12561264
{
1265+
// To prepare the resolver to work with workload sets, we need to specify 'workload sets' in the install state file.
1266+
var installStateLocation = WorkloadInstallType.GetInstallStateFolder(new SdkFeatureBand(featureBand), Path.GetDirectoryName(manifestRoot)!);
1267+
var installStateFilePath = Path.Combine(installStateLocation, "default.json");
1268+
var installState = InstallStateContents.FromPath(installStateFilePath);
1269+
installState.UseWorkloadSets = true;
1270+
Directory.CreateDirectory(installStateLocation);
1271+
File.WriteAllText(installStateFilePath, installState.ToString());
1272+
12571273
var workloadSetDirectory = Path.Combine(manifestRoot, featureBand, "workloadsets", workloadSetVersion);
12581274
if (!Directory.Exists(workloadSetDirectory))
12591275
{

0 commit comments

Comments
 (0)