Skip to content

Commit 49af4f3

Browse files
authored
Merge branch 'main' into darc-main-86466249-b888-4713-835f-fad2834e6703
2 parents 37ab00d + 58d1cf7 commit 49af4f3

File tree

22 files changed

+429
-135
lines changed

22 files changed

+429
-135
lines changed

eng/Version.Details.xml

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -246,22 +246,22 @@
246246
<Uri>https://github.com/dotnet/runtime</Uri>
247247
<Sha>1f70f0cc663b5d45f77840e9728386e5fa7944f9</Sha>
248248
</Dependency>
249-
<Dependency Name="Microsoft.WindowsDesktop.App.Runtime.win-x64" Version="9.0.0-preview.7.24373.2">
249+
<Dependency Name="Microsoft.WindowsDesktop.App.Runtime.win-x64" Version="9.0.0-rc.1.24373.4">
250250
<Uri>https://github.com/dotnet/windowsdesktop</Uri>
251-
<Sha>c2ed504f22cca7f468822acb14189f38132942f0</Sha>
251+
<Sha>42b73c1693015c6b5a479f43e16c166f62f36aee</Sha>
252252
<SourceBuildTarball RepoName="windowsdesktop" ManagedOnly="true" />
253253
</Dependency>
254-
<Dependency Name="VS.Redist.Common.WindowsDesktop.SharedFramework.x64.9.0" Version="9.0.0-preview.7.24373.2">
254+
<Dependency Name="VS.Redist.Common.WindowsDesktop.SharedFramework.x64.9.0" Version="9.0.0-rc.1.24373.4">
255255
<Uri>https://github.com/dotnet/windowsdesktop</Uri>
256-
<Sha>c2ed504f22cca7f468822acb14189f38132942f0</Sha>
256+
<Sha>42b73c1693015c6b5a479f43e16c166f62f36aee</Sha>
257257
</Dependency>
258-
<Dependency Name="Microsoft.WindowsDesktop.App.Ref" Version="9.0.0-preview.7.24373.2">
258+
<Dependency Name="Microsoft.WindowsDesktop.App.Ref" Version="9.0.0-rc.1.24373.4">
259259
<Uri>https://github.com/dotnet/windowsdesktop</Uri>
260-
<Sha>c2ed504f22cca7f468822acb14189f38132942f0</Sha>
260+
<Sha>42b73c1693015c6b5a479f43e16c166f62f36aee</Sha>
261261
</Dependency>
262-
<Dependency Name="VS.Redist.Common.WindowsDesktop.TargetingPack.x64.9.0" Version="9.0.0-preview.7.24373.2">
262+
<Dependency Name="VS.Redist.Common.WindowsDesktop.TargetingPack.x64.9.0" Version="9.0.0-rc.1.24373.4">
263263
<Uri>https://github.com/dotnet/windowsdesktop</Uri>
264-
<Sha>c2ed504f22cca7f468822acb14189f38132942f0</Sha>
264+
<Sha>42b73c1693015c6b5a479f43e16c166f62f36aee</Sha>
265265
</Dependency>
266266
<Dependency Name="Microsoft.NET.Sdk.WindowsDesktop" Version="9.0.0-rc.1.24373.4" CoherentParentDependency="Microsoft.WindowsDesktop.App.Ref">
267267
<Uri>https://github.com/dotnet/wpf</Uri>
@@ -437,9 +437,9 @@
437437
<SourceBuild RepoName="command-line-api" ManagedOnly="true" />
438438
</Dependency>
439439
<!-- Intermediate is necessary for source build. -->
440-
<Dependency Name="Microsoft.SourceBuild.Intermediate.source-build-externals" Version="9.0.0-alpha.1.24369.5">
440+
<Dependency Name="Microsoft.SourceBuild.Intermediate.source-build-externals" Version="9.0.0-alpha.1.24372.3">
441441
<Uri>https://github.com/dotnet/source-build-externals</Uri>
442-
<Sha>26c52d02b67816269e647cc584f6b5db9a91970f</Sha>
442+
<Sha>220c6842488eb669f80b40d7de251a44dd183e9d</Sha>
443443
<SourceBuild RepoName="source-build-externals" ManagedOnly="true" />
444444
</Dependency>
445445
<!-- Intermediate is necessary for source build. -->

