diff --git a/Directory.Build.targets b/Directory.Build.targets index 691921249d5f..2d510c42fc18 100644 --- a/Directory.Build.targets +++ b/Directory.Build.targets @@ -96,8 +96,9 @@ - + + diff --git a/Directory.Packages.props b/Directory.Packages.props index ab453e50c8c7..788923bf48d6 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -59,7 +59,6 @@ - diff --git a/eng/SourcePackage.netframework.editorconfig b/eng/SourcePackage.netframework.editorconfig new file mode 100644 index 000000000000..e9cd67ee9fbd --- /dev/null +++ b/eng/SourcePackage.netframework.editorconfig @@ -0,0 +1,21 @@ +# Remove the line below if you want to inherit .editorconfig settings from higher directories +root = true + +# C# files +[*.cs] + +# We don't want any analyzer diagnostics to be reported for people consuming this as a source package. +dotnet_analyzer_diagnostic.severity = none + +generated_code = true + +# The above configurations don't apply to compiler warnings. Requiring all params to be documented +# is not something we require for this project, so suppressing it directly here. +dotnet_diagnostic.CS1573.severity = none + +# As above, we need to specifically disable compiler warnings that we don't want to break downstream +# builds +dotnet_diagnostic.IDE0005.severity = none + +# Disable nullability checks when targeting .NET Framework +dotnet_diagnostic.CS8604.severity = none \ No newline at end of file diff --git a/src/BuiltInTools/dotnet-watch/HotReload/AppModels/HotReloadAppModel.cs b/src/BuiltInTools/dotnet-watch/HotReload/AppModels/HotReloadAppModel.cs index 37502de871c7..7a205a8d1fce 100644 --- a/src/BuiltInTools/dotnet-watch/HotReload/AppModels/HotReloadAppModel.cs +++ b/src/BuiltInTools/dotnet-watch/HotReload/AppModels/HotReloadAppModel.cs @@ -16,13 +16,7 @@ protected static string GetInjectedAssemblyPath(string targetFramework, string a public static string GetStartupHookPath(ProjectGraphNode project) { - var hookTargetFramework = project.GetTargetFramework() switch - { - // Note: Hot Reload is only supported on net6.0+ - "net6.0" or "net7.0" or "net8.0" or "net9.0" => "net6.0", - _ => "net10.0", - }; - + var hookTargetFramework = project.GetTargetFrameworkVersion() is { Major: >= 10 } ? "net10.0" : "net6.0"; return GetInjectedAssemblyPath(hookTargetFramework, "Microsoft.Extensions.DotNetDeltaApplier"); } diff --git a/src/Cli/Microsoft.TemplateEngine.Cli/Components.cs b/src/Cli/Microsoft.TemplateEngine.Cli/Components.cs index 34870595d00e..1a73b2615c39 100644 --- a/src/Cli/Microsoft.TemplateEngine.Cli/Components.cs +++ b/src/Cli/Microsoft.TemplateEngine.Cli/Components.cs @@ -15,7 +15,6 @@ public static class Components (typeof(IPostActionProcessor), new InstructionDisplayPostActionProcessor()), (typeof(IPostActionProcessor), new ProcessStartPostActionProcessor()), (typeof(IPostActionProcessor), new AddJsonPropertyPostActionProcessor()), - (typeof(IPostActionProcessor), new CreateOrUpdateDotnetConfigPostActionProcessor()), }; } } diff --git a/src/Cli/Microsoft.TemplateEngine.Cli/LocalizableStrings.Designer.cs b/src/Cli/Microsoft.TemplateEngine.Cli/LocalizableStrings.Designer.cs index f7b0a86e0e80..ecf9c58147f5 100644 --- a/src/Cli/Microsoft.TemplateEngine.Cli/LocalizableStrings.Designer.cs +++ b/src/Cli/Microsoft.TemplateEngine.Cli/LocalizableStrings.Designer.cs @@ -1403,51 +1403,6 @@ internal static string PossibleValuesHeader { } } - /// - /// Looks up a localized string similar to Created new section in 'dotnet.config' file. - /// - internal static string PostAction_CreateDotnetConfig_CreatedNewSection { - get { - return ResourceManager.GetString("PostAction_CreateDotnetConfig_CreatedNewSection", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Updating existing values in 'dotnet.config' is not yet supported. Please, manually update 'dotnet.config' to have '{0}' under section '{1}'.. - /// - internal static string PostAction_CreateDotnetConfig_ManuallyUpdate { - get { - return ResourceManager.GetString("PostAction_CreateDotnetConfig_ManuallyUpdate", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Successfully created 'dotnet.config' file.. - /// - internal static string PostAction_CreateDotnetConfig_Succeeded { - get { - return ResourceManager.GetString("PostAction_CreateDotnetConfig_Succeeded", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The required value in 'dotnet.config' is already set.. - /// - internal static string PostAction_CreateDotnetConfig_ValueAlreadyExist { - get { - return ResourceManager.GetString("PostAction_CreateDotnetConfig_ValueAlreadyExist", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Post action argument '{0}' is mandatory, but not configured.. - /// - internal static string PostAction_DotnetConfig_Error_ArgumentNotConfigured { - get { - return ResourceManager.GetString("PostAction_DotnetConfig_Error_ArgumentNotConfigured", resourceCulture); - } - } - /// /// Looks up a localized string similar to Post action argument '{0}' is not a valid boolean value.. /// diff --git a/src/Cli/Microsoft.TemplateEngine.Cli/LocalizableStrings.resx b/src/Cli/Microsoft.TemplateEngine.Cli/LocalizableStrings.resx index d7de5f7d82b2..01b59dfe8833 100644 --- a/src/Cli/Microsoft.TemplateEngine.Cli/LocalizableStrings.resx +++ b/src/Cli/Microsoft.TemplateEngine.Cli/LocalizableStrings.resx @@ -953,23 +953,4 @@ The header is followed by the list of parameters and their errors (might be seve Attempting to find json file '{0}' in '{1}' - - Post action argument '{0}' is mandatory, but not configured. - - - Successfully created 'dotnet.config' file. - {Locked="dotnet.config"} - - - Created new section in 'dotnet.config' file - {Locked="dotnet.config"} - - - The required value in 'dotnet.config' is already set. - {Locked="dotnet.config"} - - - Updating existing values in 'dotnet.config' is not yet supported. Please, manually update 'dotnet.config' to have '{0}' under section '{1}'. - {Locked="dotnet.config"} - - \ No newline at end of file + diff --git a/src/Cli/Microsoft.TemplateEngine.Cli/Microsoft.TemplateEngine.Cli.csproj b/src/Cli/Microsoft.TemplateEngine.Cli/Microsoft.TemplateEngine.Cli.csproj index d8fb3406268a..228c9cd613d2 100644 --- a/src/Cli/Microsoft.TemplateEngine.Cli/Microsoft.TemplateEngine.Cli.csproj +++ b/src/Cli/Microsoft.TemplateEngine.Cli/Microsoft.TemplateEngine.Cli.csproj @@ -16,7 +16,6 @@ - diff --git a/src/Cli/Microsoft.TemplateEngine.Cli/PostActionProcessors/AddJsonPropertyPostActionProcessor.cs b/src/Cli/Microsoft.TemplateEngine.Cli/PostActionProcessors/AddJsonPropertyPostActionProcessor.cs index 68a0855d97ef..80ca23402914 100644 --- a/src/Cli/Microsoft.TemplateEngine.Cli/PostActionProcessors/AddJsonPropertyPostActionProcessor.cs +++ b/src/Cli/Microsoft.TemplateEngine.Cli/PostActionProcessors/AddJsonPropertyPostActionProcessor.cs @@ -19,6 +19,7 @@ internal class AddJsonPropertyPostActionProcessor : PostActionProcessorBase private const string ParentPropertyPathArgument = "parentPropertyPath"; private const string NewJsonPropertyNameArgument = "newJsonPropertyName"; private const string NewJsonPropertyValueArgument = "newJsonPropertyValue"; + private const string DetectRepoRootForFileCreation = "detectRepositoryRootForFileCreation"; private static readonly JsonSerializerOptions SerializerOptions = new() { @@ -36,6 +37,43 @@ internal class AddJsonPropertyPostActionProcessor : PostActionProcessorBase internal static Guid ActionProcessorId { get; } = new Guid("695A3659-EB40-4FF5-A6A6-C9C4E629FCB0"); + internal static string GetRootDirectory(IPhysicalFileSystem fileSystem, string outputBasePath) + { + string? currentDirectory = outputBasePath; + string? directoryWithSln = null; + while (currentDirectory is not null) + { + if (fileSystem.FileExists(Path.Combine(currentDirectory, "global.json")) || + fileSystem.FileExists(Path.Combine(currentDirectory, ".git")) || + fileSystem.DirectoryExists(Path.Combine(currentDirectory, ".git"))) + { + // If we found global.json or .git, we immediately return the directory as the repo root. + // We won't go up any further. + return currentDirectory; + } + + // DirectoryExists here should always be true in practice, but for the way tests are mocking the file system, it's not. + // The check was added to prevent test failures similar to: + // System.IO.DirectoryNotFoundException : Could not find a part of the path '/Users/runner/work/1/s/artifacts/bin/Microsoft.TemplateEngine.Cli.UnitTests/Release/sandbox'. + // We get to this exception when doing `EnumerateFiles` on a directory that was virtually created in memory (not really available on disk). + // EnumerateFiles tries to access the physical file system, which then fails. + if (fileSystem.DirectoryExists(currentDirectory) && + (fileSystem.EnumerateFiles(currentDirectory, "*.sln", SearchOption.TopDirectoryOnly).Any() || + fileSystem.EnumerateFiles(currentDirectory, "*.slnx", SearchOption.TopDirectoryOnly).Any())) + { + directoryWithSln = currentDirectory; + } + + currentDirectory = Directory.GetParent(currentDirectory)?.FullName; + } + + // If we reach here, that means we didn't find .git or global.json. + // So, we return the directory where we found a .sln/.slnx file, if any. + // Note that when we keep track of directoryWithSln, we keep updating it from sln/slnx from parent directories, if found. + // This means that if there are multiple .sln/.slnx files in the parent directories, we will return the top-most one. + return directoryWithSln ?? outputBasePath; + } + protected override bool ProcessInternal( IEngineEnvironmentSettings environment, IPostAction action, @@ -65,7 +103,13 @@ protected override bool ProcessInternal( return false; } - string newJsonFilePath = Path.Combine(outputBasePath, jsonFileName); + if (!bool.TryParse(action.Args.GetValueOrDefault(DetectRepoRootForFileCreation, "false"), out bool detectRepoRoot)) + { + Reporter.Error.WriteLine(string.Format(LocalizableStrings.PostAction_ModifyJson_Error_ArgumentNotBoolean, DetectRepoRootForFileCreation)); + return false; + } + + string newJsonFilePath = Path.Combine(detectRepoRoot ? GetRootDirectory(environment.Host.FileSystem, outputBasePath) : outputBasePath, jsonFileName); environment.Host.FileSystem.WriteAllText(newJsonFilePath, "{}"); jsonFiles = new List { newJsonFilePath }; } diff --git a/src/Cli/Microsoft.TemplateEngine.Cli/PostActionProcessors/CreateOrUpdateDotnetConfigPostActionProcessor.cs b/src/Cli/Microsoft.TemplateEngine.Cli/PostActionProcessors/CreateOrUpdateDotnetConfigPostActionProcessor.cs deleted file mode 100644 index 9afbf5e899a0..000000000000 --- a/src/Cli/Microsoft.TemplateEngine.Cli/PostActionProcessors/CreateOrUpdateDotnetConfigPostActionProcessor.cs +++ /dev/null @@ -1,131 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using Microsoft.DotNet.Cli.Utils; -using Microsoft.Extensions.Configuration; -using Microsoft.TemplateEngine.Abstractions; -using Microsoft.TemplateEngine.Abstractions.PhysicalFileSystem; - -namespace Microsoft.TemplateEngine.Cli.PostActionProcessors -{ - internal sealed class CreateOrUpdateDotnetConfigPostActionProcessor : PostActionProcessorBase - { - private const string SectionArgument = "section"; - private const string KeyArgument = "key"; - private const string ValueArgument = "value"; - - public override Guid Id => ActionProcessorId; - - internal static Guid ActionProcessorId { get; } = new Guid("597E7933-0D87-452C-B094-8FA0EEF7FD97"); - - protected override bool ProcessInternal( - IEngineEnvironmentSettings environment, - IPostAction action, - ICreationEffects creationEffects, - ICreationResult templateCreationResult, - string outputBasePath) - { - if (!action.Args.TryGetValue(SectionArgument, out string? sectionName)) - { - Reporter.Error.WriteLine(string.Format(LocalizableStrings.PostAction_DotnetConfig_Error_ArgumentNotConfigured, SectionArgument)); - return false; - } - - if (!action.Args.TryGetValue(KeyArgument, out string? key)) - { - Reporter.Error.WriteLine(string.Format(LocalizableStrings.PostAction_DotnetConfig_Error_ArgumentNotConfigured, KeyArgument)); - return false; - } - - if (!action.Args.TryGetValue(ValueArgument, out string? value)) - { - Reporter.Error.WriteLine(string.Format(LocalizableStrings.PostAction_DotnetConfig_Error_ArgumentNotConfigured, ValueArgument)); - return false; - } - - var fileSystem = environment.Host.FileSystem; - var repoRoot = GetRootDirectory(fileSystem, outputBasePath); - var dotnetConfigFilePath = Path.Combine(repoRoot, "dotnet.config"); - if (!fileSystem.FileExists(dotnetConfigFilePath)) - { - fileSystem.WriteAllText(dotnetConfigFilePath, $""" - [{sectionName}] - {key} = "{value}" - - """); - - Reporter.Output.WriteLine(LocalizableStrings.PostAction_CreateDotnetConfig_Succeeded); - return true; - } - - var builder = new ConfigurationBuilder(); - using var stream = fileSystem.OpenRead(dotnetConfigFilePath); - builder.AddIniStream(stream); - IConfigurationRoot config = builder.Build(); - var section = config.GetSection(sectionName); - - if (!section.Exists()) - { - var existingContent = fileSystem.ReadAllText(dotnetConfigFilePath); - fileSystem.WriteAllText(dotnetConfigFilePath, $""" - {existingContent} - - [{sectionName}] - {key} = "{value}" - - """); - - Reporter.Output.WriteLine(LocalizableStrings.PostAction_CreateDotnetConfig_CreatedNewSection); - return true; - } - - string? existingValue = section[key]; - if (string.IsNullOrEmpty(existingValue)) - { - // The section exists, but the key/value pair does not. - Reporter.Error.WriteLine(string.Format(LocalizableStrings.PostAction_CreateDotnetConfig_ManuallyUpdate, $"{key} = \"{value}\"", $"[{sectionName}]")); - return false; - } - - if (existingValue.Equals(value, StringComparison.Ordinal)) - { - // The key already exists with the same value, nothing to do. - Reporter.Output.WriteLine(LocalizableStrings.PostAction_CreateDotnetConfig_ValueAlreadyExist); - return true; - } - - Reporter.Error.WriteLine(string.Format(LocalizableStrings.PostAction_CreateDotnetConfig_ManuallyUpdate, $"{key} = \"{value}\"", $"[{sectionName}]")); - return false; - } - - private static string GetRootDirectory(IPhysicalFileSystem fileSystem, string outputBasePath) - { - string? currentDirectory = outputBasePath; - string? directoryWithSln = null; - while (currentDirectory is not null) - { - if (fileSystem.FileExists(Path.Combine(currentDirectory, "dotnet.config")) || - fileSystem.DirectoryExists(Path.Combine(currentDirectory, ".git"))) - { - return currentDirectory; - } - - // DirectoryExists here should always be true in practice, but for the way tests are mocking the file system, it's not. - // The check was added to prevent test failures similar to: - // System.IO.DirectoryNotFoundException : Could not find a part of the path '/Users/runner/work/1/s/artifacts/bin/Microsoft.TemplateEngine.Cli.UnitTests/Release/sandbox'. - // We get to this exception when doing `EnumerateFiles` on a directory that was virtually created in memory (not really available on disk). - // EnumerateFiles tries to access the physical file system, which then fails. - if (fileSystem.DirectoryExists(currentDirectory) && - (fileSystem.EnumerateFiles(currentDirectory, "*.sln", SearchOption.TopDirectoryOnly).Any() || - fileSystem.EnumerateFiles(currentDirectory, "*.slnx", SearchOption.TopDirectoryOnly).Any())) - { - directoryWithSln = currentDirectory; - } - - currentDirectory = Directory.GetParent(currentDirectory)?.FullName; - } - - return directoryWithSln ?? outputBasePath; - } - } -} diff --git a/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.cs.xlf b/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.cs.xlf index 39bd00e9d35f..45f6d58a1ba7 100644 --- a/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.cs.xlf +++ b/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.cs.xlf @@ -830,31 +830,6 @@ The header is followed by the list of parameters and their errors (might be seve Chcete tuto akci spustit? [{0}(ano)|{1}(ne)] - - Created new section in 'dotnet.config' file - V souboru dotnet.config se vytvořil nový oddíl. - {Locked="dotnet.config"} - - - Updating existing values in 'dotnet.config' is not yet supported. Please, manually update 'dotnet.config' to have '{0}' under section '{1}'. - Aktualizace existujících hodnot v souboru dotnet.config se zatím nepodporuje. Ručně prosím aktualizujte soubor dotnet.config, aby obsahoval {0} v oddílu {1}. - {Locked="dotnet.config"} - - - Successfully created 'dotnet.config' file. - Soubor dotnet.config se úspěšně vytvořil. - {Locked="dotnet.config"} - - - The required value in 'dotnet.config' is already set. - Požadovaná hodnota v souboru dotnet.config je již nastavena. - {Locked="dotnet.config"} - - - Post action argument '{0}' is mandatory, but not configured. - Argument „{0}“ po akci je povinný, ale není nakonfigurovaný. - - Post action argument '{0}' is not a valid boolean value. Argument post-action {0} není platná logická hodnota. diff --git a/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.de.xlf b/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.de.xlf index 2e62d4b04a4c..eb67ab8bf9bf 100644 --- a/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.de.xlf +++ b/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.de.xlf @@ -830,31 +830,6 @@ The header is followed by the list of parameters and their errors (might be seve Möchten Sie diese Aktion ausführen [{0} (ja) |{1} (nein)]? - - Created new section in 'dotnet.config' file - Neuer Abschnitt in der dotnet.config-Datei erstellt - {Locked="dotnet.config"} - - - Updating existing values in 'dotnet.config' is not yet supported. Please, manually update 'dotnet.config' to have '{0}' under section '{1}'. - Das Aktualisieren vorhandener Werte in „dotnet.config“ wird noch nicht unterstützt. Aktualisieren Sie „dotnet.config“ manuell, damit „{0}“ im Abschnitt „{1}“ vorhanden ist. - {Locked="dotnet.config"} - - - Successfully created 'dotnet.config' file. - Die dotnet.config-Datei wurde erfolgreich erstellt. - {Locked="dotnet.config"} - - - The required value in 'dotnet.config' is already set. - Der erforderliche Wert in „dotnet.config“ ist bereits festgelegt. - {Locked="dotnet.config"} - - - Post action argument '{0}' is mandatory, but not configured. - Das Postaktionsargument "{0}" ist obligatorisch, aber nicht konfiguriert. - - Post action argument '{0}' is not a valid boolean value. Das Post-Aktionsargument „{0}“ ist kein gültiger boolescher Wert. diff --git a/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.es.xlf b/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.es.xlf index f0826c732183..748e66f30a00 100644 --- a/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.es.xlf +++ b/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.es.xlf @@ -830,31 +830,6 @@ The header is followed by the list of parameters and their errors (might be seve ¿Quiere ejecutar esta acción [{0}(yes)|{1}(no)]? - - Created new section in 'dotnet.config' file - Se ha creado una nueva sección en el archivo "dotnet.config" - {Locked="dotnet.config"} - - - Updating existing values in 'dotnet.config' is not yet supported. Please, manually update 'dotnet.config' to have '{0}' under section '{1}'. - Aún no se admite la actualización de los valores existentes en "dotnet.config". Actualice manualmente "dotnet.config" para que tenga "{0}" en la sección "{1}". - {Locked="dotnet.config"} - - - Successfully created 'dotnet.config' file. - El archivo "dotnet.config" se creó correctamente. - {Locked="dotnet.config"} - - - The required value in 'dotnet.config' is already set. - El valor requerido en "dotnet.config" ya está establecido. - {Locked="dotnet.config"} - - - Post action argument '{0}' is mandatory, but not configured. - El argumento de acción posterior '{0}' es obligatorio, pero no está configurado. - - Post action argument '{0}' is not a valid boolean value. El argumento de la acción publicado '{0}' no es un valor booleano válido. diff --git a/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.fr.xlf b/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.fr.xlf index 204d36b66c5a..d86722e36e60 100644 --- a/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.fr.xlf +++ b/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.fr.xlf @@ -830,31 +830,6 @@ The header is followed by the list of parameters and their errors (might be seve Voulez-vous exécuter cette action [{0} (yes) |{1} (no)] ? - - Created new section in 'dotnet.config' file - Création d'une nouvelle section dans le fichier « dotnet.config » - {Locked="dotnet.config"} - - - Updating existing values in 'dotnet.config' is not yet supported. Please, manually update 'dotnet.config' to have '{0}' under section '{1}'. - La mise à jour des valeurs existantes dans « dotnet.config » n'est pas encore prise en charge. Veuillez mettre à jour manuellement 'dotnet.config' pour avoir '{0}' sous la section '{1}'. - {Locked="dotnet.config"} - - - Successfully created 'dotnet.config' file. - Fichier « dotnet.config » créé avec succès. - {Locked="dotnet.config"} - - - The required value in 'dotnet.config' is already set. - La valeur requise dans « dotnet.config » est déjà définie. - {Locked="dotnet.config"} - - - Post action argument '{0}' is mandatory, but not configured. - L'argument de publication de l'action '{0}' est obligatoire, mais n'est pas configuré. - - Post action argument '{0}' is not a valid boolean value. L’argument post-action « {0} » n’est pas une valeur booléenne valide. diff --git a/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.it.xlf b/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.it.xlf index a1794531a180..45d8e4f02e4e 100644 --- a/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.it.xlf +++ b/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.it.xlf @@ -830,31 +830,6 @@ The header is followed by the list of parameters and their errors (might be seve Eseguire questa azione [{0} (sì) |{1} (no)]? - - Created new section in 'dotnet.config' file - Nuova sezione aggiunta al file ''dotnet.config'' - {Locked="dotnet.config"} - - - Updating existing values in 'dotnet.config' is not yet supported. Please, manually update 'dotnet.config' to have '{0}' under section '{1}'. - L'aggiornamento dei valori esistenti in ''dotnet.config' 'non è ancora supportato. Si prega di aggiornare manualmente ''dotnet.config'' per avere ''{0}'' nella sezione ''{1}''. - {Locked="dotnet.config"} - - - Successfully created 'dotnet.config' file. - Il file ''dotnet.config'' è stato creato. - {Locked="dotnet.config"} - - - The required value in 'dotnet.config' is already set. - Il valore richiesto in ''dotnet.config'' è già stato impostato. - {Locked="dotnet.config"} - - - Post action argument '{0}' is mandatory, but not configured. - L'argomento post-azione '{0}' è obbligatorio, ma non configurato. - - Post action argument '{0}' is not a valid boolean value. L'argomento dell'azione successiva '{0}' non è un valore booleano valido. diff --git a/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.ja.xlf b/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.ja.xlf index 2b87f6884fdb..2f9a5c77a259 100644 --- a/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.ja.xlf +++ b/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.ja.xlf @@ -830,31 +830,6 @@ The header is followed by the list of parameters and their errors (might be seve このアクションを実行しますか[{0} (はい) |{1} (いいえ)] ですか? - - Created new section in 'dotnet.config' file - 'dotnet.config' ファイルに新しいセクションを作成しました - {Locked="dotnet.config"} - - - Updating existing values in 'dotnet.config' is not yet supported. Please, manually update 'dotnet.config' to have '{0}' under section '{1}'. - 'dotnet.config' の既存の値の更新はまだサポートされていません。セクション '{1}' の下に 'dotnet.config' を手動で更新して '{0}' を持つようにしてください。 - {Locked="dotnet.config"} - - - Successfully created 'dotnet.config' file. - 'dotnet.config' ファイルが正常に作成されました。 - {Locked="dotnet.config"} - - - The required value in 'dotnet.config' is already set. - 'dotnet.config' に必要な値はすでに設定されています。 - {Locked="dotnet.config"} - - - Post action argument '{0}' is mandatory, but not configured. - 事後アクション引数 '{0}' は必須ですが、構成されていません。 - - Post action argument '{0}' is not a valid boolean value. 事後アクションの引数 '{0}' は有効なブール値ではありません。 diff --git a/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.ko.xlf b/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.ko.xlf index be266386b4d8..11699454506d 100644 --- a/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.ko.xlf +++ b/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.ko.xlf @@ -830,31 +830,6 @@ The header is followed by the list of parameters and their errors (might be seve 이 작업을 실행하시겠어요 [{0} (예) |{1} (아니요)]? - - Created new section in 'dotnet.config' file - 'dotnet.config' 파일에 새 섹션을 만들었습니다. - {Locked="dotnet.config"} - - - Updating existing values in 'dotnet.config' is not yet supported. Please, manually update 'dotnet.config' to have '{0}' under section '{1}'. - 'dotnet.config'의 기존 값 업데이트는 아직 지원되지 않습니다. 'dotnet.config'를 수동으로 업데이트하여 '{0}' 섹션의 '{1}'을(를) 갖도록 하세요. - {Locked="dotnet.config"} - - - Successfully created 'dotnet.config' file. - 'dotnet.config' 파일을 만들었습니다. - {Locked="dotnet.config"} - - - The required value in 'dotnet.config' is already set. - 'dotnet.config'의 필수 값이 이미 설정되어 있습니다. - {Locked="dotnet.config"} - - - Post action argument '{0}' is mandatory, but not configured. - '{0}' 게시물 매크로 함수 인수가 필수이지만 구성되지 않았습니다. - - Post action argument '{0}' is not a valid boolean value. 사후 작업 인수 '{0}'은(는) 올바른 부울 값이 아닙니다. diff --git a/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.pl.xlf b/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.pl.xlf index 18f4ee4817d9..6e5167124b31 100644 --- a/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.pl.xlf +++ b/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.pl.xlf @@ -830,31 +830,6 @@ The header is followed by the list of parameters and their errors (might be seve Chcesz uruchomić tę akcję [{0}(tak)|{1}(nie)]? - - Created new section in 'dotnet.config' file - Utworzono nową sekcję w pliku „dotnet.config” - {Locked="dotnet.config"} - - - Updating existing values in 'dotnet.config' is not yet supported. Please, manually update 'dotnet.config' to have '{0}' under section '{1}'. - Aktualizowanie istniejących wartości w pliku „dotnet.config” nie jest jeszcze obsługiwane. Ręcznie zaktualizuj plik „dotnet.config”, aby miał element „{0}” w sekcji „{1}”. - {Locked="dotnet.config"} - - - Successfully created 'dotnet.config' file. - Pomyślnie utworzono plik „dotnet.config”. - {Locked="dotnet.config"} - - - The required value in 'dotnet.config' is already set. - Wymagana wartość w pliku „dotnet.config” jest już ustawiona. - {Locked="dotnet.config"} - - - Post action argument '{0}' is mandatory, but not configured. - Argument po wystąpieniu akcji „{0}” jest obowiązkowy, ale nie jest skonfigurowany. - - Post action argument '{0}' is not a valid boolean value. Argument akcji „{0}” nie jest prawidłową wartością logiczną. diff --git a/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.pt-BR.xlf b/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.pt-BR.xlf index 5691c61ba12e..24f89179cb85 100644 --- a/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.pt-BR.xlf +++ b/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.pt-BR.xlf @@ -830,31 +830,6 @@ The header is followed by the list of parameters and their errors (might be seve Deseja executar esta ação [{0}(yes)|{1}(no)]? - - Created new section in 'dotnet.config' file - Nova seção criada no arquivo "dotnet.config" - {Locked="dotnet.config"} - - - Updating existing values in 'dotnet.config' is not yet supported. Please, manually update 'dotnet.config' to have '{0}' under section '{1}'. - Ainda não há suporte para a atualização de valores existentes em "dotnet.config". Atualize manualmente "dotnet.config" para ter "{0}" na seção "{1}". - {Locked="dotnet.config"} - - - Successfully created 'dotnet.config' file. - Arquivo "dotnet.config" criado com sucesso. - {Locked="dotnet.config"} - - - The required value in 'dotnet.config' is already set. - O valor necessário em "dotnet.config" já está definido. - {Locked="dotnet.config"} - - - Post action argument '{0}' is mandatory, but not configured. - O argumento pós-ação '{0}' é obrigatório, mas não configurado. - - Post action argument '{0}' is not a valid boolean value. O argumento de pós-ação '{0}' não é um valor booleano válido. diff --git a/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.ru.xlf b/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.ru.xlf index 1d9b5d4e94d3..6578a4d5bf14 100644 --- a/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.ru.xlf +++ b/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.ru.xlf @@ -830,31 +830,6 @@ The header is followed by the list of parameters and their errors (might be seve Вы хотите выполнить это действие [{0}(да)|{1}(нет)]? - - Created new section in 'dotnet.config' file - Создан новый раздел в файле "dotnet.config" - {Locked="dotnet.config"} - - - Updating existing values in 'dotnet.config' is not yet supported. Please, manually update 'dotnet.config' to have '{0}' under section '{1}'. - Изменение существующих значений в "dotnet.config" пока не поддерживается. Отредактируйте "dotnet.config" вручную, чтобы значение "{0}" находилось в разделе "{1}". - {Locked="dotnet.config"} - - - Successfully created 'dotnet.config' file. - Файл "dotnet.config" успешно создан. - {Locked="dotnet.config"} - - - The required value in 'dotnet.config' is already set. - Обязательное значение в "dotnet.config" уже установлено. - {Locked="dotnet.config"} - - - Post action argument '{0}' is mandatory, but not configured. - Аргумент после действия "{0}" является обязательным, но не настроен. - - Post action argument '{0}' is not a valid boolean value. Аргумент после действия "{0}" не является допустимым логическим значением. diff --git a/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.tr.xlf b/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.tr.xlf index 8cfbf1557c82..a0d71cff2b96 100644 --- a/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.tr.xlf +++ b/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.tr.xlf @@ -830,31 +830,6 @@ The header is followed by the list of parameters and their errors (might be seve Bu eylemi çalıştırmak istiyor musunuz [{0}(evet)|{1}(hayır)]? - - Created new section in 'dotnet.config' file - 'dotnet.config' dosyasında yeni bölüm oluşturuldu - {Locked="dotnet.config"} - - - Updating existing values in 'dotnet.config' is not yet supported. Please, manually update 'dotnet.config' to have '{0}' under section '{1}'. - 'dotnet.config' içindeki mevcut değerleri güncelleştirmek henüz desteklenmemektedir. Lütfen 'dotnet.config' dosyasını manuel olarak güncelleştirmek suretiyle '{1}' bölümünün altına '{0}' ekleyin. - {Locked="dotnet.config"} - - - Successfully created 'dotnet.config' file. - 'dotnet.config' dosyası başarıyla oluşturuldu. - {Locked="dotnet.config"} - - - The required value in 'dotnet.config' is already set. - 'dotnet.config' dosyasında gerekli değer zaten ayarlanmıştır. - {Locked="dotnet.config"} - - - Post action argument '{0}' is mandatory, but not configured. - '{0}' eylem sonrası bağımsız değişkeni zorunlu, ancak yapılandırılmamış. - - Post action argument '{0}' is not a valid boolean value. '{0}' eylem sonrası bağımsız değişkeni, geçerli bir boole değeri değil. diff --git a/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.zh-Hans.xlf b/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.zh-Hans.xlf index 249c25ff2b81..f75d8ad68dae 100644 --- a/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.zh-Hans.xlf +++ b/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.zh-Hans.xlf @@ -830,31 +830,6 @@ The header is followed by the list of parameters and their errors (might be seve 是否要运行此操作 [{0}(是)|{1}(否)]? - - Created new section in 'dotnet.config' file - 已在 ‘dotnet.config’ 文件中创建新节 - {Locked="dotnet.config"} - - - Updating existing values in 'dotnet.config' is not yet supported. Please, manually update 'dotnet.config' to have '{0}' under section '{1}'. - 尚不支持更新 ‘dotnet.config’ 中的现有值。请在节 ‘{1}’ 下手动将 ‘dotnet.config’ 更新为具有 ‘{0}’。 - {Locked="dotnet.config"} - - - Successfully created 'dotnet.config' file. - 已成功创建 ‘dotnet.config’ 文件。 - {Locked="dotnet.config"} - - - The required value in 'dotnet.config' is already set. - 已设置 'dotnet.config' 中所需的值。 - {Locked="dotnet.config"} - - - Post action argument '{0}' is mandatory, but not configured. - 发布操作参数“{0}”是必需的,但未进行配置。 - - Post action argument '{0}' is not a valid boolean value. Post 操作参数“{0}”不是有效的布尔值。 diff --git a/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.zh-Hant.xlf b/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.zh-Hant.xlf index eb6891d08e3d..56c64a9d9b91 100644 --- a/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.zh-Hant.xlf +++ b/src/Cli/Microsoft.TemplateEngine.Cli/xlf/LocalizableStrings.zh-Hant.xlf @@ -830,31 +830,6 @@ The header is followed by the list of parameters and their errors (might be seve 是否要執行此動作 [{0}(是)|{1}(否)]? - - Created new section in 'dotnet.config' file - 在 'dotnet.config' 檔案中建立新區段 - {Locked="dotnet.config"} - - - Updating existing values in 'dotnet.config' is not yet supported. Please, manually update 'dotnet.config' to have '{0}' under section '{1}'. - 尚不支援更新 'dotnet.config' 中的現有值。請手動更新 'dotnet.config',以便在 '{1}' 區段下設定 '{0}'。 - {Locked="dotnet.config"} - - - Successfully created 'dotnet.config' file. - 已成功建立 'dotnet.config' 檔案。 - {Locked="dotnet.config"} - - - The required value in 'dotnet.config' is already set. - 'dotnet.config' 中所需的值已經設定。 - {Locked="dotnet.config"} - - - Post action argument '{0}' is mandatory, but not configured. - 動作後引數 '{0}' 是強制的,但未設定。 - - Post action argument '{0}' is not a valid boolean value. Post 巨集指令引數 '{0}' 不是有效的布林值。 diff --git a/src/Cli/dotnet/Commands/CliCommandStrings.resx b/src/Cli/dotnet/Commands/CliCommandStrings.resx index 4e095b9740a0..89db2642f5dc 100644 --- a/src/Cli/dotnet/Commands/CliCommandStrings.resx +++ b/src/Cli/dotnet/Commands/CliCommandStrings.resx @@ -117,9 +117,6 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Aborted - {0} tests running @@ -646,14 +643,13 @@ If not specified the file will be generated inside the default 'TestResults' dir Test runner '{0}' is not supported. - dotnet.config defines test runner to be Microsoft.Testing.Platform. All projects must use that test runner. + global.json defines test runner to be Microsoft.Testing.Platform. All projects must use that test runner. The following test projects are using VSTest test runner: {0} See https://aka.ms/dotnet-test/mtp for more information. - {0} is one or more project names. -Microsoft.Testing.Platform is a name, don't translate. -dotnet.config is a name don't translate. + {Locked="global.json"}{Locked="Microsoft.Testing.Platform"} +{0} is one or more project names. Enables project lock file to be generated and used with restore. @@ -2670,4 +2666,32 @@ Proceed? Supported protocol versions sent by Microsoft.Testing.Platform are '{0}'. The SDK supports '{1}', which is incompatible. + + The following exception occurred when running the test module with RunCommand '{0}' and RunArguments '{1}': + +{2} + {Locked="RunCommand"}{Locked="RunArguments"} +{2} is the exception that occurred. + + + A test session end event was received without a corresponding test session start. + + + A test session start event was received without a corresponding test session end. + + + Aborted + + + An unexpected help-related message was received when `--help` wasn't used. + + + A new handshake '{0}' was received for the test application that doesn't match the previous handshake '{1}'. + + + A message of type '{0}' was received in help mode, which is not expected. + + + A message of type '{0}' was received before we got any handshakes, which is unexpected. + diff --git a/src/Cli/dotnet/Commands/Test/MTP/CustomEventArgs.cs b/src/Cli/dotnet/Commands/Test/MTP/CustomEventArgs.cs deleted file mode 100644 index 731bf3557f76..000000000000 --- a/src/Cli/dotnet/Commands/Test/MTP/CustomEventArgs.cs +++ /dev/null @@ -1,13 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -#nullable disable - -namespace Microsoft.DotNet.Cli.Commands.Test; - -internal sealed class HelpEventArgs : EventArgs -{ - public string ModulePath { get; set; } - - public CommandLineOption[] CommandLineOptions { get; set; } -} diff --git a/src/Cli/dotnet/Commands/Test/MTP/IPC/Models/HandshakeMessage.cs b/src/Cli/dotnet/Commands/Test/MTP/IPC/Models/HandshakeMessage.cs index 00870e30c393..78331178da74 100644 --- a/src/Cli/dotnet/Commands/Test/MTP/IPC/Models/HandshakeMessage.cs +++ b/src/Cli/dotnet/Commands/Test/MTP/IPC/Models/HandshakeMessage.cs @@ -3,4 +3,4 @@ namespace Microsoft.DotNet.Cli.Commands.Test.IPC.Models; -internal sealed record HandshakeMessage(Dictionary? Properties) : IRequest, IResponse; +internal sealed record HandshakeMessage(Dictionary Properties) : IRequest, IResponse; diff --git a/src/Cli/dotnet/Commands/Test/MTP/IPC/NamedPipeServer.cs b/src/Cli/dotnet/Commands/Test/MTP/IPC/NamedPipeServer.cs index b06261dde858..ba9c04f6fe76 100644 --- a/src/Cli/dotnet/Commands/Test/MTP/IPC/NamedPipeServer.cs +++ b/src/Cli/dotnet/Commands/Test/MTP/IPC/NamedPipeServer.cs @@ -32,7 +32,15 @@ public NamedPipeServer( CancellationToken cancellationToken, bool skipUnknownMessages) { - _namedPipeServerStream = new(pipeName, PipeDirection.InOut, maxNumberOfServerInstances, PipeTransmissionMode.Byte, PipeOptions.Asynchronous | PipeOptions.CurrentUserOnly); + _namedPipeServerStream = new NamedPipeServerStream( + pipeName, + PipeDirection.InOut, + maxNumberOfServerInstances, + PipeTransmissionMode.Byte, + PipeOptions.Asynchronous | PipeOptions.CurrentUserOnly, + inBufferSize: 0, + outBufferSize: 0); + _callback = callback; _cancellationToken = cancellationToken; _skipUnknownMessages = skipUnknownMessages; @@ -67,51 +75,69 @@ public async Task WaitConnectionAsync(CancellationToken cancellationToken) /// private async Task InternalLoopAsync(CancellationToken cancellationToken) { - int currentMessageSize = 0; - int missingBytesToReadOfWholeMessage = 0; + // This is an indicator when reading from the pipe whether we are at the start of a new message (i.e, we should read 4 bytes as message size) + // Note that the implementation assumes no overlapping messages in the pipe. + // The flow goes like: + // 1. MTP sends a request (and acquires lock). + // 2. SDK reads the request. + // 3. SDK sends a response. + // 4. MTP reads the response (and releases lock). + // This means that no two requests can be in the pipe at the same time. + bool isStartOfNewMessage = true; + int remainingBytesToReadOfWholeMessage = 0; while (!cancellationToken.IsCancellationRequested) { - int missingBytesToReadOfCurrentChunk = 0; - int currentReadIndex = 0; - int currentReadBytes = await _namedPipeServerStream.ReadAsync(_readBuffer.AsMemory(currentReadIndex, _readBuffer.Length), cancellationToken); - if (currentReadBytes == 0) + // If we are at the start of a new message, we need to read at least the message size. + int currentReadBytes = isStartOfNewMessage + ? await _namedPipeServerStream.ReadAtLeastAsync(_readBuffer, minimumBytes: sizeof(int), throwOnEndOfStream: false, cancellationToken) + : await _namedPipeServerStream.ReadAsync(_readBuffer, cancellationToken); + + if (currentReadBytes == 0 || (isStartOfNewMessage && currentReadBytes < sizeof(int))) { // The client has disconnected return; } - // Reset the current chunk size - missingBytesToReadOfCurrentChunk = currentReadBytes; + // The local remainingBytesToProcess tracks the remaining bytes of what we have read from the pipe but not yet processed. + // At the beginning here, it contains everything we have read from the pipe. + // As we are processing the data in it, we continue to slice it. + Memory remainingBytesToProcess = _readBuffer.AsMemory(0, currentReadBytes); - // If currentRequestSize is 0, we need to read the message size - if (currentMessageSize == 0) + // If the current read is the start of a new message, we need to read the message size first. + if (isStartOfNewMessage) { // We need to read the message size, first 4 bytes - if (currentReadBytes < sizeof(int)) - { - throw new UnreachableException(CliCommandStrings.DotnetTestPipeIncompleteSize); - } + remainingBytesToReadOfWholeMessage = BitConverter.ToInt32(remainingBytesToProcess.Span); + + // Now that we have read the size, we slice the remainingBytesToProcess. + remainingBytesToProcess = remainingBytesToProcess.Slice(sizeof(int)); - currentMessageSize = BitConverter.ToInt32(_readBuffer, 0); - missingBytesToReadOfCurrentChunk = currentReadBytes - sizeof(int); - missingBytesToReadOfWholeMessage = currentMessageSize; - currentReadIndex = sizeof(int); + // Now that we have read the size, we are no longer at the start of a new message. + // If the current chunk ended up to be the full message, we will set this back to true later. + isStartOfNewMessage = false; } - if (missingBytesToReadOfCurrentChunk > 0) + // We read the rest of the message. + // Note that this assumes that no messages are overlapping in the pipe. + if (remainingBytesToProcess.Length > 0) { // We need to read the rest of the message - await _messageBuffer.WriteAsync(_readBuffer.AsMemory(currentReadIndex, missingBytesToReadOfCurrentChunk), cancellationToken); - missingBytesToReadOfWholeMessage -= missingBytesToReadOfCurrentChunk; + await _messageBuffer.WriteAsync(remainingBytesToProcess, cancellationToken); + remainingBytesToReadOfWholeMessage -= remainingBytesToProcess.Length; + + // At this point, we have read everything in the remainingBytesToProcess. + // Note that while remainingBytesToProcess isn't accessed after this point, we still maintain the + // invariant that it tracks what we have read from the pipe but not yet processed. + remainingBytesToProcess = Memory.Empty; } - if (missingBytesToReadOfWholeMessage < 0) + if (remainingBytesToReadOfWholeMessage < 0) { throw new UnreachableException(CliCommandStrings.DotnetTestPipeOverlapping); } // If we have read all the message, we can deserialize it - if (missingBytesToReadOfWholeMessage == 0) + if (remainingBytesToReadOfWholeMessage == 0) { // Deserialize the message _messageBuffer.Position = 0; @@ -147,12 +173,19 @@ private async Task InternalLoopAsync(CancellationToken cancellationToken) // Write the message size byte[] bytes = _sizeOfIntArray; - BitConverter.TryWriteBytes(bytes, sizeOfTheWholeMessage); + if (!BitConverter.TryWriteBytes(bytes, sizeOfTheWholeMessage)) + { + throw new UnreachableException(); + } + await _messageBuffer.WriteAsync(bytes, cancellationToken); // Write the serializer id bytes = _sizeOfIntArray; - BitConverter.TryWriteBytes(bytes, responseNamedPipeSerializer.Id); + if (!BitConverter.TryWriteBytes(bytes, responseNamedPipeSerializer.Id)) + { + throw new UnreachableException(); + } await _messageBuffer.WriteAsync(bytes.AsMemory(0, sizeof(int)), cancellationToken); @@ -164,10 +197,6 @@ private async Task InternalLoopAsync(CancellationToken cancellationToken) { await _namedPipeServerStream.WriteAsync(_messageBuffer.GetBuffer().AsMemory(0, (int)_messageBuffer.Position), cancellationToken); await _namedPipeServerStream.FlushAsync(cancellationToken); - if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) - { - _namedPipeServerStream.WaitForPipeDrain(); - } } finally { @@ -177,8 +206,8 @@ private async Task InternalLoopAsync(CancellationToken cancellationToken) } // Reset the control variables - currentMessageSize = 0; - missingBytesToReadOfWholeMessage = 0; + isStartOfNewMessage = true; + remainingBytesToReadOfWholeMessage = 0; } } } diff --git a/src/Cli/dotnet/Commands/Test/MTP/IPC/Serializers/HandshakeMessageSerializer.cs b/src/Cli/dotnet/Commands/Test/MTP/IPC/Serializers/HandshakeMessageSerializer.cs index 933ed3dc301d..6ed6d352f2e5 100644 --- a/src/Cli/dotnet/Commands/Test/MTP/IPC/Serializers/HandshakeMessageSerializer.cs +++ b/src/Cli/dotnet/Commands/Test/MTP/IPC/Serializers/HandshakeMessageSerializer.cs @@ -1,8 +1,6 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -#nullable disable - using System.Diagnostics; using Microsoft.DotNet.Cli.Commands.Test.IPC.Models; diff --git a/src/Cli/dotnet/Commands/Test/MTP/IPC/Serializers/UnknownMessageSerializer.cs b/src/Cli/dotnet/Commands/Test/MTP/IPC/Serializers/UnknownMessageSerializer.cs index 3ebc6f1802be..f1e3331f333b 100644 --- a/src/Cli/dotnet/Commands/Test/MTP/IPC/Serializers/UnknownMessageSerializer.cs +++ b/src/Cli/dotnet/Commands/Test/MTP/IPC/Serializers/UnknownMessageSerializer.cs @@ -17,7 +17,5 @@ public object Deserialize(Stream _) } public void Serialize(object _, Stream stream) - { - WriteInt(stream, Id); - } + => Environment.FailFast("SDK never serializes UnknownMessage. This should never be hit."); } diff --git a/src/Cli/dotnet/Commands/Test/MTP/MicrosoftTestingPlatformTestCommand.Help.cs b/src/Cli/dotnet/Commands/Test/MTP/MicrosoftTestingPlatformTestCommand.Help.cs index ee551e4b6d47..b21ee35ff933 100644 --- a/src/Cli/dotnet/Commands/Test/MTP/MicrosoftTestingPlatformTestCommand.Help.cs +++ b/src/Cli/dotnet/Commands/Test/MTP/MicrosoftTestingPlatformTestCommand.Help.cs @@ -5,13 +5,14 @@ using System.Collections.Concurrent; using System.CommandLine; +using Microsoft.DotNet.Cli.Commands.Test.IPC.Models; using Microsoft.TemplateEngine.Cli.Help; namespace Microsoft.DotNet.Cli.Commands.Test; internal partial class MicrosoftTestingPlatformTestCommand { - private readonly ConcurrentDictionary _commandLineOptionNameToModuleNames = []; + private readonly ConcurrentDictionary _commandLineOptionNameToModuleNames = []; private readonly ConcurrentDictionary> _moduleNamesToCommandLineOptions = []; private static readonly string Indent = " "; @@ -29,9 +30,9 @@ public IEnumerable> CustomHelpLayout() return; } - Dictionary> allOptions = GetAllOptions(context.Command.Options); - allOptions.TryGetValue(true, out List builtInOptions); - allOptions.TryGetValue(false, out List nonBuiltInOptions); + Dictionary> allOptions = GetAllOptions(context.Command.Options); + allOptions.TryGetValue(true, out List builtInOptions); + allOptions.TryGetValue(false, out List nonBuiltInOptions); Dictionary> moduleToMissingOptions = GetModulesToMissingOptions(_moduleNamesToCommandLineOptions, builtInOptions.Select(option => option.Name), nonBuiltInOptions.Select(option => option.Name)); @@ -92,22 +93,14 @@ private static string FormatHelpOption(string option) return $"[{option.Trim(':').ToLower()}]"; } - private void OnHelpRequested(object sender, HelpEventArgs args) + private void OnHelpRequested(CommandLineOptionMessages commandLineOptionMessages) { - var testApp = (TestApplication)sender; - if (!testApp.TestOptions.IsHelp) - { - // TODO: Better to throw exception? - return; - } - - CommandLineOption[] commandLineOptionMessages = args.CommandLineOptions; - string moduleName = args.ModulePath; + string moduleName = commandLineOptionMessages.ModulePath; List builtInOptions = []; List nonBuiltInOptions = []; - foreach (CommandLineOption commandLineOption in commandLineOptionMessages) + foreach (CommandLineOptionMessage commandLineOption in commandLineOptionMessages.CommandLineOptionMessageList) { if (commandLineOption.IsHidden.HasValue && commandLineOption.IsHidden.Value) continue; @@ -135,19 +128,19 @@ private void OnHelpRequested(object sender, HelpEventArgs args) (isBuiltIn, value) => [.. value, (moduleName, nonBuiltInOptions.ToArray())]); } - private Dictionary> GetAllOptions(IList - dotnet.config defines test runner to be Microsoft.Testing.Platform. All projects must use that test runner. + global.json defines test runner to be Microsoft.Testing.Platform. All projects must use that test runner. The following test projects are using VSTest test runner: {0} See https://aka.ms/dotnet-test/mtp for more information. - Soubor dotnet.config definuje, že spouštěč testů bude Microsoft.Testing.Platform. Tento spouštěč testů musí používat všechny projekty. + Soubor dotnet.config definuje, že spouštěč testů bude Microsoft.Testing.Platform. Tento spouštěč testů musí používat všechny projekty. Následující testovací projekty používají spouštěč testů VSTest: {0} Další informace najdete na https://aka.ms/dotnet-test/mtp. - {0} is one or more project names. -Microsoft.Testing.Platform is a name, don't translate. -dotnet.config is a name don't translate. + {Locked="global.json"}{Locked="Microsoft.Testing.Platform"} +{0} is one or more project names. Enables project lock file to be generated and used with restore. @@ -1222,6 +1221,16 @@ Nastavte odlišné názvy profilů. Duplicitní direktivy nejsou podporovány: {0} v {1} {0} is the directive type and name. {1} is the file path and line number. + + The following exception occurred when running the test module with RunCommand '{0}' and RunArguments '{1}': + +{2} + The following exception occurred when running the test module with RunCommand '{0}' and RunArguments '{1}': + +{2} + {Locked="RunCommand"}{Locked="RunArguments"} +{2} is the exception that occurred. + Restore failed. Run `dotnet restore` for more details on the issue. Obnovení neproběhlo úspěšně. Další podrobnosti o problému získáte spuštěním příkazu dotnet restore. @@ -1709,11 +1718,21 @@ Nástroj {1} (verze {2}) se úspěšně nainstaloval. Do souboru manifestu {3} s Minimální očekávané porušení zásad testů, spuštěné testy: {0}, očekávané minimum: {1} {0}, {1} number of tests + + A new handshake '{0}' was received for the test application that doesn't match the previous handshake '{1}'. + A new handshake '{0}' was received for the test application that doesn't match the previous handshake '{1}'. + + Missing name of '{0}' at {1}. Chybí název pro {0} v {1}. {0} is the directive name like 'package' or 'sdk', {1} is the file path and line number. + + A test session start event was received without a corresponding test session end. + A test session start event was received without a corresponding test session end. + + Run Microsoft Build Engine (MSBuild) commands. Spustí příkazy MSBuild (Microsoft Build Engine). @@ -3533,6 +3552,26 @@ příkazu „dotnet tool list“. {0} pokus number or tries of the current test assembly when test assembly is being retried. {0} is number that starts at 1 + + An unexpected help-related message was received when `--help` wasn't used. + An unexpected help-related message was received when `--help` wasn't used. + + + + A message of type '{0}' was received in help mode, which is not expected. + A message of type '{0}' was received in help mode, which is not expected. + + + + A message of type '{0}' was received before we got any handshakes, which is unexpected. + A message of type '{0}' was received before we got any handshakes, which is unexpected. + + + + A test session end event was received without a corresponding test session start. + A test session end event was received without a corresponding test session start. + + Tool '{0}' was successfully uninstalled and removed from manifest file {1}. Nástroj {0} se úspěšně odinstaloval a odebral ze souboru manifestu {1}. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.de.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.de.xlf index dafd56961336..75ca025c5998 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.de.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.de.xlf @@ -878,19 +878,18 @@ Das angegebene Verzeichnis wird erstellt, wenn es nicht vorhanden ist. - dotnet.config defines test runner to be Microsoft.Testing.Platform. All projects must use that test runner. + global.json defines test runner to be Microsoft.Testing.Platform. All projects must use that test runner. The following test projects are using VSTest test runner: {0} See https://aka.ms/dotnet-test/mtp for more information. - dotnet.config definiert den Test Runner als Microsoft.Testing.Platform. Alle Projekte müssen diesen Test Runner verwenden. + dotnet.config definiert den Test Runner als Microsoft.Testing.Platform. Alle Projekte müssen diesen Test Runner verwenden. Die folgenden Testprojekte verwenden den VSTest-Test Runner: {0} Weitere Informationen finden Sie unter https://aka.ms/dotnet-test/mtp. - {0} is one or more project names. -Microsoft.Testing.Platform is a name, don't translate. -dotnet.config is a name don't translate. + {Locked="global.json"}{Locked="Microsoft.Testing.Platform"} +{0} is one or more project names. Enables project lock file to be generated and used with restore. @@ -1222,6 +1221,16 @@ Erstellen Sie eindeutige Profilnamen. Doppelte Direktiven werden nicht unterstützt: {0} bei {1}. {0} is the directive type and name. {1} is the file path and line number. + + The following exception occurred when running the test module with RunCommand '{0}' and RunArguments '{1}': + +{2} + The following exception occurred when running the test module with RunCommand '{0}' and RunArguments '{1}': + +{2} + {Locked="RunCommand"}{Locked="RunArguments"} +{2} is the exception that occurred. + Restore failed. Run `dotnet restore` for more details on the issue. Fehler beim Wiederherstellen. Führen Sie "dotnet restore" aus, um weitere Informationen zum Problem zu erhalten. @@ -1709,11 +1718,21 @@ Das Tool "{1}" (Version {2}) wurde erfolgreich installiert. Der Eintrag wird der Mindestens erwartete Testrichtlinienverletzung, {0} Tests wurden ausgeführt, mindestens erwartet: {1} {0}, {1} number of tests + + A new handshake '{0}' was received for the test application that doesn't match the previous handshake '{1}'. + A new handshake '{0}' was received for the test application that doesn't match the previous handshake '{1}'. + + Missing name of '{0}' at {1}. Fehlender Name von "{0}" bei "{1}". {0} is the directive name like 'package' or 'sdk', {1} is the file path and line number. + + A test session start event was received without a corresponding test session end. + A test session start event was received without a corresponding test session end. + + Run Microsoft Build Engine (MSBuild) commands. Hiermit werden Befehle der Microsoft-Build-Engine (MSBuild) ausgeführt. @@ -3533,6 +3552,26 @@ und die zugehörigen Paket-IDs für installierte Tools über den Befehl {0} testen number or tries of the current test assembly when test assembly is being retried. {0} is number that starts at 1 + + An unexpected help-related message was received when `--help` wasn't used. + An unexpected help-related message was received when `--help` wasn't used. + + + + A message of type '{0}' was received in help mode, which is not expected. + A message of type '{0}' was received in help mode, which is not expected. + + + + A message of type '{0}' was received before we got any handshakes, which is unexpected. + A message of type '{0}' was received before we got any handshakes, which is unexpected. + + + + A test session end event was received without a corresponding test session start. + A test session end event was received without a corresponding test session start. + + Tool '{0}' was successfully uninstalled and removed from manifest file {1}. Das Tool "{0}" wurde erfolgreich deinstalliert und aus der Manifestdatei "{1}" entfernt. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.es.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.es.xlf index 455bb28f007f..154382e6f2c4 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.es.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.es.xlf @@ -878,19 +878,18 @@ Si no existe, se creará el directorio especificado. - dotnet.config defines test runner to be Microsoft.Testing.Platform. All projects must use that test runner. + global.json defines test runner to be Microsoft.Testing.Platform. All projects must use that test runner. The following test projects are using VSTest test runner: {0} See https://aka.ms/dotnet-test/mtp for more information. - dotnet.config define que el ejecutor de pruebas sea Microsoft.Testing.Platform. Todos los proyectos deben usar ese ejecutor de pruebas. + dotnet.config define que el ejecutor de pruebas sea Microsoft.Testing.Platform. Todos los proyectos deben usar ese ejecutor de pruebas. Los siguientes proyectos de prueba usan el ejecutor de pruebas de VSTest: {0} Consulte https://aka.ms/dotnet-test/mtp para obtener más información. - {0} is one or more project names. -Microsoft.Testing.Platform is a name, don't translate. -dotnet.config is a name don't translate. + {Locked="global.json"}{Locked="Microsoft.Testing.Platform"} +{0} is one or more project names. Enables project lock file to be generated and used with restore. @@ -1222,6 +1221,16 @@ Defina nombres de perfiles distintos. No se admiten directivas duplicadas: {0} en {1} {0} is the directive type and name. {1} is the file path and line number. + + The following exception occurred when running the test module with RunCommand '{0}' and RunArguments '{1}': + +{2} + The following exception occurred when running the test module with RunCommand '{0}' and RunArguments '{1}': + +{2} + {Locked="RunCommand"}{Locked="RunArguments"} +{2} is the exception that occurred. + Restore failed. Run `dotnet restore` for more details on the issue. Error en la restauración. Ejecute "dotnet restore" para obtener más detalles sobre el problema. @@ -1709,11 +1718,21 @@ La herramienta "{1}" (versión "{2}") se instaló correctamente. Se ha agregado Infracción de directiva de pruebas mínimas esperadas, pruebas ejecutadas {0}, mínimas esperadas {1} {0}, {1} number of tests + + A new handshake '{0}' was received for the test application that doesn't match the previous handshake '{1}'. + A new handshake '{0}' was received for the test application that doesn't match the previous handshake '{1}'. + + Missing name of '{0}' at {1}. Falta el nombre de "{0}" en {1}. {0} is the directive name like 'package' or 'sdk', {1} is the file path and line number. + + A test session start event was received without a corresponding test session end. + A test session start event was received without a corresponding test session end. + + Run Microsoft Build Engine (MSBuild) commands. Ejecuta comandos de Microsoft Build Engine (MSBuild). @@ -3533,6 +3552,26 @@ y los identificadores de los paquetes correspondientes a las herramientas instal intento {0} number or tries of the current test assembly when test assembly is being retried. {0} is number that starts at 1 + + An unexpected help-related message was received when `--help` wasn't used. + An unexpected help-related message was received when `--help` wasn't used. + + + + A message of type '{0}' was received in help mode, which is not expected. + A message of type '{0}' was received in help mode, which is not expected. + + + + A message of type '{0}' was received before we got any handshakes, which is unexpected. + A message of type '{0}' was received before we got any handshakes, which is unexpected. + + + + A test session end event was received without a corresponding test session start. + A test session end event was received without a corresponding test session start. + + Tool '{0}' was successfully uninstalled and removed from manifest file {1}. La herramienta "{0}" se desinstaló y quitó correctamente del archivo de manifiesto {1}. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.fr.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.fr.xlf index e810a3e5d8e3..156885883b37 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.fr.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.fr.xlf @@ -878,19 +878,18 @@ Le répertoire spécifié est créé, s'il n'existe pas déjà. - dotnet.config defines test runner to be Microsoft.Testing.Platform. All projects must use that test runner. + global.json defines test runner to be Microsoft.Testing.Platform. All projects must use that test runner. The following test projects are using VSTest test runner: {0} See https://aka.ms/dotnet-test/mtp for more information. - dotnet.config définit le test runner comme Microsoft.Testing.Platform. Tous les projets doivent utiliser ce test runner. + dotnet.config définit le test runner comme Microsoft.Testing.Platform. Tous les projets doivent utiliser ce test runner. Les projets de test suivants utilisent le test runner VSTest : {0} Pour plus d’informations, consultez https://aka.ms/dotnet-test/mtp. - {0} is one or more project names. -Microsoft.Testing.Platform is a name, don't translate. -dotnet.config is a name don't translate. + {Locked="global.json"}{Locked="Microsoft.Testing.Platform"} +{0} is one or more project names. Enables project lock file to be generated and used with restore. @@ -1222,6 +1221,16 @@ Faites en sorte que les noms de profil soient distincts. Les directives dupliquées ne sont pas prises en charge : {0} au {1} {0} is the directive type and name. {1} is the file path and line number. + + The following exception occurred when running the test module with RunCommand '{0}' and RunArguments '{1}': + +{2} + The following exception occurred when running the test module with RunCommand '{0}' and RunArguments '{1}': + +{2} + {Locked="RunCommand"}{Locked="RunArguments"} +{2} is the exception that occurred. + Restore failed. Run `dotnet restore` for more details on the issue. Échec de la restauration. Exécutez « dotnet restore » pour plus de détails sur le problème. @@ -1709,11 +1718,21 @@ L'outil '{1}' (version '{2}') a été correctement installé. L'entrée est ajou Violation de stratégie de tests minimale attendue, tests exécutés {0}, minimum attendu {1} {0}, {1} number of tests + + A new handshake '{0}' was received for the test application that doesn't match the previous handshake '{1}'. + A new handshake '{0}' was received for the test application that doesn't match the previous handshake '{1}'. + + Missing name of '{0}' at {1}. Nom manquant pour « {0} » à {1}. {0} is the directive name like 'package' or 'sdk', {1} is the file path and line number. + + A test session start event was received without a corresponding test session end. + A test session start event was received without a corresponding test session end. + + Run Microsoft Build Engine (MSBuild) commands. Exécutez des commandes MSBuild (Microsoft Build Engine). @@ -3533,6 +3552,26 @@ et les ID de package correspondants aux outils installés, utilisez la commande essayer {0} number or tries of the current test assembly when test assembly is being retried. {0} is number that starts at 1 + + An unexpected help-related message was received when `--help` wasn't used. + An unexpected help-related message was received when `--help` wasn't used. + + + + A message of type '{0}' was received in help mode, which is not expected. + A message of type '{0}' was received in help mode, which is not expected. + + + + A message of type '{0}' was received before we got any handshakes, which is unexpected. + A message of type '{0}' was received before we got any handshakes, which is unexpected. + + + + A test session end event was received without a corresponding test session start. + A test session end event was received without a corresponding test session start. + + Tool '{0}' was successfully uninstalled and removed from manifest file {1}. L'outil '{0}' a été désinstallé et supprimé correctement du fichier manifeste {1}. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.it.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.it.xlf index 3320521225dc..d7549423f0b5 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.it.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.it.xlf @@ -878,19 +878,18 @@ Se non esiste, la directory specificata verrà creata. - dotnet.config defines test runner to be Microsoft.Testing.Platform. All projects must use that test runner. + global.json defines test runner to be Microsoft.Testing.Platform. All projects must use that test runner. The following test projects are using VSTest test runner: {0} See https://aka.ms/dotnet-test/mtp for more information. - dotnet.config definisce il Test Runner come Microsoft.Testing.Platform. Tutti i progetti devono usare tale Test Runner. + dotnet.config definisce il Test Runner come Microsoft.Testing.Platform. Tutti i progetti devono usare tale Test Runner. I progetti di test seguenti usano il Test Runner VSTest: {0} Per altre informazioni, vedi https://aka.ms/dotnet-test/mtp. - {0} is one or more project names. -Microsoft.Testing.Platform is a name, don't translate. -dotnet.config is a name don't translate. + {Locked="global.json"}{Locked="Microsoft.Testing.Platform"} +{0} is one or more project names. Enables project lock file to be generated and used with restore. @@ -1222,6 +1221,16 @@ Rendi distinti i nomi profilo. Direttive duplicate non supportate: {0} in {1} {0} is the directive type and name. {1} is the file path and line number. + + The following exception occurred when running the test module with RunCommand '{0}' and RunArguments '{1}': + +{2} + The following exception occurred when running the test module with RunCommand '{0}' and RunArguments '{1}': + +{2} + {Locked="RunCommand"}{Locked="RunArguments"} +{2} is the exception that occurred. + Restore failed. Run `dotnet restore` for more details on the issue. Ripristino non riuscito. Esegui 'dotnet restore' per altri dettagli sul problema. @@ -1709,11 +1718,21 @@ Lo strumento '{1}' versione '{2}' è stato installato. La voce è stata aggiunta Violazione minima dei criteri di test previsti, test eseguiti {0}, minimo previsto {1} {0}, {1} number of tests + + A new handshake '{0}' was received for the test application that doesn't match the previous handshake '{1}'. + A new handshake '{0}' was received for the test application that doesn't match the previous handshake '{1}'. + + Missing name of '{0}' at {1}. Nome mancante di '{0}' in {1}. {0} is the directive name like 'package' or 'sdk', {1} is the file path and line number. + + A test session start event was received without a corresponding test session end. + A test session start event was received without a corresponding test session end. + + Run Microsoft Build Engine (MSBuild) commands. Esegue i comandi di Microsoft Build Engine (MSBuild). @@ -3533,6 +3552,26 @@ e gli ID pacchetto corrispondenti per gli strumenti installati usando il comando prova {0} number or tries of the current test assembly when test assembly is being retried. {0} is number that starts at 1 + + An unexpected help-related message was received when `--help` wasn't used. + An unexpected help-related message was received when `--help` wasn't used. + + + + A message of type '{0}' was received in help mode, which is not expected. + A message of type '{0}' was received in help mode, which is not expected. + + + + A message of type '{0}' was received before we got any handshakes, which is unexpected. + A message of type '{0}' was received before we got any handshakes, which is unexpected. + + + + A test session end event was received without a corresponding test session start. + A test session end event was received without a corresponding test session start. + + Tool '{0}' was successfully uninstalled and removed from manifest file {1}. Lo strumento '{0}' è stato disinstallato e rimosso dal file manifesto {1}. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ja.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ja.xlf index 785f269a9d5c..d094b276f162 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ja.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ja.xlf @@ -878,19 +878,18 @@ The specified directory will be created if it does not exist. - dotnet.config defines test runner to be Microsoft.Testing.Platform. All projects must use that test runner. + global.json defines test runner to be Microsoft.Testing.Platform. All projects must use that test runner. The following test projects are using VSTest test runner: {0} See https://aka.ms/dotnet-test/mtp for more information. - dotnet.config では、テスト ランナーを Microsoft.Testing.Platform と定義します。すべてのプロジェクトで、そのテスト ランナーを使用する必要があります。 + dotnet.config では、テスト ランナーを Microsoft.Testing.Platform と定義します。すべてのプロジェクトで、そのテスト ランナーを使用する必要があります。 次のテスト プロジェクトでは、VSTest テスト ランナーを使用しています: {0} 詳細については、https://aka.ms/dotnet-test/mtp を参照してください。 - {0} is one or more project names. -Microsoft.Testing.Platform is a name, don't translate. -dotnet.config is a name don't translate. + {Locked="global.json"}{Locked="Microsoft.Testing.Platform"} +{0} is one or more project names. Enables project lock file to be generated and used with restore. @@ -1222,6 +1221,16 @@ Make the profile names distinct. 重複するディレクティブはサポートされていません: {1} の {0} {0} is the directive type and name. {1} is the file path and line number. + + The following exception occurred when running the test module with RunCommand '{0}' and RunArguments '{1}': + +{2} + The following exception occurred when running the test module with RunCommand '{0}' and RunArguments '{1}': + +{2} + {Locked="RunCommand"}{Locked="RunArguments"} +{2} is the exception that occurred. + Restore failed. Run `dotnet restore` for more details on the issue. 復元に失敗しました。問題の詳細については、'dotnet restore' を実行してください。 @@ -1709,11 +1718,21 @@ Tool '{1}' (version '{2}') was successfully installed. Entry is added to the man 予想されるテストの最小ポリシー違反、テストの実行数 {0} 件、予想される最小数 {1} 件 {0}, {1} number of tests + + A new handshake '{0}' was received for the test application that doesn't match the previous handshake '{1}'. + A new handshake '{0}' was received for the test application that doesn't match the previous handshake '{1}'. + + Missing name of '{0}' at {1}. {1} に ' {0}' の名前がありません。 {0} is the directive name like 'package' or 'sdk', {1} is the file path and line number. + + A test session start event was received without a corresponding test session end. + A test session start event was received without a corresponding test session end. + + Run Microsoft Build Engine (MSBuild) commands. Microsoft Build Engine (MSBuild) コマンドを実行します。 @@ -3533,6 +3552,26 @@ and the corresponding package Ids for installed tools using the command {0} を試す number or tries of the current test assembly when test assembly is being retried. {0} is number that starts at 1 + + An unexpected help-related message was received when `--help` wasn't used. + An unexpected help-related message was received when `--help` wasn't used. + + + + A message of type '{0}' was received in help mode, which is not expected. + A message of type '{0}' was received in help mode, which is not expected. + + + + A message of type '{0}' was received before we got any handshakes, which is unexpected. + A message of type '{0}' was received before we got any handshakes, which is unexpected. + + + + A test session end event was received without a corresponding test session start. + A test session end event was received without a corresponding test session start. + + Tool '{0}' was successfully uninstalled and removed from manifest file {1}. ツール '{0}' が正常にアンインストールされ、マニフェスト ファイル {1} から削除されました。 diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ko.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ko.xlf index 3de05efa36e9..95ef8761b36e 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ko.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ko.xlf @@ -878,19 +878,18 @@ The specified directory will be created if it does not exist. - dotnet.config defines test runner to be Microsoft.Testing.Platform. All projects must use that test runner. + global.json defines test runner to be Microsoft.Testing.Platform. All projects must use that test runner. The following test projects are using VSTest test runner: {0} See https://aka.ms/dotnet-test/mtp for more information. - dotnet.config는 Test Runner를 Microsoft.Testing.Platform으로 정의합니다. 모든 프로젝트는 해당 Test Runner를 사용해야 합니다. + dotnet.config는 Test Runner를 Microsoft.Testing.Platform으로 정의합니다. 모든 프로젝트는 해당 Test Runner를 사용해야 합니다. 다음 테스트 프로젝트에서 VSTest Test Runner를 사용하고 있습니다. {0} 자세한 내용은 https://aka.ms/dotnet-test/mtp를 참조하세요. - {0} is one or more project names. -Microsoft.Testing.Platform is a name, don't translate. -dotnet.config is a name don't translate. + {Locked="global.json"}{Locked="Microsoft.Testing.Platform"} +{0} is one or more project names. Enables project lock file to be generated and used with restore. @@ -1222,6 +1221,16 @@ Make the profile names distinct. 중복된 지시문은 지원되지 않습니다. {1}의 {0}. {0} is the directive type and name. {1} is the file path and line number. + + The following exception occurred when running the test module with RunCommand '{0}' and RunArguments '{1}': + +{2} + The following exception occurred when running the test module with RunCommand '{0}' and RunArguments '{1}': + +{2} + {Locked="RunCommand"}{Locked="RunArguments"} +{2} is the exception that occurred. + Restore failed. Run `dotnet restore` for more details on the issue. 복원하지 못했습니다. 문제에 대한 자세한 내용을 보려면 'dotnet restore'를 실행하세요. @@ -1709,11 +1718,21 @@ Tool '{1}' (version '{2}') was successfully installed. Entry is added to the man 예상되는 최소 테스트 정책 위반, 테스트 실행 {0}, 필요한 최소 {1} {0}, {1} number of tests + + A new handshake '{0}' was received for the test application that doesn't match the previous handshake '{1}'. + A new handshake '{0}' was received for the test application that doesn't match the previous handshake '{1}'. + + Missing name of '{0}' at {1}. {1}에 ' {0}'의 이름이 없습니다. {0} is the directive name like 'package' or 'sdk', {1} is the file path and line number. + + A test session start event was received without a corresponding test session end. + A test session start event was received without a corresponding test session end. + + Run Microsoft Build Engine (MSBuild) commands. Microsoft Build Engine(MSBuild) 명령을 실행합니다. @@ -3533,6 +3552,26 @@ and the corresponding package Ids for installed tools using the command {0} 시도 number or tries of the current test assembly when test assembly is being retried. {0} is number that starts at 1 + + An unexpected help-related message was received when `--help` wasn't used. + An unexpected help-related message was received when `--help` wasn't used. + + + + A message of type '{0}' was received in help mode, which is not expected. + A message of type '{0}' was received in help mode, which is not expected. + + + + A message of type '{0}' was received before we got any handshakes, which is unexpected. + A message of type '{0}' was received before we got any handshakes, which is unexpected. + + + + A test session end event was received without a corresponding test session start. + A test session end event was received without a corresponding test session start. + + Tool '{0}' was successfully uninstalled and removed from manifest file {1}. '{0}' 도구가 제거되었으며 매니페스트 파일 {1}에서 제거되었습니다. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pl.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pl.xlf index 963dbe0c2840..53cf20778d85 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pl.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pl.xlf @@ -878,19 +878,18 @@ Jeśli określony katalog nie istnieje, zostanie utworzony. - dotnet.config defines test runner to be Microsoft.Testing.Platform. All projects must use that test runner. + global.json defines test runner to be Microsoft.Testing.Platform. All projects must use that test runner. The following test projects are using VSTest test runner: {0} See https://aka.ms/dotnet-test/mtp for more information. - Plik dotnet.config definiuje moduł uruchamiający testy jako Microsoft.Testing.Platform. Wszystkie projekty muszą używać tego modułu uruchamiającego testy. + Plik dotnet.config definiuje moduł uruchamiający testy jako Microsoft.Testing.Platform. Wszystkie projekty muszą używać tego modułu uruchamiającego testy. Następujące projekty testowe używają modułu uruchamiającego testy VSTest: {0} Aby uzyskać więcej informacji, zobacz https://aka.ms/dotnet-test/mtp. - {0} is one or more project names. -Microsoft.Testing.Platform is a name, don't translate. -dotnet.config is a name don't translate. + {Locked="global.json"}{Locked="Microsoft.Testing.Platform"} +{0} is one or more project names. Enables project lock file to be generated and used with restore. @@ -1222,6 +1221,16 @@ Rozróżnij nazwy profilów. Zduplikowane dyrektywy nie są obsługiwane: {0} w lokalizacji {1} {0} is the directive type and name. {1} is the file path and line number. + + The following exception occurred when running the test module with RunCommand '{0}' and RunArguments '{1}': + +{2} + The following exception occurred when running the test module with RunCommand '{0}' and RunArguments '{1}': + +{2} + {Locked="RunCommand"}{Locked="RunArguments"} +{2} is the exception that occurred. + Restore failed. Run `dotnet restore` for more details on the issue. Błąd przywracania. Uruchom polecenie `dotnet restore`, aby uzyskać więcej informacji na temat problemu. @@ -1709,11 +1718,21 @@ Narzędzie „{1}” (wersja „{2}”) zostało pomyślnie zainstalowane. Wpis Minimalne oczekiwane naruszenie zasad testów, uruchomione testy: {0}, oczekiwane minimum: {1} {0}, {1} number of tests + + A new handshake '{0}' was received for the test application that doesn't match the previous handshake '{1}'. + A new handshake '{0}' was received for the test application that doesn't match the previous handshake '{1}'. + + Missing name of '{0}' at {1}. Brak nazwy „{0}” w {1}. {0} is the directive name like 'package' or 'sdk', {1} is the file path and line number. + + A test session start event was received without a corresponding test session end. + A test session start event was received without a corresponding test session end. + + Run Microsoft Build Engine (MSBuild) commands. Uruchom polecenia aparatu Microsoft Build Engine (MSBuild). @@ -3533,6 +3552,26 @@ i odpowiednie identyfikatory pakietów zainstalowanych narzędzi można znaleź wypróbuj {0} number or tries of the current test assembly when test assembly is being retried. {0} is number that starts at 1 + + An unexpected help-related message was received when `--help` wasn't used. + An unexpected help-related message was received when `--help` wasn't used. + + + + A message of type '{0}' was received in help mode, which is not expected. + A message of type '{0}' was received in help mode, which is not expected. + + + + A message of type '{0}' was received before we got any handshakes, which is unexpected. + A message of type '{0}' was received before we got any handshakes, which is unexpected. + + + + A test session end event was received without a corresponding test session start. + A test session end event was received without a corresponding test session start. + + Tool '{0}' was successfully uninstalled and removed from manifest file {1}. Narzędzie „{0}” zostało pomyślnie odinstalowane i usunięte z pliku manifestu {1}. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pt-BR.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pt-BR.xlf index e59dc11689e3..62303c0c2a4a 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pt-BR.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pt-BR.xlf @@ -878,19 +878,18 @@ O diretório especificado será criado se ele ainda não existir. - dotnet.config defines test runner to be Microsoft.Testing.Platform. All projects must use that test runner. + global.json defines test runner to be Microsoft.Testing.Platform. All projects must use that test runner. The following test projects are using VSTest test runner: {0} See https://aka.ms/dotnet-test/mtp for more information. - dotnet.config define o executor de teste como Microsoft.Testing.Platform. Todos os projetos devem usar esse executor de teste. + dotnet.config define o executor de teste como Microsoft.Testing.Platform. Todos os projetos devem usar esse executor de teste. Os seguintes projetos de teste estão usando o executor de teste do VSTest: {0} Consulte https://aka.ms/dotnet-test/mtp para obter mais informações. - {0} is one or more project names. -Microsoft.Testing.Platform is a name, don't translate. -dotnet.config is a name don't translate. + {Locked="global.json"}{Locked="Microsoft.Testing.Platform"} +{0} is one or more project names. Enables project lock file to be generated and used with restore. @@ -1222,6 +1221,16 @@ Diferencie os nomes dos perfis. Não há suporte para diretivas duplicadas: {0} em {1} {0} is the directive type and name. {1} is the file path and line number. + + The following exception occurred when running the test module with RunCommand '{0}' and RunArguments '{1}': + +{2} + The following exception occurred when running the test module with RunCommand '{0}' and RunArguments '{1}': + +{2} + {Locked="RunCommand"}{Locked="RunArguments"} +{2} is the exception that occurred. + Restore failed. Run `dotnet restore` for more details on the issue. Falha na restauração. Execute "dotnet restore" para obter mais detalhes sobre o problema. @@ -1709,11 +1718,21 @@ A ferramenta '{1}' (versão '{2}') foi instalada com êxito. A entrada foi adici Violação de política de testes mínimos esperados, {0} testes executados, mínimo esperado {1} {0}, {1} number of tests + + A new handshake '{0}' was received for the test application that doesn't match the previous handshake '{1}'. + A new handshake '{0}' was received for the test application that doesn't match the previous handshake '{1}'. + + Missing name of '{0}' at {1}. Nome de "{0}" ausente em {1}. {0} is the directive name like 'package' or 'sdk', {1} is the file path and line number. + + A test session start event was received without a corresponding test session end. + A test session start event was received without a corresponding test session end. + + Run Microsoft Build Engine (MSBuild) commands. Executar comandos do MSBuild (Microsoft Build Engine). @@ -3533,6 +3552,26 @@ e as Ids de pacote correspondentes para as ferramentas instaladas usando o coman experimente {0} number or tries of the current test assembly when test assembly is being retried. {0} is number that starts at 1 + + An unexpected help-related message was received when `--help` wasn't used. + An unexpected help-related message was received when `--help` wasn't used. + + + + A message of type '{0}' was received in help mode, which is not expected. + A message of type '{0}' was received in help mode, which is not expected. + + + + A message of type '{0}' was received before we got any handshakes, which is unexpected. + A message of type '{0}' was received before we got any handshakes, which is unexpected. + + + + A test session end event was received without a corresponding test session start. + A test session end event was received without a corresponding test session start. + + Tool '{0}' was successfully uninstalled and removed from manifest file {1}. A ferramenta '{0}' foi desinstalada com êxito e removida do arquivo de manifesto {1}. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ru.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ru.xlf index 668afca46954..df5dbc990adc 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ru.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ru.xlf @@ -878,19 +878,18 @@ The specified directory will be created if it does not exist. - dotnet.config defines test runner to be Microsoft.Testing.Platform. All projects must use that test runner. + global.json defines test runner to be Microsoft.Testing.Platform. All projects must use that test runner. The following test projects are using VSTest test runner: {0} See https://aka.ms/dotnet-test/mtp for more information. - В dotnet.config в качестве средства выполнения тестов указана Microsoft.Testing.Platform. Все проекты должны использовать это средство выполнения тестов. + В dotnet.config в качестве средства выполнения тестов указана Microsoft.Testing.Platform. Все проекты должны использовать это средство выполнения тестов. Следующие тестовые проекты используют средство выполнения тестов VSTest: {0} Подробнее см. https://aka.ms/dotnet-test/mtp. - {0} is one or more project names. -Microsoft.Testing.Platform is a name, don't translate. -dotnet.config is a name don't translate. + {Locked="global.json"}{Locked="Microsoft.Testing.Platform"} +{0} is one or more project names. Enables project lock file to be generated and used with restore. @@ -1222,6 +1221,16 @@ Make the profile names distinct. Повторяющиеся директивы не поддерживаются: {0} (файл, строка: {1}) {0} is the directive type and name. {1} is the file path and line number. + + The following exception occurred when running the test module with RunCommand '{0}' and RunArguments '{1}': + +{2} + The following exception occurred when running the test module with RunCommand '{0}' and RunArguments '{1}': + +{2} + {Locked="RunCommand"}{Locked="RunArguments"} +{2} is the exception that occurred. + Restore failed. Run `dotnet restore` for more details on the issue. Провести восстановление не удалось. Для получения дополнительных сведений о проблеме выполните команду "dotnet restore". @@ -1709,11 +1718,21 @@ Tool '{1}' (version '{2}') was successfully installed. Entry is added to the man Нарушение политики минимального ожидаемого числа тестов. Выполнено тестов: {0}, ожидаемый минимум: {1} {0}, {1} number of tests + + A new handshake '{0}' was received for the test application that doesn't match the previous handshake '{1}'. + A new handshake '{0}' was received for the test application that doesn't match the previous handshake '{1}'. + + Missing name of '{0}' at {1}. В {1} отсутствует имя "{0}". {0} is the directive name like 'package' or 'sdk', {1} is the file path and line number. + + A test session start event was received without a corresponding test session end. + A test session start event was received without a corresponding test session end. + + Run Microsoft Build Engine (MSBuild) commands. Выполнение команд Microsoft Build Engine (MSBuild). @@ -3534,6 +3553,26 @@ and the corresponding package Ids for installed tools using the command попробуйте {0} number or tries of the current test assembly when test assembly is being retried. {0} is number that starts at 1 + + An unexpected help-related message was received when `--help` wasn't used. + An unexpected help-related message was received when `--help` wasn't used. + + + + A message of type '{0}' was received in help mode, which is not expected. + A message of type '{0}' was received in help mode, which is not expected. + + + + A message of type '{0}' was received before we got any handshakes, which is unexpected. + A message of type '{0}' was received before we got any handshakes, which is unexpected. + + + + A test session end event was received without a corresponding test session start. + A test session end event was received without a corresponding test session start. + + Tool '{0}' was successfully uninstalled and removed from manifest file {1}. Средство "{0}" успешно удалено и исключено из файла манифеста {1}. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.tr.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.tr.xlf index 4a06330a482b..fc394893faf0 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.tr.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.tr.xlf @@ -878,19 +878,18 @@ Belirtilen dizin yoksa oluşturulur. - dotnet.config defines test runner to be Microsoft.Testing.Platform. All projects must use that test runner. + global.json defines test runner to be Microsoft.Testing.Platform. All projects must use that test runner. The following test projects are using VSTest test runner: {0} See https://aka.ms/dotnet-test/mtp for more information. - dotnet.config, test çalıştırıcısını Microsoft.Testing.Platform olarak tanımlar. Tüm projelerin bu test çalıştırıcısını kullanması gereklidir. + dotnet.config, test çalıştırıcısını Microsoft.Testing.Platform olarak tanımlar. Tüm projelerin bu test çalıştırıcısını kullanması gereklidir. Aşağıdaki test projeleri VSTest test çalıştırıcısını kullanıyor: {0} Daha fazla bilgi için https://aka.ms/dotnet-test/mtp adresine bakın. - {0} is one or more project names. -Microsoft.Testing.Platform is a name, don't translate. -dotnet.config is a name don't translate. + {Locked="global.json"}{Locked="Microsoft.Testing.Platform"} +{0} is one or more project names. Enables project lock file to be generated and used with restore. @@ -1222,6 +1221,16 @@ Lütfen profil adlarını değiştirin. Yinelenen yönergeler desteklenmez: {1} konumunda {0} {0} is the directive type and name. {1} is the file path and line number. + + The following exception occurred when running the test module with RunCommand '{0}' and RunArguments '{1}': + +{2} + The following exception occurred when running the test module with RunCommand '{0}' and RunArguments '{1}': + +{2} + {Locked="RunCommand"}{Locked="RunArguments"} +{2} is the exception that occurred. + Restore failed. Run `dotnet restore` for more details on the issue. Geri yükleme başarısız oldu. Sorunla ilgili daha fazla bilgi için 'dotnet restore' çalıştırın. @@ -1709,11 +1718,21 @@ Tool '{1}' (version '{2}') was successfully installed. Entry is added to the man Beklenen minimum test ilke ihlali, yürütülen test: {0}, beklenen minimum test: {1} {0}, {1} number of tests + + A new handshake '{0}' was received for the test application that doesn't match the previous handshake '{1}'. + A new handshake '{0}' was received for the test application that doesn't match the previous handshake '{1}'. + + Missing name of '{0}' at {1}. {1} konumunda '{0}' paketinin adı eksik. {0} is the directive name like 'package' or 'sdk', {1} is the file path and line number. + + A test session start event was received without a corresponding test session end. + A test session start event was received without a corresponding test session end. + + Run Microsoft Build Engine (MSBuild) commands. Microsoft Build Engine (MSBuild) komutlarını çalıştırır. @@ -3533,6 +3552,26 @@ karşılık gelen paket kimliklerini bulmak için Şunu deneyin: {0} number or tries of the current test assembly when test assembly is being retried. {0} is number that starts at 1 + + An unexpected help-related message was received when `--help` wasn't used. + An unexpected help-related message was received when `--help` wasn't used. + + + + A message of type '{0}' was received in help mode, which is not expected. + A message of type '{0}' was received in help mode, which is not expected. + + + + A message of type '{0}' was received before we got any handshakes, which is unexpected. + A message of type '{0}' was received before we got any handshakes, which is unexpected. + + + + A test session end event was received without a corresponding test session start. + A test session end event was received without a corresponding test session start. + + Tool '{0}' was successfully uninstalled and removed from manifest file {1}. '{0}' aracı başarıyla kaldırıldı ve {1} bildirim dosyasından çıkarıldı. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hans.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hans.xlf index 6fa923ff04b1..b4d09ae2961f 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hans.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hans.xlf @@ -878,19 +878,18 @@ The specified directory will be created if it does not exist. - dotnet.config defines test runner to be Microsoft.Testing.Platform. All projects must use that test runner. + global.json defines test runner to be Microsoft.Testing.Platform. All projects must use that test runner. The following test projects are using VSTest test runner: {0} See https://aka.ms/dotnet-test/mtp for more information. - dotnet.config 将测试运行器定义为 Microsoft.Testing.Platform。所有项目必须使用该测试运行器。 + dotnet.config 将测试运行器定义为 Microsoft.Testing.Platform。所有项目必须使用该测试运行器。 以下测试项目正在使用 VSTest 测试运行器: {0} 有关详细信息,请参阅 https://aka.ms/dotnet-test/mtp。 - {0} is one or more project names. -Microsoft.Testing.Platform is a name, don't translate. -dotnet.config is a name don't translate. + {Locked="global.json"}{Locked="Microsoft.Testing.Platform"} +{0} is one or more project names. Enables project lock file to be generated and used with restore. @@ -1222,6 +1221,16 @@ Make the profile names distinct. 不支持重复指令: {1} 处的 {0} {0} is the directive type and name. {1} is the file path and line number. + + The following exception occurred when running the test module with RunCommand '{0}' and RunArguments '{1}': + +{2} + The following exception occurred when running the test module with RunCommand '{0}' and RunArguments '{1}': + +{2} + {Locked="RunCommand"}{Locked="RunArguments"} +{2} is the exception that occurred. + Restore failed. Run `dotnet restore` for more details on the issue. 还原失败。运行 `dotnet restore` 以了解有关问题的更多详细信息。 @@ -1709,11 +1718,21 @@ Tool '{1}' (version '{2}') was successfully installed. Entry is added to the man 最低预期测试策略冲突,测试已运行 {0} 次,最低预期 {1} 次 {0}, {1} number of tests + + A new handshake '{0}' was received for the test application that doesn't match the previous handshake '{1}'. + A new handshake '{0}' was received for the test application that doesn't match the previous handshake '{1}'. + + Missing name of '{0}' at {1}. 缺少 {1} 处 ‘{0}’ 的名称。 {0} is the directive name like 'package' or 'sdk', {1} is the file path and line number. + + A test session start event was received without a corresponding test session end. + A test session start event was received without a corresponding test session end. + + Run Microsoft Build Engine (MSBuild) commands. 运行 Microsoft 生成引擎(MSBuild)命令。 @@ -3533,6 +3552,26 @@ and the corresponding package Ids for installed tools using the command 尝试 {0} number or tries of the current test assembly when test assembly is being retried. {0} is number that starts at 1 + + An unexpected help-related message was received when `--help` wasn't used. + An unexpected help-related message was received when `--help` wasn't used. + + + + A message of type '{0}' was received in help mode, which is not expected. + A message of type '{0}' was received in help mode, which is not expected. + + + + A message of type '{0}' was received before we got any handshakes, which is unexpected. + A message of type '{0}' was received before we got any handshakes, which is unexpected. + + + + A test session end event was received without a corresponding test session start. + A test session end event was received without a corresponding test session start. + + Tool '{0}' was successfully uninstalled and removed from manifest file {1}. 工具“{0}”已成功卸载并从清单文件 {1} 中移除。 diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hant.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hant.xlf index 6511ea356648..2948d58d14aa 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hant.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hant.xlf @@ -878,19 +878,18 @@ The specified directory will be created if it does not exist. - dotnet.config defines test runner to be Microsoft.Testing.Platform. All projects must use that test runner. + global.json defines test runner to be Microsoft.Testing.Platform. All projects must use that test runner. The following test projects are using VSTest test runner: {0} See https://aka.ms/dotnet-test/mtp for more information. - dotnet.config 定義測試執行器為 Microsoft.Testing.Platform。所有專案必須使用該測試執行器。 + dotnet.config 定義測試執行器為 Microsoft.Testing.Platform。所有專案必須使用該測試執行器。 以下測試專案正在使用 VSTest 測試執行器: {0} 如需詳細資訊,請參閱 https://aka.ms/dotnet-test/mtp。 - {0} is one or more project names. -Microsoft.Testing.Platform is a name, don't translate. -dotnet.config is a name don't translate. + {Locked="global.json"}{Locked="Microsoft.Testing.Platform"} +{0} is one or more project names. Enables project lock file to be generated and used with restore. @@ -1222,6 +1221,16 @@ Make the profile names distinct. 不支援重複的指示詞: {0} 位於 {1} {0} is the directive type and name. {1} is the file path and line number. + + The following exception occurred when running the test module with RunCommand '{0}' and RunArguments '{1}': + +{2} + The following exception occurred when running the test module with RunCommand '{0}' and RunArguments '{1}': + +{2} + {Locked="RunCommand"}{Locked="RunArguments"} +{2} is the exception that occurred. + Restore failed. Run `dotnet restore` for more details on the issue. 還原失敗。如需問題的詳細資料,請執行 'dotnet restore'。 @@ -1709,11 +1718,21 @@ Tool '{1}' (version '{2}') was successfully installed. Entry is added to the man 預期測試原則違反的最小值,{0} 個執行的測試,預期的最小值為 {1} {0}, {1} number of tests + + A new handshake '{0}' was received for the test application that doesn't match the previous handshake '{1}'. + A new handshake '{0}' was received for the test application that doesn't match the previous handshake '{1}'. + + Missing name of '{0}' at {1}. 缺少位於 {1} 的 '{0}' 名稱。 {0} is the directive name like 'package' or 'sdk', {1} is the file path and line number. + + A test session start event was received without a corresponding test session end. + A test session start event was received without a corresponding test session end. + + Run Microsoft Build Engine (MSBuild) commands. 執行 Microsoft Build Engine (MSBuild) 命令。 @@ -3533,6 +3552,26 @@ and the corresponding package Ids for installed tools using the command 嘗試 {0} number or tries of the current test assembly when test assembly is being retried. {0} is number that starts at 1 + + An unexpected help-related message was received when `--help` wasn't used. + An unexpected help-related message was received when `--help` wasn't used. + + + + A message of type '{0}' was received in help mode, which is not expected. + A message of type '{0}' was received in help mode, which is not expected. + + + + A message of type '{0}' was received before we got any handshakes, which is unexpected. + A message of type '{0}' was received before we got any handshakes, which is unexpected. + + + + A test session end event was received without a corresponding test session start. + A test session end event was received without a corresponding test session start. + + Tool '{0}' was successfully uninstalled and removed from manifest file {1}. 已成功解除安裝工具 '{0}',且已將其從資訊清單檔 {1} 中移除。 diff --git a/src/Cli/dotnet/dotnet.csproj b/src/Cli/dotnet/dotnet.csproj index 156dc1027688..2e63f9a3c5a8 100644 --- a/src/Cli/dotnet/dotnet.csproj +++ b/src/Cli/dotnet/dotnet.csproj @@ -66,7 +66,6 @@ - diff --git a/src/Layout/pkg/windows/bundles/sdk/bundle.thm b/src/Layout/pkg/windows/bundles/sdk/bundle.thm index 0b8a551e1168..a9ed6a319c7d 100644 --- a/src/Layout/pkg/windows/bundles/sdk/bundle.thm +++ b/src/Layout/pkg/windows/bundles/sdk/bundle.thm @@ -81,7 +81,7 @@ - -