diff --git a/src/Cli/dotnet/CommandLineInfo.cs b/src/Cli/dotnet/CommandLineInfo.cs
index b1a4cd319ae5..3dcf76e709b2 100644
--- a/src/Cli/dotnet/CommandLineInfo.cs
+++ b/src/Cli/dotnet/CommandLineInfo.cs
@@ -3,6 +3,7 @@
#nullable disable
+using Microsoft.DotNet.Cli.Commands;
using Microsoft.DotNet.Cli.Commands.Workload;
using Microsoft.DotNet.Cli.Utils;
using LocalizableStrings = Microsoft.DotNet.Cli.Utils.LocalizableStrings;
diff --git a/src/Cli/dotnet/Commands/CliCommandStrings.resx b/src/Cli/dotnet/Commands/CliCommandStrings.resx
index 4753042360fc..54dc3f96eae2 100644
--- a/src/Cli/dotnet/Commands/CliCommandStrings.resx
+++ b/src/Cli/dotnet/Commands/CliCommandStrings.resx
@@ -2471,6 +2471,10 @@ To display a value, specify the corresponding command-line option without provid
Workload version {0}, which was specified in {1}, was not found. Run "dotnet workload restore" to install this workload version.{Locked="dotnet workload restore"}
+
+ Run "dotnet workload update" to install the workloads for this SDK.
+ {Locked="dotnet workload update"}
+
A workload version to display or one or more workloads and their versions joined by the '@' character.
diff --git a/src/Cli/dotnet/Commands/Workload/WorkloadInfoHelper.cs b/src/Cli/dotnet/Commands/Workload/WorkloadInfoHelper.cs
index abcd533aba52..fe7a147fc746 100644
--- a/src/Cli/dotnet/Commands/Workload/WorkloadInfoHelper.cs
+++ b/src/Cli/dotnet/Commands/Workload/WorkloadInfoHelper.cs
@@ -123,6 +123,25 @@ internal static string GetWorkloadsVersion(WorkloadInfoHelper? workloadInfoHelpe
internal void ShowWorkloadsInfo(IReporter? reporter = null, string? dotnetDir = null, bool showVersion = true)
{
reporter ??= Reporter.Output;
+
+ // Get the error message if manifests are missing
+ // We need to call GetManifests() first to ensure _exceptionToThrow is populated
+ // if manifests from a workload set are missing
+ string? manifestError = null;
+ if (ManifestProvider is SdkDirectoryWorkloadManifestProvider sdkProvider)
+ {
+ // Calling GetManifests().Count() forces enumeration which populates the error state
+ try
+ {
+ _ = ManifestProvider.GetManifests().Count();
+ }
+ catch
+ {
+ // Ignore errors here - we'll get the message via GetManifestErrorMessage
+ }
+ manifestError = sdkProvider.GetManifestErrorMessage();
+ }
+
var versionInfo = ManifestProvider.GetWorkloadVersion();
void WriteUpdateModeAndAnyError(string indent = "")
@@ -133,9 +152,23 @@ void WriteUpdateModeAndAnyError(string indent = "")
: CliCommandStrings.WorkloadManifestInstallationConfigurationLooseManifests;
reporter.WriteLine(indent + configurationMessage);
+ // Show the specific error message if manifests are missing
+ if (!versionInfo.IsInstalled && manifestError != null)
+ {
+ reporter.WriteLine(indent + manifestError);
+ }
+
if (!versionInfo.IsInstalled)
{
- reporter.WriteLine(indent + string.Format(CliCommandStrings.WorkloadSetFromGlobalJsonNotInstalled, versionInfo.Version, versionInfo.GlobalJsonPath));
+ if (versionInfo.GlobalJsonPath != null)
+ {
+ reporter.WriteLine(indent + string.Format(CliCommandStrings.WorkloadSetFromGlobalJsonNotInstalled, versionInfo.Version, versionInfo.GlobalJsonPath));
+ }
+ else if (manifestError == null)
+ {
+ // Workload set is installed but manifests are missing - only show generic message if we don't have a specific error
+ reporter.WriteLine(indent + CliCommandStrings.WorkloadsNotInstalledRunWorkloadUpdate);
+ }
}
else if (versionInfo.WorkloadSetsEnabledWithoutWorkloadSet)
{
diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.cs.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.cs.xlf
index 293774c36807..debd62acc817 100644
--- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.cs.xlf
+++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.cs.xlf
@@ -4065,6 +4065,11 @@ Pokud chcete zobrazit hodnotu, zadejte odpovídající volbu příkazového řá
Úlohy
+
+ Run "dotnet workload update" to install the workloads for this SDK.
+ Run "dotnet workload update" to install the workloads for this SDK.
+ {Locked="dotnet workload update"}
+ Writing install records for Visual Studio workloads: '{0}'Probíhá zápis záznamů o instalaci pro úlohy sady Visual Studio: {0}
diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.de.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.de.xlf
index bf4889f2658d..cfa17f04c408 100644
--- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.de.xlf
+++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.de.xlf
@@ -4065,6 +4065,11 @@ Um einen Wert anzuzeigen, geben Sie die entsprechende Befehlszeilenoption an, oh
Workloads
+
+ Run "dotnet workload update" to install the workloads for this SDK.
+ Run "dotnet workload update" to install the workloads for this SDK.
+ {Locked="dotnet workload update"}
+ Writing install records for Visual Studio workloads: '{0}'Installationseinträge für Visual Studio Workloads werden geschrieben: „{0}“
diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.es.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.es.xlf
index 529999c31c77..087bfcebcdda 100644
--- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.es.xlf
+++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.es.xlf
@@ -4065,6 +4065,11 @@ Para mostrar un valor, especifique la opción de línea de comandos correspondie
Cargas de trabajo
+
+ Run "dotnet workload update" to install the workloads for this SDK.
+ Run "dotnet workload update" to install the workloads for this SDK.
+ {Locked="dotnet workload update"}
+ Writing install records for Visual Studio workloads: '{0}'Escritura de registros de instalación para cargas de trabajo de Visual Studio: '{0}'
diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.fr.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.fr.xlf
index d70736f22461..d415f192a2ff 100644
--- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.fr.xlf
+++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.fr.xlf
@@ -4065,6 +4065,11 @@ Pour afficher une valeur, spécifiez l’option de ligne de commande corresponda
Charges de travail
+
+ Run "dotnet workload update" to install the workloads for this SDK.
+ Run "dotnet workload update" to install the workloads for this SDK.
+ {Locked="dotnet workload update"}
+ Writing install records for Visual Studio workloads: '{0}'Écriture des enregistrements d'installation pour les charges de travail Visual Studio : « {0} »
diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.it.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.it.xlf
index 3b51ca4b1030..eec9193a9f41 100644
--- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.it.xlf
+++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.it.xlf
@@ -4065,6 +4065,11 @@ Per visualizzare un valore, specifica l'opzione della riga di comando corrispond
Carichi di lavoro
+
+ Run "dotnet workload update" to install the workloads for this SDK.
+ Run "dotnet workload update" to install the workloads for this SDK.
+ {Locked="dotnet workload update"}
+ Writing install records for Visual Studio workloads: '{0}'Scrittura dei record di installazione per carichi di lavoro Visual Studio: '{0}'
diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ja.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ja.xlf
index c836504745c1..b49e99b59162 100644
--- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ja.xlf
+++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ja.xlf
@@ -4065,6 +4065,11 @@ To display a value, specify the corresponding command-line option without provid
ワークロード
+
+ Run "dotnet workload update" to install the workloads for this SDK.
+ Run "dotnet workload update" to install the workloads for this SDK.
+ {Locked="dotnet workload update"}
+ Writing install records for Visual Studio workloads: '{0}'Visual Studio ワークロードのインストール レコードを書き込み中: '{0}'
diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ko.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ko.xlf
index c33addce7195..6050fa0d1b6c 100644
--- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ko.xlf
+++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ko.xlf
@@ -4065,6 +4065,11 @@ To display a value, specify the corresponding command-line option without provid
워크로드
+
+ Run "dotnet workload update" to install the workloads for this SDK.
+ Run "dotnet workload update" to install the workloads for this SDK.
+ {Locked="dotnet workload update"}
+ Writing install records for Visual Studio workloads: '{0}'Visual Studio 워크로드에 대한 설치 레코드를 쓰는 중: '{0}'
diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pl.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pl.xlf
index f89492285068..0088f58d195c 100644
--- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pl.xlf
+++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pl.xlf
@@ -4065,6 +4065,11 @@ Aby wyświetlić wartość, należy podać odpowiednią opcję wiersza poleceń
Obciążenia
+
+ Run "dotnet workload update" to install the workloads for this SDK.
+ Run "dotnet workload update" to install the workloads for this SDK.
+ {Locked="dotnet workload update"}
+ Writing install records for Visual Studio workloads: '{0}'Pisanie rekordów instalacji dla obciążeń w usłudze Visual Studio: „{0}”
diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pt-BR.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pt-BR.xlf
index 81287d03948f..6f91e06e919d 100644
--- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pt-BR.xlf
+++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pt-BR.xlf
@@ -4065,6 +4065,11 @@ Para exibir um valor, especifique a opção de linha de comando correspondente s
Cargas de trabalho
+
+ Run "dotnet workload update" to install the workloads for this SDK.
+ Run "dotnet workload update" to install the workloads for this SDK.
+ {Locked="dotnet workload update"}
+ Writing install records for Visual Studio workloads: '{0}'Gravando registros de instalação para cargas de trabalho do Visual Studio: "{0}"
diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ru.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ru.xlf
index 52e2408c6370..06e2a1266e56 100644
--- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ru.xlf
+++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ru.xlf
@@ -4066,6 +4066,11 @@ To display a value, specify the corresponding command-line option without provid
Рабочие нагрузки
+
+ Run "dotnet workload update" to install the workloads for this SDK.
+ Run "dotnet workload update" to install the workloads for this SDK.
+ {Locked="dotnet workload update"}
+ Writing install records for Visual Studio workloads: '{0}'Запись сведений об установках для рабочих нагрузок Visual Studio: "{0}"
diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.tr.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.tr.xlf
index 0bdf46014f3c..7d224cc7279a 100644
--- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.tr.xlf
+++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.tr.xlf
@@ -4065,6 +4065,11 @@ Bir değeri görüntülemek için, bir değer sağlamadan ilgili komut satırı
İş yükleri
+
+ Run "dotnet workload update" to install the workloads for this SDK.
+ Run "dotnet workload update" to install the workloads for this SDK.
+ {Locked="dotnet workload update"}
+ Writing install records for Visual Studio workloads: '{0}'Visual Studio iş yükleri için yükleme yazma: '{0}'
diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hans.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hans.xlf
index 196eb2de4133..aa5e4fcb265d 100644
--- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hans.xlf
+++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hans.xlf
@@ -4065,6 +4065,11 @@ To display a value, specify the corresponding command-line option without provid
工作负载
+
+ Run "dotnet workload update" to install the workloads for this SDK.
+ Run "dotnet workload update" to install the workloads for this SDK.
+ {Locked="dotnet workload update"}
+ Writing install records for Visual Studio workloads: '{0}'写入 Visual Studio 工作负载的安装记录:“{0}”
diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hant.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hant.xlf
index a11d81925055..773255b411c7 100644
--- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hant.xlf
+++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hant.xlf
@@ -4065,6 +4065,11 @@ To display a value, specify the corresponding command-line option without provid
工作負載
+
+ Run "dotnet workload update" to install the workloads for this SDK.
+ Run "dotnet workload update" to install the workloads for this SDK.
+ {Locked="dotnet workload update"}
+ Writing install records for Visual Studio workloads: '{0}'正在寫入 Visual Studio 工作負載的安裝紀錄:'{0}'
diff --git a/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/SdkDirectoryWorkloadManifestProvider.cs b/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/SdkDirectoryWorkloadManifestProvider.cs
index c3da2743abc3..47aec4fb0735 100644
--- a/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/SdkDirectoryWorkloadManifestProvider.cs
+++ b/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/SdkDirectoryWorkloadManifestProvider.cs
@@ -245,6 +245,15 @@ void ThrowExceptionIfManifestsNotAvailable()
}
}
+ ///
+ /// Gets the error message if manifests from a workload set are missing.
+ /// Returns null if all manifests are available.
+ ///
+ public string? GetManifestErrorMessage()
+ {
+ return _exceptionToThrow?.Message;
+ }
+
public WorkloadVersionInfo GetWorkloadVersion()
{
if (_globalJsonWorkloadSetVersion != null)
@@ -260,11 +269,11 @@ public WorkloadVersionInfo GetWorkloadVersion()
GlobalJsonSpecifiesWorkloadSets: _globalJsonSpecifiedWorkloadSets);
}
- ThrowExceptionIfManifestsNotAvailable();
-
if (_workloadSet?.Version is not null)
{
- return new WorkloadVersionInfo(_workloadSet.Version, IsInstalled: true, WorkloadSetsEnabledWithoutWorkloadSet: false, GlobalJsonSpecifiesWorkloadSets: _globalJsonSpecifiedWorkloadSets);
+ // Return the workload set version, but indicate if manifests are actually installed
+ // _exceptionToThrow will be set if manifests from the workload set are missing
+ return new WorkloadVersionInfo(_workloadSet.Version, IsInstalled: _exceptionToThrow == null, WorkloadSetsEnabledWithoutWorkloadSet: false, GlobalJsonSpecifiesWorkloadSets: _globalJsonSpecifiedWorkloadSets);
}
var installStateFilePath = Path.Combine(WorkloadInstallType.GetInstallStateFolder(_sdkVersionBand, _sdkOrUserLocalPath), "default.json");
@@ -290,8 +299,6 @@ public WorkloadVersionInfo GetWorkloadVersion()
public IEnumerable GetManifests()
{
- ThrowExceptionIfManifestsNotAvailable();
-
// Scan manifest directories
var manifestIdsToManifests = new Dictionary(StringComparer.OrdinalIgnoreCase);
@@ -363,7 +370,14 @@ void ProbeDirectory(string manifestDirectory, string featureBand)
var manifestDirectory = GetManifestDirectoryFromSpecifier(manifestSpecifier);
if (manifestDirectory == null)
{
- throw new FileNotFoundException(string.Format(Strings.ManifestFromWorkloadSetNotFound, manifestSpecifier.ToString(), _workloadSet.Version));
+ // Manifest from workload set is missing. This can happen after SDK upgrades.
+ // Store the exception to be thrown when needed, but allow workload commands to proceed
+ // so they can install the missing manifests.
+ if (_exceptionToThrow == null)
+ {
+ _exceptionToThrow = new FileNotFoundException(string.Format(Strings.ManifestFromWorkloadSetNotFound, manifestSpecifier.ToString(), _workloadSet.Version));
+ }
+ continue;
}
AddManifest(manifestSpecifier.Id.ToString(), manifestDirectory, manifestSpecifier.FeatureBand.ToString(), kvp.Value.Version.ToString());
}
@@ -380,7 +394,14 @@ void ProbeDirectory(string manifestDirectory, string featureBand)
var manifestDirectory = GetManifestDirectoryFromSpecifier(manifestSpecifier);
if (manifestDirectory == null)
{
- throw new FileNotFoundException(string.Format(Strings.ManifestFromInstallStateNotFound, manifestSpecifier.ToString(), _installStateFilePath));
+ // Manifest from install state is missing. This can happen after SDK upgrades.
+ // Store the exception to be thrown when needed, but allow workload commands to proceed
+ // so they can install the missing manifests.
+ if (_exceptionToThrow == null)
+ {
+ _exceptionToThrow = new FileNotFoundException(string.Format(Strings.ManifestFromInstallStateNotFound, manifestSpecifier.ToString(), _installStateFilePath));
+ }
+ continue;
}
AddManifest(manifestSpecifier.Id.ToString(), manifestDirectory, manifestSpecifier.FeatureBand.ToString(), kvp.Value.Version.ToString());
}
@@ -400,6 +421,10 @@ void ProbeDirectory(string manifestDirectory, string featureBand)
}
}
+ // Note: We intentionally do not throw here if manifests from workload sets are missing (_exceptionToThrow != null).
+ // This allows workload commands (install, update, restore) to proceed and install the missing manifests.
+ // Info commands will see IsInstalled: false in GetWorkloadVersion() and show appropriate warnings.
+
// Return manifests in a stable order. Manifests in the KnownWorkloadManifests.txt file will be first, and in the same order they appear in that file.
// Then the rest of the manifests (if any) will be returned in (ordinal case-insensitive) alphabetical order.
return manifestIdsToManifests
diff --git a/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/Strings.resx b/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/Strings.resx
index cf418daa75cb..f7ab8ac18162 100644
--- a/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/Strings.resx
+++ b/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/Strings.resx
@@ -190,12 +190,12 @@
Invalid version: {0}
- Workload manifest {0} from workload version {1} was not installed. Running "dotnet workload repair" may resolve this.
- {Locked="dotnet workload repair"}
+ Workload manifest {0} from workload version {1} was not installed. Running "dotnet workload update" may resolve this.
+ {Locked="dotnet workload update"}
- Workload manifest {0}, which was specified in {1}, was not found. Running "dotnet workload repair" may resolve this.
- {Locked="dotnet workload repair"}
+ Workload manifest {0}, which was specified in {1}, was not found. Running "dotnet workload update" may resolve this.
+ {Locked="dotnet workload update"}Workload version {0}, which was specified in {1}, was not found. Run "dotnet workload restore" to install this workload version.
diff --git a/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.cs.xlf b/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.cs.xlf
index 1891cc4ff30b..f75e3ad2595a 100644
--- a/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.cs.xlf
+++ b/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.cs.xlf
@@ -83,14 +83,14 @@
- Workload manifest {0}, which was specified in {1}, was not found. Running "dotnet workload repair" may resolve this.
- Manifest úlohy {0}, který byl určen v {1}, nebyl nalezen. Tento problém může vyřešit spuštění „dotnet workload repair“.
- {Locked="dotnet workload repair"}
+ Workload manifest {0}, which was specified in {1}, was not found. Running "dotnet workload update" may resolve this.
+ Manifest úlohy {0}, který byl určen v {1}, nebyl nalezen. Tento problém může vyřešit spuštění „dotnet workload repair“.
+ {Locked="dotnet workload update"}
- Workload manifest {0} from workload version {1} was not installed. Running "dotnet workload repair" may resolve this.
- Manifest úlohy {0} z verze úlohy {1} nebyl nainstalován. Tento problém může vyřešit spuštění „dotnet workload repair“.
- {Locked="dotnet workload repair"}
+ Workload manifest {0} from workload version {1} was not installed. Running "dotnet workload update" may resolve this.
+ Manifest úlohy {0} z verze úlohy {1} nebyl nainstalován. Tento problém může vyřešit spuštění „dotnet workload repair“.
+ {Locked="dotnet workload update"}Could not find workload '{0}' extended by workload '{1}' in manifest '{2}' [{3}]
diff --git a/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.de.xlf b/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.de.xlf
index aa35c3838c22..866a1ab2b1dc 100644
--- a/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.de.xlf
+++ b/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.de.xlf
@@ -83,14 +83,14 @@
- Workload manifest {0}, which was specified in {1}, was not found. Running "dotnet workload repair" may resolve this.
- Das Arbeitsauslastungsmanifest {0}, das in {1} angegeben wurde, wurde nicht gefunden. Die Ausführung von "dotnet workload repair" kann dies beheben.
- {Locked="dotnet workload repair"}
+ Workload manifest {0}, which was specified in {1}, was not found. Running "dotnet workload update" may resolve this.
+ Das Arbeitsauslastungsmanifest {0}, das in {1} angegeben wurde, wurde nicht gefunden. Die Ausführung von "dotnet workload repair" kann dies beheben.
+ {Locked="dotnet workload update"}
- Workload manifest {0} from workload version {1} was not installed. Running "dotnet workload repair" may resolve this.
- Das Workloadmanifest {0} aus der Workloadversion {1} wurde nicht installiert. Die Ausführung von "dotnet workload repair" kann dies beheben.
- {Locked="dotnet workload repair"}
+ Workload manifest {0} from workload version {1} was not installed. Running "dotnet workload update" may resolve this.
+ Das Workloadmanifest {0} aus der Workloadversion {1} wurde nicht installiert. Die Ausführung von "dotnet workload repair" kann dies beheben.
+ {Locked="dotnet workload update"}Could not find workload '{0}' extended by workload '{1}' in manifest '{2}' [{3}]
diff --git a/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.es.xlf b/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.es.xlf
index 485e6e0a0cf8..8ea820b5cde2 100644
--- a/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.es.xlf
+++ b/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.es.xlf
@@ -83,14 +83,14 @@
- Workload manifest {0}, which was specified in {1}, was not found. Running "dotnet workload repair" may resolve this.
- No se ha encontrado el manifiesto de carga de trabajo {0}, que se especificó en {1}. La ejecución de "dotnet workload repair" puede resolverlo.
- {Locked="dotnet workload repair"}
+ Workload manifest {0}, which was specified in {1}, was not found. Running "dotnet workload update" may resolve this.
+ No se ha encontrado el manifiesto de carga de trabajo {0}, que se especificó en {1}. La ejecución de "dotnet workload repair" puede resolverlo.
+ {Locked="dotnet workload update"}
- Workload manifest {0} from workload version {1} was not installed. Running "dotnet workload repair" may resolve this.
- No se ha instalado el manifiesto de carga de trabajo {0} de la versión de carga de trabajo {1}. La ejecución de "dotnet workload repair" puede resolverlo.
- {Locked="dotnet workload repair"}
+ Workload manifest {0} from workload version {1} was not installed. Running "dotnet workload update" may resolve this.
+ No se ha instalado el manifiesto de carga de trabajo {0} de la versión de carga de trabajo {1}. La ejecución de "dotnet workload repair" puede resolverlo.
+ {Locked="dotnet workload update"}Could not find workload '{0}' extended by workload '{1}' in manifest '{2}' [{3}]
diff --git a/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.fr.xlf b/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.fr.xlf
index 0ae7f6800bd3..190315ccd6ec 100644
--- a/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.fr.xlf
+++ b/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.fr.xlf
@@ -83,14 +83,14 @@
- Workload manifest {0}, which was specified in {1}, was not found. Running "dotnet workload repair" may resolve this.
- Le manifeste de charge de travail {0}, spécifié dans {1}, est introuvable. L’exécution "dotnet workload repair" pourrait résoudre ce problème.
- {Locked="dotnet workload repair"}
+ Workload manifest {0}, which was specified in {1}, was not found. Running "dotnet workload update" may resolve this.
+ Le manifeste de charge de travail {0}, spécifié dans {1}, est introuvable. L’exécution "dotnet workload repair" pourrait résoudre ce problème.
+ {Locked="dotnet workload update"}
- Workload manifest {0} from workload version {1} was not installed. Running "dotnet workload repair" may resolve this.
- Le manifeste de charge de travail {0} de la version de charge de travail {1} n’a pas été installé. L’exécution "dotnet workload repair" pourrait résoudre ce problème.
- {Locked="dotnet workload repair"}
+ Workload manifest {0} from workload version {1} was not installed. Running "dotnet workload update" may resolve this.
+ Le manifeste de charge de travail {0} de la version de charge de travail {1} n’a pas été installé. L’exécution "dotnet workload repair" pourrait résoudre ce problème.
+ {Locked="dotnet workload update"}Could not find workload '{0}' extended by workload '{1}' in manifest '{2}' [{3}]
diff --git a/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.it.xlf b/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.it.xlf
index 7c666799e412..1e9b8e355837 100644
--- a/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.it.xlf
+++ b/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.it.xlf
@@ -83,14 +83,14 @@
- Workload manifest {0}, which was specified in {1}, was not found. Running "dotnet workload repair" may resolve this.
- Il manifesto del carico di lavoro {0}, specificato in {1}, non è stato trovato. L'esecuzione della "dotnet workload repair" può risolvere questo errore.
- {Locked="dotnet workload repair"}
+ Workload manifest {0}, which was specified in {1}, was not found. Running "dotnet workload update" may resolve this.
+ Il manifesto del carico di lavoro {0}, specificato in {1}, non è stato trovato. L'esecuzione della "dotnet workload repair" può risolvere questo errore.
+ {Locked="dotnet workload update"}
- Workload manifest {0} from workload version {1} was not installed. Running "dotnet workload repair" may resolve this.
- Il manifesto del carico di lavoro {0} dalla versione {1} del carico di lavoro non è stato installato. L'esecuzione della "dotnet workload repair" può risolvere questo errore.
- {Locked="dotnet workload repair"}
+ Workload manifest {0} from workload version {1} was not installed. Running "dotnet workload update" may resolve this.
+ Il manifesto del carico di lavoro {0} dalla versione {1} del carico di lavoro non è stato installato. L'esecuzione della "dotnet workload repair" può risolvere questo errore.
+ {Locked="dotnet workload update"}Could not find workload '{0}' extended by workload '{1}' in manifest '{2}' [{3}]
diff --git a/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.ja.xlf b/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.ja.xlf
index cc172807eaa9..db170eb1a4ba 100644
--- a/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.ja.xlf
+++ b/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.ja.xlf
@@ -83,14 +83,14 @@
- Workload manifest {0}, which was specified in {1}, was not found. Running "dotnet workload repair" may resolve this.
- {1} で指定されたワークロード マニフェスト {0} が見つかりませんでした。"dotnet workload repair" を実行すると、これを解決できる場合があります。
- {Locked="dotnet workload repair"}
+ Workload manifest {0}, which was specified in {1}, was not found. Running "dotnet workload update" may resolve this.
+ {1} で指定されたワークロード マニフェスト {0} が見つかりませんでした。"dotnet workload repair" を実行すると、これを解決できる場合があります。
+ {Locked="dotnet workload update"}
- Workload manifest {0} from workload version {1} was not installed. Running "dotnet workload repair" may resolve this.
- ワークロード バージョン {1} のワークロード マニフェスト {0} がインストールされませんでした。"dotnet workload repair" を実行すると、これを解決できる場合があります。
- {Locked="dotnet workload repair"}
+ Workload manifest {0} from workload version {1} was not installed. Running "dotnet workload update" may resolve this.
+ ワークロード バージョン {1} のワークロード マニフェスト {0} がインストールされませんでした。"dotnet workload repair" を実行すると、これを解決できる場合があります。
+ {Locked="dotnet workload update"}Could not find workload '{0}' extended by workload '{1}' in manifest '{2}' [{3}]
diff --git a/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.ko.xlf b/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.ko.xlf
index 385531b1c48b..94bb1f26c36c 100644
--- a/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.ko.xlf
+++ b/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.ko.xlf
@@ -83,14 +83,14 @@
- Workload manifest {0}, which was specified in {1}, was not found. Running "dotnet workload repair" may resolve this.
- {1}에 지정된 워크로드 매니페스트 {0}을(를) 찾을 수 없습니다. "dotnet workload repair"를 실행하면 이 문제를 해결할 수 있습니다.
- {Locked="dotnet workload repair"}
+ Workload manifest {0}, which was specified in {1}, was not found. Running "dotnet workload update" may resolve this.
+ {1}에 지정된 워크로드 매니페스트 {0}을(를) 찾을 수 없습니다. "dotnet workload repair"를 실행하면 이 문제를 해결할 수 있습니다.
+ {Locked="dotnet workload update"}
- Workload manifest {0} from workload version {1} was not installed. Running "dotnet workload repair" may resolve this.
- 워크로드 버전 {1}의 워크로드 매니페스트 {0}이(가) 설치되지 않았습니다. "dotnet workload repair"를 실행하면 이 문제를 해결할 수 있습니다.
- {Locked="dotnet workload repair"}
+ Workload manifest {0} from workload version {1} was not installed. Running "dotnet workload update" may resolve this.
+ 워크로드 버전 {1}의 워크로드 매니페스트 {0}이(가) 설치되지 않았습니다. "dotnet workload repair"를 실행하면 이 문제를 해결할 수 있습니다.
+ {Locked="dotnet workload update"}Could not find workload '{0}' extended by workload '{1}' in manifest '{2}' [{3}]
diff --git a/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.pl.xlf b/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.pl.xlf
index 2f5dc549ddf0..731a22718dfa 100644
--- a/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.pl.xlf
+++ b/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.pl.xlf
@@ -83,14 +83,14 @@
- Workload manifest {0}, which was specified in {1}, was not found. Running "dotnet workload repair" may resolve this.
- Nie znaleziono manifestu obciążenia {0}, który został określony w: {1}. Uruchomienie polecenia "dotnet workload repair" może rozwiązać ten problem.
- {Locked="dotnet workload repair"}
+ Workload manifest {0}, which was specified in {1}, was not found. Running "dotnet workload update" may resolve this.
+ Nie znaleziono manifestu obciążenia {0}, który został określony w: {1}. Uruchomienie polecenia "dotnet workload repair" może rozwiązać ten problem.
+ {Locked="dotnet workload update"}
- Workload manifest {0} from workload version {1} was not installed. Running "dotnet workload repair" may resolve this.
- Nie zainstalowano manifestu obciążenia {0} z wersji obciążenia {1}. Uruchomienie polecenia "dotnet workload repair" może rozwiązać ten problem.
- {Locked="dotnet workload repair"}
+ Workload manifest {0} from workload version {1} was not installed. Running "dotnet workload update" may resolve this.
+ Nie zainstalowano manifestu obciążenia {0} z wersji obciążenia {1}. Uruchomienie polecenia "dotnet workload repair" może rozwiązać ten problem.
+ {Locked="dotnet workload update"}Could not find workload '{0}' extended by workload '{1}' in manifest '{2}' [{3}]
diff --git a/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.pt-BR.xlf b/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.pt-BR.xlf
index f5f0331a25ec..c57811aeaa87 100644
--- a/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.pt-BR.xlf
+++ b/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.pt-BR.xlf
@@ -83,14 +83,14 @@
- Workload manifest {0}, which was specified in {1}, was not found. Running "dotnet workload repair" may resolve this.
- O manifesto {0} de carga de trabalho, que foi especificado em {1}, não foi encontrado. Executar "dotnet workload repair" pode resolver isso.
- {Locked="dotnet workload repair"}
+ Workload manifest {0}, which was specified in {1}, was not found. Running "dotnet workload update" may resolve this.
+ O manifesto {0} de carga de trabalho, que foi especificado em {1}, não foi encontrado. Executar "dotnet workload repair" pode resolver isso.
+ {Locked="dotnet workload update"}
- Workload manifest {0} from workload version {1} was not installed. Running "dotnet workload repair" may resolve this.
- O manifesto de carga {0} da versão de carga de trabalho {1} não foi instalado. Executar "dotnet workload repair" pode resolver isso.
- {Locked="dotnet workload repair"}
+ Workload manifest {0} from workload version {1} was not installed. Running "dotnet workload update" may resolve this.
+ O manifesto de carga {0} da versão de carga de trabalho {1} não foi instalado. Executar "dotnet workload repair" pode resolver isso.
+ {Locked="dotnet workload update"}Could not find workload '{0}' extended by workload '{1}' in manifest '{2}' [{3}]
diff --git a/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.ru.xlf b/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.ru.xlf
index bf88a6af7bbe..7c1074737dd1 100644
--- a/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.ru.xlf
+++ b/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.ru.xlf
@@ -83,14 +83,14 @@
- Workload manifest {0}, which was specified in {1}, was not found. Running "dotnet workload repair" may resolve this.
- Не найден манифест рабочей нагрузки {0}, указанный в {1}. Выполнение команды "dotnet workload repair" может устранить эту проблему.
- {Locked="dotnet workload repair"}
+ Workload manifest {0}, which was specified in {1}, was not found. Running "dotnet workload update" may resolve this.
+ Не найден манифест рабочей нагрузки {0}, указанный в {1}. Выполнение команды "dotnet workload repair" может устранить эту проблему.
+ {Locked="dotnet workload update"}
- Workload manifest {0} from workload version {1} was not installed. Running "dotnet workload repair" may resolve this.
- Манифест рабочей нагрузки {0} из версии рабочей нагрузки {1} не установлен. Выполнение команды "dotnet workload repair" может устранить эту проблему.
- {Locked="dotnet workload repair"}
+ Workload manifest {0} from workload version {1} was not installed. Running "dotnet workload update" may resolve this.
+ Манифест рабочей нагрузки {0} из версии рабочей нагрузки {1} не установлен. Выполнение команды "dotnet workload repair" может устранить эту проблему.
+ {Locked="dotnet workload update"}Could not find workload '{0}' extended by workload '{1}' in manifest '{2}' [{3}]
diff --git a/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.tr.xlf b/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.tr.xlf
index 786f001a3435..1eacda8c7195 100644
--- a/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.tr.xlf
+++ b/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.tr.xlf
@@ -83,14 +83,14 @@
- Workload manifest {0}, which was specified in {1}, was not found. Running "dotnet workload repair" may resolve this.
- {1} içinde belirtilen iş yükü bildirimi {0} bulunamadı. Çalışan "dotnet workload repair" bu sorunu çözebilir.
- {Locked="dotnet workload repair"}
+ Workload manifest {0}, which was specified in {1}, was not found. Running "dotnet workload update" may resolve this.
+ {1} içinde belirtilen iş yükü bildirimi {0} bulunamadı. Çalışan "dotnet workload repair" bu sorunu çözebilir.
+ {Locked="dotnet workload update"}
- Workload manifest {0} from workload version {1} was not installed. Running "dotnet workload repair" may resolve this.
- İş yükü sürümünden {1} iş yükü bildirimi {0} yüklenmedi. Çalışan "dotnet workload repair" bu sorunu çözebilir.
- {Locked="dotnet workload repair"}
+ Workload manifest {0} from workload version {1} was not installed. Running "dotnet workload update" may resolve this.
+ İş yükü sürümünden {1} iş yükü bildirimi {0} yüklenmedi. Çalışan "dotnet workload repair" bu sorunu çözebilir.
+ {Locked="dotnet workload update"}Could not find workload '{0}' extended by workload '{1}' in manifest '{2}' [{3}]
diff --git a/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.zh-Hans.xlf b/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.zh-Hans.xlf
index 911a2731d284..fb8945b7915e 100644
--- a/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.zh-Hans.xlf
+++ b/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.zh-Hans.xlf
@@ -83,14 +83,14 @@
- Workload manifest {0}, which was specified in {1}, was not found. Running "dotnet workload repair" may resolve this.
- 找不到 {1} 中指定的工作负载清单 {0}。运行 "dotnet workload repair" 可能会解决此问题。
- {Locked="dotnet workload repair"}
+ Workload manifest {0}, which was specified in {1}, was not found. Running "dotnet workload update" may resolve this.
+ 找不到 {1} 中指定的工作负载清单 {0}。运行 "dotnet workload repair" 可能会解决此问题。
+ {Locked="dotnet workload update"}
- Workload manifest {0} from workload version {1} was not installed. Running "dotnet workload repair" may resolve this.
- 未安装工作负载版本 {0} 中的工作负载清单 {1}。运行 "dotnet workload repair" 可能会解决此问题。
- {Locked="dotnet workload repair"}
+ Workload manifest {0} from workload version {1} was not installed. Running "dotnet workload update" may resolve this.
+ 未安装工作负载版本 {0} 中的工作负载清单 {1}。运行 "dotnet workload repair" 可能会解决此问题。
+ {Locked="dotnet workload update"}Could not find workload '{0}' extended by workload '{1}' in manifest '{2}' [{3}]
diff --git a/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.zh-Hant.xlf b/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.zh-Hant.xlf
index 423e6216ecca..b5f54d643a33 100644
--- a/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.zh-Hant.xlf
+++ b/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/xlf/Strings.zh-Hant.xlf
@@ -83,14 +83,14 @@
- Workload manifest {0}, which was specified in {1}, was not found. Running "dotnet workload repair" may resolve this.
- 找不到 {1} 中指定的工作負載資訊清單 {0}。執行 "dotnet workload repair" 可能會解決這個問題。
- {Locked="dotnet workload repair"}
+ Workload manifest {0}, which was specified in {1}, was not found. Running "dotnet workload update" may resolve this.
+ 找不到 {1} 中指定的工作負載資訊清單 {0}。執行 "dotnet workload repair" 可能會解決這個問題。
+ {Locked="dotnet workload update"}
- Workload manifest {0} from workload version {1} was not installed. Running "dotnet workload repair" may resolve this.
- 未安裝工作負載版本 {1} 中的工作負載資訊清單 {0}。執行 "dotnet workload repair" 可能會解決這個問題。
- {Locked="dotnet workload repair"}
+ Workload manifest {0} from workload version {1} was not installed. Running "dotnet workload update" may resolve this.
+ 未安裝工作負載版本 {1} 中的工作負載資訊清單 {0}。執行 "dotnet workload repair" 可能會解決這個問題。
+ {Locked="dotnet workload update"}Could not find workload '{0}' extended by workload '{1}' in manifest '{2}' [{3}]
diff --git a/test/Microsoft.NET.Sdk.WorkloadManifestReader.Tests/SdkDirectoryWorkloadManifestProviderTests.cs b/test/Microsoft.NET.Sdk.WorkloadManifestReader.Tests/SdkDirectoryWorkloadManifestProviderTests.cs
index cbb52e8040c1..feb9dedb4696 100644
--- a/test/Microsoft.NET.Sdk.WorkloadManifestReader.Tests/SdkDirectoryWorkloadManifestProviderTests.cs
+++ b/test/Microsoft.NET.Sdk.WorkloadManifestReader.Tests/SdkDirectoryWorkloadManifestProviderTests.cs
@@ -420,7 +420,7 @@ var sdkDirectoryWorkloadManifestProvider
}
[Fact]
- public void ItThrowsIfManifestFromWorkloadSetIsNotFound()
+ public void ItReturnsIsInstalledFalseIfManifestFromWorkloadSetIsNotFound()
{
Initialize("8.0.200");
@@ -436,7 +436,16 @@ public void ItThrowsIfManifestFromWorkloadSetIsNotFound()
var sdkDirectoryWorkloadManifestProvider
= new SdkDirectoryWorkloadManifestProvider(sdkRootPath: _fakeDotnetRootDirectory, sdkVersion: "8.0.200", userProfileDir: null, globalJsonPath: null);
- Assert.Throws(() => GetManifestContents(sdkDirectoryWorkloadManifestProvider).ToList());
+ // GetManifests should not throw, and will scan directories to find available manifests
+ // Since the workload set specifies ios 12.0.2 which doesn't exist, but 12.0.1 is available on disk,
+ // it will return 12.0.1 (from directory scan) since workload set manifests override but missing ones don't prevent scanning
+ var manifests = GetManifestContents(sdkDirectoryWorkloadManifestProvider).ToList();
+ manifests.Should().Contain(m => m.Contains("ios: 12.0.1"));
+
+ // GetWorkloadVersion should indicate manifests are not installed (because 12.0.2 is missing)
+ var versionInfo = sdkDirectoryWorkloadManifestProvider.GetWorkloadVersion();
+ versionInfo.Version.Should().Be("8.0.200");
+ versionInfo.IsInstalled.Should().BeFalse();
}
[Fact]
@@ -556,7 +565,7 @@ var sdkDirectoryWorkloadManifestProvider
}
[Fact]
- public void ItFailsIfWorkloadSetFromGlobalJsonIsNotInstalled()
+ public void ItReturnsIsInstalledFalseIfWorkloadSetFromGlobalJsonIsNotInstalled()
{
Initialize("8.0.200");
@@ -582,8 +591,15 @@ public void ItFailsIfWorkloadSetFromGlobalJsonIsNotInstalled()
""");
var manifestProvider = new SdkDirectoryWorkloadManifestProvider(sdkRootPath: _fakeDotnetRootDirectory, sdkVersion: "8.0.200", userProfileDir: null, globalJsonPath: globalJsonPath);
- var ex = Assert.Throws(() => manifestProvider.GetManifests());
- ex.Message.Should().Be(string.Format(Strings.WorkloadVersionFromGlobalJsonNotFound, "8.0.201", globalJsonPath));
+
+ // GetManifests should not throw
+ var manifests = manifestProvider.GetManifests().ToList();
+
+ // GetWorkloadVersion should indicate the workload set from global.json is not installed
+ var versionInfo = manifestProvider.GetWorkloadVersion();
+ versionInfo.Version.Should().Be("8.0.201");
+ versionInfo.IsInstalled.Should().BeFalse();
+ versionInfo.GlobalJsonPath.Should().Be(globalJsonPath);
}
[Fact]
@@ -683,7 +699,7 @@ public void ItFailsIfWorkloadSetFromInstallStateIsNotInstalled()
}
[Fact]
- public void ItFailsIfManifestFromWorkloadSetFromInstallStateIsNotInstalled()
+ public void ItReturnsIsInstalledFalseIfManifestFromWorkloadSetFromInstallStateIsNotInstalled()
{
Initialize("8.0.200");
@@ -710,9 +726,17 @@ public void ItFailsIfManifestFromWorkloadSetFromInstallStateIsNotInstalled()
var sdkDirectoryWorkloadManifestProvider
= new SdkDirectoryWorkloadManifestProvider(sdkRootPath: _fakeDotnetRootDirectory, sdkVersion: "8.0.200", userProfileDir: null, globalJsonPath: null);
- var ex = Assert.Throws(() => sdkDirectoryWorkloadManifestProvider.GetManifests().ToList());
-
- ex.Message.Should().Be(string.Format(Strings.ManifestFromWorkloadSetNotFound, "ios: 11.0.2/8.0.100", "8.0.201"));
+ // GetManifests should not throw, and will scan directories to find available manifests
+ // Since workload set 8.0.201 specifies ios 11.0.2/8.0.100 which doesn't exist,
+ // but 12.0.1 is available on disk, it will return 12.0.1 from directory scan
+ var manifests = sdkDirectoryWorkloadManifestProvider.GetManifests().ToList();
+ manifests.Should().ContainSingle();
+ manifests.Single().ManifestVersion.Should().Be("12.0.1");
+
+ // GetWorkloadVersion should indicate manifests are not installed (because workload set manifest is missing)
+ var versionInfo = sdkDirectoryWorkloadManifestProvider.GetWorkloadVersion();
+ versionInfo.Version.Should().Be("8.0.201");
+ versionInfo.IsInstalled.Should().BeFalse();
}
[Fact]
@@ -755,7 +779,7 @@ var sdkDirectoryWorkloadManifestProvider
}
[Fact]
- public void ItFailsIfManifestFromInstallStateIsNotInstalled()
+ public void ItReturnsIsInstalledFalseIfManifestFromInstallStateIsNotInstalled()
{
Initialize("8.0.200");
@@ -787,9 +811,11 @@ public void ItFailsIfManifestFromInstallStateIsNotInstalled()
var sdkDirectoryWorkloadManifestProvider
= new SdkDirectoryWorkloadManifestProvider(sdkRootPath: _fakeDotnetRootDirectory, sdkVersion: "8.0.200", userProfileDir: null, globalJsonPath: null);
- var ex = Assert.Throws(() => sdkDirectoryWorkloadManifestProvider.GetManifests().ToList());
-
- ex.Message.Should().Be(string.Format(Strings.ManifestFromInstallStateNotFound, "ios: 12.0.2/8.0.200", installStatePath));
+ // GetManifests should not throw, and will scan directories to find available manifests
+ // Since ios 12.0.2 doesn't exist, it will scan and find ios 12.0.1
+ var manifests = GetManifestContents(sdkDirectoryWorkloadManifestProvider).ToList();
+ manifests.Should().ContainSingle();
+ manifests.Single().Should().Contain("ios: 12.0.1");
}
[Fact]