eng/Versions.props

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -161,10 +161,10 @@
161161
</PropertyGroup>
162162
<PropertyGroup>
163163
<!-- Dependencies from https://github.com/dotnet/windowsdesktop -->
164-
<VSRedistCommonWindowsDesktopSharedFrameworkx6490PackageVersion>9.0.0-preview.7.24373.2</VSRedistCommonWindowsDesktopSharedFrameworkx6490PackageVersion>
165-
<VSRedistCommonWindowsDesktopTargetingPackx6490PackageVersion>9.0.0-preview.7.24373.2</VSRedistCommonWindowsDesktopTargetingPackx6490PackageVersion>
166-
<MicrosoftWindowsDesktopAppRuntimewinx64PackageVersion>9.0.0-preview.7.24373.2</MicrosoftWindowsDesktopAppRuntimewinx64PackageVersion>
167-
<MicrosoftWindowsDesktopAppRefPackageVersion>9.0.0-preview.7.24373.2</MicrosoftWindowsDesktopAppRefPackageVersion>
164+
<VSRedistCommonWindowsDesktopSharedFrameworkx6490PackageVersion>9.0.0-rc.1.24373.4</VSRedistCommonWindowsDesktopSharedFrameworkx6490PackageVersion>
165+
<VSRedistCommonWindowsDesktopTargetingPackx6490PackageVersion>9.0.0-rc.1.24373.4</VSRedistCommonWindowsDesktopTargetingPackx6490PackageVersion>
166+
<MicrosoftWindowsDesktopAppRuntimewinx64PackageVersion>9.0.0-rc.1.24373.4</MicrosoftWindowsDesktopAppRuntimewinx64PackageVersion>
167+
<MicrosoftWindowsDesktopAppRefPackageVersion>9.0.0-rc.1.24373.4</MicrosoftWindowsDesktopAppRefPackageVersion>
168168
</PropertyGroup>
169169
<PropertyGroup>
170170
<!-- Dependencies from https://github.com/nuget/nuget.client -->

