diff --git a/Microsoft.TemplateEngine.sln b/Microsoft.TemplateEngine.sln
index c84b6f96167..98d56069d80 100644
--- a/Microsoft.TemplateEngine.sln
+++ b/Microsoft.TemplateEngine.sln
@@ -35,9 +35,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.TemplateEngine.Ed
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.TemplateSearch.Common", "src\Microsoft.TemplateSearch.Common\Microsoft.TemplateSearch.Common.csproj", "{4DF4A1B9-F31C-49D1-8FEB-8DB37AEBDC0B}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.TemplateSearch.TemplateDiscovery", "src\Microsoft.TemplateSearch.TemplateDiscovery\Microsoft.TemplateSearch.TemplateDiscovery.csproj", "{FBEBB725-F645-40DC-856C-D1BC7FB52CF3}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.TemplateSearch.TemplateDiscovery", "tools\Microsoft.TemplateSearch.TemplateDiscovery\Microsoft.TemplateSearch.TemplateDiscovery.csproj", "{FBEBB725-F645-40DC-856C-D1BC7FB52CF3}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.TemplateSearch.ScraperOutputComparison", "src\Microsoft.TemplateSearch.ScraperOutputComparison\Microsoft.TemplateSearch.ScraperOutputComparison.csproj", "{95D28477-05FE-4450-86B8-D7384202AB90}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.TemplateSearch.ScraperOutputComparison", "tools\Microsoft.TemplateSearch.ScraperOutputComparison\Microsoft.TemplateSearch.ScraperOutputComparison.csproj", "{95D28477-05FE-4450-86B8-D7384202AB90}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.TemplateEngine.TestTemplates", "test\Microsoft.TemplateEngine.TestTemplates\Microsoft.TemplateEngine.TestTemplates.csproj", "{FC7516FB-7F44-4786-ADF2-589EF06C2EDE}"
EndProject
@@ -45,9 +45,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.TemplateEngine.ID
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.TemplateSearch.Common.UnitTests", "test\Microsoft.TemplateSearch.Common.UnitTests\Microsoft.TemplateSearch.Common.UnitTests.csproj", "{15304624-1774-4990-A0CC-7B9DA27A8FF6}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.TemplateEngine.Authoring.CLI", "src\Microsoft.TemplateEngine.Authoring.CLI\Microsoft.TemplateEngine.Authoring.CLI.csproj", "{F8C5BBAA-99E9-46BA-87C9-9FB7F388F403}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.TemplateEngine.Authoring.CLI", "tools\Microsoft.TemplateEngine.Authoring.CLI\Microsoft.TemplateEngine.Authoring.CLI.csproj", "{F8C5BBAA-99E9-46BA-87C9-9FB7F388F403}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.TemplateEngine.TemplateLocalizer.Core", "src\Microsoft.TemplateEngine.TemplateLocalizer.Core\Microsoft.TemplateEngine.TemplateLocalizer.Core.csproj", "{ED5D6873-220B-4F9D-A30B-B99E950F8E26}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.TemplateEngine.TemplateLocalizer.Core", "tools\Microsoft.TemplateEngine.TemplateLocalizer.Core\Microsoft.TemplateEngine.TemplateLocalizer.Core.csproj", "{ED5D6873-220B-4F9D-A30B-B99E950F8E26}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.TemplateEngine.TemplateLocalizer.Core.UnitTests", "test\Microsoft.TemplateEngine.TemplateLocalizer.Core.UnitTests\Microsoft.TemplateEngine.TemplateLocalizer.Core.UnitTests.csproj", "{858B2E28-1FF8-4ED2-A356-B576BD793B71}"
EndProject
@@ -55,7 +55,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.TemplateEngine.Au
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.TemplateSearch.TemplateDiscovery.IntegrationTests", "test\Microsoft.TemplateSearch.TemplateDiscovery.IntegrationTests\Microsoft.TemplateSearch.TemplateDiscovery.IntegrationTests.csproj", "{B0330A2C-3F10-4C46-97DF-13D187564F70}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.TemplateEngine.Authoring.Tasks", "src\Microsoft.TemplateEngine.Authoring.Tasks\Microsoft.TemplateEngine.Authoring.Tasks.csproj", "{BD758B10-A47F-4159-B9A1-997723AF7349}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.TemplateEngine.Authoring.Tasks", "tools\Microsoft.TemplateEngine.Authoring.Tasks\Microsoft.TemplateEngine.Authoring.Tasks.csproj", "{BD758B10-A47F-4159-B9A1-997723AF7349}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.TemplateEngine.Authoring.Tasks.IntegrationTests", "test\Microsoft.TemplateEngine.Authoring.Tasks.IntegrationTests\Microsoft.TemplateEngine.Authoring.Tasks.IntegrationTests.csproj", "{2FFDBB61-8AE8-468B-87D3-0D907D7C2FFE}"
EndProject
@@ -68,7 +68,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tools", "tools", "{B794BF86-4185-4DCE-AC86-C27D5D966B9B}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.TemplateEngine.Authoring.TemplateVerifier", "src\Microsoft.TemplateEngine.Authoring.TemplateVerifier\Microsoft.TemplateEngine.Authoring.TemplateVerifier.csproj", "{12764D81-61A7-437A-90B6-9F245E43F457}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.TemplateEngine.Authoring.TemplateVerifier", "tools\Microsoft.TemplateEngine.Authoring.TemplateVerifier\Microsoft.TemplateEngine.Authoring.TemplateVerifier.csproj", "{12764D81-61A7-437A-90B6-9F245E43F457}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.TemplateEngine.Authoring.TemplateVerifier.IntegrationTests", "test\Microsoft.TemplateEngine.Authoring.TemplateVerifier.IntegrationTests\Microsoft.TemplateEngine.Authoring.TemplateVerifier.IntegrationTests.csproj", "{B1DDA327-F55E-466A-AF3E-7F039B9B51A9}"
EndProject
@@ -76,6 +76,30 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.TemplateEngine.Au
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.TemplateEngine.Authoring.CLI.UnitTests", "test\Microsoft.TemplateEngine.Authoring.CLI.UnitTests\Microsoft.TemplateEngine.Authoring.CLI.UnitTests.csproj", "{E8B9226E-879F-495A-BDAD-2607844D048C}"
EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "eng", "eng", "{D190251C-5649-4DD6-A158-16D119116352}"
+ ProjectSection(SolutionItems) = preProject
+ eng\Versions.props = eng\Versions.props
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Shared", "Shared", "{43053BC4-32B4-4404-B62D-410F367CE0CE}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Microsoft.TemplateEngine.CommandUtils", "Microsoft.TemplateEngine.CommandUtils", "{EE8CD472-D8C4-4CD0-BC84-6C305F5971AE}"
+ ProjectSection(SolutionItems) = preProject
+ tools\Shared\Microsoft.TemplateEngine.CommandUtils\ArgumentEscaper.cs = tools\Shared\Microsoft.TemplateEngine.CommandUtils\ArgumentEscaper.cs
+ tools\Shared\Microsoft.TemplateEngine.CommandUtils\BasicCommand.cs = tools\Shared\Microsoft.TemplateEngine.CommandUtils\BasicCommand.cs
+ tools\Shared\Microsoft.TemplateEngine.CommandUtils\Command.cs = tools\Shared\Microsoft.TemplateEngine.CommandUtils\Command.cs
+ tools\Shared\Microsoft.TemplateEngine.CommandUtils\CommandResult.cs = tools\Shared\Microsoft.TemplateEngine.CommandUtils\CommandResult.cs
+ tools\Shared\Microsoft.TemplateEngine.CommandUtils\CommandResultAssertions.cs = tools\Shared\Microsoft.TemplateEngine.CommandUtils\CommandResultAssertions.cs
+ tools\Shared\Microsoft.TemplateEngine.CommandUtils\CommandResultExtensions.cs = tools\Shared\Microsoft.TemplateEngine.CommandUtils\CommandResultExtensions.cs
+ tools\Shared\Microsoft.TemplateEngine.CommandUtils\DotnetCommand.cs = tools\Shared\Microsoft.TemplateEngine.CommandUtils\DotnetCommand.cs
+ tools\Shared\Microsoft.TemplateEngine.CommandUtils\DotnetNewCommand.cs = tools\Shared\Microsoft.TemplateEngine.CommandUtils\DotnetNewCommand.cs
+ tools\Shared\Microsoft.TemplateEngine.CommandUtils\NativeMethods.cs = tools\Shared\Microsoft.TemplateEngine.CommandUtils\NativeMethods.cs
+ tools\Shared\Microsoft.TemplateEngine.CommandUtils\ProcessReaper.cs = tools\Shared\Microsoft.TemplateEngine.CommandUtils\ProcessReaper.cs
+ tools\Shared\Microsoft.TemplateEngine.CommandUtils\SdkCommandSpec.cs = tools\Shared\Microsoft.TemplateEngine.CommandUtils\SdkCommandSpec.cs
+ tools\Shared\Microsoft.TemplateEngine.CommandUtils\StreamForwarder.cs = tools\Shared\Microsoft.TemplateEngine.CommandUtils\StreamForwarder.cs
+ tools\Shared\Microsoft.TemplateEngine.CommandUtils\TestCommand.cs = tools\Shared\Microsoft.TemplateEngine.CommandUtils\TestCommand.cs
+ EndProjectSection
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -471,7 +495,7 @@ Global
{0A4EBB7D-E75B-4589-9FB3-0CD6A0B47C78} = {8B498D0C-F488-4B38-8A7D-B20BF9DB6F60}
{15304624-1774-4990-A0CC-7B9DA27A8FF6} = {8B498D0C-F488-4B38-8A7D-B20BF9DB6F60}
{F8C5BBAA-99E9-46BA-87C9-9FB7F388F403} = {B794BF86-4185-4DCE-AC86-C27D5D966B9B}
- {ED5D6873-220B-4F9D-A30B-B99E950F8E26} = {7DAC892E-ADAE-4CEB-8A0C-EDC452A5826A}
+ {ED5D6873-220B-4F9D-A30B-B99E950F8E26} = {B794BF86-4185-4DCE-AC86-C27D5D966B9B}
{858B2E28-1FF8-4ED2-A356-B576BD793B71} = {8B498D0C-F488-4B38-8A7D-B20BF9DB6F60}
{BB38681E-BBD1-4E77-BCD5-CDB6E532B2C5} = {8B498D0C-F488-4B38-8A7D-B20BF9DB6F60}
{B0330A2C-3F10-4C46-97DF-13D187564F70} = {8B498D0C-F488-4B38-8A7D-B20BF9DB6F60}
@@ -481,6 +505,9 @@ Global
{B1DDA327-F55E-466A-AF3E-7F039B9B51A9} = {8B498D0C-F488-4B38-8A7D-B20BF9DB6F60}
{D478568D-CA20-4331-9019-F585B564425E} = {8B498D0C-F488-4B38-8A7D-B20BF9DB6F60}
{E8B9226E-879F-495A-BDAD-2607844D048C} = {8B498D0C-F488-4B38-8A7D-B20BF9DB6F60}
+ {D190251C-5649-4DD6-A158-16D119116352} = {C5186341-2064-49AA-B398-CDF4302D2823}
+ {43053BC4-32B4-4404-B62D-410F367CE0CE} = {B794BF86-4185-4DCE-AC86-C27D5D966B9B}
+ {EE8CD472-D8C4-4CD0-BC84-6C305F5971AE} = {43053BC4-32B4-4404-B62D-410F367CE0CE}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {6EA1A508-6033-4538-BF98-7F71B4E297AD}
diff --git a/eng/Versions.props b/eng/Versions.props
index b9478d9a95a..9f138ac6296 100644
--- a/eng/Versions.props
+++ b/eng/Versions.props
@@ -14,8 +14,6 @@
-
- 6.0.100-rc.1.21423.72.0.0-beta4.22504.1
diff --git a/src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/Commands/DotnetCommand.cs b/src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/Commands/DotnetCommand.cs
deleted file mode 100644
index 4eb9f25ba70..00000000000
--- a/src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/Commands/DotnetCommand.cs
+++ /dev/null
@@ -1,45 +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.Extensions.Logging;
-
-namespace Microsoft.TemplateEngine.Authoring.TemplateVerifier.Commands
-{
- internal class DotnetCommand : TestCommand
- {
- private readonly string _commandName;
-
- public DotnetCommand(ILogger log, string commandName, params string[] args) : base(log)
- {
- Arguments.Add(commandName);
- Arguments.AddRange(args);
- _commandName = commandName;
- }
-
- public DotnetCommand WithCustomHive(string? path = null)
- {
- path ??= CreateTemporaryFolder();
- Arguments.Add("--debug:custom-hive");
- Arguments.Add(path);
- return this;
- }
-
- protected override SdkCommandSpec CreateCommand(IEnumerable args)
- {
- var sdkCommandSpec = new SdkCommandSpec()
- {
- FileName = "dotnet",
- Arguments = args.ToList(),
- WorkingDirectory = WorkingDirectory
- };
- return sdkCommandSpec;
- }
-
- private static string CreateTemporaryFolder(string name = "")
- {
- string workingDir = Path.Combine(Path.GetTempPath(), "TemplateEngine.Tests", Guid.NewGuid().ToString(), name);
- Directory.CreateDirectory(workingDir);
- return workingDir;
- }
- }
-}
diff --git a/src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/Commands/TestCommand.cs b/src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/Commands/TestCommand.cs
deleted file mode 100644
index c04e586b4d1..00000000000
--- a/src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/Commands/TestCommand.cs
+++ /dev/null
@@ -1,118 +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 System.Diagnostics;
-using Microsoft.DotNet.Cli.Utils;
-using Microsoft.Extensions.Logging;
-
-namespace Microsoft.TemplateEngine.Authoring.TemplateVerifier.Commands
-{
- internal abstract class TestCommand
- {
- protected TestCommand(ILogger log)
- {
- Log = log;
- }
-
- public ILogger Log { get; }
-
- public string? WorkingDirectory { get; set; }
-
- public List Arguments { get; set; } = new List();
-
- public List EnvironmentToRemove { get; } = new List();
-
- // These only work via Execute(), not when using GetProcessStartInfo()
- public Action? CommandOutputHandler { get; set; }
-
- public Action? ProcessStartedHandler { get; set; }
-
- protected Dictionary Environment { get; set; } = new Dictionary();
-
- public TestCommand WithEnvironmentVariable(string name, string value)
- {
- Environment[name] = value;
- return this;
- }
-
- public TestCommand WithWorkingDirectory(string workingDirectory)
- {
- WorkingDirectory = workingDirectory;
- return this;
- }
-
- public ProcessStartInfo GetProcessStartInfo(params string[] args)
- {
- var commandSpec = CreateCommandSpec(args);
-
- var psi = commandSpec.ToProcessStartInfo();
-
- return psi;
- }
-
- public CommandResult Execute(params string[] args)
- {
- IEnumerable enumerableArgs = args;
- return Execute(enumerableArgs);
- }
-
- public virtual CommandResult Execute(IEnumerable args)
- {
- var command = CreateCommandSpec(args)
- .ToCommand()
- .CaptureStdOut()
- .CaptureStdErr();
-
- if (CommandOutputHandler != null)
- {
- command.OnOutputLine(CommandOutputHandler);
- }
-
- var result = ((Command)command).Execute(ProcessStartedHandler);
-
- Log.LogInformation($"> {result.StartInfo.FileName} {result.StartInfo.Arguments}");
- Log.LogInformation(result.StdOut);
-
- if (!string.IsNullOrEmpty(result.StdErr))
- {
- Log.LogWarning("StdErr:");
- Log.LogWarning(result.StdErr);
- }
-
- if (result.ExitCode != 0)
- {
- Log.LogInformation($"Exit Code: {result.ExitCode}");
- }
-
- return result;
- }
-
- protected abstract SdkCommandSpec CreateCommand(IEnumerable args);
-
- private SdkCommandSpec CreateCommandSpec(IEnumerable args)
- {
- var commandSpec = CreateCommand(args);
- foreach (var kvp in Environment)
- {
- commandSpec.Environment[kvp.Key] = kvp.Value;
- }
-
- foreach (var envToRemove in EnvironmentToRemove)
- {
- commandSpec.EnvironmentToRemove.Add(envToRemove);
- }
-
- if (WorkingDirectory != null)
- {
- commandSpec.WorkingDirectory = WorkingDirectory;
- }
-
- if (Arguments.Any())
- {
- commandSpec.Arguments = Arguments.Concat(commandSpec.Arguments).ToList();
- }
-
- return commandSpec;
- }
- }
-}
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer/xlf/LocalizableStrings.cs.xlf b/src/Microsoft.TemplateEngine.TemplateLocalizer/xlf/LocalizableStrings.cs.xlf
deleted file mode 100644
index d5883f51b8c..00000000000
--- a/src/Microsoft.TemplateEngine.TemplateLocalizer/xlf/LocalizableStrings.cs.xlf
+++ /dev/null
@@ -1,78 +0,0 @@
-
-
-
-
-
- Given a template.config file, creates a "localize" directory next to it and exports the localization files into the created directory. If the localization files already exist, the existing translations will be preserved.
- Vedle souboru template.config se vytvoří „lokalizační“ adresář a lokalizační soubory se exportují do vytvořeného adresáře. Pokud lokalizační soubory už existují, existující překlady se zachovají.
- The phrase "localization files" here mean the files that will be given to the translators to be localized.
-
-
- If this option is specified, modified files will not be saved to file system and the changes will only be printed to console output.
- Pokud je tato možnost specifikovaná, upravené soubory se neuloží do systému souborů a změny se pouze vytisknou ve výstupu konzole.
-
-
-
- The list of languages to be supported by this template. The following language list will be used as default if this option is omitted: cs, de, en, es, fr, it, ja, ko, pl, pt-BR, ru, tr, zh-Hans, zh-Hant
- Seznam jazyků, které tato šablona podporuje. Pokud se tato možnost vynechá, následující seznam jazyků se použije jako výchozí: cs, de, en, es, fr, it, ja, ko, pl, pt-BR, ru, tr, zh-Hans, zh-Hant
-
-
-
- When specified, subdirectories are also searched for template.json files.
- Pokud je specifikováno, soubory template.json se budou hledat i v podadresářích.
- Do not localize: "template.json"
-
-
- Specifies the path to the template.json file. If a directory is given, template.json file will be searched within the directory. If --recursive options is specified, all the template.json files under the given directory and its subdirectories will be taken as input.
- Specifikuje cestu k souboru template.json. Pokud je uveden adresář, soubor template.json se vyhledá v tomto adresáři. Pokud jsou specifikovány rekurzivní možnosti, všechny soubory template.json v uvedeném adresáři a jeho podadresářích se budou považovat za vstupní.
- Do not localize: "template.json", "--recursive"
-
-
- "export" command for the following file was cancelled: "{0}".
- Příkaz export se pro následující soubor zrušil: {0}
- Do not localize: "export"
-
-
- Execution of "export" command has completed. {0} files were processed.
- Provedení příkazu export se dokončilo. Počet zpracovaných souborů: {0}
- {0} is the number of files. Do not localize "export"
-
-
- Generating localization files for a template.json has failed.
-Reason: {0}.
-File Path: {1}.
- Generování souborů lokalizace pro template.json se nezdařilo.
-Důvod: {0}.
-Cesta k souboru: {1}.
- {0} is a sentence such as "Json property should contain a field 'ID'"
-{1} is a file path such as: C:\temp\template.json
-Do not localize: "template.json"
-
-
- Generating localization files for the following template.json file has failed: "{0}".
- Generování lokalizačních souborů pro následující soubor template.json selhalo: „{0}“.
-
-
-
- Localization files were successfully generated for the template.json file at path "{0}".
- Lokalizační soubory se úspěšně vygenerovaly pro soubor template.json s cestou „{0}“.
-
-
-
- Failed to find "template.json" file under the path "{0}".
- Soubor „template.json“ se v cestě „{0}“ nepodařilo najít.
- Do not localize: "template.json"
-
-
- "{0}" command has encountered an error. See the logs for more details.
- V příkazu {0} došlo k chybě. Další podrobnosti najdete v protokolech.
- {0} will be replaced by the command name. Such as: "export" command has encountered an error.
-
-
- There was an error while running the "--{0}" command. Error message: "{1}". See the logs for more details.
- Při spouštění příkazu „--{0}“ došlo k chybě. Chybová zpráva: „{1}“. Podrobnosti jsou uvedeny v protokolech.
-
-
-
-
-
\ No newline at end of file
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer/xlf/LocalizableStrings.de.xlf b/src/Microsoft.TemplateEngine.TemplateLocalizer/xlf/LocalizableStrings.de.xlf
deleted file mode 100644
index 8e0774b1c66..00000000000
--- a/src/Microsoft.TemplateEngine.TemplateLocalizer/xlf/LocalizableStrings.de.xlf
+++ /dev/null
@@ -1,78 +0,0 @@
-
-
-
-
-
- Given a template.config file, creates a "localize" directory next to it and exports the localization files into the created directory. If the localization files already exist, the existing translations will be preserved.
- Wenn eine template.config-Datei angegeben ist, wird daneben ein "localize"-Verzeichnis erstellt und die Lokalisierungsdateien werden in das erstellte Verzeichnis exportiert. Wenn die Lokalisierungsdateien bereits vorhanden sind, werden die vorhandenen Übersetzungen beibehalten.
- The phrase "localization files" here mean the files that will be given to the translators to be localized.
-
-
- If this option is specified, modified files will not be saved to file system and the changes will only be printed to console output.
- Wenn diese Option angegeben wird, werden geänderte Dateien nicht im Dateisystem gespeichert und die Änderungen werden nur in der Konsolenausgabe gedruckt.
-
-
-
- The list of languages to be supported by this template. The following language list will be used as default if this option is omitted: cs, de, en, es, fr, it, ja, ko, pl, pt-BR, ru, tr, zh-Hans, zh-Hant
- Die Liste der Sprachen, die von dieser Vorlage unterstützt werden sollen. Die folgende Sprachliste wird als Standard verwendet, wenn diese Option weggelassen wird: cs, de, en, es, fr, it, ja, ko, pl, pt-BR, ru, tr, zh-Hans, zh-Hant
-
-
-
- When specified, subdirectories are also searched for template.json files.
- Bei Angabe dieser Option werden Unterverzeichnisse auch nach template.json-Dateien durchsucht.
- Do not localize: "template.json"
-
-
- Specifies the path to the template.json file. If a directory is given, template.json file will be searched within the directory. If --recursive options is specified, all the template.json files under the given directory and its subdirectories will be taken as input.
- Gibt den Pfad zur Datei template.json an. Wenn ein Verzeichnis angegeben wird, wird die template.json-Datei in diesem Verzeichnis gesucht. Wenn die Option \"--recursive\" angegeben ist, werden alle template.json-Dateien unter dem angegebenen Verzeichnis und seinen Unterverzeichnissen als Eingabe betrachtet.
- Do not localize: "template.json", "--recursive"
-
-
- "export" command for the following file was cancelled: "{0}".
- Der Befehl "export" für die folgende Datei wurde abgebrochen: "{0}".
- Do not localize: "export"
-
-
- Execution of "export" command has completed. {0} files were processed.
- Die Ausführung des "export"-Befehls wurde abgeschlossen. {0} Dateien wurden verarbeitet.
- {0} is the number of files. Do not localize "export"
-
-
- Generating localization files for a template.json has failed.
-Reason: {0}.
-File Path: {1}.
- Fehler beim Generieren von Lokalisierungsdateien für eine Datei "template.json".
-Ursache: {0}.
-Dateipfad: {1}.
- {0} is a sentence such as "Json property should contain a field 'ID'"
-{1} is a file path such as: C:\temp\template.json
-Do not localize: "template.json"
-
-
- Generating localization files for the following template.json file has failed: "{0}".
- Fehler beim Generieren von Lokalisierungsdateien für die folgende template.json-Datei: "{0}".
-
-
-
- Localization files were successfully generated for the template.json file at path "{0}".
- Lokalisierungsdateien wurden erfolgreich für die template.json-Datei im Pfad "{0}" generiert.
-
-
-
- Failed to find "template.json" file under the path "{0}".
- Die Datei "template.json" konnte unter dem Pfad "{0}" nicht gefunden werden.
- Do not localize: "template.json"
-
-
- "{0}" command has encountered an error. See the logs for more details.
- Fehler beim Ausführen des Befehls "{0}". Weitere Informationen finden Sie in den Protokollen.
- {0} will be replaced by the command name. Such as: "export" command has encountered an error.
-
-
- There was an error while running the "--{0}" command. Error message: "{1}". See the logs for more details.
- Fehler beim Ausführen des "--{0}"-Befehls. Fehlermeldung: "{1}". Weitere Informationen finden Sie in den Protokollen.
-
-
-
-
-
\ No newline at end of file
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer/xlf/LocalizableStrings.es.xlf b/src/Microsoft.TemplateEngine.TemplateLocalizer/xlf/LocalizableStrings.es.xlf
deleted file mode 100644
index d44b1edd424..00000000000
--- a/src/Microsoft.TemplateEngine.TemplateLocalizer/xlf/LocalizableStrings.es.xlf
+++ /dev/null
@@ -1,78 +0,0 @@
-
-
-
-
-
- Given a template.config file, creates a "localize" directory next to it and exports the localization files into the created directory. If the localization files already exist, the existing translations will be preserved.
- Dado un archivo template.config, crea un directorio de "localización" junto a él y exporta los archivos de localización en el directorio creado. Si los archivos de localización ya existen, se conservarán las traducciones existentes.
- The phrase "localization files" here mean the files that will be given to the translators to be localized.
-
-
- If this option is specified, modified files will not be saved to file system and the changes will only be printed to console output.
- Si se especifica esta opción, los archivos modificados no se guardarán en el sistema de archivos y los cambios solo se imprimirán en los resultados de la consola.
-
-
-
- The list of languages to be supported by this template. The following language list will be used as default if this option is omitted: cs, de, en, es, fr, it, ja, ko, pl, pt-BR, ru, tr, zh-Hans, zh-Hant
- La lista de idiomas que va a ser compatible con esta plantilla. Si omite esta opción, se usará la siguiente lista de idiomas como predeterminada: cs, de, en, es, fr, it, ja, dc, pl, pt-BR, ru, zh-hans, zh-hant
-
-
-
- When specified, subdirectories are also searched for template.json files.
- Al especificar esto, los subdirectorios también se buscan los archivos template.json.
- Do not localize: "template.json"
-
-
- Specifies the path to the template.json file. If a directory is given, template.json file will be searched within the directory. If --recursive options is specified, all the template.json files under the given directory and its subdirectories will be taken as input.
- Especifica la ruta de acceso al archivo template.json. Si se da un directorio, se buscará el archivo template.json dentro del directorio. Si se especifican opciones --recursive, todos los archivos template.json del directorio especificado y sus valores se tomarán como entrada.
- Do not localize: "template.json", "--recursive"
-
-
- "export" command for the following file was cancelled: "{0}".
- Comando "export" para el archivo siguiente se ha cancelado: "{0}".
- Do not localize: "export"
-
-
- Execution of "export" command has completed. {0} files were processed.
- Se ha completado la ejecución del comando "export". Se procesaron {0} archivos.
- {0} is the number of files. Do not localize "export"
-
-
- Generating localization files for a template.json has failed.
-Reason: {0}.
-File Path: {1}.
- Error al generar archivos de localización para una template.json.
-Motivo: {0}.
-Ruta de acceso del archivo: {1}.
- {0} is a sentence such as "Json property should contain a field 'ID'"
-{1} is a file path such as: C:\temp\template.json
-Do not localize: "template.json"
-
-
- Generating localization files for the following template.json file has failed: "{0}".
- No se pudo generar archivos de localización para el siguiente archivo template.json: "{0}".
-
-
-
- Localization files were successfully generated for the template.json file at path "{0}".
- Los archivos de localización se generaron correctamente para el archivo template.json en la ruta de acceso "{0}".
-
-
-
- Failed to find "template.json" file under the path "{0}".
- No se pudo encontrar el archivo "template.json" bajo la ruta "{0}".
- Do not localize: "template.json"
-
-
- "{0}" command has encountered an error. See the logs for more details.
- El comando "{0}" ha encontrado un error. Vea los registros para obtener más información.
- {0} will be replaced by the command name. Such as: "export" command has encountered an error.
-
-
- There was an error while running the "--{0}" command. Error message: "{1}". See the logs for more details.
- Ha ocurrido un error al ejecutar el comando "{0}". Mensaje de error: "{1}". Vea los registros para obtener más información.
-
-
-
-
-
\ No newline at end of file
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer/xlf/LocalizableStrings.fr.xlf b/src/Microsoft.TemplateEngine.TemplateLocalizer/xlf/LocalizableStrings.fr.xlf
deleted file mode 100644
index cd188c28701..00000000000
--- a/src/Microsoft.TemplateEngine.TemplateLocalizer/xlf/LocalizableStrings.fr.xlf
+++ /dev/null
@@ -1,78 +0,0 @@
-
-
-
-
-
- Given a template.config file, creates a "localize" directory next to it and exports the localization files into the created directory. If the localization files already exist, the existing translations will be preserved.
- Étant donné un fichier template.config, crée un répertoire « localiser » en regard de celui-ci et exporte les fichiers de localisation dans le répertoire créé. Si les fichiers de localisation existent déjà, les traductions existantes sont conservées.
- The phrase "localization files" here mean the files that will be given to the translators to be localized.
-
-
- If this option is specified, modified files will not be saved to file system and the changes will only be printed to console output.
- Si cette option est spécifiée, les fichiers modifiés ne seront pas enregistrés dans le système de fichiers et les modifications seront uniquement imprimées dans la sortie de la console.
-
-
-
- The list of languages to be supported by this template. The following language list will be used as default if this option is omitted: cs, de, en, es, fr, it, ja, ko, pl, pt-BR, ru, tr, zh-Hans, zh-Hant
- Liste des langues que ce modèle doit prendre en charge. La liste de langages suivante sera utilisée par défaut si cette option est omise : cs, de, en, es, fr, it, ja, ko, pl, pt-BR, ru, tr, zh-Hans, zh-Hant
-
-
-
- When specified, subdirectories are also searched for template.json files.
- Lorsqu'il est spécifié, les sous-répertoires sont également recherchés pour les fichiers template.json.
- Do not localize: "template.json"
-
-
- Specifies the path to the template.json file. If a directory is given, template.json file will be searched within the directory. If --recursive options is specified, all the template.json files under the given directory and its subdirectories will be taken as input.
- Spécifie le chemin d’accès au fichier template.json. Si un répertoire est donné, le fichier template.json est recherché dans le répertoire. Si l’option--Options récursives est spécifiée, tous les fichiers template.json du répertoire donné et de ses sous-répertoires sont pris comme entrée.
- Do not localize: "template.json", "--recursive"
-
-
- "export" command for the following file was cancelled: "{0}".
- la commande « export » pour le fichier suivant a été annulée : « {0} ».
- Do not localize: "export"
-
-
- Execution of "export" command has completed. {0} files were processed.
- L'exécution de la commande « export » est terminée. {0} les fichiers ont été traités.
- {0} is the number of files. Do not localize "export"
-
-
- Generating localization files for a template.json has failed.
-Reason: {0}.
-File Path: {1}.
- Échec de la génération de fichiers de localisation pour le template.json.
-Raison{0}.
-Chemin d’accès au fichier :{1}.
- {0} is a sentence such as "Json property should contain a field 'ID'"
-{1} is a file path such as: C:\temp\template.json
-Do not localize: "template.json"
-
-
- Generating localization files for the following template.json file has failed: "{0}".
- La génération de fichiers de localisation pour le template.jssuivant a échoué : « {0} ».
-
-
-
- Localization files were successfully generated for the template.json file at path "{0}".
- Les fichiers de localisation ont été générés avec succès pour le fichier template.json au chemin d’accès « {0} ».
-
-
-
- Failed to find "template.json" file under the path "{0}".
- Échec de la recherche du fichier « template.jssur » sous le chemin d’accès «0{0} ».
- Do not localize: "template.json"
-
-
- "{0}" command has encountered an error. See the logs for more details.
- La commande « {0} » a rencontré une erreur. Pour plus d’informations, consultez les journaux.
- {0} will be replaced by the command name. Such as: "export" command has encountered an error.
-
-
- There was an error while running the "--{0}" command. Error message: "{1}". See the logs for more details.
- Une erreur s’est produite lors de l’exécution de la commande « --{0} ». Message d’erreur : « {1} ». Pour plus d’informations, consultez les journaux.
-
-
-
-
-
\ No newline at end of file
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer/xlf/LocalizableStrings.it.xlf b/src/Microsoft.TemplateEngine.TemplateLocalizer/xlf/LocalizableStrings.it.xlf
deleted file mode 100644
index 5ebaf4a8f54..00000000000
--- a/src/Microsoft.TemplateEngine.TemplateLocalizer/xlf/LocalizableStrings.it.xlf
+++ /dev/null
@@ -1,78 +0,0 @@
-
-
-
-
-
- Given a template.config file, creates a "localize" directory next to it and exports the localization files into the created directory. If the localization files already exist, the existing translations will be preserved.
- Quando viene specificato un file template.config, crea una directory "localize" accanto a esso ed esporta i file di localizzazione nella directory creata. Se i file di localizzazione esistono già, verranno mantenute le traduzioni esistenti.
- The phrase "localization files" here mean the files that will be given to the translators to be localized.
-
-
- If this option is specified, modified files will not be saved to file system and the changes will only be printed to console output.
- Se questa opzione è specificata, i file modificati non verranno salvati nel file system e le modifiche verranno stampante unicamente nell'output della console.
-
-
-
- The list of languages to be supported by this template. The following language list will be used as default if this option is omitted: cs, de, en, es, fr, it, ja, ko, pl, pt-BR, ru, tr, zh-Hans, zh-Hant
- L'elenco delle lingue supportate da questo modello. Il seguente elenco di lingue verrà usato per impostazione predefinito se questa opzione viene omessa: cs, de, en, es, fr, it, ja, ko, pl, pt-BR, ru, tr, zh-Hans, zh-Hant
-
-
-
- When specified, subdirectories are also searched for template.json files.
- Quando specificato, vengono ricercate anche le sottodirectory per il file template.json.
- Do not localize: "template.json"
-
-
- Specifies the path to the template.json file. If a directory is given, template.json file will be searched within the directory. If --recursive options is specified, all the template.json files under the given directory and its subdirectories will be taken as input.
- Specifica il percorso al file template.json file. Se viene specificata una directory, verrà eseguita una ricerca per il file template.json nella directory. Se l'opzione --recursive viene specificata, tutti i file template.json nella directory e le relative sottodirectory verranno considerati come input.
- Do not localize: "template.json", "--recursive"
-
-
- "export" command for the following file was cancelled: "{0}".
- Il comando "export" per il file seguente è stato annullato: "{0}".
- Do not localize: "export"
-
-
- Execution of "export" command has completed. {0} files were processed.
- L'esecuzione del comando "export" è stata completata. {0} file sono stati elaborati.
- {0} is the number of files. Do not localize "export"
-
-
- Generating localization files for a template.json has failed.
-Reason: {0}.
-File Path: {1}.
- La generazione dei file di localizzazione per un modello.json non è riuscita.
-Motivo: {0}.
-Percorso file: {1}.
- {0} is a sentence such as "Json property should contain a field 'ID'"
-{1} is a file path such as: C:\temp\template.json
-Do not localize: "template.json"
-
-
- Generating localization files for the following template.json file has failed: "{0}".
- Non è stato possibile generare i file di localizzazione per il file seguente template.json: "{0}".
-
-
-
- Localization files were successfully generated for the template.json file at path "{0}".
- I file di localizzazione sono stati generati correttamente per il file template.json nel percorso "{0}".
-
-
-
- Failed to find "template.json" file under the path "{0}".
- Non è stato possibile trovare il file "template.json" nel percorso "{0}".
- Do not localize: "template.json"
-
-
- "{0}" command has encountered an error. See the logs for more details.
- Si è verificato un errore durante il comando "{0}". Per altri dettagli, vedere i log.
- {0} will be replaced by the command name. Such as: "export" command has encountered an error.
-
-
- There was an error while running the "--{0}" command. Error message: "{1}". See the logs for more details.
- Si è verificato un errore durante l'esecuzione del comando "--{0}". Messaggio di errore: "{1}". Per altri dettagli, vedere i log.
-
-
-
-
-
\ No newline at end of file
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer/xlf/LocalizableStrings.ja.xlf b/src/Microsoft.TemplateEngine.TemplateLocalizer/xlf/LocalizableStrings.ja.xlf
deleted file mode 100644
index bd5aff2f553..00000000000
--- a/src/Microsoft.TemplateEngine.TemplateLocalizer/xlf/LocalizableStrings.ja.xlf
+++ /dev/null
@@ -1,78 +0,0 @@
-
-
-
-
-
- Given a template.config file, creates a "localize" directory next to it and exports the localization files into the created directory. If the localization files already exist, the existing translations will be preserved.
- template.config ファイルが指定されている場合、そのファイルの横に "localize" ディレクトリが作成され、作成したディレクトリにローカライズ ファイルがエクスポートされます。ローカライズ ファイルが既に存在する場合、既存の翻訳は保存されます。
- The phrase "localization files" here mean the files that will be given to the translators to be localized.
-
-
- If this option is specified, modified files will not be saved to file system and the changes will only be printed to console output.
- このオプションを指定されている場合、変更されたファイルはファイル システムに保存されず、変更はコンソール出力にのみ出力されます。
-
-
-
- The list of languages to be supported by this template. The following language list will be used as default if this option is omitted: cs, de, en, es, fr, it, ja, ko, pl, pt-BR, ru, tr, zh-Hans, zh-Hant
- このテンプレートでサポートされる言語の一覧です。このオプションを省略すると、次の言語の一覧が既定で使用されます: cs、de、en、es、fr、it、ja、ko、pl、pt-BR、ru、tr、zh-Hans、zh-Hant
-
-
-
- When specified, subdirectories are also searched for template.json files.
- 指定されている場合、template.json ファイルのサブディレクトリも検索されます。
- Do not localize: "template.json"
-
-
- Specifies the path to the template.json file. If a directory is given, template.json file will be searched within the directory. If --recursive options is specified, all the template.json files under the given directory and its subdirectories will be taken as input.
- template.json ファイルへのパスを指定します。ディレクトリが指定されている場合、template.json ファイルはディレクトリ内で検索されます。--recursive オプションが指定されている場合、指定されたディレクトリとそのサブディレクトリの下にあるすべての template.json ファイルが入力として取得されます。
- Do not localize: "template.json", "--recursive"
-
-
- "export" command for the following file was cancelled: "{0}".
- "export" コマンドは、次のファイルに対してキャンセルされました: "{0}"。
- Do not localize: "export"
-
-
- Execution of "export" command has completed. {0} files were processed.
- "export" コマンドの実行が完了しました。{0} 個のファイルが処理されました。
- {0} is the number of files. Do not localize "export"
-
-
- Generating localization files for a template.json has failed.
-Reason: {0}.
-File Path: {1}.
- template.json のローカライズ ファイルを生成できませんでした。
-理由: {0}。
-ファイルのパス: {1}。
- {0} is a sentence such as "Json property should contain a field 'ID'"
-{1} is a file path such as: C:\temp\template.json
-Do not localize: "template.json"
-
-
- Generating localization files for the following template.json file has failed: "{0}".
- 次の template.json ファイルのローカライズ ファイルを生成できませんでした: "{0}"。
-
-
-
- Localization files were successfully generated for the template.json file at path "{0}".
- パス "{0}" にある template.json ファイルのローカライズ ファイルが正常に生成されました。
-
-
-
- Failed to find "template.json" file under the path "{0}".
- パス "{0}" の下に "template.json" ファイルが見つかりません。
- Do not localize: "template.json"
-
-
- "{0}" command has encountered an error. See the logs for more details.
- "{0}" コマンドでエラーが発生しました。詳細については、ログを参照してください。
- {0} will be replaced by the command name. Such as: "export" command has encountered an error.
-
-
- There was an error while running the "--{0}" command. Error message: "{1}". See the logs for more details.
- "--{0}" コマンドの実行中にエラーが発生しました。エラー メッセージ: "{1}"。詳細については、ログをご覧ください。
-
-
-
-
-
\ No newline at end of file
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer/xlf/LocalizableStrings.ko.xlf b/src/Microsoft.TemplateEngine.TemplateLocalizer/xlf/LocalizableStrings.ko.xlf
deleted file mode 100644
index 86c86d09eff..00000000000
--- a/src/Microsoft.TemplateEngine.TemplateLocalizer/xlf/LocalizableStrings.ko.xlf
+++ /dev/null
@@ -1,78 +0,0 @@
-
-
-
-
-
- Given a template.config file, creates a "localize" directory next to it and exports the localization files into the created directory. If the localization files already exist, the existing translations will be preserved.
- template.config 파일이 지정된 경우 옆에 "localize" 디렉터리를 만들고 지역화 파일을 생성된 디렉터리로 내보냅니다. 지역화 파일이 이미 있는 경우 기존 번역이 유지됩니다.
- The phrase "localization files" here mean the files that will be given to the translators to be localized.
-
-
- If this option is specified, modified files will not be saved to file system and the changes will only be printed to console output.
- 이 옵션을 지정하면 수정된 파일이 파일 시스템에 저장되지 않고 변경 내용이 콘솔 출력에만 출력됩니다.
-
-
-
- The list of languages to be supported by this template. The following language list will be used as default if this option is omitted: cs, de, en, es, fr, it, ja, ko, pl, pt-BR, ru, tr, zh-Hans, zh-Hant
- 이 템플릿에서 지원되는 언어 목록입니다. 이 옵션을 생략하면 다음 언어 목록이 기본값으로 사용됩니다. cs, de, en, es, fr, it, ja, ko, pl, pt-BR, ru, tr, zh-Hans, zh-Hant
-
-
-
- When specified, subdirectories are also searched for template.json files.
- 지정된 경우 하위 디렉터리에 대해서도 template.json 파일을 검색합니다.
- Do not localize: "template.json"
-
-
- Specifies the path to the template.json file. If a directory is given, template.json file will be searched within the directory. If --recursive options is specified, all the template.json files under the given directory and its subdirectories will be taken as input.
- template.json 파일의 경로를 지정합니다. 디렉터리가 지정되면 디렉터리 내에서 template.json 파일이 검색됩니다. --recursive 옵션을 지정하면 지정된 디렉터리 아래의 모든 template.json 파일과 해당 하위 디렉터리가 입력으로 간주됩니다.
- Do not localize: "template.json", "--recursive"
-
-
- "export" command for the following file was cancelled: "{0}".
- 다음 파일에 대한 "export" 명령이 취소되었습니다. "{0}".
- Do not localize: "export"
-
-
- Execution of "export" command has completed. {0} files were processed.
- "export" 명령 실행이 완료되었습니다. {0} 파일이 처리되었습니다.
- {0} is the number of files. Do not localize "export"
-
-
- Generating localization files for a template.json has failed.
-Reason: {0}.
-File Path: {1}.
- template.js에 대한 지역화 파일을 생성하지 못했습니다.
-이유: {0}.
-파일 경로: {1}.
- {0} is a sentence such as "Json property should contain a field 'ID'"
-{1} is a file path such as: C:\temp\template.json
-Do not localize: "template.json"
-
-
- Generating localization files for the following template.json file has failed: "{0}".
- template.json 파일에 대한 지역화 파일을 생성하지 못했습니다. "{0}".
-
-
-
- Localization files were successfully generated for the template.json file at path "{0}".
- 경로 "{0}"에서 template.json 파일에 대한 지역화 파일이 생성되었습니다.
-
-
-
- Failed to find "template.json" file under the path "{0}".
- "{0}” 경로에서 "template.json" 파일을 찾지 못했습니다.
- Do not localize: "template.json"
-
-
- "{0}" command has encountered an error. See the logs for more details.
- "{0}" 명령에 오류가 발생했습니다. 자세한 내용은 로그를 참조하세요.
- {0} will be replaced by the command name. Such as: "export" command has encountered an error.
-
-
- There was an error while running the "--{0}" command. Error message: "{1}". See the logs for more details.
- "--{0}" 명령을 실행하는 동안 오류가 발생했습니다. 오류 메시지: "{1}". 자세한 내용은 로그를 참조하세요.
-
-
-
-
-
\ No newline at end of file
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer/xlf/LocalizableStrings.pl.xlf b/src/Microsoft.TemplateEngine.TemplateLocalizer/xlf/LocalizableStrings.pl.xlf
deleted file mode 100644
index e9896887dd4..00000000000
--- a/src/Microsoft.TemplateEngine.TemplateLocalizer/xlf/LocalizableStrings.pl.xlf
+++ /dev/null
@@ -1,78 +0,0 @@
-
-
-
-
-
- Given a template.config file, creates a "localize" directory next to it and exports the localization files into the created directory. If the localization files already exist, the existing translations will be preserved.
- W przypadku pliku template.config tworzony jest katalog „lokalizować”, który znajduje się obok niego i eksportuje pliki lokalizacji do utworzonego katalogu. Jeśli pliki lokalizacji już istnieją, istniejące tłumaczenia zostaną zachowane.
- The phrase "localization files" here mean the files that will be given to the translators to be localized.
-
-
- If this option is specified, modified files will not be saved to file system and the changes will only be printed to console output.
- Jeśli ta opcja jest określona, zmodyfikowane pliki nie zostaną zapisane w systemie plików, a zmiany zostaną wydrukowane tylko na danych wyjściowych konsoli.
-
-
-
- The list of languages to be supported by this template. The following language list will be used as default if this option is omitted: cs, de, en, es, fr, it, ja, ko, pl, pt-BR, ru, tr, zh-Hans, zh-Hant
- Lista języków, które będą obsługiwane przez ten szablon. Następująca lista języków będzie używana domyślnie, jeśli ta opcja zostanie pominięta: cs, de, en, es, fr, it, ja, ko, pl, pt-BR, ru,tr, zh-Hans, zh-Hant
-
-
-
- When specified, subdirectories are also searched for template.json files.
- Jeśli zostanie określone, w podkatalogach są również wyszukiwane pliki template.json.
- Do not localize: "template.json"
-
-
- Specifies the path to the template.json file. If a directory is given, template.json file will be searched within the directory. If --recursive options is specified, all the template.json files under the given directory and its subdirectories will be taken as input.
- Określa ścieżkę do pliku template.json. Jeśli podano katalog, plik template.json będzie przeszukiwany w katalogu. Jeśli określono opcje --rekursywne, wszystkie pliki template.json w danym katalogu i jego podkatalogach będą traktowane jako dane wejściowe.
- Do not localize: "template.json", "--recursive"
-
-
- "export" command for the following file was cancelled: "{0}".
- Polecenie „eksportuj” dla następującego pliku zostało anulowane: „{0}”.
- Do not localize: "export"
-
-
- Execution of "export" command has completed. {0} files were processed.
- Ukończono wykonywanie polecenia „eksportuj”. Przetworzone pliki: {0}.
- {0} is the number of files. Do not localize "export"
-
-
- Generating localization files for a template.json has failed.
-Reason: {0}.
-File Path: {1}.
- Generowanie plików lokalizacji dla pliku template.json nie powiodło się.
-Przyczyna: {0}.
-Ścieżka pliku: {1}.
- {0} is a sentence such as "Json property should contain a field 'ID'"
-{1} is a file path such as: C:\temp\template.json
-Do not localize: "template.json"
-
-
- Generating localization files for the following template.json file has failed: "{0}".
- Generowanie plików lokalizacji dla następującego pliku template.json nie powiodło się: „{0}”.
-
-
-
- Localization files were successfully generated for the template.json file at path "{0}".
- Pomyślnie wygenerowano pliki lokalizacji dla pliku template.json w ścieżce „{0}”.
-
-
-
- Failed to find "template.json" file under the path "{0}".
- Nie można odnaleźć pliku „template.json” pod ścieżką „{0}”.
- Do not localize: "template.json"
-
-
- "{0}" command has encountered an error. See the logs for more details.
- Wystąpił błąd przy poleceniu „{0}”. Zobacz dzienniki, aby uzyskać więcej szczegółów.
- {0} will be replaced by the command name. Such as: "export" command has encountered an error.
-
-
- There was an error while running the "--{0}" command. Error message: "{1}". See the logs for more details.
- Wystąpił błąd podczas uruchamiania polecenia „--{0}”. Komunikat o błędzie: „{1}”. Zobacz dzienniki, aby uzyskać więcej szczegółów.
-
-
-
-
-
\ No newline at end of file
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer/xlf/LocalizableStrings.pt-BR.xlf b/src/Microsoft.TemplateEngine.TemplateLocalizer/xlf/LocalizableStrings.pt-BR.xlf
deleted file mode 100644
index b21e7dd7f71..00000000000
--- a/src/Microsoft.TemplateEngine.TemplateLocalizer/xlf/LocalizableStrings.pt-BR.xlf
+++ /dev/null
@@ -1,78 +0,0 @@
-
-
-
-
-
- Given a template.config file, creates a "localize" directory next to it and exports the localization files into the created directory. If the localization files already exist, the existing translations will be preserved.
- Dado um arquivo template.config, cria um diretório "localizar" próximo a ele e exporta os arquivos de localização para o diretório criado. Se os arquivos de localização já existirem, as traduções existentes serão preservadas.
- The phrase "localization files" here mean the files that will be given to the translators to be localized.
-
-
- If this option is specified, modified files will not be saved to file system and the changes will only be printed to console output.
- Se esta opção for especificada, os arquivos modificados não serão salvos no sistema de arquivos e as alterações serão impressas apenas na saída do console.
-
-
-
- The list of languages to be supported by this template. The following language list will be used as default if this option is omitted: cs, de, en, es, fr, it, ja, ko, pl, pt-BR, ru, tr, zh-Hans, zh-Hant
- A lista de idiomas suportados por este modelo. A lista de idiomas a seguinte será usada como padrão se esta opção for omitida: cs, de, en, es, fr, it, ja, ko, pl, pt-BR, ru, tr, zh-Hans, zh-Hant
-
-
-
- When specified, subdirectories are also searched for template.json files.
- Quando especificado, os subdiretórios também são pesquisados por arquivos template.json.
- Do not localize: "template.json"
-
-
- Specifies the path to the template.json file. If a directory is given, template.json file will be searched within the directory. If --recursive options is specified, all the template.json files under the given directory and its subdirectories will be taken as input.
- Especifica o caminho para o arquivo template.json. Se um diretório for fornecido, o arquivo template.json será pesquisado dentro do diretório. Se opções --recursivas forem especificadas, todos os arquivos template.json no diretório fornecido e seus subdiretórios serão considerados como entrada.
- Do not localize: "template.json", "--recursive"
-
-
- "export" command for the following file was cancelled: "{0}".
- O comando "export" para o seguinte arquivo foi cancelado: "{0}".
- Do not localize: "export"
-
-
- Execution of "export" command has completed. {0} files were processed.
- A execução do comando "export" foi concluída. {0} arquivos foram processados.
- {0} is the number of files. Do not localize "export"
-
-
- Generating localization files for a template.json has failed.
-Reason: {0}.
-File Path: {1}.
- A geração de arquivos de localização para um template.json falhou.
-Motivo: {0}.
-Caminho do arquivo: {1}.
- {0} is a sentence such as "Json property should contain a field 'ID'"
-{1} is a file path such as: C:\temp\template.json
-Do not localize: "template.json"
-
-
- Generating localization files for the following template.json file has failed: "{0}".
- A geração de arquivos de localização para o arquivo template.json a seguir falhou: "{0}".
-
-
-
- Localization files were successfully generated for the template.json file at path "{0}".
- Os arquivos de localização foram gerados com sucesso para o arquivo template.json no caminho "{0}".
-
-
-
- Failed to find "template.json" file under the path "{0}".
- Falhou em localizar o arquivo "template.json" no o caminho "{0}".
- Do not localize: "template.json"
-
-
- "{0}" command has encountered an error. See the logs for more details.
- O comando "{0}" encontrou um erro. Veja os logs para mais detalhes.
- {0} will be replaced by the command name. Such as: "export" command has encountered an error.
-
-
- There was an error while running the "--{0}" command. Error message: "{1}". See the logs for more details.
- Ocorreu um erro ao executar o comando "--{0}". Mensagem de erro: "{1}". Veja os logs para mais detalhes.
-
-
-
-
-
\ No newline at end of file
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer/xlf/LocalizableStrings.ru.xlf b/src/Microsoft.TemplateEngine.TemplateLocalizer/xlf/LocalizableStrings.ru.xlf
deleted file mode 100644
index f8eb22b87eb..00000000000
--- a/src/Microsoft.TemplateEngine.TemplateLocalizer/xlf/LocalizableStrings.ru.xlf
+++ /dev/null
@@ -1,78 +0,0 @@
-
-
-
-
-
- Given a template.config file, creates a "localize" directory next to it and exports the localization files into the created directory. If the localization files already exist, the existing translations will be preserved.
- В файле template.config создается каталог "локализации" рядом с файлом и экспортируются файлы локализации в созданный каталог. Если файлы локализации уже существуют, существующие переводы будут сохранены.
- The phrase "localization files" here mean the files that will be given to the translators to be localized.
-
-
- If this option is specified, modified files will not be saved to file system and the changes will only be printed to console output.
- Если задан этот параметр, измененные файлы не будут сохранены в файловой системе, и изменения будут напечатаны только в выходных данных консоли.
-
-
-
- The list of languages to be supported by this template. The following language list will be used as default if this option is omitted: cs, de, en, es, fr, it, ja, ko, pl, pt-BR, ru, tr, zh-Hans, zh-Hant
- Список языков, поддерживаемых этим шаблоном. Если этот параметр пропущен, по умолчанию будет использоваться следующий список языков: английский, испанский, итальянский, китайский (традиционное письмо), китайский (упрощенный), корейский, немецкий, польский, португальский (Бразилия), русский, турецкий, французский, чешский, японский.
-
-
-
- When specified, subdirectories are also searched for template.json files.
- Если указано, в подкаталогах также выполняется поиск файлов template.json.
- Do not localize: "template.json"
-
-
- Specifies the path to the template.json file. If a directory is given, template.json file will be searched within the directory. If --recursive options is specified, all the template.json files under the given directory and its subdirectories will be taken as input.
- Указывает путь к файлу template.json. Если задан каталог, файл template.json можно будет найти в каталоге. Если указан параметр --recursive, все файлы template.json в указанном каталоге и его подкаталогах будут считаться входными данными.
- Do not localize: "template.json", "--recursive"
-
-
- "export" command for the following file was cancelled: "{0}".
- Команда "export" для следующего файла отменена: "{0}".
- Do not localize: "export"
-
-
- Execution of "export" command has completed. {0} files were processed.
- Выполнение команды "export" завершено. Обработано файлов: {0}.
- {0} is the number of files. Do not localize "export"
-
-
- Generating localization files for a template.json has failed.
-Reason: {0}.
-File Path: {1}.
- Произошел сбой при создании файлов локализации для template.json.
-Причина: {0}.
-Путь к файлу: {1}.
- {0} is a sentence such as "Json property should contain a field 'ID'"
-{1} is a file path such as: C:\temp\template.json
-Do not localize: "template.json"
-
-
- Generating localization files for the following template.json file has failed: "{0}".
- Не удалось создать файлы локализации для следующего файла template.json: "{0}".
-
-
-
- Localization files were successfully generated for the template.json file at path "{0}".
- Файлы локализации успешно созданы для файла template.json в пути "{0}".
-
-
-
- Failed to find "template.json" file under the path "{0}".
- Не удалось найти файл template.json в пути "{0}".
- Do not localize: "template.json"
-
-
- "{0}" command has encountered an error. See the logs for more details.
- Команда "{0}" обнаружила ошибку. Дополнительные сведения см. в журналах.
- {0} will be replaced by the command name. Such as: "export" command has encountered an error.
-
-
- There was an error while running the "--{0}" command. Error message: "{1}". See the logs for more details.
- Произошла ошибка при запуске команды "--{0}". Сообщение об ошибке: "{1}". Дополнительные сведения см. в журналах.
-
-
-
-
-
\ No newline at end of file
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer/xlf/LocalizableStrings.tr.xlf b/src/Microsoft.TemplateEngine.TemplateLocalizer/xlf/LocalizableStrings.tr.xlf
deleted file mode 100644
index 463d3f57897..00000000000
--- a/src/Microsoft.TemplateEngine.TemplateLocalizer/xlf/LocalizableStrings.tr.xlf
+++ /dev/null
@@ -1,78 +0,0 @@
-
-
-
-
-
- Given a template.config file, creates a "localize" directory next to it and exports the localization files into the created directory. If the localization files already exist, the existing translations will be preserved.
- template.config dosyası belirtildiğinde, yanında bir "localize" dizini oluşturulur ve yerelleştirme dosyaları oluşturulan dizine aktarılır. Yerelleştirme dosyaları zaten varsa mevcut çeviriler saklanır.
- The phrase "localization files" here mean the files that will be given to the translators to be localized.
-
-
- If this option is specified, modified files will not be saved to file system and the changes will only be printed to console output.
- Bu seçenek belirtilmişse, değiştirilen dosyalar dosya sistemine kaydedilmez ve değişiklikler yalnızca konsol çıkışına yazdırılır.
-
-
-
- The list of languages to be supported by this template. The following language list will be used as default if this option is omitted: cs, de, en, es, fr, it, ja, ko, pl, pt-BR, ru, tr, zh-Hans, zh-Hant
- Bu şablon tarafından desteklenen dillerin listesi. Bu seçenek atlanırsa, şu dil listesi varsayılan olarak kullanılır: cs, de, en, es, fr, it, ja, ko, pl, pt-BR, ru, tr, zh-Hans, zh-Hant
-
-
-
- When specified, subdirectories are also searched for template.json files.
- Belirtildiğinde, template.json dosyalarına yönelik alt dizinler de aranır.
- Do not localize: "template.json"
-
-
- Specifies the path to the template.json file. If a directory is given, template.json file will be searched within the directory. If --recursive options is specified, all the template.json files under the given directory and its subdirectories will be taken as input.
- template.json dosyasının yolunu belirtir. Dizin belirtildiğinde, dizinde template.json dosyası aranır. --recursive options belirtilirse, sağlanan dizin ve alt dizinleri altındaki tüm template.json dosyaları giriş olarak alınır.
- Do not localize: "template.json", "--recursive"
-
-
- "export" command for the following file was cancelled: "{0}".
- Şu dosya için "dışarı aktarma" komutu iptal edildi: "{0}".
- Do not localize: "export"
-
-
- Execution of "export" command has completed. {0} files were processed.
- “Dışarı aktarma” komutunun yürütme işlemi tamamlandı. {0} dosyalar işlendi.
- {0} is the number of files. Do not localize "export"
-
-
- Generating localization files for a template.json has failed.
-Reason: {0}.
-File Path: {1}.
- template.json için yerelleştirme dosyaları oluşturulamadı.
-Neden: {0}.
-Dosya Yolu: {1}.
- {0} is a sentence such as "Json property should contain a field 'ID'"
-{1} is a file path such as: C:\temp\template.json
-Do not localize: "template.json"
-
-
- Generating localization files for the following template.json file has failed: "{0}".
- Şu template.json dosyası için yerelleştirme dosyaları oluşturulamadı: "{0}".
-
-
-
- Localization files were successfully generated for the template.json file at path "{0}".
- "{0}" yolundaki template.json dosyası için yerelleştirme dosyaları başarıyla oluşturuldu.
-
-
-
- Failed to find "template.json" file under the path "{0}".
- "{0}" yolunda "template.json" dosyası bulunamadı.
- Do not localize: "template.json"
-
-
- "{0}" command has encountered an error. See the logs for more details.
- "{0}" komutu bir hatayla karşılaştı. Daha fazla ayrıntı için günlüklere bakın.
- {0} will be replaced by the command name. Such as: "export" command has encountered an error.
-
-
- There was an error while running the "--{0}" command. Error message: "{1}". See the logs for more details.
- "--{0}" komutu çalıştırılırken bir hata oluştu. Hata iletisi: "{1}". Daha fazla ayrıntı için günlüklere bakın.
-
-
-
-
-
\ No newline at end of file
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer/xlf/LocalizableStrings.zh-Hans.xlf b/src/Microsoft.TemplateEngine.TemplateLocalizer/xlf/LocalizableStrings.zh-Hans.xlf
deleted file mode 100644
index b14e82f316e..00000000000
--- a/src/Microsoft.TemplateEngine.TemplateLocalizer/xlf/LocalizableStrings.zh-Hans.xlf
+++ /dev/null
@@ -1,78 +0,0 @@
-
-
-
-
-
- Given a template.config file, creates a "localize" directory next to it and exports the localization files into the created directory. If the localization files already exist, the existing translations will be preserved.
- 给定一个 template.config 文件,在其旁边创建一个“本地化”目录,并将本地化文件导出到已创建的目录中。如果本地化文件已存在,将保留现有翻译。
- The phrase "localization files" here mean the files that will be given to the translators to be localized.
-
-
- If this option is specified, modified files will not be saved to file system and the changes will only be printed to console output.
- 如果已指定此选项,则不会将修改的文件保存到文件系统,并且更改将仅打印到控制台输出。
-
-
-
- The list of languages to be supported by this template. The following language list will be used as default if this option is omitted: cs, de, en, es, fr, it, ja, ko, pl, pt-BR, ru, tr, zh-Hans, zh-Hant
- 此模板支持的语言列表。如果省略此选项,则使用以下语言列表作为默认值: cs、de、en、es、fr、it、ja、ko、pl、pt-BR、ru、tr、zh-Hans、zh-Hant
-
-
-
- When specified, subdirectories are also searched for template.json files.
- 指定时,系统还会搜索子目录中的 template.json 文件。
- Do not localize: "template.json"
-
-
- Specifies the path to the template.json file. If a directory is given, template.json file will be searched within the directory. If --recursive options is specified, all the template.json files under the given directory and its subdirectories will be taken as input.
- 指定到 template.json 文件的路径。如果给定了目录,系统将在目录中搜索文件 template.json。如果指定了“--recursive”选项,则系统将会提取给定目录及其子目录下的所有 template.json 作为输入。
- Do not localize: "template.json", "--recursive"
-
-
- "export" command for the following file was cancelled: "{0}".
- 已取消以下文件的 “export” 命令:“{0}”。
- Do not localize: "export"
-
-
- Execution of "export" command has completed. {0} files were processed.
- 已完成执行 “export” 命令。已处理 {0} 个文件。
- {0} is the number of files. Do not localize "export"
-
-
- Generating localization files for a template.json has failed.
-Reason: {0}.
-File Path: {1}.
- 为 template.json 生成本地化文件已失败。
-原因: {0}。
-文件路径: {1}。
- {0} is a sentence such as "Json property should contain a field 'ID'"
-{1} is a file path such as: C:\temp\template.json
-Do not localize: "template.json"
-
-
- Generating localization files for the following template.json file has failed: "{0}".
- 为以下 template.json 文件生成本地化文件失败:“{0}”。
-
-
-
- Localization files were successfully generated for the template.json file at path "{0}".
- 已成功为位于路径“{0}”的 template.json 文件生成本地化文件。
-
-
-
- Failed to find "template.json" file under the path "{0}".
- 在路径“{0}”下未找到“template.json”文件。
- Do not localize: "template.json"
-
-
- "{0}" command has encountered an error. See the logs for more details.
- “{0}”命令遇到错误。如需了解详细信息,请参阅日志。
- {0} will be replaced by the command name. Such as: "export" command has encountered an error.
-
-
- There was an error while running the "--{0}" command. Error message: "{1}". See the logs for more details.
- 运行“--{0}”命令时出错。错误消息:“{1}”。如需了解详细信息,请参阅日志。
-
-
-
-
-
\ No newline at end of file
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer/xlf/LocalizableStrings.zh-Hant.xlf b/src/Microsoft.TemplateEngine.TemplateLocalizer/xlf/LocalizableStrings.zh-Hant.xlf
deleted file mode 100644
index 4126aed7560..00000000000
--- a/src/Microsoft.TemplateEngine.TemplateLocalizer/xlf/LocalizableStrings.zh-Hant.xlf
+++ /dev/null
@@ -1,78 +0,0 @@
-
-
-
-
-
- Given a template.config file, creates a "localize" directory next to it and exports the localization files into the created directory. If the localization files already exist, the existing translations will be preserved.
- 給定的 template.config 檔案會在檔案旁邊建立 [當地語系化] 目錄,並將當地語系化檔案匯出到建立的目錄中。如果當地語系化檔案已存在,將會保留現有的翻譯。
- The phrase "localization files" here mean the files that will be given to the translators to be localized.
-
-
- If this option is specified, modified files will not be saved to file system and the changes will only be printed to console output.
- 如果指定此選項,修改後的檔案將不會儲存至檔案系統,而且只會將變更列印到主控台輸出。
-
-
-
- The list of languages to be supported by this template. The following language list will be used as default if this option is omitted: cs, de, en, es, fr, it, ja, ko, pl, pt-BR, ru, tr, zh-Hans, zh-Hant
- 此範本將支援的語言清單。若省略此選項,將會使用下列語言清單作為預設值: cs、de、en、fr、zh、ja、ko、pl、pt-BR、ru、-Hans、zh-Hant
-
-
-
- When specified, subdirectories are also searched for template.json files.
- 指定時,也會在子目錄中搜尋 template.json 檔案。
- Do not localize: "template.json"
-
-
- Specifies the path to the template.json file. If a directory is given, template.json file will be searched within the directory. If --recursive options is specified, all the template.json files under the given directory and its subdirectories will be taken as input.
- 指定 template.json 檔案的路徑。如果指定目錄,將會在目錄內搜尋 template.json 檔案。如果指定--recursive 選項,則會將指定目錄及其子目錄下的所有 template.json 檔案視為輸入。
- Do not localize: "template.json", "--recursive"
-
-
- "export" command for the following file was cancelled: "{0}".
- 已取消下列檔案的 "export" 命令: "{0}"。
- Do not localize: "export"
-
-
- Execution of "export" command has completed. {0} files were processed.
- 已完成 "export" 命令的執行。已處理 {0} 個檔案。
- {0} is the number of files. Do not localize "export"
-
-
- Generating localization files for a template.json has failed.
-Reason: {0}.
-File Path: {1}.
- 為 template.json 產生當地語系化檔案失敗。
-原因: {0}。
-檔案路徑: {1}。
- {0} is a sentence such as "Json property should contain a field 'ID'"
-{1} is a file path such as: C:\temp\template.json
-Do not localize: "template.json"
-
-
- Generating localization files for the following template.json file has failed: "{0}".
- 在下列 template.json 檔案中產生當地語系化檔案失敗: "{0}"。
-
-
-
- Localization files were successfully generated for the template.json file at path "{0}".
- 已成功為位於路徑 "{0}" 上的 template.json 檔案產生當地語系化檔案。
-
-
-
- Failed to find "template.json" file under the path "{0}".
- 在路徑 "{0}" 下找不到 "template.json" 檔案。
- Do not localize: "template.json"
-
-
- "{0}" command has encountered an error. See the logs for more details.
- "{0}" 命令發生錯誤。如需詳細資料,請參閱記錄檔。
- {0} will be replaced by the command name. Such as: "export" command has encountered an error.
-
-
- There was an error while running the "--{0}" command. Error message: "{1}". See the logs for more details.
- 執行 "--{0}" 命令時發生錯誤。錯誤訊息: "{1}"。如需詳細資料,請參閱記錄檔。
-
-
-
-
-
\ No newline at end of file
diff --git a/test/Microsoft.TemplateEngine.Authoring.CLI.IntegrationTests/ExportCommandFailureTests.cs b/test/Microsoft.TemplateEngine.Authoring.CLI.IntegrationTests/ExportCommandFailureTests.cs
index f1174eaa43d..e2a94b9a763 100644
--- a/test/Microsoft.TemplateEngine.Authoring.CLI.IntegrationTests/ExportCommandFailureTests.cs
+++ b/test/Microsoft.TemplateEngine.Authoring.CLI.IntegrationTests/ExportCommandFailureTests.cs
@@ -2,7 +2,7 @@
// The .NET Foundation licenses this file to you under the MIT license.
using System.Globalization;
-using Microsoft.TemplateEngine.TestHelper.Commands;
+using Microsoft.TemplateEngine.CommandUtils;
using Xunit.Abstractions;
namespace Microsoft.TemplateEngine.Authoring.CLI.IntegrationTests
diff --git a/test/Microsoft.TemplateEngine.Authoring.CLI.IntegrationTests/Microsoft.TemplateEngine.Authoring.CLI.IntegrationTests.csproj b/test/Microsoft.TemplateEngine.Authoring.CLI.IntegrationTests/Microsoft.TemplateEngine.Authoring.CLI.IntegrationTests.csproj
index cde80c63919..e8d37503c26 100644
--- a/test/Microsoft.TemplateEngine.Authoring.CLI.IntegrationTests/Microsoft.TemplateEngine.Authoring.CLI.IntegrationTests.csproj
+++ b/test/Microsoft.TemplateEngine.Authoring.CLI.IntegrationTests/Microsoft.TemplateEngine.Authoring.CLI.IntegrationTests.csproj
@@ -7,7 +7,7 @@
-
+
diff --git a/test/Microsoft.TemplateEngine.Authoring.CLI.IntegrationTests/VerifyCommandTests.cs b/test/Microsoft.TemplateEngine.Authoring.CLI.IntegrationTests/VerifyCommandTests.cs
index 33f447ed4a1..19c80c4da34 100644
--- a/test/Microsoft.TemplateEngine.Authoring.CLI.IntegrationTests/VerifyCommandTests.cs
+++ b/test/Microsoft.TemplateEngine.Authoring.CLI.IntegrationTests/VerifyCommandTests.cs
@@ -3,8 +3,8 @@
using FluentAssertions;
using Microsoft.TemplateEngine.Authoring.TemplateVerifier;
+using Microsoft.TemplateEngine.CommandUtils;
using Microsoft.TemplateEngine.TestHelper;
-using Microsoft.TemplateEngine.TestHelper.Commands;
using Microsoft.TemplateEngine.Tests;
using Xunit.Abstractions;
diff --git a/test/Microsoft.TemplateEngine.Authoring.CLI.UnitTests/Microsoft.TemplateEngine.Authoring.CLI.UnitTests.csproj b/test/Microsoft.TemplateEngine.Authoring.CLI.UnitTests/Microsoft.TemplateEngine.Authoring.CLI.UnitTests.csproj
index 92aab69eda3..7c9ac6dd09f 100644
--- a/test/Microsoft.TemplateEngine.Authoring.CLI.UnitTests/Microsoft.TemplateEngine.Authoring.CLI.UnitTests.csproj
+++ b/test/Microsoft.TemplateEngine.Authoring.CLI.UnitTests/Microsoft.TemplateEngine.Authoring.CLI.UnitTests.csproj
@@ -7,7 +7,7 @@
-
+
diff --git a/test/Microsoft.TemplateEngine.Authoring.Tasks.IntegrationTests/LocalizeTemplateTests.cs b/test/Microsoft.TemplateEngine.Authoring.Tasks.IntegrationTests/LocalizeTemplateTests.cs
index 31e67cb4bc8..ca80f9413da 100644
--- a/test/Microsoft.TemplateEngine.Authoring.Tasks.IntegrationTests/LocalizeTemplateTests.cs
+++ b/test/Microsoft.TemplateEngine.Authoring.Tasks.IntegrationTests/LocalizeTemplateTests.cs
@@ -2,8 +2,8 @@
// The .NET Foundation licenses this file to you under the MIT license.
using FluentAssertions;
+using Microsoft.TemplateEngine.CommandUtils;
using Microsoft.TemplateEngine.TestHelper;
-using Microsoft.TemplateEngine.TestHelper.Commands;
using Microsoft.TemplateEngine.Tests;
using Xunit;
using Xunit.Abstractions;
@@ -27,12 +27,14 @@ public void CanRunTask()
TestUtils.SetupNuGetConfigForPackagesLocation(tmpDir, ShippingPackagesLocation);
new DotnetCommand(_log, "add", "TemplatePackage.csproj", "package", "Microsoft.TemplateEngine.Authoring.Tasks", "--prerelease")
- .WithWorkingDirectory(tmpDir)
- .Execute()
- .Should()
- .Pass();
+ .WithoutTelemetry()
+ .WithWorkingDirectory(tmpDir)
+ .Execute()
+ .Should()
+ .Pass();
new DotnetCommand(_log, "build")
+ .WithoutTelemetry()
.WithWorkingDirectory(tmpDir)
.Execute()
.Should()
@@ -55,12 +57,14 @@ public void CanRunTaskSelectedLangs()
TestUtils.SetupNuGetConfigForPackagesLocation(tmpDir, ShippingPackagesLocation);
new DotnetCommand(_log, "add", "TemplatePackage.csproj", "package", "Microsoft.TemplateEngine.Authoring.Tasks", "--prerelease")
- .WithWorkingDirectory(tmpDir)
- .Execute()
- .Should()
- .Pass();
+ .WithoutTelemetry()
+ .WithWorkingDirectory(tmpDir)
+ .Execute()
+ .Should()
+ .Pass();
new DotnetCommand(_log, "build")
+ .WithoutTelemetry()
.WithWorkingDirectory(tmpDir)
.Execute()
.Should()
@@ -84,12 +88,14 @@ public void CanRunTaskSelectedTemplates()
TestUtils.SetupNuGetConfigForPackagesLocation(tmpDir, ShippingPackagesLocation);
new DotnetCommand(_log, "add", "TemplatePackage.csproj", "package", "Microsoft.TemplateEngine.Authoring.Tasks", "--prerelease")
- .WithWorkingDirectory(tmpDir)
- .Execute()
- .Should()
- .Pass();
+ .WithoutTelemetry()
+ .WithWorkingDirectory(tmpDir)
+ .Execute()
+ .Should()
+ .Pass();
new DotnetCommand(_log, "build")
+ .WithoutTelemetry()
.WithWorkingDirectory(tmpDir)
.Execute()
.Should()
@@ -114,12 +120,14 @@ public void CanRunTaskAndDetectError()
TestUtils.SetupNuGetConfigForPackagesLocation(tmpDir, ShippingPackagesLocation);
new DotnetCommand(_log, "add", "TemplatePackage.csproj", "package", "Microsoft.TemplateEngine.Authoring.Tasks", "--prerelease")
- .WithWorkingDirectory(tmpDir)
- .Execute()
- .Should()
- .Pass();
+ .WithoutTelemetry()
+ .WithWorkingDirectory(tmpDir)
+ .Execute()
+ .Should()
+ .Pass();
new DotnetCommand(_log, "build")
+ .WithoutTelemetry()
.WithWorkingDirectory(tmpDir)
.Execute()
.Should()
diff --git a/test/Microsoft.TemplateEngine.Authoring.Tasks.IntegrationTests/Microsoft.TemplateEngine.Authoring.Tasks.IntegrationTests.csproj b/test/Microsoft.TemplateEngine.Authoring.Tasks.IntegrationTests/Microsoft.TemplateEngine.Authoring.Tasks.IntegrationTests.csproj
index 9af40a6804e..4f5d7fdb0f0 100644
--- a/test/Microsoft.TemplateEngine.Authoring.Tasks.IntegrationTests/Microsoft.TemplateEngine.Authoring.Tasks.IntegrationTests.csproj
+++ b/test/Microsoft.TemplateEngine.Authoring.Tasks.IntegrationTests/Microsoft.TemplateEngine.Authoring.Tasks.IntegrationTests.csproj
@@ -12,15 +12,19 @@
-
+
-
+
+
+
+
+
diff --git a/test/Microsoft.TemplateEngine.Authoring.TemplateVerifier.IntegrationTests/Microsoft.TemplateEngine.Authoring.TemplateVerifier.IntegrationTests.csproj b/test/Microsoft.TemplateEngine.Authoring.TemplateVerifier.IntegrationTests/Microsoft.TemplateEngine.Authoring.TemplateVerifier.IntegrationTests.csproj
index e07790e9d32..16f16898339 100644
--- a/test/Microsoft.TemplateEngine.Authoring.TemplateVerifier.IntegrationTests/Microsoft.TemplateEngine.Authoring.TemplateVerifier.IntegrationTests.csproj
+++ b/test/Microsoft.TemplateEngine.Authoring.TemplateVerifier.IntegrationTests/Microsoft.TemplateEngine.Authoring.TemplateVerifier.IntegrationTests.csproj
@@ -6,9 +6,9 @@
-
+
-
+
diff --git a/test/Microsoft.TemplateEngine.Authoring.TemplateVerifier.UnitTests/Microsoft.TemplateEngine.Authoring.TemplateVerifier.UnitTests.csproj b/test/Microsoft.TemplateEngine.Authoring.TemplateVerifier.UnitTests/Microsoft.TemplateEngine.Authoring.TemplateVerifier.UnitTests.csproj
index 4ec7c699ba5..04bfb2727a4 100644
--- a/test/Microsoft.TemplateEngine.Authoring.TemplateVerifier.UnitTests/Microsoft.TemplateEngine.Authoring.TemplateVerifier.UnitTests.csproj
+++ b/test/Microsoft.TemplateEngine.Authoring.TemplateVerifier.UnitTests/Microsoft.TemplateEngine.Authoring.TemplateVerifier.UnitTests.csproj
@@ -6,7 +6,7 @@
-
+
diff --git a/test/Microsoft.TemplateEngine.Authoring.TemplateVerifier.UnitTests/VerificationEngineTests.cs b/test/Microsoft.TemplateEngine.Authoring.TemplateVerifier.UnitTests/VerificationEngineTests.cs
index cf6d9c23f5d..d8f70152dc6 100644
--- a/test/Microsoft.TemplateEngine.Authoring.TemplateVerifier.UnitTests/VerificationEngineTests.cs
+++ b/test/Microsoft.TemplateEngine.Authoring.TemplateVerifier.UnitTests/VerificationEngineTests.cs
@@ -5,6 +5,7 @@
using FluentAssertions;
using Microsoft.Extensions.Logging;
using Microsoft.TemplateEngine.Authoring.TemplateVerifier.Commands;
+using Microsoft.TemplateEngine.CommandUtils;
using Microsoft.TemplateEngine.TestHelper;
using Xunit.Abstractions;
diff --git a/test/Microsoft.TemplateEngine.TemplateLocalizer.Core.UnitTests/Microsoft.TemplateEngine.TemplateLocalizer.Core.UnitTests.csproj b/test/Microsoft.TemplateEngine.TemplateLocalizer.Core.UnitTests/Microsoft.TemplateEngine.TemplateLocalizer.Core.UnitTests.csproj
index 143ca0f0dbe..1cde654f686 100644
--- a/test/Microsoft.TemplateEngine.TemplateLocalizer.Core.UnitTests/Microsoft.TemplateEngine.TemplateLocalizer.Core.UnitTests.csproj
+++ b/test/Microsoft.TemplateEngine.TemplateLocalizer.Core.UnitTests/Microsoft.TemplateEngine.TemplateLocalizer.Core.UnitTests.csproj
@@ -6,7 +6,7 @@
-
+
diff --git a/test/Microsoft.TemplateEngine.TestHelper/Commands/Assertions/CommandResultExtensions.cs b/test/Microsoft.TemplateEngine.TestHelper/Commands/Assertions/CommandResultExtensions.cs
deleted file mode 100644
index 64f6d4fe63d..00000000000
--- a/test/Microsoft.TemplateEngine.TestHelper/Commands/Assertions/CommandResultExtensions.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-#if NET
-
-using Microsoft.DotNet.Cli.Utils;
-
-namespace Microsoft.TemplateEngine.TestHelper.Commands
-{
- public static class CommandResultExtensions
- {
- public static CommandResultAssertions Should(this CommandResult commandResult)
- {
- return new CommandResultAssertions(commandResult);
- }
- }
-}
-#endif
diff --git a/test/Microsoft.TemplateEngine.TestHelper/Commands/BasicCommand.cs b/test/Microsoft.TemplateEngine.TestHelper/Commands/BasicCommand.cs
deleted file mode 100644
index a4f725c0cd2..00000000000
--- a/test/Microsoft.TemplateEngine.TestHelper/Commands/BasicCommand.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-#if NET
-using System.Collections.Generic;
-using System.Linq;
-using Xunit.Abstractions;
-
-namespace Microsoft.TemplateEngine.TestHelper.Commands
-{
- public class BasicCommand : TestCommand
- {
- private readonly string _processName;
-
- public BasicCommand(ITestOutputHelper log, string processName, params string[] args) : base(log)
- {
- _processName = processName;
- Arguments.AddRange(args.Where(a => !string.IsNullOrWhiteSpace(a)));
- }
-
- protected override SdkCommandSpec CreateCommand(IEnumerable args)
- {
- var sdkCommandSpec = new SdkCommandSpec()
- {
- FileName = _processName,
- Arguments = args.ToList(),
- WorkingDirectory = WorkingDirectory
- };
- return sdkCommandSpec;
- }
- }
-}
-#endif
diff --git a/test/Microsoft.TemplateEngine.TestHelper/Commands/DotnetCommand.cs b/test/Microsoft.TemplateEngine.TestHelper/Commands/DotnetCommand.cs
deleted file mode 100644
index 5a3cb8b80e3..00000000000
--- a/test/Microsoft.TemplateEngine.TestHelper/Commands/DotnetCommand.cs
+++ /dev/null
@@ -1,39 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-#if NET
-using System.Collections.Generic;
-using System.Linq;
-using Xunit.Abstractions;
-
-namespace Microsoft.TemplateEngine.TestHelper.Commands
-{
- public class DotnetCommand : TestCommand
- {
- public DotnetCommand(ITestOutputHelper log, string commandName, params string[] args) : base(log)
- {
- Arguments.Add(commandName);
- Arguments.AddRange(args);
- }
-
- public DotnetCommand WithCustomHive(string? path = null)
- {
- path ??= TestUtils.CreateTemporaryFolder();
- Arguments.Add("--debug:custom-hive");
- Arguments.Add(path);
- return this;
- }
-
- protected override SdkCommandSpec CreateCommand(IEnumerable args)
- {
- var sdkCommandSpec = new SdkCommandSpec()
- {
- FileName = "dotnet",
- Arguments = args.ToList(),
- WorkingDirectory = WorkingDirectory
- };
- return sdkCommandSpec;
- }
- }
-}
-#endif
diff --git a/test/Microsoft.TemplateEngine.TestHelper/Commands/SdkCommandSpec.cs b/test/Microsoft.TemplateEngine.TestHelper/Commands/SdkCommandSpec.cs
deleted file mode 100644
index 944ba202ae4..00000000000
--- a/test/Microsoft.TemplateEngine.TestHelper/Commands/SdkCommandSpec.cs
+++ /dev/null
@@ -1,67 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-#if NET
-
-using System.Collections.Generic;
-using System.Diagnostics;
-using Microsoft.DotNet.Cli.Utils;
-
-namespace Microsoft.TemplateEngine.TestHelper.Commands
-{
- public class SdkCommandSpec
- {
- public string? FileName { get; set; }
-
- public List Arguments { get; set; } = new List();
-
- public Dictionary Environment { get; set; } = new Dictionary();
-
- public List EnvironmentToRemove { get; } = new List();
-
- public string? WorkingDirectory { get; set; }
-
- public Command ToCommand()
- {
- var process = new Process()
- {
- StartInfo = ToProcessStartInfo()
- };
- var ret = new Command(process, trimtrailingNewlines: true);
- return ret;
- }
-
- public ProcessStartInfo ToProcessStartInfo()
- {
- var ret = new ProcessStartInfo
- {
- FileName = FileName,
- Arguments = EscapeArgs(),
- UseShellExecute = false
- };
- foreach (var kvp in Environment)
- {
- ret.Environment[kvp.Key] = kvp.Value;
- }
- foreach (var envToRemove in EnvironmentToRemove)
- {
- ret.Environment.Remove(envToRemove);
- }
-
- if (WorkingDirectory != null)
- {
- ret.WorkingDirectory = WorkingDirectory;
- }
-
- return ret;
- }
-
- private string EscapeArgs()
- {
- // Note: this doesn't handle invoking .cmd files via "cmd /c" on Windows, which probably won't be necessary here
- // If it is, refer to the code in WindowsExePreferredCommandSpecFactory in Microsoft.DotNet.Cli.Utils
- return ArgumentEscaper.EscapeAndConcatenateArgArrayForProcessStart(Arguments);
- }
- }
-}
-#endif
diff --git a/test/Microsoft.TemplateEngine.TestHelper/Commands/TestCommand.cs b/test/Microsoft.TemplateEngine.TestHelper/Commands/TestCommand.cs
deleted file mode 100644
index 8660dfa272e..00000000000
--- a/test/Microsoft.TemplateEngine.TestHelper/Commands/TestCommand.cs
+++ /dev/null
@@ -1,125 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-#if NET
-
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Linq;
-using Microsoft.DotNet.Cli.Utils;
-using Xunit.Abstractions;
-
-namespace Microsoft.TemplateEngine.TestHelper.Commands
-{
- public abstract class TestCommand
- {
- protected TestCommand(ITestOutputHelper log)
- {
- Log = log;
- }
-
- public ITestOutputHelper Log { get; }
-
- public string? WorkingDirectory { get; set; }
-
- public List Arguments { get; set; } = new List();
-
- public List EnvironmentToRemove { get; } = new List();
-
- // These only work via Execute(), not when using GetProcessStartInfo()
- public Action? CommandOutputHandler { get; set; }
-
- public Action? ProcessStartedHandler { get; set; }
-
- protected Dictionary Environment { get; set; } = new Dictionary();
-
- public TestCommand WithEnvironmentVariable(string name, string value)
- {
- Environment[name] = value;
- return this;
- }
-
- public TestCommand WithWorkingDirectory(string workingDirectory)
- {
- WorkingDirectory = workingDirectory;
- return this;
- }
-
- public ProcessStartInfo GetProcessStartInfo(params string[] args)
- {
- var commandSpec = CreateCommandSpec(args);
-
- var psi = commandSpec.ToProcessStartInfo();
-
- return psi;
- }
-
- public CommandResult Execute(params string[] args)
- {
- IEnumerable enumerableArgs = args;
- return Execute(enumerableArgs);
- }
-
- public virtual CommandResult Execute(IEnumerable args)
- {
- var command = CreateCommandSpec(args)
- .ToCommand()
- .CaptureStdOut()
- .CaptureStdErr();
-
- if (CommandOutputHandler != null)
- {
- command.OnOutputLine(CommandOutputHandler);
- }
-
- var result = ((Command)command).Execute(ProcessStartedHandler);
-
- Log.WriteLine($"> {result.StartInfo.FileName} {result.StartInfo.Arguments}");
- Log.WriteLine(result.StdOut);
-
- if (!string.IsNullOrEmpty(result.StdErr))
- {
- Log.WriteLine(string.Empty);
- Log.WriteLine("StdErr:");
- Log.WriteLine(result.StdErr);
- }
-
- if (result.ExitCode != 0)
- {
- Log.WriteLine($"Exit Code: {result.ExitCode}");
- }
-
- return result;
- }
-
- protected abstract SdkCommandSpec CreateCommand(IEnumerable args);
-
- private SdkCommandSpec CreateCommandSpec(IEnumerable args)
- {
- var commandSpec = CreateCommand(args);
- foreach (var kvp in Environment)
- {
- commandSpec.Environment[kvp.Key] = kvp.Value;
- }
-
- foreach (var envToRemove in EnvironmentToRemove)
- {
- commandSpec.EnvironmentToRemove.Add(envToRemove);
- }
-
- if (WorkingDirectory != null)
- {
- commandSpec.WorkingDirectory = WorkingDirectory;
- }
-
- if (Arguments.Any())
- {
- commandSpec.Arguments = Arguments.Concat(commandSpec.Arguments).ToList();
- }
-
- return commandSpec;
- }
- }
-}
-#endif
diff --git a/test/Microsoft.TemplateEngine.TestHelper/Microsoft.TemplateEngine.TestHelper.csproj b/test/Microsoft.TemplateEngine.TestHelper/Microsoft.TemplateEngine.TestHelper.csproj
index aa9d5ecdf7f..e2619614457 100644
--- a/test/Microsoft.TemplateEngine.TestHelper/Microsoft.TemplateEngine.TestHelper.csproj
+++ b/test/Microsoft.TemplateEngine.TestHelper/Microsoft.TemplateEngine.TestHelper.csproj
@@ -6,6 +6,8 @@
truefalsefalse
+ true
+ true
@@ -22,9 +24,4 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/test/Microsoft.TemplateEngine.TestHelper/PublicAPI.Shipped.txt b/test/Microsoft.TemplateEngine.TestHelper/PublicAPI.Shipped.txt
new file mode 100644
index 00000000000..91b0e1a43b9
--- /dev/null
+++ b/test/Microsoft.TemplateEngine.TestHelper/PublicAPI.Shipped.txt
@@ -0,0 +1 @@
+#nullable enable
\ No newline at end of file
diff --git a/test/Microsoft.TemplateEngine.TestHelper/PublicAPI.Unshipped.txt b/test/Microsoft.TemplateEngine.TestHelper/PublicAPI.Unshipped.txt
new file mode 100644
index 00000000000..9d2eaf925cf
--- /dev/null
+++ b/test/Microsoft.TemplateEngine.TestHelper/PublicAPI.Unshipped.txt
@@ -0,0 +1,103 @@
+Microsoft.TemplateEngine.TestHelper.AssemblyComponentCatalog
+Microsoft.TemplateEngine.TestHelper.AssemblyComponentCatalog.AssemblyComponentCatalog(System.Collections.Generic.IReadOnlyList! assemblies) -> void
+Microsoft.TemplateEngine.TestHelper.AssemblyComponentCatalog.Count.get -> int
+Microsoft.TemplateEngine.TestHelper.AssemblyComponentCatalog.GetEnumerator() -> System.Collections.Generic.IEnumerator<(System.Type!, Microsoft.TemplateEngine.Abstractions.IIdentifiedComponent!)>!
+Microsoft.TemplateEngine.TestHelper.AssemblyComponentCatalog.this[int index].get -> (System.Type!, Microsoft.TemplateEngine.Abstractions.IIdentifiedComponent!)
+Microsoft.TemplateEngine.TestHelper.BuiltInTemplatePackagesProviderFactory
+Microsoft.TemplateEngine.TestHelper.BuiltInTemplatePackagesProviderFactory.BuiltInTemplatePackagesProviderFactory(params string![]! pathsToProbe) -> void
+Microsoft.TemplateEngine.TestHelper.BuiltInTemplatePackagesProviderFactory.CreateProvider(Microsoft.TemplateEngine.Abstractions.IEngineEnvironmentSettings! settings) -> Microsoft.TemplateEngine.Abstractions.TemplatePackage.ITemplatePackageProvider!
+Microsoft.TemplateEngine.TestHelper.BuiltInTemplatePackagesProviderFactory.DisplayName.get -> string!
+Microsoft.TemplateEngine.TestHelper.BuiltInTemplatePackagesProviderFactory.Id.get -> System.Guid
+Microsoft.TemplateEngine.TestHelper.EnvironmentSettingsHelper
+Microsoft.TemplateEngine.TestHelper.EnvironmentSettingsHelper.CreateEnvironment(string? locale = null, bool virtualize = false, string! hostIdentifier = "", bool loadDefaultGenerator = true, Microsoft.TemplateEngine.Abstractions.IEnvironment? environment = null, System.Collections.Generic.IReadOnlyList<(System.Type!, Microsoft.TemplateEngine.Abstractions.IIdentifiedComponent!)>? additionalComponents = null, System.Collections.Generic.IEnumerable? addLoggerProviders = null) -> Microsoft.TemplateEngine.Abstractions.IEngineEnvironmentSettings!
+Microsoft.TemplateEngine.TestHelper.EnvironmentSettingsHelper.CreateTemporaryFolder(string! name = "") -> string!
+Microsoft.TemplateEngine.TestHelper.EnvironmentSettingsHelper.Dispose() -> void
+Microsoft.TemplateEngine.TestHelper.EnvironmentSettingsHelper.EnvironmentSettingsHelper(Xunit.Abstractions.IMessageSink! messageSink) -> void
+Microsoft.TemplateEngine.TestHelper.InMemoryLoggerProvider
+Microsoft.TemplateEngine.TestHelper.InMemoryLoggerProvider.CreateLogger(string! categoryName) -> Microsoft.Extensions.Logging.ILogger!
+Microsoft.TemplateEngine.TestHelper.InMemoryLoggerProvider.Dispose() -> void
+Microsoft.TemplateEngine.TestHelper.InMemoryLoggerProvider.InMemoryLoggerProvider(System.Collections.Generic.List<(Microsoft.Extensions.Logging.LogLevel, string!)>! messagesCollection) -> void
+Microsoft.TemplateEngine.TestHelper.LongRunningConstraintFactory
+Microsoft.TemplateEngine.TestHelper.LongRunningConstraintFactory.CreateTemplateConstraintAsync(Microsoft.TemplateEngine.Abstractions.IEngineEnvironmentSettings! environmentSettings, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task!
+Microsoft.TemplateEngine.TestHelper.LongRunningConstraintFactory.Id.get -> System.Guid
+Microsoft.TemplateEngine.TestHelper.LongRunningConstraintFactory.LongRunningConstraintFactory(string! type, int msDelay) -> void
+Microsoft.TemplateEngine.TestHelper.LongRunningConstraintFactory.Type.get -> string!
+Microsoft.TemplateEngine.TestHelper.MonitoredFileSystem
+Microsoft.TemplateEngine.TestHelper.MonitoredFileSystem.CreateDirectory(string! path) -> void
+Microsoft.TemplateEngine.TestHelper.MonitoredFileSystem.CreateFile(string! path) -> System.IO.Stream!
+Microsoft.TemplateEngine.TestHelper.MonitoredFileSystem.DirectoriesScanned.get -> System.Collections.Generic.IReadOnlyList!
+Microsoft.TemplateEngine.TestHelper.MonitoredFileSystem.DirectoryDelete(string! path, bool recursive) -> void
+Microsoft.TemplateEngine.TestHelper.MonitoredFileSystem.DirectoryExists(string! directory) -> bool
+Microsoft.TemplateEngine.TestHelper.MonitoredFileSystem.DirectoryScanParameters
+Microsoft.TemplateEngine.TestHelper.MonitoredFileSystem.DirectoryScanParameters.DirectoryName.get -> string!
+Microsoft.TemplateEngine.TestHelper.MonitoredFileSystem.DirectoryScanParameters.DirectoryScanParameters(string! directoryName, string! pattern, System.IO.SearchOption searchOption) -> void
+Microsoft.TemplateEngine.TestHelper.MonitoredFileSystem.DirectoryScanParameters.Pattern.get -> string!
+Microsoft.TemplateEngine.TestHelper.MonitoredFileSystem.DirectoryScanParameters.SearchOption.get -> System.IO.SearchOption
+Microsoft.TemplateEngine.TestHelper.MonitoredFileSystem.EnumerateDirectories(string! path, string! pattern, System.IO.SearchOption searchOption) -> System.Collections.Generic.IEnumerable!
+Microsoft.TemplateEngine.TestHelper.MonitoredFileSystem.EnumerateFiles(string! path, string! pattern, System.IO.SearchOption searchOption) -> System.Collections.Generic.IEnumerable!
+Microsoft.TemplateEngine.TestHelper.MonitoredFileSystem.EnumerateFileSystemEntries(string! directoryName, string! pattern, System.IO.SearchOption searchOption) -> System.Collections.Generic.IEnumerable!
+Microsoft.TemplateEngine.TestHelper.MonitoredFileSystem.FileCopy(string! sourcePath, string! targetPath, bool overwrite) -> void
+Microsoft.TemplateEngine.TestHelper.MonitoredFileSystem.FileDelete(string! path) -> void
+Microsoft.TemplateEngine.TestHelper.MonitoredFileSystem.FileExists(string! file) -> bool
+Microsoft.TemplateEngine.TestHelper.MonitoredFileSystem.FilesOpened.get -> System.Collections.Generic.IEnumerable!
+Microsoft.TemplateEngine.TestHelper.MonitoredFileSystem.FilesWatched.get -> System.Collections.Generic.IEnumerable!
+Microsoft.TemplateEngine.TestHelper.MonitoredFileSystem.GetCurrentDirectory() -> string!
+Microsoft.TemplateEngine.TestHelper.MonitoredFileSystem.GetFileAttributes(string! file) -> System.IO.FileAttributes
+Microsoft.TemplateEngine.TestHelper.MonitoredFileSystem.GetLastWriteTimeUtc(string! file) -> System.DateTime
+Microsoft.TemplateEngine.TestHelper.MonitoredFileSystem.MonitoredFileSystem(Microsoft.TemplateEngine.Abstractions.PhysicalFileSystem.IPhysicalFileSystem! baseFileSystem) -> void
+Microsoft.TemplateEngine.TestHelper.MonitoredFileSystem.OpenRead(string! path) -> System.IO.Stream!
+Microsoft.TemplateEngine.TestHelper.MonitoredFileSystem.PathRelativeTo(string! target, string! relativeTo) -> string!
+Microsoft.TemplateEngine.TestHelper.MonitoredFileSystem.ReadAllBytes(string! path) -> byte[]!
+Microsoft.TemplateEngine.TestHelper.MonitoredFileSystem.ReadAllText(string! path) -> string!
+Microsoft.TemplateEngine.TestHelper.MonitoredFileSystem.Reset() -> void
+Microsoft.TemplateEngine.TestHelper.MonitoredFileSystem.SetFileAttributes(string! file, System.IO.FileAttributes attributes) -> void
+Microsoft.TemplateEngine.TestHelper.MonitoredFileSystem.SetLastWriteTimeUtc(string! file, System.DateTime lastWriteTimeUtc) -> void
+Microsoft.TemplateEngine.TestHelper.MonitoredFileSystem.WatchFileChanges(string! filepath, System.IO.FileSystemEventHandler! fileChanged) -> System.IDisposable!
+Microsoft.TemplateEngine.TestHelper.MonitoredFileSystem.WriteAllText(string! path, string! value) -> void
+Microsoft.TemplateEngine.TestHelper.PackageManager
+Microsoft.TemplateEngine.TestHelper.PackageManager.Dispose() -> void
+Microsoft.TemplateEngine.TestHelper.PackageManager.GetNuGetPackage(string! templatePackName, string? version = null, NuGet.Versioning.NuGetVersion? minimumVersion = null, NuGet.Common.ILogger? logger = null) -> System.Threading.Tasks.Task!
+Microsoft.TemplateEngine.TestHelper.PackageManager.PackageManager() -> void
+Microsoft.TemplateEngine.TestHelper.PackageManager.PackNuGetPackage(string! projectPath, NuGet.Common.ILogger? logger = null) -> string!
+Microsoft.TemplateEngine.TestHelper.SharedTestOutputHelper
+Microsoft.TemplateEngine.TestHelper.SharedTestOutputHelper.SharedTestOutputHelper(Xunit.Abstractions.IMessageSink! sink) -> void
+Microsoft.TemplateEngine.TestHelper.SharedTestOutputHelper.WriteLine(string! format, params object![]! args) -> void
+Microsoft.TemplateEngine.TestHelper.SharedTestOutputHelper.WriteLine(string! message) -> void
+Microsoft.TemplateEngine.TestHelper.StringExtensions
+Microsoft.TemplateEngine.TestHelper.TestConstraintFactory
+Microsoft.TemplateEngine.TestHelper.TestConstraintFactory.CreateTemplateConstraintAsync(Microsoft.TemplateEngine.Abstractions.IEngineEnvironmentSettings! environmentSettings, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task!
+Microsoft.TemplateEngine.TestHelper.TestConstraintFactory.Id.get -> System.Guid
+Microsoft.TemplateEngine.TestHelper.TestConstraintFactory.TestConstraintFactory(string! type) -> void
+Microsoft.TemplateEngine.TestHelper.TestConstraintFactory.Type.get -> string!
+Microsoft.TemplateEngine.TestHelper.TestFileSystemUtils
+Microsoft.TemplateEngine.TestHelper.TestHost
+Microsoft.TemplateEngine.TestHelper.TestHost.Dispose() -> void
+Microsoft.TemplateEngine.TestHelper.TestHost.HostParamDefaults.get -> System.Collections.Generic.Dictionary!
+Microsoft.TemplateEngine.TestHelper.TestHost.HostParamDefaults.set -> void
+Microsoft.TemplateEngine.TestHelper.TestLoggerFactory
+Microsoft.TemplateEngine.TestHelper.TestLoggerFactory.AddProvider(Microsoft.Extensions.Logging.ILoggerProvider! provider) -> void
+Microsoft.TemplateEngine.TestHelper.TestLoggerFactory.CreateLogger() -> Microsoft.Extensions.Logging.ILogger!
+Microsoft.TemplateEngine.TestHelper.TestLoggerFactory.CreateLogger(string! categoryName) -> Microsoft.Extensions.Logging.ILogger!
+Microsoft.TemplateEngine.TestHelper.TestLoggerFactory.Dispose() -> void
+Microsoft.TemplateEngine.TestHelper.TestLoggerFactory.TestLoggerFactory(Xunit.Abstractions.IMessageSink? messageSink = null) -> void
+Microsoft.TemplateEngine.TestHelper.TestUtils
+Microsoft.TemplateEngine.TestHelper.XunitLoggerProvider
+Microsoft.TemplateEngine.TestHelper.XunitLoggerProvider.CreateLogger(string! categoryName) -> Microsoft.Extensions.Logging.ILogger!
+Microsoft.TemplateEngine.TestHelper.XunitLoggerProvider.Dispose() -> void
+Microsoft.TemplateEngine.TestHelper.XunitLoggerProvider.XunitLoggerProvider(Xunit.Abstractions.ITestOutputHelper! output) -> void
+Microsoft.TemplateEngine.TestHelper.XunitLoggerProvider.XunitLoggerProvider(Xunit.Abstractions.ITestOutputHelper! output, Microsoft.Extensions.Logging.LogLevel minLevel) -> void
+Microsoft.TemplateEngine.TestHelper.XunitLoggerProvider.XunitLoggerProvider(Xunit.Abstractions.ITestOutputHelper! output, Microsoft.Extensions.Logging.LogLevel minLevel, System.DateTimeOffset? logStart) -> void
+static Microsoft.TemplateEngine.TestHelper.BuiltInTemplatePackagesProviderFactory.GetComponents(params string![]! pathsToProbe) -> System.Collections.Generic.List<(System.Type!, Microsoft.TemplateEngine.Abstractions.IIdentifiedComponent!)>!
+static Microsoft.TemplateEngine.TestHelper.StringExtensions.UnixifyLineBreaks(this string! input) -> string!
+static Microsoft.TemplateEngine.TestHelper.TestFileSystemUtils.GetTempVirtualizedPath(this Microsoft.TemplateEngine.Abstractions.IEngineEnvironmentSettings! environmentSettings) -> string!
+static Microsoft.TemplateEngine.TestHelper.TestFileSystemUtils.MountPath(this Microsoft.TemplateEngine.Abstractions.IEngineEnvironmentSettings! environmentSettings, string! sourceBasePath) -> Microsoft.TemplateEngine.Abstractions.Mount.IMountPoint!
+static Microsoft.TemplateEngine.TestHelper.TestFileSystemUtils.WriteFile(this Microsoft.TemplateEngine.Abstractions.IEngineEnvironmentSettings! environmentSettings, string! filePath, string? fileContent) -> void
+static Microsoft.TemplateEngine.TestHelper.TestFileSystemUtils.WriteTemplateSource(this Microsoft.TemplateEngine.Abstractions.IEngineEnvironmentSettings! environmentSettings, string! sourceBasePath, System.Collections.Generic.IDictionary! templateSourceFileNamesWithContent) -> void
+static Microsoft.TemplateEngine.TestHelper.TestHost.GetVirtualHost(string! hostIdentifier = "", Microsoft.TemplateEngine.Abstractions.IEnvironment? environment = null, System.Collections.Generic.IReadOnlyList<(System.Type!, Microsoft.TemplateEngine.Abstractions.IIdentifiedComponent!)>? additionalComponents = null, System.Collections.Generic.IReadOnlyDictionary? defaultParameters = null) -> Microsoft.TemplateEngine.Abstractions.ITemplateEngineHost!
+static Microsoft.TemplateEngine.TestHelper.TestUtils.AttemptSearch(int count, System.TimeSpan interval, System.Func!>! execute) -> System.Threading.Tasks.Task!
+static Microsoft.TemplateEngine.TestHelper.TestUtils.CompareFiles(string! file1, string! file2) -> bool
+static Microsoft.TemplateEngine.TestHelper.TestUtils.CreateTemporaryFolder(string! name = "") -> string!
+static Microsoft.TemplateEngine.TestHelper.TestUtils.DirectoryCopy(string! sourceDirName, string! destDirName, bool copySubDirs) -> void
+static Microsoft.TemplateEngine.TestHelper.TestUtils.SetupNuGetConfigForPackagesLocation(string! projectDirectory, string! packagesLocation) -> void
+static readonly Microsoft.TemplateEngine.TestHelper.BuiltInTemplatePackagesProviderFactory.FactoryId -> System.Guid
+static readonly Microsoft.TemplateEngine.TestHelper.TestFileSystemUtils.DefaultConfigRelativePath -> string!
\ No newline at end of file
diff --git a/test/Microsoft.TemplateEngine.TestHelper/XunitLoggerProvider.cs b/test/Microsoft.TemplateEngine.TestHelper/XunitLoggerProvider.cs
index 79c50a82eec..310c3ae1b24 100644
--- a/test/Microsoft.TemplateEngine.TestHelper/XunitLoggerProvider.cs
+++ b/test/Microsoft.TemplateEngine.TestHelper/XunitLoggerProvider.cs
@@ -9,8 +9,11 @@
namespace Microsoft.TemplateEngine.TestHelper
{
+ ///
+ /// Microsoft.Extensions.Logging which logs to XUnit test output.
+ ///
///
- /// https://github.com/dotnet/runtime/blob/main/src/libraries/Microsoft.Extensions.Logging/tests/DI.Common/Common/src/XunitLoggerProvider.cs
+ /// See https://github.com/dotnet/runtime/blob/main/src/libraries/Microsoft.Extensions.Logging/tests/DI.Common/Common/src/XunitLoggerProvider.cs for more details.
///
public class XunitLoggerProvider : ILoggerProvider
{
diff --git a/test/Microsoft.TemplateSearch.TemplateDiscovery.IntegrationTests/Microsoft.TemplateSearch.TemplateDiscovery.IntegrationTests.csproj b/test/Microsoft.TemplateSearch.TemplateDiscovery.IntegrationTests/Microsoft.TemplateSearch.TemplateDiscovery.IntegrationTests.csproj
index e4544baa8bd..1786d0138c2 100644
--- a/test/Microsoft.TemplateSearch.TemplateDiscovery.IntegrationTests/Microsoft.TemplateSearch.TemplateDiscovery.IntegrationTests.csproj
+++ b/test/Microsoft.TemplateSearch.TemplateDiscovery.IntegrationTests/Microsoft.TemplateSearch.TemplateDiscovery.IntegrationTests.csproj
@@ -7,7 +7,7 @@
-
+
diff --git a/test/Microsoft.TemplateSearch.TemplateDiscovery.IntegrationTests/TemplateDiscoveryTests.cs b/test/Microsoft.TemplateSearch.TemplateDiscovery.IntegrationTests/TemplateDiscoveryTests.cs
index 2f84e4532d5..37a79cf6804 100644
--- a/test/Microsoft.TemplateSearch.TemplateDiscovery.IntegrationTests/TemplateDiscoveryTests.cs
+++ b/test/Microsoft.TemplateSearch.TemplateDiscovery.IntegrationTests/TemplateDiscoveryTests.cs
@@ -1,8 +1,8 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
+using Microsoft.TemplateEngine.CommandUtils;
using Microsoft.TemplateEngine.TestHelper;
-using Microsoft.TemplateEngine.TestHelper.Commands;
using Microsoft.TemplateEngine.Tests;
using Newtonsoft.Json.Linq;
using Xunit;
@@ -49,17 +49,19 @@ public async Task CanRunDiscoveryTool()
foreach (var cacheFilePath in cacheFilePaths)
{
Assert.True(File.Exists(cacheFilePath));
- new DotnetCommand(_log, "new")
- .WithCustomHive(settingsPath)
- .WithEnvironmentVariable("DOTNET_NEW_SEARCH_FILE_OVERRIDE", cacheFilePath)
- .WithEnvironmentVariable("DOTNET_CLI_CONTEXT_VERBOSE", "true")
- .Execute()
- .Should()
- .ExitWith(0)
- .And.NotHaveStdErr();
+ new DotnetNewCommand(_log)
+ .WithCustomHive(settingsPath)
+ .WithoutTelemetry()
+ .WithEnvironmentVariable("DOTNET_NEW_SEARCH_FILE_OVERRIDE", cacheFilePath)
+ .WithEnvironmentVariable("DOTNET_CLI_CONTEXT_VERBOSE", "true")
+ .Execute()
+ .Should()
+ .ExitWith(0)
+ .And.NotHaveStdErr();
- new DotnetCommand(_log, "new", "func", "--search")
+ new DotnetNewCommand(_log, "func", "--search")
.WithCustomHive(settingsPath)
+ .WithoutTelemetry()
.WithEnvironmentVariable("DOTNET_NEW_SEARCH_FILE_OVERRIDE", cacheFilePath)
.WithEnvironmentVariable("DOTNET_CLI_CONTEXT_VERBOSE", "true")
.Execute()
@@ -69,8 +71,9 @@ public async Task CanRunDiscoveryTool()
.And.NotHaveStdOutContaining("Exception")
.And.HaveStdOutContaining("Microsoft.Azure.WebJobs.ProjectTemplates");
- new DotnetCommand(_log, "new")
+ new DotnetNewCommand(_log)
.WithCustomHive(settingsPath)
+ .WithoutTelemetry()
.WithEnvironmentVariable("DOTNET_NEW_SEARCH_FILE_OVERRIDE", cacheFilePath)
.WithEnvironmentVariable("DOTNET_CLI_CONTEXT_VERBOSE", "true")
.Execute()
@@ -78,8 +81,9 @@ public async Task CanRunDiscoveryTool()
.ExitWith(0)
.And.NotHaveStdErr();
- new DotnetCommand(_log, "new", "func", "--search")
+ new DotnetNewCommand(_log, "func", "--search")
.WithCustomHive(settingsPath)
+ .WithoutTelemetry()
.WithEnvironmentVariable("DOTNET_NEW_SEARCH_FILE_OVERRIDE", cacheFilePath)
.WithEnvironmentVariable("DOTNET_CLI_CONTEXT_VERBOSE", "true")
.Execute()
@@ -519,8 +523,9 @@ private void CheckTemplateOptionsSearch(IEnumerable cacheFilePaths, stri
foreach (var cacheFilePath in cacheFilePaths)
{
Assert.True(File.Exists(cacheFilePath));
- new DotnetCommand(_log, "new")
+ new DotnetNewCommand(_log)
.WithCustomHive(settingsPath)
+ .WithoutTelemetry()
.WithEnvironmentVariable("DOTNET_NEW_SEARCH_FILE_OVERRIDE", cacheFilePath)
.WithEnvironmentVariable("DOTNET_CLI_CONTEXT_VERBOSE", "true")
.Execute()
@@ -528,8 +533,9 @@ private void CheckTemplateOptionsSearch(IEnumerable cacheFilePaths, stri
.ExitWith(0)
.And.NotHaveStdErr();
- new DotnetCommand(_log, "new", "CliHostFile", "--search")
+ new DotnetNewCommand(_log, "CliHostFile", "--search")
.WithCustomHive(settingsPath)
+ .WithoutTelemetry()
.WithEnvironmentVariable("DOTNET_NEW_SEARCH_FILE_OVERRIDE", cacheFilePath)
.WithEnvironmentVariable("DOTNET_CLI_CONTEXT_VERBOSE", "true")
.Execute()
@@ -540,8 +546,9 @@ private void CheckTemplateOptionsSearch(IEnumerable cacheFilePaths, stri
.And.HaveStdOutContaining("TestAssets.TemplateWithCliHostFile")
.And.HaveStdOutContaining("Microsoft.TemplateEngine.TestTemplates");
- new DotnetCommand(_log, "new", "--search", "--param")
+ new DotnetNewCommand(_log, "--search", "--param")
.WithCustomHive(settingsPath)
+ .WithoutTelemetry()
.WithEnvironmentVariable("DOTNET_NEW_SEARCH_FILE_OVERRIDE", cacheFilePath)
.WithEnvironmentVariable("DOTNET_CLI_CONTEXT_VERBOSE", "true")
.Execute()
@@ -552,8 +559,9 @@ private void CheckTemplateOptionsSearch(IEnumerable cacheFilePaths, stri
.And.HaveStdOutContaining("TestAssets.TemplateWithCliHostFile")
.And.HaveStdOutContaining("Microsoft.TemplateEngine.TestTemplates");
- new DotnetCommand(_log, "new", "--search", "-p")
+ new DotnetNewCommand(_log, "--search", "-p")
.WithCustomHive(settingsPath)
+ .WithoutTelemetry()
.WithEnvironmentVariable("DOTNET_NEW_SEARCH_FILE_OVERRIDE", cacheFilePath)
.WithEnvironmentVariable("DOTNET_CLI_CONTEXT_VERBOSE", "true")
.Execute()
@@ -564,8 +572,9 @@ private void CheckTemplateOptionsSearch(IEnumerable cacheFilePaths, stri
.And.HaveStdOutContaining("TestAssets.TemplateWithCliHostFile")
.And.HaveStdOutContaining("Microsoft.TemplateEngine.TestTemplates");
- new DotnetCommand(_log, "new", "--search", "--test-param")
+ new DotnetNewCommand(_log, "--search", "--test-param")
.WithCustomHive(settingsPath)
+ .WithoutTelemetry()
.WithEnvironmentVariable("DOTNET_NEW_SEARCH_FILE_OVERRIDE", cacheFilePath)
.WithEnvironmentVariable("DOTNET_CLI_CONTEXT_VERBOSE", "true")
.Execute()
diff --git a/tools/Directory.Build.props b/tools/Directory.Build.props
new file mode 100644
index 00000000000..f330554d5e6
--- /dev/null
+++ b/tools/Directory.Build.props
@@ -0,0 +1,8 @@
+
+
+
+
+
+ true
+
+
diff --git a/src/Microsoft.TemplateEngine.Authoring.CLI/Commands/ExecutableCommand.cs b/tools/Microsoft.TemplateEngine.Authoring.CLI/Commands/ExecutableCommand.cs
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.CLI/Commands/ExecutableCommand.cs
rename to tools/Microsoft.TemplateEngine.Authoring.CLI/Commands/ExecutableCommand.cs
diff --git a/src/Microsoft.TemplateEngine.Authoring.CLI/Commands/Verify/VerifyCommand.cs b/tools/Microsoft.TemplateEngine.Authoring.CLI/Commands/Verify/VerifyCommand.cs
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.CLI/Commands/Verify/VerifyCommand.cs
rename to tools/Microsoft.TemplateEngine.Authoring.CLI/Commands/Verify/VerifyCommand.cs
diff --git a/src/Microsoft.TemplateEngine.Authoring.CLI/Commands/Verify/VerifyCommandArgs.cs b/tools/Microsoft.TemplateEngine.Authoring.CLI/Commands/Verify/VerifyCommandArgs.cs
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.CLI/Commands/Verify/VerifyCommandArgs.cs
rename to tools/Microsoft.TemplateEngine.Authoring.CLI/Commands/Verify/VerifyCommandArgs.cs
diff --git a/src/Microsoft.TemplateEngine.Authoring.CLI/Commands/localize/LocalizeCommand.cs b/tools/Microsoft.TemplateEngine.Authoring.CLI/Commands/localize/LocalizeCommand.cs
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.CLI/Commands/localize/LocalizeCommand.cs
rename to tools/Microsoft.TemplateEngine.Authoring.CLI/Commands/localize/LocalizeCommand.cs
diff --git a/src/Microsoft.TemplateEngine.Authoring.CLI/Commands/localize/export/ExportCommand.cs b/tools/Microsoft.TemplateEngine.Authoring.CLI/Commands/localize/export/ExportCommand.cs
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.CLI/Commands/localize/export/ExportCommand.cs
rename to tools/Microsoft.TemplateEngine.Authoring.CLI/Commands/localize/export/ExportCommand.cs
diff --git a/src/Microsoft.TemplateEngine.Authoring.CLI/Commands/localize/export/ExportCommandArgs.cs b/tools/Microsoft.TemplateEngine.Authoring.CLI/Commands/localize/export/ExportCommandArgs.cs
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.CLI/Commands/localize/export/ExportCommandArgs.cs
rename to tools/Microsoft.TemplateEngine.Authoring.CLI/Commands/localize/export/ExportCommandArgs.cs
diff --git a/src/Microsoft.TemplateEngine.Authoring.CLI/Globals.cs b/tools/Microsoft.TemplateEngine.Authoring.CLI/Globals.cs
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.CLI/Globals.cs
rename to tools/Microsoft.TemplateEngine.Authoring.CLI/Globals.cs
diff --git a/src/Microsoft.TemplateEngine.Authoring.CLI/LocalizableStrings.Designer.cs b/tools/Microsoft.TemplateEngine.Authoring.CLI/LocalizableStrings.Designer.cs
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.CLI/LocalizableStrings.Designer.cs
rename to tools/Microsoft.TemplateEngine.Authoring.CLI/LocalizableStrings.Designer.cs
diff --git a/src/Microsoft.TemplateEngine.Authoring.CLI/LocalizableStrings.resx b/tools/Microsoft.TemplateEngine.Authoring.CLI/LocalizableStrings.resx
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.CLI/LocalizableStrings.resx
rename to tools/Microsoft.TemplateEngine.Authoring.CLI/LocalizableStrings.resx
diff --git a/src/Microsoft.TemplateEngine.Authoring.CLI/Microsoft.TemplateEngine.Authoring.CLI.csproj b/tools/Microsoft.TemplateEngine.Authoring.CLI/Microsoft.TemplateEngine.Authoring.CLI.csproj
similarity index 82%
rename from src/Microsoft.TemplateEngine.Authoring.CLI/Microsoft.TemplateEngine.Authoring.CLI.csproj
rename to tools/Microsoft.TemplateEngine.Authoring.CLI/Microsoft.TemplateEngine.Authoring.CLI.csproj
index 8250fe767c7..f06b07423fd 100644
--- a/src/Microsoft.TemplateEngine.Authoring.CLI/Microsoft.TemplateEngine.Authoring.CLI.csproj
+++ b/tools/Microsoft.TemplateEngine.Authoring.CLI/Microsoft.TemplateEngine.Authoring.CLI.csproj
@@ -21,8 +21,8 @@
-
-
+
+
diff --git a/src/Microsoft.TemplateEngine.Authoring.CLI/Program.cs b/tools/Microsoft.TemplateEngine.Authoring.CLI/Program.cs
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.CLI/Program.cs
rename to tools/Microsoft.TemplateEngine.Authoring.CLI/Program.cs
diff --git a/src/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.cs.xlf b/tools/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.cs.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.cs.xlf
rename to tools/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.cs.xlf
diff --git a/src/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.de.xlf b/tools/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.de.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.de.xlf
rename to tools/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.de.xlf
diff --git a/src/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.es.xlf b/tools/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.es.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.es.xlf
rename to tools/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.es.xlf
diff --git a/src/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.fr.xlf b/tools/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.fr.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.fr.xlf
rename to tools/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.fr.xlf
diff --git a/src/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.it.xlf b/tools/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.it.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.it.xlf
rename to tools/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.it.xlf
diff --git a/src/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.ja.xlf b/tools/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.ja.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.ja.xlf
rename to tools/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.ja.xlf
diff --git a/src/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.ko.xlf b/tools/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.ko.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.ko.xlf
rename to tools/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.ko.xlf
diff --git a/src/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.pl.xlf b/tools/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.pl.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.pl.xlf
rename to tools/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.pl.xlf
diff --git a/src/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.pt-BR.xlf b/tools/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.pt-BR.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.pt-BR.xlf
rename to tools/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.pt-BR.xlf
diff --git a/src/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.ru.xlf b/tools/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.ru.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.ru.xlf
rename to tools/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.ru.xlf
diff --git a/src/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.tr.xlf b/tools/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.tr.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.tr.xlf
rename to tools/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.tr.xlf
diff --git a/src/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.zh-Hans.xlf b/tools/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.zh-Hans.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.zh-Hans.xlf
rename to tools/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.zh-Hans.xlf
diff --git a/src/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.zh-Hant.xlf b/tools/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.zh-Hant.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.zh-Hant.xlf
rename to tools/Microsoft.TemplateEngine.Authoring.CLI/xlf/LocalizableStrings.zh-Hant.xlf
diff --git a/src/Microsoft.TemplateEngine.Authoring.Tasks/LocalizableStrings.Designer.cs b/tools/Microsoft.TemplateEngine.Authoring.Tasks/LocalizableStrings.Designer.cs
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.Tasks/LocalizableStrings.Designer.cs
rename to tools/Microsoft.TemplateEngine.Authoring.Tasks/LocalizableStrings.Designer.cs
diff --git a/src/Microsoft.TemplateEngine.Authoring.Tasks/LocalizableStrings.resx b/tools/Microsoft.TemplateEngine.Authoring.Tasks/LocalizableStrings.resx
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.Tasks/LocalizableStrings.resx
rename to tools/Microsoft.TemplateEngine.Authoring.Tasks/LocalizableStrings.resx
diff --git a/src/Microsoft.TemplateEngine.Authoring.Tasks/Microsoft.TemplateEngine.Authoring.Tasks.csproj b/tools/Microsoft.TemplateEngine.Authoring.Tasks/Microsoft.TemplateEngine.Authoring.Tasks.csproj
similarity index 94%
rename from src/Microsoft.TemplateEngine.Authoring.Tasks/Microsoft.TemplateEngine.Authoring.Tasks.csproj
rename to tools/Microsoft.TemplateEngine.Authoring.Tasks/Microsoft.TemplateEngine.Authoring.Tasks.csproj
index 907d1c48247..c02b95d0ac0 100644
--- a/src/Microsoft.TemplateEngine.Authoring.Tasks/Microsoft.TemplateEngine.Authoring.Tasks.csproj
+++ b/tools/Microsoft.TemplateEngine.Authoring.Tasks/Microsoft.TemplateEngine.Authoring.Tasks.csproj
@@ -14,7 +14,7 @@
-
+
diff --git a/src/Microsoft.TemplateEngine.Authoring.Tasks/Tasks/LocalizeTemplates.cs b/tools/Microsoft.TemplateEngine.Authoring.Tasks/Tasks/LocalizeTemplates.cs
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.Tasks/Tasks/LocalizeTemplates.cs
rename to tools/Microsoft.TemplateEngine.Authoring.Tasks/Tasks/LocalizeTemplates.cs
diff --git a/src/Microsoft.TemplateEngine.Authoring.Tasks/Utilities/MSBuildLogger.cs b/tools/Microsoft.TemplateEngine.Authoring.Tasks/Utilities/MSBuildLogger.cs
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.Tasks/Utilities/MSBuildLogger.cs
rename to tools/Microsoft.TemplateEngine.Authoring.Tasks/Utilities/MSBuildLogger.cs
diff --git a/src/Microsoft.TemplateEngine.Authoring.Tasks/Utilities/MSBuildLoggerProvider.cs b/tools/Microsoft.TemplateEngine.Authoring.Tasks/Utilities/MSBuildLoggerProvider.cs
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.Tasks/Utilities/MSBuildLoggerProvider.cs
rename to tools/Microsoft.TemplateEngine.Authoring.Tasks/Utilities/MSBuildLoggerProvider.cs
diff --git a/src/Microsoft.TemplateEngine.Authoring.Tasks/build/Microsoft.TemplateEngine.Authoring.Tasks.props b/tools/Microsoft.TemplateEngine.Authoring.Tasks/build/Microsoft.TemplateEngine.Authoring.Tasks.props
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.Tasks/build/Microsoft.TemplateEngine.Authoring.Tasks.props
rename to tools/Microsoft.TemplateEngine.Authoring.Tasks/build/Microsoft.TemplateEngine.Authoring.Tasks.props
diff --git a/src/Microsoft.TemplateEngine.Authoring.Tasks/build/Microsoft.TemplateEngine.Authoring.Tasks.targets b/tools/Microsoft.TemplateEngine.Authoring.Tasks/build/Microsoft.TemplateEngine.Authoring.Tasks.targets
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.Tasks/build/Microsoft.TemplateEngine.Authoring.Tasks.targets
rename to tools/Microsoft.TemplateEngine.Authoring.Tasks/build/Microsoft.TemplateEngine.Authoring.Tasks.targets
diff --git a/src/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.cs.xlf b/tools/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.cs.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.cs.xlf
rename to tools/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.cs.xlf
diff --git a/src/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.de.xlf b/tools/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.de.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.de.xlf
rename to tools/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.de.xlf
diff --git a/src/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.es.xlf b/tools/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.es.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.es.xlf
rename to tools/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.es.xlf
diff --git a/src/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.fr.xlf b/tools/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.fr.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.fr.xlf
rename to tools/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.fr.xlf
diff --git a/src/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.it.xlf b/tools/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.it.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.it.xlf
rename to tools/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.it.xlf
diff --git a/src/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.ja.xlf b/tools/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.ja.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.ja.xlf
rename to tools/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.ja.xlf
diff --git a/src/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.ko.xlf b/tools/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.ko.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.ko.xlf
rename to tools/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.ko.xlf
diff --git a/src/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.pl.xlf b/tools/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.pl.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.pl.xlf
rename to tools/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.pl.xlf
diff --git a/src/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.pt-BR.xlf b/tools/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.pt-BR.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.pt-BR.xlf
rename to tools/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.pt-BR.xlf
diff --git a/src/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.ru.xlf b/tools/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.ru.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.ru.xlf
rename to tools/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.ru.xlf
diff --git a/src/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.tr.xlf b/tools/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.tr.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.tr.xlf
rename to tools/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.tr.xlf
diff --git a/src/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.zh-Hans.xlf b/tools/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.zh-Hans.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.zh-Hans.xlf
rename to tools/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.zh-Hans.xlf
diff --git a/src/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.zh-Hant.xlf b/tools/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.zh-Hant.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.zh-Hant.xlf
rename to tools/Microsoft.TemplateEngine.Authoring.Tasks/xlf/LocalizableStrings.zh-Hant.xlf
diff --git a/src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/Commands/CommandResultData.cs b/tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/Commands/CommandResultData.cs
similarity index 78%
rename from src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/Commands/CommandResultData.cs
rename to tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/Commands/CommandResultData.cs
index e8edebb75b2..364b41f99f1 100644
--- a/src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/Commands/CommandResultData.cs
+++ b/tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/Commands/CommandResultData.cs
@@ -1,7 +1,7 @@
// 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.TemplateEngine.CommandUtils;
namespace Microsoft.TemplateEngine.Authoring.TemplateVerifier.Commands
{
@@ -16,7 +16,7 @@ public CommandResultData(int exitCode, string stdOut, string stdErr, string work
}
public CommandResultData(CommandResult commandResult)
- : this(commandResult.ExitCode, commandResult.StdOut, commandResult.StdErr, commandResult.StartInfo.WorkingDirectory)
+ : this(commandResult.ExitCode, commandResult.StdOut ?? string.Empty, commandResult.StdErr ?? string.Empty, commandResult.StartInfo.WorkingDirectory)
{ }
public int ExitCode { get; }
diff --git a/src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/Commands/CommandRunner.cs b/tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/Commands/CommandRunner.cs
similarity index 90%
rename from src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/Commands/CommandRunner.cs
rename to tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/Commands/CommandRunner.cs
index 8b3ef8d5240..1b820148f22 100644
--- a/src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/Commands/CommandRunner.cs
+++ b/tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/Commands/CommandRunner.cs
@@ -1,6 +1,8 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
+using Microsoft.TemplateEngine.CommandUtils;
+
namespace Microsoft.TemplateEngine.Authoring.TemplateVerifier.Commands
{
internal class CommandRunner : ICommandRunner
diff --git a/src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/Commands/ICommandRunner.cs b/tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/Commands/ICommandRunner.cs
similarity index 87%
rename from src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/Commands/ICommandRunner.cs
rename to tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/Commands/ICommandRunner.cs
index a5344249db7..1787064fded 100644
--- a/src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/Commands/ICommandRunner.cs
+++ b/tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/Commands/ICommandRunner.cs
@@ -1,6 +1,8 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
+using Microsoft.TemplateEngine.CommandUtils;
+
namespace Microsoft.TemplateEngine.Authoring.TemplateVerifier.Commands
{
internal interface ICommandRunner
diff --git a/src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/Globals.cs b/tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/Globals.cs
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/Globals.cs
rename to tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/Globals.cs
diff --git a/src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/IPhysicalFileSystemEx.cs b/tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/IPhysicalFileSystemEx.cs
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/IPhysicalFileSystemEx.cs
rename to tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/IPhysicalFileSystemEx.cs
diff --git a/src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/LocalizableStrings.Designer.cs b/tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/LocalizableStrings.Designer.cs
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/LocalizableStrings.Designer.cs
rename to tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/LocalizableStrings.Designer.cs
diff --git a/src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/LocalizableStrings.resx b/tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/LocalizableStrings.resx
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/LocalizableStrings.resx
rename to tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/LocalizableStrings.resx
diff --git a/src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/Microsoft.TemplateEngine.Authoring.TemplateVerifier.csproj b/tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/Microsoft.TemplateEngine.Authoring.TemplateVerifier.csproj
similarity index 91%
rename from src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/Microsoft.TemplateEngine.Authoring.TemplateVerifier.csproj
rename to tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/Microsoft.TemplateEngine.Authoring.TemplateVerifier.csproj
index ab1d5fe43c7..3fbad26f6e5 100644
--- a/src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/Microsoft.TemplateEngine.Authoring.TemplateVerifier.csproj
+++ b/tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/Microsoft.TemplateEngine.Authoring.TemplateVerifier.csproj
@@ -20,12 +20,12 @@
-
-
+
+
-
+
diff --git a/src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/PhysicalFileSystemEx.cs b/tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/PhysicalFileSystemEx.cs
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/PhysicalFileSystemEx.cs
rename to tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/PhysicalFileSystemEx.cs
diff --git a/src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/PublicAPI.Shipped.txt b/tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/PublicAPI.Shipped.txt
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/PublicAPI.Shipped.txt
rename to tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/PublicAPI.Shipped.txt
diff --git a/src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/PublicAPI.Unshipped.txt b/tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/PublicAPI.Unshipped.txt
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/PublicAPI.Unshipped.txt
rename to tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/PublicAPI.Unshipped.txt
diff --git a/src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/ScrubbersDefinition.cs b/tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/ScrubbersDefinition.cs
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/ScrubbersDefinition.cs
rename to tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/ScrubbersDefinition.cs
diff --git a/src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/TemplateVerificationErrorCode.cs b/tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/TemplateVerificationErrorCode.cs
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/TemplateVerificationErrorCode.cs
rename to tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/TemplateVerificationErrorCode.cs
diff --git a/src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/TemplateVerificationException.cs b/tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/TemplateVerificationException.cs
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/TemplateVerificationException.cs
rename to tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/TemplateVerificationException.cs
diff --git a/src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/TemplateVerifierOptions.cs b/tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/TemplateVerifierOptions.cs
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/TemplateVerifierOptions.cs
rename to tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/TemplateVerifierOptions.cs
diff --git a/src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/UniqueForOption.cs b/tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/UniqueForOption.cs
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/UniqueForOption.cs
rename to tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/UniqueForOption.cs
diff --git a/src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/VerificationEngine.cs b/tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/VerificationEngine.cs
similarity index 99%
rename from src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/VerificationEngine.cs
rename to tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/VerificationEngine.cs
index f6981645691..5a01b810b06 100644
--- a/src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/VerificationEngine.cs
+++ b/tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/VerificationEngine.cs
@@ -8,6 +8,7 @@
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Microsoft.TemplateEngine.Authoring.TemplateVerifier.Commands;
+using Microsoft.TemplateEngine.CommandUtils;
using Microsoft.TemplateEngine.Utils;
namespace Microsoft.TemplateEngine.Authoring.TemplateVerifier
@@ -291,7 +292,7 @@ private static CommandResultData RunDotnetNewCommand(TemplateVerifierOptions opt
{
customHiveLocation ??= Path.Combine(Path.GetTempPath(), Path.GetRandomFileName(), "home");
var installCommand =
- new DotnetCommand(commandLogger, "new", "install", options.TemplatePath)
+ new DotnetNewCommand(commandLogger, "install", options.TemplatePath)
.WithCustomHive(customHiveLocation)
.WithWorkingDirectory(workingDir);
diff --git a/src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/VerifyDirectory.cs b/tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/VerifyDirectory.cs
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/VerifyDirectory.cs
rename to tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/VerifyDirectory.cs
diff --git a/src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.cs.xlf b/tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.cs.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.cs.xlf
rename to tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.cs.xlf
diff --git a/src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.de.xlf b/tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.de.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.de.xlf
rename to tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.de.xlf
diff --git a/src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.es.xlf b/tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.es.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.es.xlf
rename to tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.es.xlf
diff --git a/src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.fr.xlf b/tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.fr.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.fr.xlf
rename to tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.fr.xlf
diff --git a/src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.it.xlf b/tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.it.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.it.xlf
rename to tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.it.xlf
diff --git a/src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.ja.xlf b/tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.ja.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.ja.xlf
rename to tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.ja.xlf
diff --git a/src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.ko.xlf b/tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.ko.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.ko.xlf
rename to tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.ko.xlf
diff --git a/src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.pl.xlf b/tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.pl.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.pl.xlf
rename to tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.pl.xlf
diff --git a/src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.pt-BR.xlf b/tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.pt-BR.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.pt-BR.xlf
rename to tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.pt-BR.xlf
diff --git a/src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.ru.xlf b/tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.ru.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.ru.xlf
rename to tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.ru.xlf
diff --git a/src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.tr.xlf b/tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.tr.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.tr.xlf
rename to tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.tr.xlf
diff --git a/src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.zh-Hans.xlf b/tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.zh-Hans.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.zh-Hans.xlf
rename to tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.zh-Hans.xlf
diff --git a/src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.zh-Hant.xlf b/tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.zh-Hant.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.zh-Hant.xlf
rename to tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/xlf/LocalizableStrings.zh-Hant.xlf
diff --git a/src/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.cs.xlf b/tools/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.cs.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.cs.xlf
rename to tools/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.cs.xlf
diff --git a/src/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.de.xlf b/tools/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.de.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.de.xlf
rename to tools/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.de.xlf
diff --git a/src/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.es.xlf b/tools/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.es.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.es.xlf
rename to tools/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.es.xlf
diff --git a/src/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.fr.xlf b/tools/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.fr.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.fr.xlf
rename to tools/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.fr.xlf
diff --git a/src/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.it.xlf b/tools/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.it.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.it.xlf
rename to tools/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.it.xlf
diff --git a/src/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.ja.xlf b/tools/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.ja.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.ja.xlf
rename to tools/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.ja.xlf
diff --git a/src/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.ko.xlf b/tools/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.ko.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.ko.xlf
rename to tools/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.ko.xlf
diff --git a/src/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.pl.xlf b/tools/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.pl.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.pl.xlf
rename to tools/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.pl.xlf
diff --git a/src/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.pt-BR.xlf b/tools/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.pt-BR.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.pt-BR.xlf
rename to tools/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.pt-BR.xlf
diff --git a/src/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.ru.xlf b/tools/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.ru.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.ru.xlf
rename to tools/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.ru.xlf
diff --git a/src/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.tr.xlf b/tools/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.tr.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.tr.xlf
rename to tools/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.tr.xlf
diff --git a/src/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.zh-Hans.xlf b/tools/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.zh-Hans.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.zh-Hans.xlf
rename to tools/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.zh-Hans.xlf
diff --git a/src/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.zh-Hant.xlf b/tools/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.zh-Hant.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.zh-Hant.xlf
rename to tools/Microsoft.TemplateEngine.Tasks/xlf/LocalizableStrings.zh-Hant.xlf
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer.Core/Exceptions/JsonMemberMissingException.cs b/tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/Exceptions/JsonMemberMissingException.cs
similarity index 100%
rename from src/Microsoft.TemplateEngine.TemplateLocalizer.Core/Exceptions/JsonMemberMissingException.cs
rename to tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/Exceptions/JsonMemberMissingException.cs
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer.Core/Exceptions/LocalizationKeyIsNotUniqueException.cs b/tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/Exceptions/LocalizationKeyIsNotUniqueException.cs
similarity index 100%
rename from src/Microsoft.TemplateEngine.TemplateLocalizer.Core/Exceptions/LocalizationKeyIsNotUniqueException.cs
rename to tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/Exceptions/LocalizationKeyIsNotUniqueException.cs
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer.Core/Exceptions/TemplateLocalizerException.cs b/tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/Exceptions/TemplateLocalizerException.cs
similarity index 100%
rename from src/Microsoft.TemplateEngine.TemplateLocalizer.Core/Exceptions/TemplateLocalizerException.cs
rename to tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/Exceptions/TemplateLocalizerException.cs
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer.Core/ExportOptions.cs b/tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/ExportOptions.cs
similarity index 100%
rename from src/Microsoft.TemplateEngine.TemplateLocalizer.Core/ExportOptions.cs
rename to tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/ExportOptions.cs
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer.Core/ExportResult.cs b/tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/ExportResult.cs
similarity index 100%
rename from src/Microsoft.TemplateEngine.TemplateLocalizer.Core/ExportResult.cs
rename to tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/ExportResult.cs
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer.Core/ExtendedJavascriptEncoder.cs b/tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/ExtendedJavascriptEncoder.cs
similarity index 100%
rename from src/Microsoft.TemplateEngine.TemplateLocalizer.Core/ExtendedJavascriptEncoder.cs
rename to tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/ExtendedJavascriptEncoder.cs
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer.Core/Global.cs b/tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/Global.cs
similarity index 100%
rename from src/Microsoft.TemplateEngine.TemplateLocalizer.Core/Global.cs
rename to tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/Global.cs
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer.Core/KeyCreators/ChildValueKeyCreator.cs b/tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/KeyCreators/ChildValueKeyCreator.cs
similarity index 100%
rename from src/Microsoft.TemplateEngine.TemplateLocalizer.Core/KeyCreators/ChildValueKeyCreator.cs
rename to tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/KeyCreators/ChildValueKeyCreator.cs
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer.Core/KeyCreators/IJsonKeyCreator.cs b/tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/KeyCreators/IJsonKeyCreator.cs
similarity index 100%
rename from src/Microsoft.TemplateEngine.TemplateLocalizer.Core/KeyCreators/IJsonKeyCreator.cs
rename to tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/KeyCreators/IJsonKeyCreator.cs
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer.Core/KeyCreators/IndexBasedKeyCreator.cs b/tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/KeyCreators/IndexBasedKeyCreator.cs
similarity index 100%
rename from src/Microsoft.TemplateEngine.TemplateLocalizer.Core/KeyCreators/IndexBasedKeyCreator.cs
rename to tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/KeyCreators/IndexBasedKeyCreator.cs
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer.Core/KeyCreators/NameKeyCreator.cs b/tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/KeyCreators/NameKeyCreator.cs
similarity index 100%
rename from src/Microsoft.TemplateEngine.TemplateLocalizer.Core/KeyCreators/NameKeyCreator.cs
rename to tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/KeyCreators/NameKeyCreator.cs
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer.Core/LocalizableStrings.Designer.cs b/tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/LocalizableStrings.Designer.cs
similarity index 100%
rename from src/Microsoft.TemplateEngine.TemplateLocalizer.Core/LocalizableStrings.Designer.cs
rename to tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/LocalizableStrings.Designer.cs
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer.Core/LocalizableStrings.resx b/tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/LocalizableStrings.resx
similarity index 100%
rename from src/Microsoft.TemplateEngine.TemplateLocalizer.Core/LocalizableStrings.resx
rename to tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/LocalizableStrings.resx
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer.Core/Microsoft.TemplateEngine.TemplateLocalizer.Core.csproj b/tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/Microsoft.TemplateEngine.TemplateLocalizer.Core.csproj
similarity index 100%
rename from src/Microsoft.TemplateEngine.TemplateLocalizer.Core/Microsoft.TemplateEngine.TemplateLocalizer.Core.csproj
rename to tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/Microsoft.TemplateEngine.TemplateLocalizer.Core.csproj
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer.Core/PublicAPI.Shipped.txt b/tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/PublicAPI.Shipped.txt
similarity index 100%
rename from src/Microsoft.TemplateEngine.TemplateLocalizer.Core/PublicAPI.Shipped.txt
rename to tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/PublicAPI.Shipped.txt
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer.Core/PublicAPI.Unshipped.txt b/tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/PublicAPI.Unshipped.txt
similarity index 100%
rename from src/Microsoft.TemplateEngine.TemplateLocalizer.Core/PublicAPI.Unshipped.txt
rename to tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/PublicAPI.Unshipped.txt
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer.Core/TemplateLocalizer.cs b/tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/TemplateLocalizer.cs
similarity index 100%
rename from src/Microsoft.TemplateEngine.TemplateLocalizer.Core/TemplateLocalizer.cs
rename to tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/TemplateLocalizer.cs
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer.Core/TemplateString.cs b/tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/TemplateString.cs
similarity index 100%
rename from src/Microsoft.TemplateEngine.TemplateLocalizer.Core/TemplateString.cs
rename to tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/TemplateString.cs
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer.Core/TemplateStringExtractor.cs b/tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/TemplateStringExtractor.cs
similarity index 100%
rename from src/Microsoft.TemplateEngine.TemplateLocalizer.Core/TemplateStringExtractor.cs
rename to tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/TemplateStringExtractor.cs
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer.Core/TemplateStringUpdater.cs b/tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/TemplateStringUpdater.cs
similarity index 100%
rename from src/Microsoft.TemplateEngine.TemplateLocalizer.Core/TemplateStringUpdater.cs
rename to tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/TemplateStringUpdater.cs
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer.Core/TraversalArgs.cs b/tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/TraversalArgs.cs
similarity index 100%
rename from src/Microsoft.TemplateEngine.TemplateLocalizer.Core/TraversalArgs.cs
rename to tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/TraversalArgs.cs
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer.Core/TraversalRules/AllInclusiveTraversalRule.cs b/tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/TraversalRules/AllInclusiveTraversalRule.cs
similarity index 100%
rename from src/Microsoft.TemplateEngine.TemplateLocalizer.Core/TraversalRules/AllInclusiveTraversalRule.cs
rename to tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/TraversalRules/AllInclusiveTraversalRule.cs
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer.Core/TraversalRules/RegexFilteredTraversalRule.cs b/tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/TraversalRules/RegexFilteredTraversalRule.cs
similarity index 100%
rename from src/Microsoft.TemplateEngine.TemplateLocalizer.Core/TraversalRules/RegexFilteredTraversalRule.cs
rename to tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/TraversalRules/RegexFilteredTraversalRule.cs
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer.Core/TraversalRules/StringFilteredTraversalRule.cs b/tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/TraversalRules/StringFilteredTraversalRule.cs
similarity index 100%
rename from src/Microsoft.TemplateEngine.TemplateLocalizer.Core/TraversalRules/StringFilteredTraversalRule.cs
rename to tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/TraversalRules/StringFilteredTraversalRule.cs
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer.Core/TraversalRules/TraversalRule.cs b/tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/TraversalRules/TraversalRule.cs
similarity index 100%
rename from src/Microsoft.TemplateEngine.TemplateLocalizer.Core/TraversalRules/TraversalRule.cs
rename to tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/TraversalRules/TraversalRule.cs
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer.Core/Utilities/Rune.cs b/tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/Utilities/Rune.cs
similarity index 100%
rename from src/Microsoft.TemplateEngine.TemplateLocalizer.Core/Utilities/Rune.cs
rename to tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/Utilities/Rune.cs
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer.Core/Utilities/UnicodeDebug.cs b/tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/Utilities/UnicodeDebug.cs
similarity index 100%
rename from src/Microsoft.TemplateEngine.TemplateLocalizer.Core/Utilities/UnicodeDebug.cs
rename to tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/Utilities/UnicodeDebug.cs
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer.Core/Utilities/UnicodeUtility.cs b/tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/Utilities/UnicodeUtility.cs
similarity index 100%
rename from src/Microsoft.TemplateEngine.TemplateLocalizer.Core/Utilities/UnicodeUtility.cs
rename to tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/Utilities/UnicodeUtility.cs
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.cs.xlf b/tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.cs.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.cs.xlf
rename to tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.cs.xlf
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.de.xlf b/tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.de.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.de.xlf
rename to tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.de.xlf
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.es.xlf b/tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.es.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.es.xlf
rename to tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.es.xlf
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.fr.xlf b/tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.fr.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.fr.xlf
rename to tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.fr.xlf
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.it.xlf b/tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.it.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.it.xlf
rename to tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.it.xlf
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.ja.xlf b/tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.ja.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.ja.xlf
rename to tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.ja.xlf
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.ko.xlf b/tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.ko.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.ko.xlf
rename to tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.ko.xlf
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.pl.xlf b/tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.pl.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.pl.xlf
rename to tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.pl.xlf
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.pt-BR.xlf b/tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.pt-BR.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.pt-BR.xlf
rename to tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.pt-BR.xlf
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.ru.xlf b/tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.ru.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.ru.xlf
rename to tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.ru.xlf
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.tr.xlf b/tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.tr.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.tr.xlf
rename to tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.tr.xlf
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.zh-Hans.xlf b/tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.zh-Hans.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.zh-Hans.xlf
rename to tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.zh-Hans.xlf
diff --git a/src/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.zh-Hant.xlf b/tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.zh-Hant.xlf
similarity index 100%
rename from src/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.zh-Hant.xlf
rename to tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/xlf/LocalizableStrings.zh-Hant.xlf
diff --git a/src/Microsoft.TemplateSearch.ScraperOutputComparison/ComparisonConfig.cs b/tools/Microsoft.TemplateSearch.ScraperOutputComparison/ComparisonConfig.cs
similarity index 100%
rename from src/Microsoft.TemplateSearch.ScraperOutputComparison/ComparisonConfig.cs
rename to tools/Microsoft.TemplateSearch.ScraperOutputComparison/ComparisonConfig.cs
diff --git a/src/Microsoft.TemplateSearch.ScraperOutputComparison/Microsoft.TemplateSearch.ScraperOutputComparison.csproj b/tools/Microsoft.TemplateSearch.ScraperOutputComparison/Microsoft.TemplateSearch.ScraperOutputComparison.csproj
similarity index 100%
rename from src/Microsoft.TemplateSearch.ScraperOutputComparison/Microsoft.TemplateSearch.ScraperOutputComparison.csproj
rename to tools/Microsoft.TemplateSearch.ScraperOutputComparison/Microsoft.TemplateSearch.ScraperOutputComparison.csproj
diff --git a/src/Microsoft.TemplateSearch.ScraperOutputComparison/Program.cs b/tools/Microsoft.TemplateSearch.ScraperOutputComparison/Program.cs
similarity index 100%
rename from src/Microsoft.TemplateSearch.ScraperOutputComparison/Program.cs
rename to tools/Microsoft.TemplateSearch.ScraperOutputComparison/Program.cs
diff --git a/src/Microsoft.TemplateSearch.ScraperOutputComparison/ScrapeComparer.cs b/tools/Microsoft.TemplateSearch.ScraperOutputComparison/ScrapeComparer.cs
similarity index 100%
rename from src/Microsoft.TemplateSearch.ScraperOutputComparison/ScrapeComparer.cs
rename to tools/Microsoft.TemplateSearch.ScraperOutputComparison/ScrapeComparer.cs
diff --git a/src/Microsoft.TemplateSearch.ScraperOutputComparison/ScrapeComparisonResult.cs b/tools/Microsoft.TemplateSearch.ScraperOutputComparison/ScrapeComparisonResult.cs
similarity index 100%
rename from src/Microsoft.TemplateSearch.ScraperOutputComparison/ScrapeComparisonResult.cs
rename to tools/Microsoft.TemplateSearch.ScraperOutputComparison/ScrapeComparisonResult.cs
diff --git a/src/Microsoft.TemplateSearch.ScraperOutputComparison/TemplateEngineHostHelper.cs b/tools/Microsoft.TemplateSearch.ScraperOutputComparison/TemplateEngineHostHelper.cs
similarity index 100%
rename from src/Microsoft.TemplateSearch.ScraperOutputComparison/TemplateEngineHostHelper.cs
rename to tools/Microsoft.TemplateSearch.ScraperOutputComparison/TemplateEngineHostHelper.cs
diff --git a/src/Microsoft.TemplateSearch.TemplateDiscovery/AdditionalData/AdditionalDataExtensions.cs b/tools/Microsoft.TemplateSearch.TemplateDiscovery/AdditionalData/AdditionalDataExtensions.cs
similarity index 100%
rename from src/Microsoft.TemplateSearch.TemplateDiscovery/AdditionalData/AdditionalDataExtensions.cs
rename to tools/Microsoft.TemplateSearch.TemplateDiscovery/AdditionalData/AdditionalDataExtensions.cs
diff --git a/src/Microsoft.TemplateSearch.TemplateDiscovery/AdditionalData/CliHostDataProducer.cs b/tools/Microsoft.TemplateSearch.TemplateDiscovery/AdditionalData/CliHostDataProducer.cs
similarity index 100%
rename from src/Microsoft.TemplateSearch.TemplateDiscovery/AdditionalData/CliHostDataProducer.cs
rename to tools/Microsoft.TemplateSearch.TemplateDiscovery/AdditionalData/CliHostDataProducer.cs
diff --git a/src/Microsoft.TemplateSearch.TemplateDiscovery/AdditionalData/CliHostSearchCacheData.cs b/tools/Microsoft.TemplateSearch.TemplateDiscovery/AdditionalData/CliHostSearchCacheData.cs
similarity index 100%
rename from src/Microsoft.TemplateSearch.TemplateDiscovery/AdditionalData/CliHostSearchCacheData.cs
rename to tools/Microsoft.TemplateSearch.TemplateDiscovery/AdditionalData/CliHostSearchCacheData.cs
diff --git a/src/Microsoft.TemplateSearch.TemplateDiscovery/AdditionalData/CliHostTemplateData.cs b/tools/Microsoft.TemplateSearch.TemplateDiscovery/AdditionalData/CliHostTemplateData.cs
similarity index 100%
rename from src/Microsoft.TemplateSearch.TemplateDiscovery/AdditionalData/CliHostTemplateData.cs
rename to tools/Microsoft.TemplateSearch.TemplateDiscovery/AdditionalData/CliHostTemplateData.cs
diff --git a/src/Microsoft.TemplateSearch.TemplateDiscovery/AdditionalData/CliHostTemplateDataLoader.cs b/tools/Microsoft.TemplateSearch.TemplateDiscovery/AdditionalData/CliHostTemplateDataLoader.cs
similarity index 100%
rename from src/Microsoft.TemplateSearch.TemplateDiscovery/AdditionalData/CliHostTemplateDataLoader.cs
rename to tools/Microsoft.TemplateSearch.TemplateDiscovery/AdditionalData/CliHostTemplateDataLoader.cs
diff --git a/src/Microsoft.TemplateSearch.TemplateDiscovery/AdditionalData/IAdditionalDataProducer.cs b/tools/Microsoft.TemplateSearch.TemplateDiscovery/AdditionalData/IAdditionalDataProducer.cs
similarity index 100%
rename from src/Microsoft.TemplateSearch.TemplateDiscovery/AdditionalData/IAdditionalDataProducer.cs
rename to tools/Microsoft.TemplateSearch.TemplateDiscovery/AdditionalData/IAdditionalDataProducer.cs
diff --git a/src/Microsoft.TemplateSearch.TemplateDiscovery/CommandArgs.cs b/tools/Microsoft.TemplateSearch.TemplateDiscovery/CommandArgs.cs
similarity index 100%
rename from src/Microsoft.TemplateSearch.TemplateDiscovery/CommandArgs.cs
rename to tools/Microsoft.TemplateSearch.TemplateDiscovery/CommandArgs.cs
diff --git a/src/Microsoft.TemplateSearch.TemplateDiscovery/ConsoleExtensions.cs b/tools/Microsoft.TemplateSearch.TemplateDiscovery/ConsoleExtensions.cs
similarity index 100%
rename from src/Microsoft.TemplateSearch.TemplateDiscovery/ConsoleExtensions.cs
rename to tools/Microsoft.TemplateSearch.TemplateDiscovery/ConsoleExtensions.cs
diff --git a/src/Microsoft.TemplateSearch.TemplateDiscovery/Filters/FilterNonMicrosoftAuthors.cs b/tools/Microsoft.TemplateSearch.TemplateDiscovery/Filters/FilterNonMicrosoftAuthors.cs
similarity index 100%
rename from src/Microsoft.TemplateSearch.TemplateDiscovery/Filters/FilterNonMicrosoftAuthors.cs
rename to tools/Microsoft.TemplateSearch.TemplateDiscovery/Filters/FilterNonMicrosoftAuthors.cs
diff --git a/src/Microsoft.TemplateSearch.TemplateDiscovery/Filters/SkipTemplatePacksFilter.cs b/tools/Microsoft.TemplateSearch.TemplateDiscovery/Filters/SkipTemplatePacksFilter.cs
similarity index 100%
rename from src/Microsoft.TemplateSearch.TemplateDiscovery/Filters/SkipTemplatePacksFilter.cs
rename to tools/Microsoft.TemplateSearch.TemplateDiscovery/Filters/SkipTemplatePacksFilter.cs
diff --git a/src/Microsoft.TemplateSearch.TemplateDiscovery/Filters/TemplateJsonExistencePackFilter.cs b/tools/Microsoft.TemplateSearch.TemplateDiscovery/Filters/TemplateJsonExistencePackFilter.cs
similarity index 100%
rename from src/Microsoft.TemplateSearch.TemplateDiscovery/Filters/TemplateJsonExistencePackFilter.cs
rename to tools/Microsoft.TemplateSearch.TemplateDiscovery/Filters/TemplateJsonExistencePackFilter.cs
diff --git a/src/Microsoft.TemplateSearch.TemplateDiscovery/Globals.cs b/tools/Microsoft.TemplateSearch.TemplateDiscovery/Globals.cs
similarity index 100%
rename from src/Microsoft.TemplateSearch.TemplateDiscovery/Globals.cs
rename to tools/Microsoft.TemplateSearch.TemplateDiscovery/Globals.cs
diff --git a/src/Microsoft.TemplateSearch.TemplateDiscovery/Microsoft.TemplateSearch.TemplateDiscovery.csproj b/tools/Microsoft.TemplateSearch.TemplateDiscovery/Microsoft.TemplateSearch.TemplateDiscovery.csproj
similarity index 90%
rename from src/Microsoft.TemplateSearch.TemplateDiscovery/Microsoft.TemplateSearch.TemplateDiscovery.csproj
rename to tools/Microsoft.TemplateSearch.TemplateDiscovery/Microsoft.TemplateSearch.TemplateDiscovery.csproj
index 75f9feea48e..99a174628dd 100644
--- a/src/Microsoft.TemplateSearch.TemplateDiscovery/Microsoft.TemplateSearch.TemplateDiscovery.csproj
+++ b/tools/Microsoft.TemplateSearch.TemplateDiscovery/Microsoft.TemplateSearch.TemplateDiscovery.csproj
@@ -17,7 +17,6 @@
-
@@ -25,4 +24,8 @@
+
+
+
+
diff --git a/src/Microsoft.TemplateSearch.TemplateDiscovery/Nuget/NuGetPackSourceCheckerFactory.cs b/tools/Microsoft.TemplateSearch.TemplateDiscovery/NuGet/NuGetPackSourceCheckerFactory.cs
similarity index 100%
rename from src/Microsoft.TemplateSearch.TemplateDiscovery/Nuget/NuGetPackSourceCheckerFactory.cs
rename to tools/Microsoft.TemplateSearch.TemplateDiscovery/NuGet/NuGetPackSourceCheckerFactory.cs
diff --git a/src/Microsoft.TemplateSearch.TemplateDiscovery/Nuget/NugetPackProvider.cs b/tools/Microsoft.TemplateSearch.TemplateDiscovery/NuGet/NugetPackProvider.cs
similarity index 100%
rename from src/Microsoft.TemplateSearch.TemplateDiscovery/Nuget/NugetPackProvider.cs
rename to tools/Microsoft.TemplateSearch.TemplateDiscovery/NuGet/NugetPackProvider.cs
diff --git a/src/Microsoft.TemplateSearch.TemplateDiscovery/Nuget/NugetPackageSearchResult.cs b/tools/Microsoft.TemplateSearch.TemplateDiscovery/NuGet/NugetPackageSearchResult.cs
similarity index 100%
rename from src/Microsoft.TemplateSearch.TemplateDiscovery/Nuget/NugetPackageSearchResult.cs
rename to tools/Microsoft.TemplateSearch.TemplateDiscovery/NuGet/NugetPackageSearchResult.cs
diff --git a/src/Microsoft.TemplateSearch.TemplateDiscovery/Nuget/NugetPackageSourceInfo.cs b/tools/Microsoft.TemplateSearch.TemplateDiscovery/NuGet/NugetPackageSourceInfo.cs
similarity index 100%
rename from src/Microsoft.TemplateSearch.TemplateDiscovery/Nuget/NugetPackageSourceInfo.cs
rename to tools/Microsoft.TemplateSearch.TemplateDiscovery/NuGet/NugetPackageSourceInfo.cs
diff --git a/src/Microsoft.TemplateSearch.TemplateDiscovery/PackChecking/DownloadedPackInfo.cs b/tools/Microsoft.TemplateSearch.TemplateDiscovery/PackChecking/DownloadedPackInfo.cs
similarity index 100%
rename from src/Microsoft.TemplateSearch.TemplateDiscovery/PackChecking/DownloadedPackInfo.cs
rename to tools/Microsoft.TemplateSearch.TemplateDiscovery/PackChecking/DownloadedPackInfo.cs
diff --git a/src/Microsoft.TemplateSearch.TemplateDiscovery/PackChecking/FilteredPackageInfo.cs b/tools/Microsoft.TemplateSearch.TemplateDiscovery/PackChecking/FilteredPackageInfo.cs
similarity index 100%
rename from src/Microsoft.TemplateSearch.TemplateDiscovery/PackChecking/FilteredPackageInfo.cs
rename to tools/Microsoft.TemplateSearch.TemplateDiscovery/PackChecking/FilteredPackageInfo.cs
diff --git a/src/Microsoft.TemplateSearch.TemplateDiscovery/PackChecking/IDownloadedPackInfo.cs b/tools/Microsoft.TemplateSearch.TemplateDiscovery/PackChecking/IDownloadedPackInfo.cs
similarity index 100%
rename from src/Microsoft.TemplateSearch.TemplateDiscovery/PackChecking/IDownloadedPackInfo.cs
rename to tools/Microsoft.TemplateSearch.TemplateDiscovery/PackChecking/IDownloadedPackInfo.cs
diff --git a/src/Microsoft.TemplateSearch.TemplateDiscovery/PackChecking/IPackCheckerFactory.cs b/tools/Microsoft.TemplateSearch.TemplateDiscovery/PackChecking/IPackCheckerFactory.cs
similarity index 100%
rename from src/Microsoft.TemplateSearch.TemplateDiscovery/PackChecking/IPackCheckerFactory.cs
rename to tools/Microsoft.TemplateSearch.TemplateDiscovery/PackChecking/IPackCheckerFactory.cs
diff --git a/src/Microsoft.TemplateSearch.TemplateDiscovery/PackChecking/IPackProvider.cs b/tools/Microsoft.TemplateSearch.TemplateDiscovery/PackChecking/IPackProvider.cs
similarity index 100%
rename from src/Microsoft.TemplateSearch.TemplateDiscovery/PackChecking/IPackProvider.cs
rename to tools/Microsoft.TemplateSearch.TemplateDiscovery/PackChecking/IPackProvider.cs
diff --git a/src/Microsoft.TemplateSearch.TemplateDiscovery/PackChecking/PackCheckResult.cs b/tools/Microsoft.TemplateSearch.TemplateDiscovery/PackChecking/PackCheckResult.cs
similarity index 100%
rename from src/Microsoft.TemplateSearch.TemplateDiscovery/PackChecking/PackCheckResult.cs
rename to tools/Microsoft.TemplateSearch.TemplateDiscovery/PackChecking/PackCheckResult.cs
diff --git a/src/Microsoft.TemplateSearch.TemplateDiscovery/PackChecking/PackPrefilterer.cs b/tools/Microsoft.TemplateSearch.TemplateDiscovery/PackChecking/PackPrefilterer.cs
similarity index 100%
rename from src/Microsoft.TemplateSearch.TemplateDiscovery/PackChecking/PackPrefilterer.cs
rename to tools/Microsoft.TemplateSearch.TemplateDiscovery/PackChecking/PackPrefilterer.cs
diff --git a/src/Microsoft.TemplateSearch.TemplateDiscovery/PackChecking/PackSourceCheckResult.cs b/tools/Microsoft.TemplateSearch.TemplateDiscovery/PackChecking/PackSourceCheckResult.cs
similarity index 100%
rename from src/Microsoft.TemplateSearch.TemplateDiscovery/PackChecking/PackSourceCheckResult.cs
rename to tools/Microsoft.TemplateSearch.TemplateDiscovery/PackChecking/PackSourceCheckResult.cs
diff --git a/src/Microsoft.TemplateSearch.TemplateDiscovery/PackChecking/PackSourceChecker.cs b/tools/Microsoft.TemplateSearch.TemplateDiscovery/PackChecking/PackSourceChecker.cs
similarity index 100%
rename from src/Microsoft.TemplateSearch.TemplateDiscovery/PackChecking/PackSourceChecker.cs
rename to tools/Microsoft.TemplateSearch.TemplateDiscovery/PackChecking/PackSourceChecker.cs
diff --git a/src/Microsoft.TemplateSearch.TemplateDiscovery/PackChecking/PreFilterResult.cs b/tools/Microsoft.TemplateSearch.TemplateDiscovery/PackChecking/PreFilterResult.cs
similarity index 100%
rename from src/Microsoft.TemplateSearch.TemplateDiscovery/PackChecking/PreFilterResult.cs
rename to tools/Microsoft.TemplateSearch.TemplateDiscovery/PackChecking/PreFilterResult.cs
diff --git a/src/Microsoft.TemplateSearch.TemplateDiscovery/PackChecking/PreFilterResultList.cs b/tools/Microsoft.TemplateSearch.TemplateDiscovery/PackChecking/PreFilterResultList.cs
similarity index 100%
rename from src/Microsoft.TemplateSearch.TemplateDiscovery/PackChecking/PreFilterResultList.cs
rename to tools/Microsoft.TemplateSearch.TemplateDiscovery/PackChecking/PreFilterResultList.cs
diff --git a/src/Microsoft.TemplateSearch.TemplateDiscovery/Program.cs b/tools/Microsoft.TemplateSearch.TemplateDiscovery/Program.cs
similarity index 100%
rename from src/Microsoft.TemplateSearch.TemplateDiscovery/Program.cs
rename to tools/Microsoft.TemplateSearch.TemplateDiscovery/Program.cs
diff --git a/src/Microsoft.TemplateSearch.TemplateDiscovery/Results/LegacyBlobTemplateInfo.cs b/tools/Microsoft.TemplateSearch.TemplateDiscovery/Results/LegacyBlobTemplateInfo.cs
similarity index 100%
rename from src/Microsoft.TemplateSearch.TemplateDiscovery/Results/LegacyBlobTemplateInfo.cs
rename to tools/Microsoft.TemplateSearch.TemplateDiscovery/Results/LegacyBlobTemplateInfo.cs
diff --git a/src/Microsoft.TemplateSearch.TemplateDiscovery/Results/LegacyMetadataWriter.cs b/tools/Microsoft.TemplateSearch.TemplateDiscovery/Results/LegacyMetadataWriter.cs
similarity index 100%
rename from src/Microsoft.TemplateSearch.TemplateDiscovery/Results/LegacyMetadataWriter.cs
rename to tools/Microsoft.TemplateSearch.TemplateDiscovery/Results/LegacyMetadataWriter.cs
diff --git a/src/Microsoft.TemplateSearch.TemplateDiscovery/Results/TemplateIdentityEqualityComparer.cs b/tools/Microsoft.TemplateSearch.TemplateDiscovery/Results/TemplateIdentityEqualityComparer.cs
similarity index 100%
rename from src/Microsoft.TemplateSearch.TemplateDiscovery/Results/TemplateIdentityEqualityComparer.cs
rename to tools/Microsoft.TemplateSearch.TemplateDiscovery/Results/TemplateIdentityEqualityComparer.cs
diff --git a/src/Microsoft.TemplateSearch.TemplateDiscovery/Results/UnifiedPackCheckResultReportWriter.cs b/tools/Microsoft.TemplateSearch.TemplateDiscovery/Results/UnifiedPackCheckResultReportWriter.cs
similarity index 100%
rename from src/Microsoft.TemplateSearch.TemplateDiscovery/Results/UnifiedPackCheckResultReportWriter.cs
rename to tools/Microsoft.TemplateSearch.TemplateDiscovery/Results/UnifiedPackCheckResultReportWriter.cs
diff --git a/src/Microsoft.TemplateSearch.TemplateDiscovery/TemplateDiscoveryCommand.cs b/tools/Microsoft.TemplateSearch.TemplateDiscovery/TemplateDiscoveryCommand.cs
similarity index 100%
rename from src/Microsoft.TemplateSearch.TemplateDiscovery/TemplateDiscoveryCommand.cs
rename to tools/Microsoft.TemplateSearch.TemplateDiscovery/TemplateDiscoveryCommand.cs
diff --git a/src/Microsoft.TemplateSearch.TemplateDiscovery/TemplateEngineHostHelper.cs b/tools/Microsoft.TemplateSearch.TemplateDiscovery/TemplateEngineHostHelper.cs
similarity index 100%
rename from src/Microsoft.TemplateSearch.TemplateDiscovery/TemplateEngineHostHelper.cs
rename to tools/Microsoft.TemplateSearch.TemplateDiscovery/TemplateEngineHostHelper.cs
diff --git a/src/Microsoft.TemplateSearch.TemplateDiscovery/Test/CacheFileTests.cs b/tools/Microsoft.TemplateSearch.TemplateDiscovery/Test/CacheFileTests.cs
similarity index 84%
rename from src/Microsoft.TemplateSearch.TemplateDiscovery/Test/CacheFileTests.cs
rename to tools/Microsoft.TemplateSearch.TemplateDiscovery/Test/CacheFileTests.cs
index ff9cdf1f39e..2a5c90406d9 100644
--- a/src/Microsoft.TemplateSearch.TemplateDiscovery/Test/CacheFileTests.cs
+++ b/tools/Microsoft.TemplateSearch.TemplateDiscovery/Test/CacheFileTests.cs
@@ -2,8 +2,8 @@
// The .NET Foundation licenses this file to you under the MIT license.
using FluentAssertions;
+using Microsoft.TemplateEngine.CommandUtils;
using Microsoft.TemplateEngine.TestHelper;
-using Microsoft.TemplateEngine.TestHelper.Commands;
namespace Microsoft.TemplateSearch.TemplateDiscovery.Test
{
@@ -51,6 +51,7 @@ internal static void RunTests(string metadataPath, string legacyMetadataPath)
workingDirectory = TestUtils.CreateTemporaryFolder("latest");
//print the version
new DotnetCommand(TestOutputLogger.Instance, "--version")
+ .WithoutTelemetry()
.WithWorkingDirectory(workingDirectory)
.Execute()
.Should()
@@ -66,6 +67,7 @@ private static void UseSdkVersion(string workingDirectory, string requestedSdkVe
CreateGlobalJson(workingDirectory, requestedSdkVersion, rollForward, allowPrerelease);
new DotnetCommand(TestOutputLogger.Instance, "--version")
+ .WithoutTelemetry()
.WithWorkingDirectory(workingDirectory)
.Execute()
.Should()
@@ -78,7 +80,8 @@ private static void UseSdkVersion(string workingDirectory, string requestedSdkVe
private static void CanSearchWhileInstantiating(string workingDirectory, string cacheFilePath)
{
var settingsPath = TestUtils.CreateTemporaryFolder();
- new DotnetCommand(TestOutputLogger.Instance, "new", "func", "--debug:custom-hive", settingsPath)
+ new DotnetNewCommand(TestOutputLogger.Instance, "func", "--debug:custom-hive", settingsPath)
+ .WithoutTelemetry()
.WithWorkingDirectory(workingDirectory)
.WithEnvironmentVariable("DOTNET_NEW_SEARCH_FILE_OVERRIDE", cacheFilePath)
.Execute()
@@ -91,7 +94,8 @@ private static void CanSearchWhileInstantiating(string workingDirectory, string
private static void CanCheckUpdates(string workingDirectory, string cacheFilePath)
{
var settingsPath = TestUtils.CreateTemporaryFolder();
- new DotnetCommand(TestOutputLogger.Instance, "new", "--install", "Microsoft.Azure.WebJobs.ItemTemplates::2.1.1785", "--debug:custom-hive", settingsPath)
+ new DotnetNewCommand(TestOutputLogger.Instance, "--install", "Microsoft.Azure.WebJobs.ItemTemplates::2.1.1785", "--debug:custom-hive", settingsPath)
+ .WithoutTelemetry()
.WithWorkingDirectory(workingDirectory)
.WithEnvironmentVariable("DOTNET_NEW_SEARCH_FILE_OVERRIDE", cacheFilePath)
.Execute()
@@ -99,7 +103,8 @@ private static void CanCheckUpdates(string workingDirectory, string cacheFilePat
.ExitWith(0)
.And.NotHaveStdErr();
- new DotnetCommand(TestOutputLogger.Instance, "new", "--update-check", "--debug:custom-hive", settingsPath)
+ new DotnetNewCommand(TestOutputLogger.Instance, "--update-check", "--debug:custom-hive", settingsPath)
+ .WithoutTelemetry()
.WithWorkingDirectory(workingDirectory)
.WithEnvironmentVariable("DOTNET_NEW_SEARCH_FILE_OVERRIDE", cacheFilePath)
.Execute()
@@ -114,15 +119,17 @@ private static void CanCheckUpdates(string workingDirectory, string cacheFilePat
private static void CanUpdate(string workingDirectory, string cacheFilePath)
{
var settingsPath = TestUtils.CreateTemporaryFolder();
- new DotnetCommand(TestOutputLogger.Instance, "new", "--install", "Microsoft.Azure.WebJobs.ItemTemplates::2.1.1785", "--debug:custom-hive", settingsPath)
- .WithWorkingDirectory(workingDirectory)
- .WithEnvironmentVariable("DOTNET_NEW_SEARCH_FILE_OVERRIDE", cacheFilePath)
- .Execute()
- .Should()
- .ExitWith(0)
- .And.NotHaveStdErr();
+ new DotnetNewCommand(TestOutputLogger.Instance, "--install", "Microsoft.Azure.WebJobs.ItemTemplates::2.1.1785", "--debug:custom-hive", settingsPath)
+ .WithoutTelemetry()
+ .WithWorkingDirectory(workingDirectory)
+ .WithEnvironmentVariable("DOTNET_NEW_SEARCH_FILE_OVERRIDE", cacheFilePath)
+ .Execute()
+ .Should()
+ .ExitWith(0)
+ .And.NotHaveStdErr();
- new DotnetCommand(TestOutputLogger.Instance, "new", "--update-apply", "--debug:custom-hive", settingsPath)
+ new DotnetNewCommand(TestOutputLogger.Instance, "--update-apply", "--debug:custom-hive", settingsPath)
+ .WithoutTelemetry()
.WithWorkingDirectory(workingDirectory)
.WithEnvironmentVariable("DOTNET_NEW_SEARCH_FILE_OVERRIDE", cacheFilePath)
.Execute()
@@ -137,7 +144,8 @@ private static void CanUpdate(string workingDirectory, string cacheFilePath)
private static void CanSearch(string workingDirectory, string cacheFilePath)
{
var settingsPath = TestUtils.CreateTemporaryFolder();
- new DotnetCommand(TestOutputLogger.Instance, "new", "func", "--search", "--debug:custom-hive", settingsPath)
+ new DotnetNewCommand(TestOutputLogger.Instance, "func", "--search", "--debug:custom-hive", settingsPath)
+ .WithoutTelemetry()
.WithWorkingDirectory(workingDirectory)
.WithEnvironmentVariable("DOTNET_NEW_SEARCH_FILE_OVERRIDE", cacheFilePath)
.Execute()
diff --git a/src/Microsoft.TemplateSearch.TemplateDiscovery/Test/TestLogger.cs b/tools/Microsoft.TemplateSearch.TemplateDiscovery/Test/TestLogger.cs
similarity index 100%
rename from src/Microsoft.TemplateSearch.TemplateDiscovery/Test/TestLogger.cs
rename to tools/Microsoft.TemplateSearch.TemplateDiscovery/Test/TestLogger.cs
diff --git a/src/Microsoft.TemplateSearch.TemplateDiscovery/TestProvider/TestPackCheckerFactory.cs b/tools/Microsoft.TemplateSearch.TemplateDiscovery/TestProvider/TestPackCheckerFactory.cs
similarity index 100%
rename from src/Microsoft.TemplateSearch.TemplateDiscovery/TestProvider/TestPackCheckerFactory.cs
rename to tools/Microsoft.TemplateSearch.TemplateDiscovery/TestProvider/TestPackCheckerFactory.cs
diff --git a/src/Microsoft.TemplateSearch.TemplateDiscovery/TestProvider/TestPackProvider.cs b/tools/Microsoft.TemplateSearch.TemplateDiscovery/TestProvider/TestPackProvider.cs
similarity index 100%
rename from src/Microsoft.TemplateSearch.TemplateDiscovery/TestProvider/TestPackProvider.cs
rename to tools/Microsoft.TemplateSearch.TemplateDiscovery/TestProvider/TestPackProvider.cs
diff --git a/tools/Shared/Microsoft.TemplateEngine.CommandUtils/ArgumentEscaper.cs b/tools/Shared/Microsoft.TemplateEngine.CommandUtils/ArgumentEscaper.cs
new file mode 100644
index 00000000000..3d85abf4b4f
--- /dev/null
+++ b/tools/Shared/Microsoft.TemplateEngine.CommandUtils/ArgumentEscaper.cs
@@ -0,0 +1,199 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Text;
+
+namespace Microsoft.TemplateEngine.CommandUtils
+{
+ internal static class ArgumentEscaper
+ {
+ ///
+ /// Undo the processing which took place to create string[] args in Main,
+ /// so that the next process will receive the same string[] args
+ /// See here for more info:
+ /// http://blogs.msdn.com/b/twistylittlepassagesallalike/archive/2011/04/23/everyone-quotes-arguments-the-wrong-way.aspx .
+ ///
+ ///
+ ///
+ internal static string EscapeAndConcatenateArgArrayForProcessStart(IEnumerable args)
+ {
+ IEnumerable escaped = EscapeArgArray(args);
+ return string.Join(" ", escaped);
+ }
+
+ ///
+ /// Undo the processing which took place to create string[] args in Main,
+ /// so that the next process will receive the same string[] args
+ /// See here for more info:
+ /// http://blogs.msdn.com/b/twistylittlepassagesallalike/archive/2011/04/23/everyone-quotes-arguments-the-wrong-way.aspx .
+ ///
+ ///
+ ///
+ internal static string EscapeAndConcatenateArgArrayForCmdProcessStart(IEnumerable args)
+ {
+ IEnumerable escaped = EscapeArgArrayForCmd(args);
+ return string.Join(" ", escaped);
+ }
+
+ internal static string EscapeSingleArg(string arg)
+ {
+ var sb = new StringBuilder();
+
+ var length = arg.Length;
+ var needsQuotes = length == 0 || ShouldSurroundWithQuotes(arg);
+ var isQuoted = needsQuotes || IsSurroundedWithQuotes(arg);
+
+ if (needsQuotes)
+ {
+ sb.Append('"');
+ }
+
+ for (int i = 0; i < length; ++i)
+ {
+ var backslashCount = 0;
+
+ // Consume All Backslashes
+ while (i < arg.Length && arg[i] == '\\')
+ {
+ backslashCount++;
+ i++;
+ }
+
+ // Escape any backslashes at the end of the arg
+ // when the argument is also quoted.
+ // This ensures the outside quote is interpreted as
+ // an argument delimiter
+ if (i == arg.Length && isQuoted)
+ {
+ sb.Append('\\', 2 * backslashCount);
+ }
+
+ // At then end of the arg, which isn't quoted,
+ // just add the backslashes, no need to escape
+ else if (i == arg.Length)
+ {
+ sb.Append('\\', backslashCount);
+ }
+
+ // Escape any preceding backslashes and the quote
+ else if (arg[i] == '"')
+ {
+ sb.Append('\\', (2 * backslashCount) + 1);
+ sb.Append('"');
+ }
+
+ // Output any consumed backslashes and the character
+ else
+ {
+ sb.Append('\\', backslashCount);
+ sb.Append(arg[i]);
+ }
+ }
+
+ if (needsQuotes)
+ {
+ sb.Append('"');
+ }
+
+ return sb.ToString();
+ }
+
+ internal static bool ShouldSurroundWithQuotes(string argument)
+ {
+ // Only quote if whitespace exists in the string
+ return ArgumentContainsWhitespace(argument);
+ }
+
+ internal static bool IsSurroundedWithQuotes(string argument)
+ {
+ return argument.StartsWith("\"", StringComparison.Ordinal) &&
+ argument.EndsWith("\"", StringComparison.Ordinal);
+ }
+
+ internal static bool ArgumentContainsWhitespace(string argument)
+ {
+ return argument.Contains(" ") || argument.Contains("\t") || argument.Contains("\n");
+ }
+
+ ///
+ /// Prepare as single argument to
+ /// roundtrip properly through cmd.
+ /// This prefixes every character with the '^' character to force cmd to
+ /// interpret the argument string literally. An alternative option would
+ /// be to do this only for cmd metacharacters.
+ /// See here for more info:
+ /// http://blogs.msdn.com/b/twistylittlepassagesallalike/archive/2011/04/23/everyone-quotes-arguments-the-wrong-way.aspx .
+ ///
+ ///
+ ///
+ private static string EscapeArgForCmd(string argument)
+ {
+ var sb = new StringBuilder();
+
+ var quoted = ShouldSurroundWithQuotes(argument);
+
+ if (quoted)
+ {
+ sb.Append("^\"");
+ }
+
+ // Prepend every character with ^
+ // This is harmless when passing through cmd
+ // and ensures cmd metacharacters are not interpreted
+ // as such
+ foreach (var character in argument)
+ {
+ sb.Append('^');
+ sb.Append(character);
+ }
+
+ if (quoted)
+ {
+ sb.Append("^\"");
+ }
+
+ return sb.ToString();
+ }
+
+ ///
+ /// Undo the processing which took place to create string[] args in Main,
+ /// so that the next process will receive the same string[] args
+ /// See here for more info:
+ /// http://blogs.msdn.com/b/twistylittlepassagesallalike/archive/2011/04/23/everyone-quotes-arguments-the-wrong-way.aspx .
+ ///
+ ///
+ ///
+ private static IEnumerable EscapeArgArray(IEnumerable args)
+ {
+ var escapedArgs = new List();
+
+ foreach (var arg in args)
+ {
+ escapedArgs.Add(EscapeSingleArg(arg));
+ }
+
+ return escapedArgs;
+ }
+
+ ///
+ /// This prefixes every character with the '^' character to force cmd to
+ /// interpret the argument string literally. An alternative option would
+ /// be to do this only for cmd metacharacters.
+ /// See here for more info:
+ /// http://blogs.msdn.com/b/twistylittlepassagesallalike/archive/2011/04/23/everyone-quotes-arguments-the-wrong-way.aspx.
+ ///
+ ///
+ ///
+ private static IEnumerable EscapeArgArrayForCmd(IEnumerable arguments)
+ {
+ var escapedArgs = new List();
+
+ foreach (var arg in arguments)
+ {
+ escapedArgs.Add(EscapeArgForCmd(arg));
+ }
+
+ return escapedArgs;
+ }
+ }
+}
diff --git a/src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/Commands/BasicCommand.cs b/tools/Shared/Microsoft.TemplateEngine.CommandUtils/BasicCommand.cs
similarity index 57%
rename from src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/Commands/BasicCommand.cs
rename to tools/Shared/Microsoft.TemplateEngine.CommandUtils/BasicCommand.cs
index 7e37d7e992a..677a9a2effc 100644
--- a/src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/Commands/BasicCommand.cs
+++ b/tools/Shared/Microsoft.TemplateEngine.CommandUtils/BasicCommand.cs
@@ -2,20 +2,27 @@
// The .NET Foundation licenses this file to you under the MIT license.
using Microsoft.Extensions.Logging;
+using Xunit.Abstractions;
-namespace Microsoft.TemplateEngine.Authoring.TemplateVerifier.Commands
+namespace Microsoft.TemplateEngine.CommandUtils
{
internal class BasicCommand : TestCommand
{
private readonly string _processName;
- public BasicCommand(ILogger log, string processName, params string[] args) : base(log)
+ internal BasicCommand(ITestOutputHelper log, string processName, params string[] args) : base(log)
{
_processName = processName;
Arguments.AddRange(args.Where(a => !string.IsNullOrWhiteSpace(a)));
}
- protected override SdkCommandSpec CreateCommand(IEnumerable args)
+ internal BasicCommand(ILogger log, string processName, params string[] args) : base(log)
+ {
+ _processName = processName;
+ Arguments.AddRange(args.Where(a => !string.IsNullOrWhiteSpace(a)));
+ }
+
+ private protected override SdkCommandSpec CreateCommand(IEnumerable args)
{
var sdkCommandSpec = new SdkCommandSpec()
{
diff --git a/tools/Shared/Microsoft.TemplateEngine.CommandUtils/Command.cs b/tools/Shared/Microsoft.TemplateEngine.CommandUtils/Command.cs
new file mode 100644
index 00000000000..89b34324468
--- /dev/null
+++ b/tools/Shared/Microsoft.TemplateEngine.CommandUtils/Command.cs
@@ -0,0 +1,202 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Diagnostics;
+using System.Runtime.CompilerServices;
+
+namespace Microsoft.TemplateEngine.CommandUtils
+{
+ internal class Command
+ {
+ private readonly Process _process;
+
+ private readonly bool _trimTrailingNewlines;
+
+ private StreamForwarder? _stdOut;
+ private StreamForwarder? _stdErr;
+ private bool _running;
+
+ public Command(Process process, bool trimtrailingNewlines = false)
+ {
+ _trimTrailingNewlines = trimtrailingNewlines;
+ _process = process ?? throw new ArgumentNullException(nameof(process));
+ }
+
+ public string CommandName => _process.StartInfo.FileName;
+
+ public string CommandArgs => _process.StartInfo.Arguments;
+
+ public CommandResult Execute()
+ {
+ return Execute(_ => { });
+ }
+
+ public CommandResult Execute(Action? processStarted)
+ {
+ Console.WriteLine($"Running {_process.StartInfo.FileName} {_process.StartInfo.Arguments}");
+ ThrowIfRunning();
+
+ _running = true;
+
+ _process.EnableRaisingEvents = true;
+
+#if DEBUG
+ var sw = Stopwatch.StartNew();
+
+ Console.WriteLine($"> {FormatProcessInfo(_process.StartInfo)}");
+#endif
+ using (var reaper = new ProcessReaper(_process))
+ {
+ _process.Start();
+ processStarted?.Invoke(_process);
+ reaper.NotifyProcessStarted();
+
+ Console.WriteLine($"Process ID: {_process.Id}");
+
+ var taskOut = _stdOut?.BeginRead(_process.StandardOutput);
+ var taskErr = _stdErr?.BeginRead(_process.StandardError);
+ _process.WaitForExit();
+
+ taskOut?.Wait();
+ taskErr?.Wait();
+ }
+
+ var exitCode = _process.ExitCode;
+
+#if DEBUG
+ var message = string.Format($"< {FormatProcessInfo(_process.StartInfo)} exited with {exitCode} in {sw.ElapsedMilliseconds} ms");
+ if (exitCode == 0)
+ {
+ Console.WriteLine(message);
+ }
+ else
+ {
+ Console.WriteLine(message);
+ }
+#endif
+
+ return new CommandResult(
+ _process.StartInfo,
+ exitCode,
+ _stdOut?.CapturedOutput,
+ _stdErr?.CapturedOutput);
+ }
+
+ public Command WorkingDirectory(string projectDirectory)
+ {
+ _process.StartInfo.WorkingDirectory = projectDirectory;
+ return this;
+ }
+
+ public Command EnvironmentVariable(string name, string value)
+ {
+ _process.StartInfo.Environment[name] = value;
+ return this;
+ }
+
+ public Command CaptureStdOut()
+ {
+ ThrowIfRunning();
+ EnsureStdOut();
+ _stdOut!.Capture(_trimTrailingNewlines);
+ return this;
+ }
+
+ public Command CaptureStdErr()
+ {
+ ThrowIfRunning();
+ EnsureStdErr();
+ _stdErr!.Capture(_trimTrailingNewlines);
+ return this;
+ }
+
+ public Command ForwardStdOut(TextWriter? to = null)
+ {
+ ThrowIfRunning();
+ EnsureStdOut();
+
+ if (to == null)
+ {
+ _stdOut!.ForwardTo(writeLine: Console.Out.WriteLine);
+ }
+ else
+ {
+ _stdOut!.ForwardTo(writeLine: to.WriteLine);
+ }
+
+ return this;
+ }
+
+ public Command ForwardStdErr(TextWriter? to = null)
+ {
+ ThrowIfRunning();
+
+ EnsureStdErr();
+
+ if (to == null)
+ {
+ _stdErr!.ForwardTo(writeLine: Console.Error.WriteLine);
+ }
+ else
+ {
+ _stdErr!.ForwardTo(writeLine: to.WriteLine);
+ }
+
+ return this;
+ }
+
+ public Command OnOutputLine(Action handler)
+ {
+ ThrowIfRunning();
+ EnsureStdOut();
+
+ _stdOut!.ForwardTo(writeLine: handler);
+ return this;
+ }
+
+ public Command OnErrorLine(Action handler)
+ {
+ ThrowIfRunning();
+ EnsureStdErr();
+
+ _stdErr!.ForwardTo(writeLine: handler);
+ return this;
+ }
+
+ public Command SetCommandArgs(string commandArgs)
+ {
+ _process.StartInfo.Arguments = commandArgs;
+ return this;
+ }
+
+ private static string FormatProcessInfo(ProcessStartInfo info)
+ {
+ if (string.IsNullOrWhiteSpace(info.Arguments))
+ {
+ return info.FileName;
+ }
+
+ return info.FileName + " " + info.Arguments;
+ }
+
+ private void EnsureStdOut()
+ {
+ _stdOut ??= new StreamForwarder();
+ _process.StartInfo.RedirectStandardOutput = true;
+ }
+
+ private void EnsureStdErr()
+ {
+ _stdErr ??= new StreamForwarder();
+ _process.StartInfo.RedirectStandardError = true;
+ }
+
+ private void ThrowIfRunning([CallerMemberName] string? memberName = null)
+ {
+ if (_running)
+ {
+ throw new InvalidOperationException($"Unable to invoke {memberName} after the command has been run.");
+ }
+ }
+ }
+}
diff --git a/tools/Shared/Microsoft.TemplateEngine.CommandUtils/CommandResult.cs b/tools/Shared/Microsoft.TemplateEngine.CommandUtils/CommandResult.cs
new file mode 100644
index 00000000000..94f26b4dc75
--- /dev/null
+++ b/tools/Shared/Microsoft.TemplateEngine.CommandUtils/CommandResult.cs
@@ -0,0 +1,28 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Diagnostics;
+
+namespace Microsoft.TemplateEngine.CommandUtils
+{
+ internal readonly struct CommandResult
+ {
+ internal static readonly CommandResult Empty;
+
+ internal CommandResult(ProcessStartInfo startInfo, int exitCode, string? stdOut, string? stdErr)
+ {
+ StartInfo = startInfo;
+ ExitCode = exitCode;
+ StdOut = stdOut;
+ StdErr = stdErr;
+ }
+
+ internal ProcessStartInfo StartInfo { get; }
+
+ internal int ExitCode { get; }
+
+ internal string? StdOut { get; }
+
+ internal string? StdErr { get; }
+ }
+}
diff --git a/test/Microsoft.TemplateEngine.TestHelper/Commands/Assertions/CommandResultAssertions.cs b/tools/Shared/Microsoft.TemplateEngine.CommandUtils/CommandResultAssertions.cs
similarity index 61%
rename from test/Microsoft.TemplateEngine.TestHelper/Commands/Assertions/CommandResultAssertions.cs
rename to tools/Shared/Microsoft.TemplateEngine.CommandUtils/CommandResultAssertions.cs
index edf5c66d716..f62eb501693 100644
--- a/test/Microsoft.TemplateEngine.TestHelper/Commands/Assertions/CommandResultAssertions.cs
+++ b/tools/Shared/Microsoft.TemplateEngine.CommandUtils/CommandResultAssertions.cs
@@ -1,83 +1,99 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
-#if NET
-
-using System;
using System.Text.RegularExpressions;
using FluentAssertions;
using FluentAssertions.Execution;
-using Microsoft.DotNet.Cli.Utils;
-namespace Microsoft.TemplateEngine.TestHelper.Commands
+namespace Microsoft.TemplateEngine.CommandUtils
{
- public class CommandResultAssertions
+ internal class CommandResultAssertions
{
private readonly CommandResult _commandResult;
- public CommandResultAssertions(CommandResult commandResult)
+ internal CommandResultAssertions(CommandResult commandResult)
{
_commandResult = commandResult;
}
- public AndConstraint ExitWith(int expectedExitCode)
+ internal AndConstraint ExitWith(int expectedExitCode)
{
Execute.Assertion.ForCondition(_commandResult.ExitCode == expectedExitCode)
.FailWith(AppendDiagnosticsTo($"Expected command to exit with {expectedExitCode} but it did not."));
return new AndConstraint(this);
}
- public AndConstraint Pass()
+ internal AndConstraint Pass()
{
Execute.Assertion.ForCondition(_commandResult.ExitCode == 0)
.FailWith(AppendDiagnosticsTo($"Expected command to pass but it did not."));
return new AndConstraint(this);
}
- public AndConstraint Fail()
+ internal AndConstraint Fail()
{
Execute.Assertion.ForCondition(_commandResult.ExitCode != 0)
.FailWith(AppendDiagnosticsTo($"Expected command to fail but it did not."));
return new AndConstraint(this);
}
- public AndConstraint HaveStdOut()
+ internal AndConstraint HaveStdOut()
{
Execute.Assertion.ForCondition(!string.IsNullOrEmpty(_commandResult.StdOut))
.FailWith(AppendDiagnosticsTo("Command did not output anything to stdout"));
return new AndConstraint(this);
}
- public AndConstraint HaveStdOut(string expectedOutput)
+ internal AndConstraint HaveStdOut(string expectedOutput)
{
+ if (_commandResult.StdOut is null)
+ {
+ throw new InvalidOperationException("StdOut for the command was not captured");
+ }
Execute.Assertion.ForCondition(_commandResult.StdOut.Equals(expectedOutput, StringComparison.Ordinal))
.FailWith(AppendDiagnosticsTo($"Command did not output with Expected Output. Expected: {expectedOutput}"));
return new AndConstraint(this);
}
- public AndConstraint HaveStdOutContaining(string pattern)
+ internal AndConstraint HaveStdOutContaining(string pattern)
{
+ if (_commandResult.StdOut is null)
+ {
+ throw new InvalidOperationException("StdOut for the command was not captured");
+ }
Execute.Assertion.ForCondition(_commandResult.StdOut.Contains(pattern))
.FailWith(AppendDiagnosticsTo($"The command output did not contain expected result: {pattern}{Environment.NewLine}"));
return new AndConstraint(this);
}
- public AndConstraint HaveStdOutContaining(Func predicate, string description = "")
+ internal AndConstraint HaveStdOutContaining(Func predicate, string description = "")
{
+ if (_commandResult.StdOut is null)
+ {
+ throw new InvalidOperationException("StdOut for the command was not captured");
+ }
Execute.Assertion.ForCondition(predicate(_commandResult.StdOut))
.FailWith(AppendDiagnosticsTo($"The command output did not contain expected result: {description} {Environment.NewLine}"));
return new AndConstraint(this);
}
- public AndConstraint NotHaveStdOutContaining(string pattern)
+ internal AndConstraint NotHaveStdOutContaining(string pattern)
{
+ if (_commandResult.StdOut is null)
+ {
+ throw new InvalidOperationException("StdOut for the command was not captured");
+ }
Execute.Assertion.ForCondition(!_commandResult.StdOut.Contains(pattern))
.FailWith(AppendDiagnosticsTo($"The command output contained a result it should not have contained: {pattern}{Environment.NewLine}"));
return new AndConstraint(this);
}
- public AndConstraint HaveStdOutContainingIgnoreSpaces(string pattern)
+ internal AndConstraint HaveStdOutContainingIgnoreSpaces(string pattern)
{
+ if (_commandResult.StdOut is null)
+ {
+ throw new InvalidOperationException("StdOut for the command was not captured");
+ }
string commandResultNoSpaces = _commandResult.StdOut.Replace(" ", string.Empty);
Execute.Assertion
@@ -87,84 +103,124 @@ public AndConstraint HaveStdOutContainingIgnoreSpaces(s
return new AndConstraint(this);
}
- public AndConstraint HaveStdOutContainingIgnoreCase(string pattern)
+ internal AndConstraint HaveStdOutContainingIgnoreCase(string pattern)
{
+ if (_commandResult.StdOut is null)
+ {
+ throw new InvalidOperationException("StdOut for the command was not captured");
+ }
Execute.Assertion.ForCondition(_commandResult.StdOut.Contains(pattern, StringComparison.OrdinalIgnoreCase))
.FailWith(AppendDiagnosticsTo($"The command output did not contain expected result (ignoring case): {pattern}{Environment.NewLine}"));
return new AndConstraint(this);
}
- public AndConstraint HaveStdOutMatching(string pattern, RegexOptions options = RegexOptions.None)
+ internal AndConstraint HaveStdOutMatching(string pattern, RegexOptions options = RegexOptions.None)
{
+ if (_commandResult.StdOut is null)
+ {
+ throw new InvalidOperationException("StdOut for the command was not captured");
+ }
Execute.Assertion.ForCondition(Regex.Match(_commandResult.StdOut, pattern, options).Success)
.FailWith(AppendDiagnosticsTo($"Matching the command output failed. Pattern: {pattern}{Environment.NewLine}"));
return new AndConstraint(this);
}
- public AndConstraint NotHaveStdOutMatching(string pattern, RegexOptions options = RegexOptions.None)
+ internal AndConstraint NotHaveStdOutMatching(string pattern, RegexOptions options = RegexOptions.None)
{
+ if (_commandResult.StdOut is null)
+ {
+ throw new InvalidOperationException("StdOut for the command was not captured");
+ }
Execute.Assertion.ForCondition(!Regex.Match(_commandResult.StdOut, pattern, options).Success)
.FailWith(AppendDiagnosticsTo($"The command output matched a pattern it should not have. Pattern: {pattern}{Environment.NewLine}"));
return new AndConstraint(this);
}
- public AndConstraint HaveStdErr()
+ internal AndConstraint HaveStdErr()
{
+ if (_commandResult.StdErr is null)
+ {
+ throw new InvalidOperationException("StdOut for the command was not captured");
+ }
Execute.Assertion.ForCondition(!string.IsNullOrEmpty(_commandResult.StdErr))
.FailWith(AppendDiagnosticsTo("Command did not output anything to StdErr."));
return new AndConstraint(this);
}
- public AndConstraint HaveStdErr(string expectedOutput)
+ internal AndConstraint HaveStdErr(string expectedOutput)
{
+ if (_commandResult.StdErr is null)
+ {
+ throw new InvalidOperationException("StdErr for the command was not captured");
+ }
Execute.Assertion.ForCondition(_commandResult.StdErr.Equals(expectedOutput, StringComparison.Ordinal))
.FailWith(AppendDiagnosticsTo($"Command did not output the expected output to StdErr.{Environment.NewLine}Expected: {expectedOutput}{Environment.NewLine}Actual: {_commandResult.StdErr}"));
return new AndConstraint(this);
}
- public AndConstraint HaveStdErrContaining(string pattern)
+ internal AndConstraint HaveStdErrContaining(string pattern)
{
+ if (_commandResult.StdErr is null)
+ {
+ throw new InvalidOperationException("StdErr for the command was not captured");
+ }
Execute.Assertion.ForCondition(_commandResult.StdErr.Contains(pattern))
.FailWith(AppendDiagnosticsTo($"The command error output did not contain expected result: {pattern}{Environment.NewLine}"));
return new AndConstraint(this);
}
- public AndConstraint NotHaveStdErrContaining(string pattern)
+ internal AndConstraint NotHaveStdErrContaining(string pattern)
{
+ if (_commandResult.StdErr is null)
+ {
+ throw new InvalidOperationException("StdErr for the command was not captured");
+ }
Execute.Assertion.ForCondition(!_commandResult.StdErr.Contains(pattern))
.FailWith(AppendDiagnosticsTo($"The command error output contained a result it should not have contained: {pattern}{Environment.NewLine}"));
return new AndConstraint(this);
}
- public AndConstraint HaveStdErrMatching(string pattern, RegexOptions options = RegexOptions.None)
+ internal AndConstraint HaveStdErrMatching(string pattern, RegexOptions options = RegexOptions.None)
{
+ if (_commandResult.StdErr is null)
+ {
+ throw new InvalidOperationException("StdErr for the command was not captured");
+ }
Execute.Assertion.ForCondition(Regex.Match(_commandResult.StdErr, pattern, options).Success)
.FailWith(AppendDiagnosticsTo($"Matching the command error output failed. Pattern: {pattern}{Environment.NewLine}"));
return new AndConstraint(this);
}
- public AndConstraint NotHaveStdOut()
+ internal AndConstraint NotHaveStdOut()
{
+ if (_commandResult.StdOut is null)
+ {
+ throw new InvalidOperationException("StdOut for the command was not captured");
+ }
Execute.Assertion.ForCondition(string.IsNullOrEmpty(_commandResult.StdOut))
.FailWith(AppendDiagnosticsTo($"Expected command to not output to stdout but it was not:"));
return new AndConstraint(this);
}
- public AndConstraint NotHaveStdErr()
+ internal AndConstraint NotHaveStdErr()
{
+ if (_commandResult.StdErr is null)
+ {
+ throw new InvalidOperationException("StdErr for the command was not captured");
+ }
Execute.Assertion.ForCondition(string.IsNullOrEmpty(_commandResult.StdErr))
.FailWith(AppendDiagnosticsTo("Expected command to not output to stderr but it was not:"));
return new AndConstraint(this);
}
- public AndConstraint HaveSkippedProjectCompilation(string skippedProject, string frameworkFullName)
+ internal AndConstraint HaveSkippedProjectCompilation(string skippedProject, string frameworkFullName)
{
_commandResult.StdOut.Should().Contain($"Project {skippedProject} ({frameworkFullName}) was previously compiled. Skipping compilation.");
return new AndConstraint(this);
}
- public AndConstraint HaveCompiledProject(string compiledProject, string frameworkFullName)
+ internal AndConstraint HaveCompiledProject(string compiledProject, string frameworkFullName)
{
_commandResult.StdOut.Should().Contain($"Project {compiledProject} ({frameworkFullName}) will be compiled");
@@ -184,4 +240,3 @@ private string AppendDiagnosticsTo(string s)
}
}
}
-#endif
diff --git a/tools/Shared/Microsoft.TemplateEngine.CommandUtils/CommandResultExtensions.cs b/tools/Shared/Microsoft.TemplateEngine.CommandUtils/CommandResultExtensions.cs
new file mode 100644
index 00000000000..775e0d339e0
--- /dev/null
+++ b/tools/Shared/Microsoft.TemplateEngine.CommandUtils/CommandResultExtensions.cs
@@ -0,0 +1,13 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+namespace Microsoft.TemplateEngine.CommandUtils
+{
+ internal static class CommandResultExtensions
+ {
+ internal static CommandResultAssertions Should(this CommandResult commandResult)
+ {
+ return new CommandResultAssertions(commandResult);
+ }
+ }
+}
diff --git a/tools/Shared/Microsoft.TemplateEngine.CommandUtils/DotnetCommand.cs b/tools/Shared/Microsoft.TemplateEngine.CommandUtils/DotnetCommand.cs
new file mode 100644
index 00000000000..f6e8a214e2c
--- /dev/null
+++ b/tools/Shared/Microsoft.TemplateEngine.CommandUtils/DotnetCommand.cs
@@ -0,0 +1,40 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using Microsoft.Extensions.Logging;
+using Xunit.Abstractions;
+
+namespace Microsoft.TemplateEngine.CommandUtils
+{
+ internal class DotnetCommand : TestCommand
+ {
+ internal DotnetCommand(ILogger log, string subcommand, params string[] args) : base(log)
+ {
+ Arguments.Add(subcommand);
+ Arguments.AddRange(args);
+ }
+
+ internal DotnetCommand(ITestOutputHelper log, string subcommand, params string[] args) : base(log)
+ {
+ Arguments.Add(subcommand);
+ Arguments.AddRange(args);
+ }
+
+ internal DotnetCommand WithoutTelemetry()
+ {
+ WithEnvironmentVariable("DOTNET_CLI_TELEMETRY_OPTOUT", "true");
+ return this;
+ }
+
+ private protected override SdkCommandSpec CreateCommand(IEnumerable args)
+ {
+ var sdkCommandSpec = new SdkCommandSpec()
+ {
+ FileName = "dotnet",
+ Arguments = args.ToList(),
+ WorkingDirectory = WorkingDirectory
+ };
+ return sdkCommandSpec;
+ }
+ }
+}
diff --git a/tools/Shared/Microsoft.TemplateEngine.CommandUtils/DotnetNewCommand.cs b/tools/Shared/Microsoft.TemplateEngine.CommandUtils/DotnetNewCommand.cs
new file mode 100644
index 00000000000..60a4635bde0
--- /dev/null
+++ b/tools/Shared/Microsoft.TemplateEngine.CommandUtils/DotnetNewCommand.cs
@@ -0,0 +1,64 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using Microsoft.Extensions.Logging;
+using Xunit.Abstractions;
+
+namespace Microsoft.TemplateEngine.CommandUtils
+{
+ internal class DotnetNewCommand : DotnetCommand
+ {
+ private bool _hiveSet;
+
+ internal DotnetNewCommand(ILogger log, params string[] args) : base(log, "new", args)
+ {
+ }
+
+ internal DotnetNewCommand(ITestOutputHelper log, params string[] args) : base(log, "new", args)
+ {
+ }
+
+ internal DotnetNewCommand WithVirtualHive()
+ {
+ Arguments.Add("--debug:ephemeral-hive");
+ _hiveSet = true;
+ return this;
+ }
+
+ internal DotnetNewCommand WithCustomHive(string path)
+ {
+ Arguments.Add("--debug:custom-hive");
+ Arguments.Add(path);
+ _hiveSet = true;
+ return this;
+ }
+
+ internal DotnetNewCommand WithoutCustomHive()
+ {
+ _hiveSet = true;
+ return this;
+ }
+
+ internal DotnetNewCommand WithoutBuiltInTemplates()
+ {
+ Arguments.Add("--debug:disable-sdk-templates");
+ return this;
+ }
+
+ internal DotnetNewCommand WithDebug()
+ {
+ WithEnvironmentVariable("DOTNET_CLI_CONTEXT_VERBOSE", "true");
+ return this;
+ }
+
+ private protected override SdkCommandSpec CreateCommand(IEnumerable args)
+ {
+ if (!_hiveSet)
+ {
+ throw new Exception($"\"--debug:custom-hive\" is not set, call {nameof(WithCustomHive)} to set it or {nameof(WithoutCustomHive)} if it is intentional.");
+ }
+
+ return base.CreateCommand(args);
+ }
+ }
+}
diff --git a/tools/Shared/Microsoft.TemplateEngine.CommandUtils/NativeMethods.cs b/tools/Shared/Microsoft.TemplateEngine.CommandUtils/NativeMethods.cs
new file mode 100644
index 00000000000..aff6d99e622
--- /dev/null
+++ b/tools/Shared/Microsoft.TemplateEngine.CommandUtils/NativeMethods.cs
@@ -0,0 +1,96 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Runtime.InteropServices;
+using Microsoft.Win32.SafeHandles;
+
+namespace Microsoft.TemplateEngine.CommandUtils
+{
+ internal static class NativeMethods
+ {
+ internal static class Windows
+ {
+ internal const int ProcessBasicInformation = 0;
+
+ internal enum JobObjectInfoClass : uint
+ {
+ JobObjectExtendedLimitInformation = 9,
+ }
+
+ [Flags]
+ internal enum JobObjectLimitFlags : uint
+ {
+ JobObjectLimitKillOnJobClose = 0x2000,
+ }
+
+ [DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
+ internal static extern SafeWaitHandle CreateJobObjectW(IntPtr lpJobAttributes, string? lpName);
+
+ [DllImport("kernel32.dll", SetLastError = true)]
+ internal static extern bool SetInformationJobObject(IntPtr hJob, JobObjectInfoClass jobObjectInformationClass, IntPtr lpJobObjectInformation, uint cbJobObjectInformationLength);
+
+ [DllImport("kernel32.dll", SetLastError = true)]
+ internal static extern bool AssignProcessToJobObject(IntPtr hJob, IntPtr hProcess);
+
+ [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
+ [DefaultDllImportSearchPaths(DllImportSearchPath.System32)]
+ internal static extern IntPtr GetCommandLine();
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct JobObjectBasicLimitInformation
+ {
+ public long PerProcessUserTimeLimit;
+ public long PerJobUserTimeLimit;
+ public JobObjectLimitFlags LimitFlags;
+ public UIntPtr MinimumWorkingSetSize;
+ public UIntPtr MaximumWorkingSetSize;
+ public uint ActiveProcessLimit;
+ public UIntPtr Affinity;
+ public uint PriorityClass;
+ public uint SchedulingClass;
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct IoCounters
+ {
+ public ulong ReadOperationCount;
+ public ulong WriteOperationCount;
+ public ulong OtherOperationCount;
+ public ulong ReadTransferCount;
+ public ulong WriteTransferCount;
+ public ulong OtherTransferCount;
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct JobObjectExtendedLimitInformation
+ {
+ public JobObjectBasicLimitInformation BasicLimitInformation;
+ public IoCounters IoInfo;
+ public UIntPtr ProcessMemoryLimit;
+ public UIntPtr JobMemoryLimit;
+ public UIntPtr PeakProcessMemoryUsed;
+ public UIntPtr PeakJobMemoryUsed;
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct PROCESS_BASIC_INFORMATION
+ {
+ public uint ExitStatus;
+ public IntPtr PebBaseAddress;
+ public UIntPtr AffinityMask;
+ public int BasePriority;
+ public UIntPtr UniqueProcessId;
+ public UIntPtr InheritedFromUniqueProcessId;
+ }
+ }
+
+ internal static class Posix
+ {
+ internal const int SIGINT = 2;
+ internal const int SIGTERM = 15;
+
+ [DllImport("libc", SetLastError = true)]
+ internal static extern int kill(int pid, int sig);
+ }
+ }
+}
diff --git a/tools/Shared/Microsoft.TemplateEngine.CommandUtils/ProcessReaper.cs b/tools/Shared/Microsoft.TemplateEngine.CommandUtils/ProcessReaper.cs
new file mode 100644
index 00000000000..ac2ece665d5
--- /dev/null
+++ b/tools/Shared/Microsoft.TemplateEngine.CommandUtils/ProcessReaper.cs
@@ -0,0 +1,194 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Diagnostics;
+using System.Runtime.InteropServices;
+using Microsoft.Win32.SafeHandles;
+
+namespace Microsoft.TemplateEngine.CommandUtils
+{
+ ///
+ /// Responsible for reaping a target process if the current process terminates.
+ ///
+ ///
+ /// On Windows, a job object will be used to ensure the termination of the target
+ /// process (and its tree) even if the current process is rudely terminated.
+ ///
+ /// On POSIX systems, the reaper will handle SIGTERM and attempt to forward the
+ /// signal to the target process only.
+ ///
+ /// The reaper also suppresses SIGINT in the current process to allow the target
+ /// process to handle the signal.
+ ///
+ internal class ProcessReaper : IDisposable
+ {
+ private readonly Process _process;
+ private SafeWaitHandle? _job;
+ private Mutex? _shutdownMutex;
+
+ ///
+ /// Creates a new process reaper.
+ ///
+ /// The target process to reap if the current process terminates. The process should not yet be started.
+ public ProcessReaper(Process process)
+ {
+ _process = process;
+
+ // The tests need the event handlers registered prior to spawning the child to prevent a race
+ // where the child writes output the test expects before the intermediate dotnet process
+ // has registered the event handlers to handle the signals the tests will generate.
+ Console.CancelKeyPress += HandleCancelKeyPress;
+ if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
+ {
+ _shutdownMutex = new Mutex();
+ AppDomain.CurrentDomain.ProcessExit += HandleProcessExit;
+ }
+ }
+
+ ///
+ /// Call to notify the reaper that the process has started.
+ ///
+ public void NotifyProcessStarted()
+ {
+ if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
+ {
+ // Limit the use of job objects to versions of Windows that support nested jobs (i.e. Windows 8/2012 or later).
+ // Ideally, we would check for some new API export or OS feature instead of the OS version,
+ // but nested jobs are transparently implemented with respect to the Job Objects API.
+ // Note: Windows 8.1 and later may report as Windows 8 (see https://docs.microsoft.com/en-us/windows/desktop/sysinfo/operating-system-version).
+ // However, for the purpose of this check that is still sufficient.
+ if (Environment.OSVersion.Version.Major > 6 ||
+ (Environment.OSVersion.Version.Major == 6 && Environment.OSVersion.Version.Minor >= 2))
+ {
+ _job = AssignProcessToJobObject(_process.Handle);
+ }
+ }
+ }
+
+ public void Dispose()
+ {
+ if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
+ {
+ if (_job != null)
+ {
+ // Clear the kill on close flag because the child process terminated successfully
+ // If this fails, then we have no choice but to terminate any remaining processes in the job
+ SetKillOnJobClose(_job.DangerousGetHandle(), false);
+
+ _job.Dispose();
+ _job = null;
+ }
+ }
+ else
+ {
+ AppDomain.CurrentDomain.ProcessExit -= HandleProcessExit;
+
+ // If there's been a shutdown via the process exit handler,
+ // this will block the current thread so we don't race with the CLR shutdown
+ // from the signal handler.
+ if (_shutdownMutex != null)
+ {
+ _shutdownMutex.WaitOne();
+ _shutdownMutex.ReleaseMutex();
+ _shutdownMutex.Dispose();
+ _shutdownMutex = null;
+ }
+ }
+
+ Console.CancelKeyPress -= HandleCancelKeyPress;
+ }
+
+ private static void HandleCancelKeyPress(object? sender, ConsoleCancelEventArgs e)
+ {
+ // Ignore SIGINT/SIGQUIT so that the process can handle the signal
+ e.Cancel = true;
+ }
+
+ private static SafeWaitHandle? AssignProcessToJobObject(IntPtr process)
+ {
+ var job = NativeMethods.Windows.CreateJobObjectW(IntPtr.Zero, null);
+ if (job == null || job.IsInvalid)
+ {
+ return null;
+ }
+
+ if (!SetKillOnJobClose(job.DangerousGetHandle(), true))
+ {
+ job.Dispose();
+ return null;
+ }
+
+ if (!NativeMethods.Windows.AssignProcessToJobObject(job.DangerousGetHandle(), process))
+ {
+ job.Dispose();
+ return null;
+ }
+
+ return job;
+ }
+
+ private static bool SetKillOnJobClose(IntPtr job, bool value)
+ {
+ var information = new NativeMethods.Windows.JobObjectExtendedLimitInformation
+ {
+ BasicLimitInformation = new NativeMethods.Windows.JobObjectBasicLimitInformation
+ {
+ LimitFlags = value ? NativeMethods.Windows.JobObjectLimitFlags.JobObjectLimitKillOnJobClose : 0
+ }
+ };
+
+ var length = Marshal.SizeOf(typeof(NativeMethods.Windows.JobObjectExtendedLimitInformation));
+ var informationPtr = Marshal.AllocHGlobal(length);
+
+ try
+ {
+ Marshal.StructureToPtr(information, informationPtr, false);
+
+ if (!NativeMethods.Windows.SetInformationJobObject(
+ job,
+ NativeMethods.Windows.JobObjectInfoClass.JobObjectExtendedLimitInformation,
+ informationPtr,
+ (uint)length))
+ {
+ return false;
+ }
+
+ return true;
+ }
+ finally
+ {
+ Marshal.FreeHGlobal(informationPtr);
+ }
+ }
+
+ private void HandleProcessExit(object? sender, EventArgs args)
+ {
+ int processId;
+ try
+ {
+ processId = _process.Id;
+ }
+ catch (InvalidOperationException)
+ {
+ // The process hasn't started yet; nothing to signal
+ return;
+ }
+
+ // Take ownership of the shutdown mutex; this will ensure that the other
+ // thread also waiting on the process to exit won't complete CLR shutdown before
+ // this one does.
+ _shutdownMutex?.WaitOne();
+
+ if (!_process.WaitForExit(0) && NativeMethods.Posix.kill(processId, NativeMethods.Posix.SIGTERM) != 0)
+ {
+ // Couldn't send the signal, don't wait
+ return;
+ }
+
+ // If SIGTERM was ignored by the target, then we'll still wait
+ _process.WaitForExit();
+
+ Environment.ExitCode = _process.ExitCode;
+ }
+ }
+}
diff --git a/src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/Commands/SdkCommandSpec.cs b/tools/Shared/Microsoft.TemplateEngine.CommandUtils/SdkCommandSpec.cs
similarity index 94%
rename from src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/Commands/SdkCommandSpec.cs
rename to tools/Shared/Microsoft.TemplateEngine.CommandUtils/SdkCommandSpec.cs
index 18c8d3fe9be..91617042a40 100644
--- a/src/Microsoft.TemplateEngine.Authoring.TemplateVerifier/Commands/SdkCommandSpec.cs
+++ b/tools/Shared/Microsoft.TemplateEngine.CommandUtils/SdkCommandSpec.cs
@@ -2,9 +2,8 @@
// The .NET Foundation licenses this file to you under the MIT license.
using System.Diagnostics;
-using Microsoft.DotNet.Cli.Utils;
-namespace Microsoft.TemplateEngine.Authoring.TemplateVerifier.Commands
+namespace Microsoft.TemplateEngine.CommandUtils
{
internal class SdkCommandSpec
{
diff --git a/tools/Shared/Microsoft.TemplateEngine.CommandUtils/StreamForwarder.cs b/tools/Shared/Microsoft.TemplateEngine.CommandUtils/StreamForwarder.cs
new file mode 100644
index 00000000000..4851959c7ba
--- /dev/null
+++ b/tools/Shared/Microsoft.TemplateEngine.CommandUtils/StreamForwarder.cs
@@ -0,0 +1,126 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Text;
+
+namespace Microsoft.TemplateEngine.CommandUtils
+{
+ internal sealed class StreamForwarder
+ {
+ private const char FlushBuilderCharacter = '\n';
+ private static readonly char[] IgnoreCharacters = new char[] { '\r' };
+
+ private StringBuilder? _builder;
+ private StringWriter? _capture;
+ private Action? _writeLine;
+ private bool _trimTrailingCapturedNewline;
+
+ public string? CapturedOutput
+ {
+ get
+ {
+ string? capture = _capture?.GetStringBuilder()?.ToString();
+ if (_trimTrailingCapturedNewline)
+ {
+ capture = capture?.TrimEnd('\r', '\n');
+ }
+ return capture;
+ }
+ }
+
+ public StreamForwarder Capture(bool trimTrailingNewline = false)
+ {
+ ThrowIfCaptureSet();
+
+ _capture = new StringWriter();
+ _trimTrailingCapturedNewline = trimTrailingNewline;
+
+ return this;
+ }
+
+ public StreamForwarder ForwardTo(Action writeLine)
+ {
+ ThrowIfNull(writeLine);
+
+ ThrowIfForwarderSet();
+
+ _writeLine = writeLine;
+
+ return this;
+ }
+
+ public Task BeginRead(TextReader reader) => Task.Run(() => Read(reader));
+
+ public void Read(TextReader reader)
+ {
+ int bufferSize = 1;
+ char currentCharacter;
+
+ char[] buffer = new char[bufferSize];
+ _builder = new StringBuilder();
+
+ // Using Read with buffer size 1 to prevent looping endlessly
+ // like we would when using Read() with no buffer
+ while ((_ = reader.Read(buffer, 0, bufferSize)) > 0)
+ {
+ currentCharacter = buffer[0];
+
+ if (currentCharacter == FlushBuilderCharacter)
+ {
+ WriteBuilder();
+ }
+ else if (!IgnoreCharacters.Contains(currentCharacter))
+ {
+ _ = _builder.Append(currentCharacter);
+ }
+ }
+
+ // Flush anything else when the stream is closed
+ // Which should only happen if someone used console.Write
+ if (_builder.Length > 0)
+ {
+ WriteBuilder();
+ }
+ }
+
+ private void WriteBuilder()
+ {
+ WriteLine(_builder?.ToString());
+ _ = (_builder?.Clear());
+ }
+
+ private void WriteLine(string? str)
+ {
+ _capture?.WriteLine(str);
+
+ if (_writeLine != null && str != null)
+ {
+ _writeLine(str);
+ }
+ }
+
+ private void ThrowIfNull(object obj)
+ {
+ if (obj == null)
+ {
+ throw new ArgumentNullException(nameof(obj));
+ }
+ }
+
+ private void ThrowIfForwarderSet()
+ {
+ if (_writeLine != null)
+ {
+ throw new InvalidOperationException("WriteLine forwarder set previously");
+ }
+ }
+
+ private void ThrowIfCaptureSet()
+ {
+ if (_capture != null)
+ {
+ throw new InvalidOperationException("Already capturing stream!");
+ }
+ }
+ }
+}
diff --git a/tools/Shared/Microsoft.TemplateEngine.CommandUtils/TestCommand.cs b/tools/Shared/Microsoft.TemplateEngine.CommandUtils/TestCommand.cs
new file mode 100644
index 00000000000..2755a5d133a
--- /dev/null
+++ b/tools/Shared/Microsoft.TemplateEngine.CommandUtils/TestCommand.cs
@@ -0,0 +1,150 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Diagnostics;
+using Microsoft.Extensions.Logging;
+using Xunit.Abstractions;
+
+namespace Microsoft.TemplateEngine.CommandUtils
+{
+ internal abstract class TestCommand
+ {
+ private readonly LoggerWrapper _loggerWrapper;
+
+ protected TestCommand(ITestOutputHelper log)
+ {
+ _loggerWrapper = new LoggerWrapper(log);
+ }
+
+ protected TestCommand(ILogger log)
+ {
+ _loggerWrapper = new LoggerWrapper(log);
+ }
+
+ internal string? WorkingDirectory { get; set; }
+
+ internal List Arguments { get; set; } = new List();
+
+ internal List EnvironmentToRemove { get; } = new List();
+
+ // These only work via Execute(), not when using GetProcessStartInfo()
+ internal Action? CommandOutputHandler { get; set; }
+
+ internal Action? ProcessStartedHandler { get; set; }
+
+ protected Dictionary Environment { get; set; } = new Dictionary();
+
+ internal TestCommand WithEnvironmentVariable(string name, string value)
+ {
+ Environment[name] = value;
+ return this;
+ }
+
+ internal TestCommand WithWorkingDirectory(string workingDirectory)
+ {
+ WorkingDirectory = workingDirectory;
+ return this;
+ }
+
+ internal ProcessStartInfo GetProcessStartInfo(params string[] args)
+ {
+ SdkCommandSpec commandSpec = CreateCommandSpec(args);
+
+ var psi = commandSpec.ToProcessStartInfo();
+
+ return psi;
+ }
+
+ internal CommandResult Execute(params string[] args)
+ {
+ IEnumerable enumerableArgs = args;
+ return Execute(enumerableArgs);
+ }
+
+ internal virtual CommandResult Execute(IEnumerable args)
+ {
+ Command command = CreateCommandSpec(args)
+ .ToCommand()
+ .CaptureStdOut()
+ .CaptureStdErr();
+
+ if (CommandOutputHandler != null)
+ {
+ command.OnOutputLine(CommandOutputHandler);
+ }
+
+ var result = command.Execute(ProcessStartedHandler);
+
+ _loggerWrapper.WriteLine($"> {result.StartInfo.FileName} {result.StartInfo.Arguments}");
+ _loggerWrapper.WriteLine(result.StdOut);
+
+ if (!string.IsNullOrEmpty(result.StdErr))
+ {
+ _loggerWrapper.WriteLine(string.Empty);
+ _loggerWrapper.WriteLine("StdErr:");
+ _loggerWrapper.WriteLine(result.StdErr);
+ }
+
+ if (result.ExitCode != 0)
+ {
+ _loggerWrapper.WriteLine($"Exit Code: {result.ExitCode}");
+ }
+
+ return result;
+ }
+
+ private protected abstract SdkCommandSpec CreateCommand(IEnumerable args);
+
+ private SdkCommandSpec CreateCommandSpec(IEnumerable args)
+ {
+ var commandSpec = CreateCommand(args);
+ foreach (var kvp in Environment)
+ {
+ commandSpec.Environment[kvp.Key] = kvp.Value;
+ }
+
+ foreach (var envToRemove in EnvironmentToRemove)
+ {
+ commandSpec.EnvironmentToRemove.Add(envToRemove);
+ }
+
+ if (WorkingDirectory != null)
+ {
+ commandSpec.WorkingDirectory = WorkingDirectory;
+ }
+
+ if (Arguments.Any())
+ {
+ commandSpec.Arguments = Arguments.Concat(commandSpec.Arguments).ToList();
+ }
+
+ return commandSpec;
+ }
+
+ private class LoggerWrapper
+ {
+ private readonly ILogger? _logger;
+ private readonly ITestOutputHelper? _testHelper;
+
+ internal LoggerWrapper(ILogger logger)
+ {
+ _logger = logger;
+ }
+
+ internal LoggerWrapper(ITestOutputHelper logger)
+ {
+ _testHelper = logger;
+ }
+
+ internal void WriteLine(string? message)
+ {
+ if (message is null)
+ {
+ return;
+ }
+ _logger?.Log(LogLevel.Information, message);
+ _testHelper?.WriteLine(message);
+ }
+ }
+ }
+}
diff --git a/tools/AcquireDotnet.ps1 b/tools/legacy-tools/AcquireDotnet.ps1
similarity index 100%
rename from tools/AcquireDotnet.ps1
rename to tools/legacy-tools/AcquireDotnet.ps1
diff --git a/tools/BaselineComparer/BaselineComparer.sln b/tools/legacy-tools/BaselineComparer/BaselineComparer.sln
similarity index 100%
rename from tools/BaselineComparer/BaselineComparer.sln
rename to tools/legacy-tools/BaselineComparer/BaselineComparer.sln
diff --git a/tools/BaselineComparer/BaselineComparer/BaselineCommandData.cs b/tools/legacy-tools/BaselineComparer/BaselineComparer/BaselineCommandData.cs
similarity index 100%
rename from tools/BaselineComparer/BaselineComparer/BaselineCommandData.cs
rename to tools/legacy-tools/BaselineComparer/BaselineComparer/BaselineCommandData.cs
diff --git a/tools/BaselineComparer/BaselineComparer/BaselineComparer.csproj b/tools/legacy-tools/BaselineComparer/BaselineComparer/BaselineComparer.csproj
similarity index 100%
rename from tools/BaselineComparer/BaselineComparer/BaselineComparer.csproj
rename to tools/legacy-tools/BaselineComparer/BaselineComparer/BaselineComparer.csproj
diff --git a/tools/BaselineComparer/BaselineComparer/BaselineCreator.cs b/tools/legacy-tools/BaselineComparer/BaselineComparer/BaselineCreator.cs
similarity index 100%
rename from tools/BaselineComparer/BaselineComparer/BaselineCreator.cs
rename to tools/legacy-tools/BaselineComparer/BaselineComparer/BaselineCreator.cs
diff --git a/tools/BaselineComparer/BaselineComparer/BaselineMasterReport.cs b/tools/legacy-tools/BaselineComparer/BaselineComparer/BaselineMasterReport.cs
similarity index 100%
rename from tools/BaselineComparer/BaselineComparer/BaselineMasterReport.cs
rename to tools/legacy-tools/BaselineComparer/BaselineComparer/BaselineMasterReport.cs
diff --git a/tools/BaselineComparer/BaselineComparer/BaselineReportCreator.cs b/tools/legacy-tools/BaselineComparer/BaselineComparer/BaselineReportCreator.cs
similarity index 100%
rename from tools/BaselineComparer/BaselineComparer/BaselineReportCreator.cs
rename to tools/legacy-tools/BaselineComparer/BaselineComparer/BaselineReportCreator.cs
diff --git a/tools/BaselineComparer/BaselineComparer/BufferedReadStream.cs b/tools/legacy-tools/BaselineComparer/BaselineComparer/BufferedReadStream.cs
similarity index 100%
rename from tools/BaselineComparer/BaselineComparer/BufferedReadStream.cs
rename to tools/legacy-tools/BaselineComparer/BaselineComparer/BufferedReadStream.cs
diff --git a/tools/BaselineComparer/BaselineComparer/CommandBaseline.cs b/tools/legacy-tools/BaselineComparer/BaselineComparer/CommandBaseline.cs
similarity index 100%
rename from tools/BaselineComparer/BaselineComparer/CommandBaseline.cs
rename to tools/legacy-tools/BaselineComparer/BaselineComparer/CommandBaseline.cs
diff --git a/tools/BaselineComparer/BaselineComparer/ComparisonComparisonReportCreator.cs b/tools/legacy-tools/BaselineComparer/BaselineComparer/ComparisonComparisonReportCreator.cs
similarity index 100%
rename from tools/BaselineComparer/BaselineComparer/ComparisonComparisonReportCreator.cs
rename to tools/legacy-tools/BaselineComparer/BaselineComparer/ComparisonComparisonReportCreator.cs
diff --git a/tools/BaselineComparer/BaselineComparer/CustomHiveCoordinator.cs b/tools/legacy-tools/BaselineComparer/BaselineComparer/CustomHiveCoordinator.cs
similarity index 100%
rename from tools/BaselineComparer/BaselineComparer/CustomHiveCoordinator.cs
rename to tools/legacy-tools/BaselineComparer/BaselineComparer/CustomHiveCoordinator.cs
diff --git a/tools/BaselineComparer/BaselineComparer/DifferenceComparison/DirectoryComparisonDifference.cs b/tools/legacy-tools/BaselineComparer/BaselineComparer/DifferenceComparison/DirectoryComparisonDifference.cs
similarity index 100%
rename from tools/BaselineComparer/BaselineComparer/DifferenceComparison/DirectoryComparisonDifference.cs
rename to tools/legacy-tools/BaselineComparer/BaselineComparer/DifferenceComparison/DirectoryComparisonDifference.cs
diff --git a/tools/BaselineComparer/BaselineComparer/DifferenceComparison/DirectoryDifferenceComparer.cs b/tools/legacy-tools/BaselineComparer/BaselineComparer/DifferenceComparison/DirectoryDifferenceComparer.cs
similarity index 100%
rename from tools/BaselineComparer/BaselineComparer/DifferenceComparison/DirectoryDifferenceComparer.cs
rename to tools/legacy-tools/BaselineComparer/BaselineComparer/DifferenceComparison/DirectoryDifferenceComparer.cs
diff --git a/tools/BaselineComparer/BaselineComparer/DifferenceComparison/FileComparisonDifference.cs b/tools/legacy-tools/BaselineComparer/BaselineComparer/DifferenceComparison/FileComparisonDifference.cs
similarity index 100%
rename from tools/BaselineComparer/BaselineComparer/DifferenceComparison/FileComparisonDifference.cs
rename to tools/legacy-tools/BaselineComparer/BaselineComparer/DifferenceComparison/FileComparisonDifference.cs
diff --git a/tools/BaselineComparer/BaselineComparer/DifferenceComparison/FileDifferenceComparer.cs b/tools/legacy-tools/BaselineComparer/BaselineComparer/DifferenceComparison/FileDifferenceComparer.cs
similarity index 100%
rename from tools/BaselineComparer/BaselineComparer/DifferenceComparison/FileDifferenceComparer.cs
rename to tools/legacy-tools/BaselineComparer/BaselineComparer/DifferenceComparison/FileDifferenceComparer.cs
diff --git a/tools/BaselineComparer/BaselineComparer/DifferenceComparison/PositionalComparisonDifference.cs b/tools/legacy-tools/BaselineComparer/BaselineComparer/DifferenceComparison/PositionalComparisonDifference.cs
similarity index 100%
rename from tools/BaselineComparer/BaselineComparer/DifferenceComparison/PositionalComparisonDifference.cs
rename to tools/legacy-tools/BaselineComparer/BaselineComparer/DifferenceComparison/PositionalComparisonDifference.cs
diff --git a/tools/BaselineComparer/BaselineComparer/DifferenceComparison/StructuredDirectoryComparisonDifference.cs b/tools/legacy-tools/BaselineComparer/BaselineComparer/DifferenceComparison/StructuredDirectoryComparisonDifference.cs
similarity index 100%
rename from tools/BaselineComparer/BaselineComparer/DifferenceComparison/StructuredDirectoryComparisonDifference.cs
rename to tools/legacy-tools/BaselineComparer/BaselineComparer/DifferenceComparison/StructuredDirectoryComparisonDifference.cs
diff --git a/tools/BaselineComparer/BaselineComparer/DifferenceComparison/StructuredFileComparisonDifference.cs b/tools/legacy-tools/BaselineComparer/BaselineComparer/DifferenceComparison/StructuredFileComparisonDifference.cs
similarity index 100%
rename from tools/BaselineComparer/BaselineComparer/DifferenceComparison/StructuredFileComparisonDifference.cs
rename to tools/legacy-tools/BaselineComparer/BaselineComparer/DifferenceComparison/StructuredFileComparisonDifference.cs
diff --git a/tools/BaselineComparer/BaselineComparer/DifferenceComparison/StructuredPositionalComparisonDifference.cs b/tools/legacy-tools/BaselineComparer/BaselineComparer/DifferenceComparison/StructuredPositionalComparisonDifference.cs
similarity index 100%
rename from tools/BaselineComparer/BaselineComparer/DifferenceComparison/StructuredPositionalComparisonDifference.cs
rename to tools/legacy-tools/BaselineComparer/BaselineComparer/DifferenceComparison/StructuredPositionalComparisonDifference.cs
diff --git a/tools/BaselineComparer/BaselineComparer/Helpers/DirectoryCopy.cs b/tools/legacy-tools/BaselineComparer/BaselineComparer/Helpers/DirectoryCopy.cs
similarity index 100%
rename from tools/BaselineComparer/BaselineComparer/Helpers/DirectoryCopy.cs
rename to tools/legacy-tools/BaselineComparer/BaselineComparer/Helpers/DirectoryCopy.cs
diff --git a/tools/BaselineComparer/BaselineComparer/Helpers/Proc.cs b/tools/legacy-tools/BaselineComparer/BaselineComparer/Helpers/Proc.cs
similarity index 100%
rename from tools/BaselineComparer/BaselineComparer/Helpers/Proc.cs
rename to tools/legacy-tools/BaselineComparer/BaselineComparer/Helpers/Proc.cs
diff --git a/tools/BaselineComparer/BaselineComparer/Helpers/ProcessEx.cs b/tools/legacy-tools/BaselineComparer/BaselineComparer/Helpers/ProcessEx.cs
similarity index 100%
rename from tools/BaselineComparer/BaselineComparer/Helpers/ProcessEx.cs
rename to tools/legacy-tools/BaselineComparer/BaselineComparer/Helpers/ProcessEx.cs
diff --git a/tools/BaselineComparer/BaselineComparer/Helpers/TemplateCommandReader.cs b/tools/legacy-tools/BaselineComparer/BaselineComparer/Helpers/TemplateCommandReader.cs
similarity index 100%
rename from tools/BaselineComparer/BaselineComparer/Helpers/TemplateCommandReader.cs
rename to tools/legacy-tools/BaselineComparer/BaselineComparer/Helpers/TemplateCommandReader.cs
diff --git a/tools/BaselineComparer/BaselineComparer/Helpers/TemplateCommandRunner.cs b/tools/legacy-tools/BaselineComparer/BaselineComparer/Helpers/TemplateCommandRunner.cs
similarity index 100%
rename from tools/BaselineComparer/BaselineComparer/Helpers/TemplateCommandRunner.cs
rename to tools/legacy-tools/BaselineComparer/BaselineComparer/Helpers/TemplateCommandRunner.cs
diff --git a/tools/BaselineComparer/BaselineComparer/Helpers/TemplateDataCreator.cs b/tools/legacy-tools/BaselineComparer/BaselineComparer/Helpers/TemplateDataCreator.cs
similarity index 100%
rename from tools/BaselineComparer/BaselineComparer/Helpers/TemplateDataCreator.cs
rename to tools/legacy-tools/BaselineComparer/BaselineComparer/Helpers/TemplateDataCreator.cs
diff --git a/tools/BaselineComparer/BaselineComparer/InvocationBaselineUnit.cs b/tools/legacy-tools/BaselineComparer/BaselineComparer/InvocationBaselineUnit.cs
similarity index 100%
rename from tools/BaselineComparer/BaselineComparer/InvocationBaselineUnit.cs
rename to tools/legacy-tools/BaselineComparer/BaselineComparer/InvocationBaselineUnit.cs
diff --git a/tools/BaselineComparer/BaselineComparer/InvocationCommandData.cs b/tools/legacy-tools/BaselineComparer/BaselineComparer/InvocationCommandData.cs
similarity index 100%
rename from tools/BaselineComparer/BaselineComparer/InvocationCommandData.cs
rename to tools/legacy-tools/BaselineComparer/BaselineComparer/InvocationCommandData.cs
diff --git a/tools/BaselineComparer/BaselineComparer/InvocationUnit.cs b/tools/legacy-tools/BaselineComparer/BaselineComparer/InvocationUnit.cs
similarity index 100%
rename from tools/BaselineComparer/BaselineComparer/InvocationUnit.cs
rename to tools/legacy-tools/BaselineComparer/BaselineComparer/InvocationUnit.cs
diff --git a/tools/BaselineComparer/BaselineComparer/Program.cs b/tools/legacy-tools/BaselineComparer/BaselineComparer/Program.cs
similarity index 100%
rename from tools/BaselineComparer/BaselineComparer/Program.cs
rename to tools/legacy-tools/BaselineComparer/BaselineComparer/Program.cs
diff --git a/tools/BaselineComparer/BaselineComparer/TemplateCompareToBaselineReportCreator.cs b/tools/legacy-tools/BaselineComparer/BaselineComparer/TemplateCompareToBaselineReportCreator.cs
similarity index 100%
rename from tools/BaselineComparer/BaselineComparer/TemplateCompareToBaselineReportCreator.cs
rename to tools/legacy-tools/BaselineComparer/BaselineComparer/TemplateCompareToBaselineReportCreator.cs
diff --git a/tools/BaselineComparer/BaselineComparer/TemplateComparison/DirectoryComparer.cs b/tools/legacy-tools/BaselineComparer/BaselineComparer/TemplateComparison/DirectoryComparer.cs
similarity index 100%
rename from tools/BaselineComparer/BaselineComparer/TemplateComparison/DirectoryComparer.cs
rename to tools/legacy-tools/BaselineComparer/BaselineComparer/TemplateComparison/DirectoryComparer.cs
diff --git a/tools/BaselineComparer/BaselineComparer/TemplateComparison/DirectoryDifference.cs b/tools/legacy-tools/BaselineComparer/BaselineComparer/TemplateComparison/DirectoryDifference.cs
similarity index 100%
rename from tools/BaselineComparer/BaselineComparer/TemplateComparison/DirectoryDifference.cs
rename to tools/legacy-tools/BaselineComparer/BaselineComparer/TemplateComparison/DirectoryDifference.cs
diff --git a/tools/BaselineComparer/BaselineComparer/TemplateComparison/FileComparer.cs b/tools/legacy-tools/BaselineComparer/BaselineComparer/TemplateComparison/FileComparer.cs
similarity index 100%
rename from tools/BaselineComparer/BaselineComparer/TemplateComparison/FileComparer.cs
rename to tools/legacy-tools/BaselineComparer/BaselineComparer/TemplateComparison/FileComparer.cs
diff --git a/tools/BaselineComparer/BaselineComparer/TemplateComparison/FileDifference.cs b/tools/legacy-tools/BaselineComparer/BaselineComparer/TemplateComparison/FileDifference.cs
similarity index 100%
rename from tools/BaselineComparer/BaselineComparer/TemplateComparison/FileDifference.cs
rename to tools/legacy-tools/BaselineComparer/BaselineComparer/TemplateComparison/FileDifference.cs
diff --git a/tools/BaselineComparer/BaselineComparer/TemplateComparison/PositionalDifference.cs b/tools/legacy-tools/BaselineComparer/BaselineComparer/TemplateComparison/PositionalDifference.cs
similarity index 100%
rename from tools/BaselineComparer/BaselineComparer/TemplateComparison/PositionalDifference.cs
rename to tools/legacy-tools/BaselineComparer/BaselineComparer/TemplateComparison/PositionalDifference.cs
diff --git a/tools/BaselineComparer/BaselineComparerTests/BaselineComparerTests.csproj b/tools/legacy-tools/BaselineComparer/BaselineComparerTests/BaselineComparerTests.csproj
similarity index 100%
rename from tools/BaselineComparer/BaselineComparerTests/BaselineComparerTests.csproj
rename to tools/legacy-tools/BaselineComparer/BaselineComparerTests/BaselineComparerTests.csproj
diff --git a/tools/BaselineComparer/BaselineComparerTests/FileDifferenceComparisonTests.cs b/tools/legacy-tools/BaselineComparer/BaselineComparerTests/FileDifferenceComparisonTests.cs
similarity index 100%
rename from tools/BaselineComparer/BaselineComparerTests/FileDifferenceComparisonTests.cs
rename to tools/legacy-tools/BaselineComparer/BaselineComparerTests/FileDifferenceComparisonTests.cs
diff --git a/tools/ComparisonCleanup/ComparisonCleanup.csproj b/tools/legacy-tools/ComparisonCleanup/ComparisonCleanup.csproj
similarity index 100%
rename from tools/ComparisonCleanup/ComparisonCleanup.csproj
rename to tools/legacy-tools/ComparisonCleanup/ComparisonCleanup.csproj
diff --git a/tools/ComparisonCleanup/Program.cs b/tools/legacy-tools/ComparisonCleanup/Program.cs
similarity index 100%
rename from tools/ComparisonCleanup/Program.cs
rename to tools/legacy-tools/ComparisonCleanup/Program.cs
diff --git a/tools/DependencyUpdater/DependencyUpdater.csproj b/tools/legacy-tools/DependencyUpdater/DependencyUpdater.csproj
similarity index 100%
rename from tools/DependencyUpdater/DependencyUpdater.csproj
rename to tools/legacy-tools/DependencyUpdater/DependencyUpdater.csproj
diff --git a/tools/DependencyUpdater/EncodingUtil.cs b/tools/legacy-tools/DependencyUpdater/EncodingUtil.cs
similarity index 100%
rename from tools/DependencyUpdater/EncodingUtil.cs
rename to tools/legacy-tools/DependencyUpdater/EncodingUtil.cs
diff --git a/tools/DependencyUpdater/Program.cs b/tools/legacy-tools/DependencyUpdater/Program.cs
similarity index 100%
rename from tools/DependencyUpdater/Program.cs
rename to tools/legacy-tools/DependencyUpdater/Program.cs
diff --git a/tools/ProjectTestRunner/Battery.cs b/tools/legacy-tools/ProjectTestRunner/Battery.cs
similarity index 100%
rename from tools/ProjectTestRunner/Battery.cs
rename to tools/legacy-tools/ProjectTestRunner/Battery.cs
diff --git a/tools/ProjectTestRunner/HandlerResults/ExecuteHandlerResult.cs b/tools/legacy-tools/ProjectTestRunner/HandlerResults/ExecuteHandlerResult.cs
similarity index 100%
rename from tools/ProjectTestRunner/HandlerResults/ExecuteHandlerResult.cs
rename to tools/legacy-tools/ProjectTestRunner/HandlerResults/ExecuteHandlerResult.cs
diff --git a/tools/ProjectTestRunner/HandlerResults/GenericHandlerResult.cs b/tools/legacy-tools/ProjectTestRunner/HandlerResults/GenericHandlerResult.cs
similarity index 100%
rename from tools/ProjectTestRunner/HandlerResults/GenericHandlerResult.cs
rename to tools/legacy-tools/ProjectTestRunner/HandlerResults/GenericHandlerResult.cs
diff --git a/tools/ProjectTestRunner/HandlerResults/IHandlerResult.cs b/tools/legacy-tools/ProjectTestRunner/HandlerResults/IHandlerResult.cs
similarity index 100%
rename from tools/ProjectTestRunner/HandlerResults/IHandlerResult.cs
rename to tools/legacy-tools/ProjectTestRunner/HandlerResults/IHandlerResult.cs
diff --git a/tools/ProjectTestRunner/Handlers/DirectoryInspectHandler.cs b/tools/legacy-tools/ProjectTestRunner/Handlers/DirectoryInspectHandler.cs
similarity index 100%
rename from tools/ProjectTestRunner/Handlers/DirectoryInspectHandler.cs
rename to tools/legacy-tools/ProjectTestRunner/Handlers/DirectoryInspectHandler.cs
diff --git a/tools/ProjectTestRunner/Handlers/ExecuteHandler.cs b/tools/legacy-tools/ProjectTestRunner/Handlers/ExecuteHandler.cs
similarity index 100%
rename from tools/ProjectTestRunner/Handlers/ExecuteHandler.cs
rename to tools/legacy-tools/ProjectTestRunner/Handlers/ExecuteHandler.cs
diff --git a/tools/ProjectTestRunner/Handlers/FileInspectHandler.cs b/tools/legacy-tools/ProjectTestRunner/Handlers/FileInspectHandler.cs
similarity index 100%
rename from tools/ProjectTestRunner/Handlers/FileInspectHandler.cs
rename to tools/legacy-tools/ProjectTestRunner/Handlers/FileInspectHandler.cs
diff --git a/tools/ProjectTestRunner/Handlers/FindProcessHandler.cs b/tools/legacy-tools/ProjectTestRunner/Handlers/FindProcessHandler.cs
similarity index 100%
rename from tools/ProjectTestRunner/Handlers/FindProcessHandler.cs
rename to tools/legacy-tools/ProjectTestRunner/Handlers/FindProcessHandler.cs
diff --git a/tools/ProjectTestRunner/Handlers/HttpRequestHandler.cs b/tools/legacy-tools/ProjectTestRunner/Handlers/HttpRequestHandler.cs
similarity index 100%
rename from tools/ProjectTestRunner/Handlers/HttpRequestHandler.cs
rename to tools/legacy-tools/ProjectTestRunner/Handlers/HttpRequestHandler.cs
diff --git a/tools/ProjectTestRunner/Handlers/IHandler.cs b/tools/legacy-tools/ProjectTestRunner/Handlers/IHandler.cs
similarity index 100%
rename from tools/ProjectTestRunner/Handlers/IHandler.cs
rename to tools/legacy-tools/ProjectTestRunner/Handlers/IHandler.cs
diff --git a/tools/ProjectTestRunner/Handlers/TaskKillHandler.cs b/tools/legacy-tools/ProjectTestRunner/Handlers/TaskKillHandler.cs
similarity index 100%
rename from tools/ProjectTestRunner/Handlers/TaskKillHandler.cs
rename to tools/legacy-tools/ProjectTestRunner/Handlers/TaskKillHandler.cs
diff --git a/tools/ProjectTestRunner/Helpers/OutputHelperHelper.cs b/tools/legacy-tools/ProjectTestRunner/Helpers/OutputHelperHelper.cs
similarity index 100%
rename from tools/ProjectTestRunner/Helpers/OutputHelperHelper.cs
rename to tools/legacy-tools/ProjectTestRunner/Helpers/OutputHelperHelper.cs
diff --git a/tools/ProjectTestRunner/Helpers/PrettyTheoryAttribute.cs b/tools/legacy-tools/ProjectTestRunner/Helpers/PrettyTheoryAttribute.cs
similarity index 100%
rename from tools/ProjectTestRunner/Helpers/PrettyTheoryAttribute.cs
rename to tools/legacy-tools/ProjectTestRunner/Helpers/PrettyTheoryAttribute.cs
diff --git a/tools/ProjectTestRunner/Helpers/Proc.cs b/tools/legacy-tools/ProjectTestRunner/Helpers/Proc.cs
similarity index 100%
rename from tools/ProjectTestRunner/Helpers/Proc.cs
rename to tools/legacy-tools/ProjectTestRunner/Helpers/Proc.cs
diff --git a/tools/ProjectTestRunner/Helpers/ProcessEx.cs b/tools/legacy-tools/ProjectTestRunner/Helpers/ProcessEx.cs
similarity index 100%
rename from tools/ProjectTestRunner/Helpers/ProcessEx.cs
rename to tools/legacy-tools/ProjectTestRunner/Helpers/ProcessEx.cs
diff --git a/tools/ProjectTestRunner/ProjectTestRunner.csproj b/tools/legacy-tools/ProjectTestRunner/ProjectTestRunner.csproj
similarity index 100%
rename from tools/ProjectTestRunner/ProjectTestRunner.csproj
rename to tools/legacy-tools/ProjectTestRunner/ProjectTestRunner.csproj
diff --git a/tools/ProjectTestRunner/TestCases/3rdParty/CSharp/BoilerPlate.json b/tools/legacy-tools/ProjectTestRunner/TestCases/3rdParty/CSharp/BoilerPlate.json
similarity index 100%
rename from tools/ProjectTestRunner/TestCases/3rdParty/CSharp/BoilerPlate.json
rename to tools/legacy-tools/ProjectTestRunner/TestCases/3rdParty/CSharp/BoilerPlate.json
diff --git a/tools/ProjectTestRunner/TestCases/3rdParty/FSharp/.gitkeep b/tools/legacy-tools/ProjectTestRunner/TestCases/3rdParty/FSharp/.gitkeep
similarity index 100%
rename from tools/ProjectTestRunner/TestCases/3rdParty/FSharp/.gitkeep
rename to tools/legacy-tools/ProjectTestRunner/TestCases/3rdParty/FSharp/.gitkeep
diff --git a/tools/ProjectTestRunner/TestCases/3rdParty/VB/.gitkeep b/tools/legacy-tools/ProjectTestRunner/TestCases/3rdParty/VB/.gitkeep
similarity index 100%
rename from tools/ProjectTestRunner/TestCases/3rdParty/VB/.gitkeep
rename to tools/legacy-tools/ProjectTestRunner/TestCases/3rdParty/VB/.gitkeep
diff --git a/tools/ProjectTestRunner/TestCases/BuiltIn/CSharp/Defaults/Common/Console.json b/tools/legacy-tools/ProjectTestRunner/TestCases/BuiltIn/CSharp/Defaults/Common/Console.json
similarity index 100%
rename from tools/ProjectTestRunner/TestCases/BuiltIn/CSharp/Defaults/Common/Console.json
rename to tools/legacy-tools/ProjectTestRunner/TestCases/BuiltIn/CSharp/Defaults/Common/Console.json
diff --git a/tools/ProjectTestRunner/TestCases/BuiltIn/CSharp/Defaults/Common/Library.json b/tools/legacy-tools/ProjectTestRunner/TestCases/BuiltIn/CSharp/Defaults/Common/Library.json
similarity index 100%
rename from tools/ProjectTestRunner/TestCases/BuiltIn/CSharp/Defaults/Common/Library.json
rename to tools/legacy-tools/ProjectTestRunner/TestCases/BuiltIn/CSharp/Defaults/Common/Library.json
diff --git a/tools/ProjectTestRunner/TestCases/BuiltIn/CSharp/Defaults/Web/Mvc.json b/tools/legacy-tools/ProjectTestRunner/TestCases/BuiltIn/CSharp/Defaults/Web/Mvc.json
similarity index 100%
rename from tools/ProjectTestRunner/TestCases/BuiltIn/CSharp/Defaults/Web/Mvc.json
rename to tools/legacy-tools/ProjectTestRunner/TestCases/BuiltIn/CSharp/Defaults/Web/Mvc.json
diff --git a/tools/ProjectTestRunner/TestCases/BuiltIn/CSharp/Defaults/Web/MvcIndividual.json b/tools/legacy-tools/ProjectTestRunner/TestCases/BuiltIn/CSharp/Defaults/Web/MvcIndividual.json
similarity index 100%
rename from tools/ProjectTestRunner/TestCases/BuiltIn/CSharp/Defaults/Web/MvcIndividual.json
rename to tools/legacy-tools/ProjectTestRunner/TestCases/BuiltIn/CSharp/Defaults/Web/MvcIndividual.json
diff --git a/tools/ProjectTestRunner/TestCases/BuiltIn/CSharp/Defaults/Web/RazorPages.json b/tools/legacy-tools/ProjectTestRunner/TestCases/BuiltIn/CSharp/Defaults/Web/RazorPages.json
similarity index 100%
rename from tools/ProjectTestRunner/TestCases/BuiltIn/CSharp/Defaults/Web/RazorPages.json
rename to tools/legacy-tools/ProjectTestRunner/TestCases/BuiltIn/CSharp/Defaults/Web/RazorPages.json
diff --git a/tools/ProjectTestRunner/TestCases/BuiltIn/CSharp/Defaults/Web/Web.json b/tools/legacy-tools/ProjectTestRunner/TestCases/BuiltIn/CSharp/Defaults/Web/Web.json
similarity index 100%
rename from tools/ProjectTestRunner/TestCases/BuiltIn/CSharp/Defaults/Web/Web.json
rename to tools/legacy-tools/ProjectTestRunner/TestCases/BuiltIn/CSharp/Defaults/Web/Web.json
diff --git a/tools/ProjectTestRunner/TestCases/BuiltIn/CSharp/Defaults/Web/WebApi.json b/tools/legacy-tools/ProjectTestRunner/TestCases/BuiltIn/CSharp/Defaults/Web/WebApi.json
similarity index 100%
rename from tools/ProjectTestRunner/TestCases/BuiltIn/CSharp/Defaults/Web/WebApi.json
rename to tools/legacy-tools/ProjectTestRunner/TestCases/BuiltIn/CSharp/Defaults/Web/WebApi.json
diff --git a/tools/ProjectTestRunner/TestCases/BuiltIn/FSharp/Defaults/Common/Console.json b/tools/legacy-tools/ProjectTestRunner/TestCases/BuiltIn/FSharp/Defaults/Common/Console.json
similarity index 100%
rename from tools/ProjectTestRunner/TestCases/BuiltIn/FSharp/Defaults/Common/Console.json
rename to tools/legacy-tools/ProjectTestRunner/TestCases/BuiltIn/FSharp/Defaults/Common/Console.json
diff --git a/tools/ProjectTestRunner/TestCases/BuiltIn/FSharp/Defaults/Common/Library.json b/tools/legacy-tools/ProjectTestRunner/TestCases/BuiltIn/FSharp/Defaults/Common/Library.json
similarity index 100%
rename from tools/ProjectTestRunner/TestCases/BuiltIn/FSharp/Defaults/Common/Library.json
rename to tools/legacy-tools/ProjectTestRunner/TestCases/BuiltIn/FSharp/Defaults/Common/Library.json
diff --git a/tools/ProjectTestRunner/TestCases/BuiltIn/FSharp/Defaults/Web/Mvc.json b/tools/legacy-tools/ProjectTestRunner/TestCases/BuiltIn/FSharp/Defaults/Web/Mvc.json
similarity index 100%
rename from tools/ProjectTestRunner/TestCases/BuiltIn/FSharp/Defaults/Web/Mvc.json
rename to tools/legacy-tools/ProjectTestRunner/TestCases/BuiltIn/FSharp/Defaults/Web/Mvc.json
diff --git a/tools/ProjectTestRunner/TestCases/BuiltIn/VB/.gitkeep b/tools/legacy-tools/ProjectTestRunner/TestCases/BuiltIn/VB/.gitkeep
similarity index 100%
rename from tools/ProjectTestRunner/TestCases/BuiltIn/VB/.gitkeep
rename to tools/legacy-tools/ProjectTestRunner/TestCases/BuiltIn/VB/.gitkeep
diff --git a/tools/ProjectTestRunner/TestCases/Extensions/CSharp/.gitkeep b/tools/legacy-tools/ProjectTestRunner/TestCases/Extensions/CSharp/.gitkeep
similarity index 100%
rename from tools/ProjectTestRunner/TestCases/Extensions/CSharp/.gitkeep
rename to tools/legacy-tools/ProjectTestRunner/TestCases/Extensions/CSharp/.gitkeep
diff --git a/tools/ProjectTestRunner/TestCases/Extensions/FSharp/.gitkeep b/tools/legacy-tools/ProjectTestRunner/TestCases/Extensions/FSharp/.gitkeep
similarity index 100%
rename from tools/ProjectTestRunner/TestCases/Extensions/FSharp/.gitkeep
rename to tools/legacy-tools/ProjectTestRunner/TestCases/Extensions/FSharp/.gitkeep
diff --git a/tools/ProjectTestRunner/TestCases/Extensions/VB/.gitkeep b/tools/legacy-tools/ProjectTestRunner/TestCases/Extensions/VB/.gitkeep
similarity index 100%
rename from tools/ProjectTestRunner/TestCases/Extensions/VB/.gitkeep
rename to tools/legacy-tools/ProjectTestRunner/TestCases/Extensions/VB/.gitkeep
diff --git a/tools/legacy-tools/README.md b/tools/legacy-tools/README.md
new file mode 100644
index 00000000000..d8571b1d0fd
--- /dev/null
+++ b/tools/legacy-tools/README.md
@@ -0,0 +1 @@
+This folder contains the tools which are no longer maintained.
\ No newline at end of file