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]