src/Cli/dotnet/commands/InstallingWorkloadCommand.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ internal abstract class InstallingWorkloadCommand : WorkloadCommandBase
3030
protected readonly string _downloadToCacheOption;
3131
protected readonly string _dotnetPath;
3232
protected readonly string _userProfileDir;
33+
protected readonly string _workloadRootDir;
3334
protected readonly bool _checkIfManifestExist;
3435
protected readonly ReleaseVersion _sdkVersion;
3536
protected readonly SdkFeatureBand _sdkFeatureBand;
@@ -92,8 +93,9 @@ public InstallingWorkloadCommand(
9293

9394
_dotnetPath = creationResult.DotnetPath;
9495
_userProfileDir = creationResult.UserProfileDir;
95-
_sdkVersion = creationResult.SdkVersion;
9696
_sdkFeatureBand = new SdkFeatureBand(creationResult.SdkVersion);
97+
_workloadRootDir = WorkloadFileBasedInstall.IsUserLocal(_dotnetPath, _sdkFeatureBand.ToString()) ? _userProfileDir : _dotnetPath;
98+
_sdkVersion = creationResult.SdkVersion;
9799
_workloadResolver = creationResult.WorkloadResolver;
98100
_targetSdkVersion ??= _sdkVersion;
99101

@@ -125,7 +127,7 @@ protected static Dictionary<string, string> GetInstallStateContents(IEnumerable<
125127

126128
InstallStateContents GetCurrentInstallState()
127129
{
128-
return GetCurrentInstallState(_sdkFeatureBand, _dotnetPath);
130+
return GetCurrentInstallState(_sdkFeatureBand, _workloadRootDir);
129131
}
130132

131133
static InstallStateContents GetCurrentInstallState(SdkFeatureBand sdkFeatureBand, string dotnetDir)
@@ -141,7 +143,7 @@ public static bool ShouldUseWorkloadSetMode(SdkFeatureBand sdkFeatureBand, strin
141143

142144
protected void UpdateWorkloadManifests(ITransactionContext context, DirectoryPath? offlineCache)
143145
{
144-
var updateToLatestWorkloadSet = ShouldUseWorkloadSetMode(_sdkFeatureBand, _dotnetPath);
146+
var updateToLatestWorkloadSet = ShouldUseWorkloadSetMode(_sdkFeatureBand, _workloadRootDir);
145147
if (UseRollback && updateToLatestWorkloadSet)
146148
{
147149
// Rollback files are only for loose manifests. Update the mode to be loose manifests.
@@ -157,7 +159,7 @@ protected void UpdateWorkloadManifests(ITransactionContext context, DirectoryPat
157159
// If a workload set version is specified, then switch to workload set update mode
158160
// Check to make sure the value needs to be changed, as updating triggers a UAC prompt
159161
// for MSI-based installs.
160-
if (!ShouldUseWorkloadSetMode(_sdkFeatureBand, _dotnetPath))
162+
if (!ShouldUseWorkloadSetMode(_sdkFeatureBand, _workloadRootDir))
161163
{
162164
_workloadInstaller.UpdateInstallMode(_sdkFeatureBand, true);
163165
}

src/Cli/dotnet/commands/dotnet-workload/WorkloadCommandParser.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ internal static void ShowWorkloadsInfo(ParseResult parseResult = null, WorkloadI
6161
reporter.WriteLine($" Workload version: {workloadInfoHelper.ManifestProvider.GetWorkloadVersion()}");
6262
}
6363

64-
var useWorkloadSets = InstallStateContents.FromPath(Path.Combine(WorkloadInstallType.GetInstallStateFolder(workloadInfoHelper._currentSdkFeatureBand, workloadInfoHelper.DotnetPath), "default.json")).UseWorkloadSets;
64+
var useWorkloadSets = InstallStateContents.FromPath(Path.Combine(WorkloadInstallType.GetInstallStateFolder(workloadInfoHelper._currentSdkFeatureBand, workloadInfoHelper.UserLocalPath), "default.json")).UseWorkloadSets;
6565
var workloadSetsString = useWorkloadSets == true ? "workload sets" : "loose manifests";
6666
reporter.WriteLine(string.Format(CommonStrings.WorkloadManifestInstallationConfiguration, workloadSetsString));
6767

src/Cli/dotnet/commands/dotnet-workload/WorkloadInfoHelper.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ internal class WorkloadInfoHelper : IWorkloadInfoHelper
1818
public readonly SdkFeatureBand _currentSdkFeatureBand;
1919
private readonly string _targetSdkVersion;
2020
public string DotnetPath { get; }
21+
public string UserLocalPath { get; }
2122

2223
public WorkloadInfoHelper(
2324
bool isInteractive,
@@ -61,6 +62,8 @@ public WorkloadInfoHelper(
6162
shouldLog: false);
6263

6364
WorkloadRecordRepo = workloadRecordRepo ?? Installer.GetWorkloadInstallationRecordRepository();
65+
66+
UserLocalPath = dotnetDir ?? (WorkloadFileBasedInstall.IsUserLocal(DotnetPath, _currentSdkFeatureBand.ToString()) ? userProfileDir : DotnetPath);
6467
}
6568

6669
public IInstaller Installer { get; private init; }

src/Cli/dotnet/commands/dotnet-workload/install/FileBasedInstaller.cs

Lines changed: 19 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ internal class FileBasedInstaller : IInstaller
2626
private const string InstalledWorkloadSetsDir = "InstalledWorkloadSets";
2727
protected readonly string _dotnetDir;
2828
protected readonly string _userProfileDir;
29+
protected readonly string _workloadRootDir;
2930
protected readonly DirectoryPath _tempPackagesDir;
3031
private readonly INuGetPackageDownloader _nugetPackageDownloader;
3132
private IWorkloadResolver _workloadResolver;
@@ -57,7 +58,8 @@ public FileBasedInstaller(IReporter reporter,
5758
new FirstPartyNuGetPackageSigningVerifier(), logger,
5859
restoreActionConfig: _restoreActionConfig);
5960
bool userLocal = WorkloadFileBasedInstall.IsUserLocal(_dotnetDir, sdkFeatureBand.ToString());
60-
_workloadMetadataDir = Path.Combine(userLocal ? _userProfileDir : _dotnetDir, "metadata", "workloads");
61+
_workloadRootDir = userLocal ? _userProfileDir : _dotnetDir;
62+
_workloadMetadataDir = Path.Combine(_workloadRootDir, "metadata", "workloads");
6163
_reporter = reporter;
6264
_sdkFeatureBand = sdkFeatureBand;
6365
_workloadResolver = workloadResolver;
@@ -92,7 +94,7 @@ public WorkloadSet InstallWorkloadSet(ITransactionContext context, string worklo
9294
string workloadSetPackageVersion = WorkloadSet.WorkloadSetVersionToWorkloadSetPackageVersion(workloadSetVersion, out workloadSetFeatureBand);
9395
var workloadSetPackageId = GetManifestPackageId(new ManifestId("Microsoft.NET.Workloads"), workloadSetFeatureBand);
9496

95-
var workloadSetPath = Path.Combine(_dotnetDir, "sdk-manifests", _sdkFeatureBand.ToString(), "workloadsets", workloadSetVersion);
97+
var workloadSetPath = Path.Combine(_workloadRootDir, "sdk-manifests", _sdkFeatureBand.ToString(), "workloadsets", workloadSetVersion);
9698

9799
try
98100
{
@@ -226,9 +228,7 @@ public void RepairWorkloads(IEnumerable<WorkloadId> workloadIds, SdkFeatureBand
226228

227229
string GetManifestInstallDirForFeatureBand(string sdkFeatureBand)
228230
{
229-
string rootInstallDir = WorkloadFileBasedInstall.IsUserLocal(_dotnetDir, _sdkFeatureBand.ToString()) ? _userProfileDir : _dotnetDir;
230-
var manifestInstallDir = Path.Combine(rootInstallDir, "sdk-manifests", sdkFeatureBand);
231-
return manifestInstallDir;
231+
return Path.Combine(_workloadRootDir, "sdk-manifests", sdkFeatureBand);
232232
}
233233

234234
public void InstallWorkloadManifest(ManifestVersionUpdate manifestUpdate, ITransactionContext transactionContext, DirectoryPath? offlineCache = null)
@@ -341,7 +341,7 @@ public IEnumerable<WorkloadDownload> GetDownloads(IEnumerable<WorkloadId> worklo
341341

342342
public void GarbageCollect(Func<string, IWorkloadResolver> getResolverForWorkloadSet, DirectoryPath? offlineCache = null, bool cleanAllPacks = false)
343343
{
344-
var garbageCollector = new WorkloadGarbageCollector(_dotnetDir, _sdkFeatureBand, _installationRecordRepository.GetInstalledWorkloads(_sdkFeatureBand), getResolverForWorkloadSet, Reporter.Verbose);
344+
var garbageCollector = new WorkloadGarbageCollector(_workloadRootDir, _sdkFeatureBand, _installationRecordRepository.GetInstalledWorkloads(_sdkFeatureBand), getResolverForWorkloadSet, Reporter.Verbose);
345345
garbageCollector.Collect();
346346

347347
var featureBandsWithWorkloadInstallRecords = _installationRecordRepository.GetFeatureBandsWithInstallationRecords();
@@ -479,46 +479,36 @@ public void GarbageCollect(Func<string, IWorkloadResolver> getResolverForWorkloa
479479

480480
public void AdjustWorkloadSetInInstallState(SdkFeatureBand sdkFeatureBand, string workloadVersion)
481481
{
482-
string path = Path.Combine(WorkloadInstallType.GetInstallStateFolder(_sdkFeatureBand, _dotnetDir), "default.json");
483-
Directory.CreateDirectory(Path.GetDirectoryName(path));
484-
var installStateContents = InstallStateContents.FromPath(path);
485-
installStateContents.WorkloadVersion = workloadVersion;
486-
File.WriteAllText(path, installStateContents.ToString());
482+
UpdateInstallState(sdkFeatureBand, contents => contents.WorkloadVersion = workloadVersion);
487483
}
488484

489485
public void RemoveManifestsFromInstallState(SdkFeatureBand sdkFeatureBand)
490486
{
491-
string path = Path.Combine(WorkloadInstallType.GetInstallStateFolder(_sdkFeatureBand, _dotnetDir), "default.json");
492-
493-
if (File.Exists(path))
494-
{
495-
var installStateContents = InstallStateContents.FromString(File.ReadAllText(path));
496-
installStateContents.Manifests = null;
497-
File.WriteAllText(path, installStateContents.ToString());
498-
}
487+
UpdateInstallState(sdkFeatureBand, contents => contents.Manifests = null);
499488
}
500489

501490
public void SaveInstallStateManifestVersions(SdkFeatureBand sdkFeatureBand, Dictionary<string, string> manifestContents)
502491
{
503-
string path = Path.Combine(WorkloadInstallType.GetInstallStateFolder(_sdkFeatureBand, _dotnetDir), "default.json");
504-
Directory.CreateDirectory(Path.GetDirectoryName(path));
505-
var installStateContents = InstallStateContents.FromPath(path);
506-
installStateContents.Manifests = manifestContents;
507-
File.WriteAllText(path, installStateContents.ToString());
492+
UpdateInstallState(sdkFeatureBand, contents => contents.Manifests = manifestContents);
508493
}
509494

510495
public void UpdateInstallMode(SdkFeatureBand sdkFeatureBand, bool? newMode)
511496
{
512-
string path = Path.Combine(WorkloadInstallType.GetInstallStateFolder(sdkFeatureBand, _dotnetDir), "default.json");
513-
Directory.CreateDirectory(Path.GetDirectoryName(path));
514-
var installStateContents = InstallStateContents.FromPath(path);
515-
installStateContents.UseWorkloadSets = newMode;
516-
File.WriteAllText(path, installStateContents.ToString());
497+
UpdateInstallState(sdkFeatureBand, contents => contents.UseWorkloadSets = newMode);
517498

518499
var newModeString = newMode == null ? "<null>" : (newMode.Value ? WorkloadConfigCommandParser.UpdateMode_WorkloadSet : WorkloadConfigCommandParser.UpdateMode_Manifests);
519500
_reporter.WriteLine(string.Format(LocalizableStrings.UpdatedWorkloadMode, newModeString));
520501
}
521502

503+
private void UpdateInstallState(SdkFeatureBand sdkFeatureBand, Action<InstallStateContents> update)
504+
{
505+
string path = Path.Combine(WorkloadInstallType.GetInstallStateFolder(sdkFeatureBand, _workloadRootDir), "default.json");
506+
Directory.CreateDirectory(Path.GetDirectoryName(path));
507+
var installStateContents = InstallStateContents.FromPath(path);
508+
update(installStateContents);
509+
File.WriteAllText(path, installStateContents.ToString());
510+
}
511+
522512
/// <summary>
523513
/// Remove all workload installation records that aren't from Visual Studio.
524514
/// </summary>

src/Cli/dotnet/commands/dotnet-workload/install/WorkloadInstallCommand.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ public override int Execute()
150150

151151
if (!_skipManifestUpdate)
152152
{
153-
var installStateFilePath = Path.Combine(WorkloadInstallType.GetInstallStateFolder(_sdkFeatureBand, _dotnetPath), "default.json");
153+
var installStateFilePath = Path.Combine(WorkloadInstallType.GetInstallStateFolder(_sdkFeatureBand, _workloadRootDir), "default.json");
154154
if (string.IsNullOrWhiteSpace(_fromRollbackDefinition) &&
155155
!SpecifiedWorkloadSetVersionOnCommandLine &&
156156
!SpecifiedWorkloadSetVersionInGlobalJson &&

src/Cli/dotnet/commands/dotnet-workload/list/WorkloadListCommand.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ public override int Execute()
7878
Reporter.WriteLine();
7979
var shouldPrintTable = globalJsonInformation?.WorkloadVersionInstalled != false;
8080
var shouldShowWorkloadSetVersion = globalJsonInformation is not null ||
81-
InstallStateContents.FromPath(Path.Combine(WorkloadInstallType.GetInstallStateFolder(_workloadListHelper._currentSdkFeatureBand, _workloadListHelper.DotnetPath), "default.json")).UseWorkloadSets == true;
81+
InstallStateContents.FromPath(Path.Combine(WorkloadInstallType.GetInstallStateFolder(_workloadListHelper._currentSdkFeatureBand, _workloadListHelper.UserLocalPath), "default.json")).UseWorkloadSets == true;
8282

8383
if (shouldShowWorkloadSetVersion)
8484
{
@@ -117,7 +117,7 @@ public override int Execute()
117117

118118
table.AddColumn(InformationStrings.WorkloadSourceColumn, workload => workload.Value);
119119

120-
table.PrintRows(installedWorkloads.AsEnumerable(), l => Reporter.WriteLine(l));
120+
table.PrintRows(installedWorkloads.AsEnumerable().OrderBy(workload => workload.Key), l => Reporter.WriteLine(l));
121121
}
122122

123123
Reporter.WriteLine();

src/Cli/dotnet/commands/dotnet-workload/update/WorkloadUpdateCommand.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ public override int Execute()
8282
{
8383
_workloadManifestUpdater.UpdateAdvertisingManifestsAsync(
8484
_includePreviews,
85-
ShouldUseWorkloadSetMode(_sdkFeatureBand, _dotnetPath),
85+
ShouldUseWorkloadSetMode(_sdkFeatureBand, _workloadRootDir),
8686
string.IsNullOrWhiteSpace(_fromCacheOption) ?
8787
null :
8888
new DirectoryPath(_fromCacheOption))

src/Common/WorkloadFileBasedInstall.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
// Licensed to the .NET Foundation under one or more agreements.
22
// The .NET Foundation licenses this file to you under the MIT license.
3+
using Microsoft.NET.Sdk.WorkloadManifestReader;
34

45
namespace Microsoft.DotNet.Workloads.Workload
56
{
@@ -34,7 +35,7 @@ static int Last2DigitsTo0(int versionBuild)
3435
sdkFeatureBand = $"{sdkVersionParsed.Major}.{sdkVersionParsed.Minor}.{Last2DigitsTo0(sdkVersionParsed.Build)}";
3536
}
3637

37-
return Path.Combine(dotnetDir, "metadata", "workloads", sdkFeatureBand, "userlocal");
38+
return Path.Combine(dotnetDir, "metadata", "workloads", new SdkFeatureBand(sdkFeatureBand).ToString(), "userlocal");
3839
}
3940
}
4041
}

0 commit comments

Comments
 (0)