diff --git a/src/Cli/dotnet/commands/dotnet-workload/WorkloadCommandParser.cs b/src/Cli/dotnet/commands/dotnet-workload/WorkloadCommandParser.cs
index 7e2d7a20e8c7..81f12c6a03a8 100644
--- a/src/Cli/dotnet/commands/dotnet-workload/WorkloadCommandParser.cs
+++ b/src/Cli/dotnet/commands/dotnet-workload/WorkloadCommandParser.cs
@@ -45,7 +45,10 @@ internal static string GetWorkloadsVersion(WorkloadInfoHelper workloadInfoHelper
{
workloadInfoHelper ??= new WorkloadInfoHelper(false);
- return workloadInfoHelper.ManifestProvider.GetWorkloadVersion();
+ (string version, string error) = workloadInfoHelper.ManifestProvider.GetWorkloadVersion();
+
+ // The explicit space here is intentional, as it's easy to miss in localization and crucial for parsing
+ return version + (error is not null ? ' ' + Workloads.Workload.List.LocalizableStrings.WorkloadVersionNotInstalledShort : string.Empty);
}
internal static void ShowWorkloadsInfo(ParseResult parseResult = null, WorkloadInfoHelper workloadInfoHelper = null, IReporter reporter = null, string dotnetDir = null, bool showVersion = true)
@@ -56,9 +59,11 @@ internal static void ShowWorkloadsInfo(ParseResult parseResult = null, WorkloadI
reporter ??= Utils.Reporter.Output;
string dotnetPath = dotnetDir ?? Path.GetDirectoryName(Environment.ProcessPath);
+ string error = null;
if (showVersion)
{
- reporter.WriteLine($" Workload version: {workloadInfoHelper.ManifestProvider.GetWorkloadVersion()}");
+ (string version, error) = workloadInfoHelper.ManifestProvider.GetWorkloadVersion();
+ reporter.WriteLine($" Workload version: {version}");
}
var useWorkloadSets = InstallStateContents.FromPath(Path.Combine(WorkloadInstallType.GetInstallStateFolder(workloadInfoHelper._currentSdkFeatureBand, workloadInfoHelper.UserLocalPath), "default.json")).UseWorkloadSets;
@@ -97,6 +102,11 @@ internal static void ShowWorkloadsInfo(ParseResult parseResult = null, WorkloadI
);
reporter.WriteLine("");
}
+
+ if (error is not null)
+ {
+ reporter.WriteLine(error);
+ }
}
private static int ProcessArgs(ParseResult parseResult)
diff --git a/src/Cli/dotnet/commands/dotnet-workload/WorkloadHistoryRecorder.cs b/src/Cli/dotnet/commands/dotnet-workload/WorkloadHistoryRecorder.cs
index b4aa226ba370..5beb3e3aacd7 100644
--- a/src/Cli/dotnet/commands/dotnet-workload/WorkloadHistoryRecorder.cs
+++ b/src/Cli/dotnet/commands/dotnet-workload/WorkloadHistoryRecorder.cs
@@ -54,7 +54,7 @@ public void Run(Action workloadAction)
private WorkloadHistoryState GetWorkloadState()
{
var resolver = _workloadResolverFunc();
- var currentWorkloadInfo = resolver.GetWorkloadVersion();
+ var currentWorkloadVersion = resolver.GetWorkloadVersion().version;
return new WorkloadHistoryState()
{
ManifestVersions = resolver.GetInstalledManifests().ToDictionary(manifest => manifest.Id.ToString(), manifest => $"{manifest.Version}/{manifest.ManifestFeatureBand}"),
@@ -62,7 +62,7 @@ private WorkloadHistoryState GetWorkloadState()
.GetInstalledWorkloads(new SdkFeatureBand(_workloadResolver.GetSdkFeatureBand()))
.Select(id => id.ToString())
.ToList(),
- WorkloadSetVersion = resolver.GetWorkloadVersion()
+ WorkloadSetVersion = currentWorkloadVersion
};
}
diff --git a/src/Cli/dotnet/commands/dotnet-workload/list/LocalizableStrings.resx b/src/Cli/dotnet/commands/dotnet-workload/list/LocalizableStrings.resx
index 4ba629fee8d5..e82e8b1e6a75 100644
--- a/src/Cli/dotnet/commands/dotnet-workload/list/LocalizableStrings.resx
+++ b/src/Cli/dotnet/commands/dotnet-workload/list/LocalizableStrings.resx
@@ -134,6 +134,9 @@
Found workload version {0} pinned in the global.json file at {1}.
+
+ (not installed)
+
Found workload version {0} pinned in the global.json file at {1}, but it was not installed. Running `dotnet workload install`, `dotnet workload update`, or `dotnet workload restore` may fix this.
diff --git a/src/Cli/dotnet/commands/dotnet-workload/list/WorkloadListCommand.cs b/src/Cli/dotnet/commands/dotnet-workload/list/WorkloadListCommand.cs
index 40a32b23c7be..30f9e89b67b7 100644
--- a/src/Cli/dotnet/commands/dotnet-workload/list/WorkloadListCommand.cs
+++ b/src/Cli/dotnet/commands/dotnet-workload/list/WorkloadListCommand.cs
@@ -93,7 +93,7 @@ public override int Execute()
}
else
{
- Reporter.WriteLine(string.Format(LocalizableStrings.WorkloadSetVersion, _workloadListHelper.WorkloadResolver.GetWorkloadVersion() ?? "unknown"));
+ Reporter.WriteLine(string.Format(LocalizableStrings.WorkloadSetVersion, _workloadListHelper.WorkloadResolver.GetWorkloadVersion().version ?? "unknown"));
}
Reporter.WriteLine();
diff --git a/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.cs.xlf b/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.cs.xlf
index 722830ef8eb3..2a900b4f2dc2 100644
--- a/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.cs.xlf
+++ b/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.cs.xlf
@@ -32,6 +32,11 @@
Aktualizace jsou k dispozici pro následující úlohy: {0}. Pokud chcete získat nejnovější verzi, spusťte aktualizaci úlohy dotnet (`dotnet workload update`).
{Locked="dotnet workload update"}
+
+ (not installed)
+ (not installed)
+
+