Merge pull request #8691 from peterhuene/list-command

Implement the `list tool` command.
This commit is contained in:
Peter Huene 2018-03-05 16:52:40 -08:00 committed by GitHub
commit 0cdc4b8f19
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
130 changed files with 2538 additions and 1503 deletions

View file

@ -610,13 +610,19 @@ setx PATH "%PATH%;{0}"
<data name="FailedToUninstallToolPackage" xml:space="preserve">
<value>Failed to uninstall tool package '{0}': {1}</value>
</data>
<data name="ToolPackageMissingEntryPointFile" xml:space="preserve">
<value>Package '{0}' is missing entry point file {1}.</value>
<data name="MissingToolEntryPointFile" xml:space="preserve">
<value>Entry point file '{0}' for command '{1}' was not found in the package.</value>
</data>
<data name="ToolPackageMissingSettingsFile" xml:space="preserve">
<value>Package '{0}' is missing tool settings file DotnetToolSettings.xml.</value>
<data name="MissingToolSettingsFile" xml:space="preserve">
<value>Settings file 'DotnetToolSettings.xml' was not found in the package.</value>
</data>
<data name="ToolPackageConflictPackageId" xml:space="preserve">
<value>Tool '{0}' (version '{1}') is already installed.</value>
</data>
<data name="FailedToFindStagedToolPackage" xml:space="preserve">
<value>Failed to find staged tool package '{0}'.</value>
</data>
<data name="ColumnMaxWidthMustBeGreaterThanZero" xml:space="preserve">
<value>Column maximum width must be greater than zero.</value>
</data>
</root>

View file

@ -0,0 +1,226 @@
// Copyright (c) .NET Foundation and contributors. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using Microsoft.DotNet.Tools;
namespace Microsoft.DotNet.Cli
{
// Represents a table (with rows of type T) that can be printed to a terminal.
internal class PrintableTable<T>
{
private const string ColumnDelimiter = " ";
private List<Column> _columns = new List<Column>();
private class Column
{
public string Header { get; set; }
public Func<T, string> GetContent { get; set; }
public int MaxWidth { get; set; }
public override string ToString() { return Header; }
}
public void AddColumn(string header, Func<T, string> getContent, int maxWidth = int.MaxValue)
{
if (getContent == null)
{
throw new ArgumentNullException(nameof(getContent));
}
if (maxWidth <= 0)
{
throw new ArgumentException(
CommonLocalizableStrings.ColumnMaxWidthMustBeGreaterThanZero,
nameof(maxWidth));
}
_columns.Add(
new Column() {
Header = header,
GetContent = getContent,
MaxWidth = maxWidth
});
}
public void PrintRows(IEnumerable<T> rows, Action<string> writeLine)
{
if (rows == null)
{
throw new ArgumentNullException(nameof(rows));
}
if (writeLine == null)
{
throw new ArgumentNullException(nameof(writeLine));
}
var widths = CalculateColumnWidths(rows);
var totalWidth = CalculateTotalWidth(widths);
if (totalWidth == 0)
{
return;
}
foreach (var line in EnumerateHeaderLines(widths))
{
writeLine(line);
}
writeLine(new string('-', totalWidth));
foreach (var row in rows)
{
foreach (var line in EnumerateRowLines(row, widths))
{
writeLine(line);
}
}
}
public int CalculateWidth(IEnumerable<T> rows)
{
if (rows == null)
{
throw new ArgumentNullException(nameof(rows));
}
return CalculateTotalWidth(CalculateColumnWidths(rows));
}
private IEnumerable<string> EnumerateHeaderLines(int[] widths)
{
if (_columns.Count != widths.Length)
{
throw new InvalidOperationException();
}
return EnumerateLines(
widths,
_columns.Select(c => new StringInfo(c.Header ?? "")).ToArray());
}
private IEnumerable<string> EnumerateRowLines(T row, int[] widths)
{
if (_columns.Count != widths.Length)
{
throw new InvalidOperationException();
}
return EnumerateLines(
widths,
_columns.Select(c => new StringInfo(c.GetContent(row) ?? "")).ToArray());
}
private static IEnumerable<string> EnumerateLines(int[] widths, StringInfo[] contents)
{
if (widths.Length != contents.Length)
{
throw new InvalidOperationException();
}
if (contents.Length == 0)
{
yield break;
}
var builder = new StringBuilder();
for (int line = 0; true; ++line)
{
builder.Clear();
bool emptyLine = true;
bool appendDelimiter = false;
for (int i = 0; i < contents.Length; ++i)
{
// Skip zero-width columns entirely
if (widths[i] == 0)
{
continue;
}
if (appendDelimiter)
{
builder.Append(ColumnDelimiter);
}
var startIndex = line * widths[i];
var length = contents[i].LengthInTextElements;
if (startIndex < length)
{
var endIndex = (line + 1) * widths[i];
length = endIndex >= length ? length - startIndex : widths[i];
builder.Append(contents[i].SubstringByTextElements(startIndex, length));
builder.Append(' ', widths[i] - length);
emptyLine = false;
}
else
{
// No more content for this column; append whitespace to fill remaining space
builder.Append(' ', widths[i]);
}
appendDelimiter = true;
}
if (emptyLine)
{
// Yield an "empty" line on the first line only
if (line == 0)
{
yield return builder.ToString();
}
yield break;
}
yield return builder.ToString();
}
}
private int[] CalculateColumnWidths(IEnumerable<T> rows)
{
return _columns
.Select(c => {
var width = new StringInfo(c.Header ?? "").LengthInTextElements;
foreach (var row in rows)
{
width = Math.Max(
width,
new StringInfo(c.GetContent(row) ?? "").LengthInTextElements);
}
return Math.Min(width, c.MaxWidth);
})
.ToArray();
}
private static int CalculateTotalWidth(int[] widths)
{
int sum = 0;
int count = 0;
foreach (var width in widths)
{
if (width == 0)
{
// Skip zero-width columns
continue;
}
sum += width;
++count;
}
if (count == 0)
{
return 0;
}
return sum + (ColumnDelimiter.Length * (count - 1));
}
}
}

View file

@ -21,3 +21,4 @@ using System.Runtime.CompilerServices;
[assembly: InternalsVisibleTo("Microsoft.DotNet.Tools.Tests.ComponentMocks, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
[assembly: InternalsVisibleTo("Microsoft.DotNet.ToolPackage.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
[assembly: InternalsVisibleTo("Microsoft.DotNet.ShellShim.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")]

View file

@ -4,14 +4,15 @@
using System;
using System.Collections.Generic;
using Microsoft.Extensions.EnvironmentAbstractions;
using NuGet.Versioning;
namespace Microsoft.DotNet.ToolPackage
{
internal interface IToolPackage
{
string PackageId { get; }
PackageId Id { get; }
string PackageVersion { get; }
NuGetVersion Version { get; }
DirectoryPath PackageDirectory { get; }

View file

@ -4,14 +4,15 @@
using System;
using System.Collections.Generic;
using Microsoft.Extensions.EnvironmentAbstractions;
using NuGet.Versioning;
namespace Microsoft.DotNet.ToolPackage
{
internal interface IToolPackageInstaller
{
IToolPackage InstallPackage(
string packageId,
string packageVersion = null,
PackageId packageId,
VersionRange versionRange = null,
string targetFramework = null,
FilePath? nugetConfig = null,
string source = null,

View file

@ -4,6 +4,7 @@
using System;
using System.Collections.Generic;
using Microsoft.Extensions.EnvironmentAbstractions;
using NuGet.Versioning;
namespace Microsoft.DotNet.ToolPackage
{
@ -11,6 +12,18 @@ namespace Microsoft.DotNet.ToolPackage
{
DirectoryPath Root { get; }
IEnumerable<IToolPackage> GetInstalledPackages(string packageId);
DirectoryPath GetRandomStagingDirectory();
NuGetVersion GetStagedPackageVersion(DirectoryPath stagingDirectory, PackageId packageId);
DirectoryPath GetRootPackageDirectory(PackageId packageId);
DirectoryPath GetPackageDirectory(PackageId packageId, NuGetVersion version);
IEnumerable<IToolPackage> EnumeratePackages();
IEnumerable<IToolPackage> EnumeratePackageVersions(PackageId packageId);
IToolPackage GetPackage(PackageId packageId, NuGetVersion version);
}
}

View file

@ -0,0 +1,43 @@
// Copyright (c) .NET Foundation and contributors. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
using System;
using Microsoft.DotNet.InternalAbstractions;
namespace Microsoft.DotNet.ToolPackage
{
internal struct PackageId : IEquatable<PackageId>, IComparable<PackageId>
{
private string _id;
public PackageId(string id)
{
_id = id?.ToLowerInvariant() ?? throw new ArgumentNullException(nameof(id));
}
public bool Equals(PackageId other)
{
return ToString() == other.ToString();
}
public int CompareTo(PackageId other)
{
return string.Compare(ToString(), other.ToString(), StringComparison.Ordinal);
}
public override bool Equals(object obj)
{
return obj is PackageId id && Equals(id);
}
public override int GetHashCode()
{
return ToString().GetHashCode();
}
public override string ToString()
{
return _id ?? "";
}
}
}

View file

@ -7,13 +7,12 @@ using Microsoft.DotNet.Cli;
using Microsoft.DotNet.Configurer;
using Microsoft.DotNet.Tools;
using Microsoft.Extensions.EnvironmentAbstractions;
using NuGet.Versioning;
namespace Microsoft.DotNet.ToolPackage
{
internal class ToolPackageInstaller : IToolPackageInstaller
{
public const string StagingDirectory = ".stage";
private readonly IToolPackageStore _store;
private readonly IProjectRestorer _projectRestorer;
private readonly FilePath? _tempProject;
@ -32,33 +31,27 @@ namespace Microsoft.DotNet.ToolPackage
}
public IToolPackage InstallPackage(
string packageId,
string packageVersion = null,
PackageId packageId,
VersionRange versionRange = null,
string targetFramework = null,
FilePath? nugetConfig = null,
string source = null,
string verbosity = null)
{
if (packageId == null)
{
throw new ArgumentNullException(nameof(packageId));
}
var packageRootDirectory = _store.Root.WithSubDirectories(packageId);
var packageRootDirectory = _store.GetRootPackageDirectory(packageId);
string rollbackDirectory = null;
return TransactionalAction.Run<IToolPackage>(
action: () => {
try
{
var stageDirectory = _store.Root.WithSubDirectories(StagingDirectory, Path.GetRandomFileName());
var stageDirectory = _store.GetRandomStagingDirectory();
Directory.CreateDirectory(stageDirectory.Value);
rollbackDirectory = stageDirectory.Value;
var tempProject = CreateTempProject(
packageId: packageId,
packageVersion: packageVersion,
versionRange: versionRange,
targetFramework: targetFramework ?? BundledTargetFramework.GetTargetFrameworkMoniker(),
restoreDirectory: stageDirectory);
@ -76,29 +69,22 @@ namespace Microsoft.DotNet.ToolPackage
File.Delete(tempProject.Value);
}
packageVersion = Path.GetFileName(
Directory.EnumerateDirectories(
stageDirectory.WithSubDirectories(packageId).Value).Single());
var packageDirectory = packageRootDirectory.WithSubDirectories(packageVersion);
var version = _store.GetStagedPackageVersion(stageDirectory, packageId);
var packageDirectory = _store.GetPackageDirectory(packageId, version);
if (Directory.Exists(packageDirectory.Value))
{
throw new ToolPackageException(
string.Format(
CommonLocalizableStrings.ToolPackageConflictPackageId,
packageId,
packageVersion));
version.ToNormalizedString()));
}
Directory.CreateDirectory(packageRootDirectory.Value);
Directory.Move(stageDirectory.Value, packageDirectory.Value);
rollbackDirectory = packageDirectory.Value;
return new ToolPackageInstance(
_store,
packageId,
packageVersion,
packageDirectory);
return new ToolPackageInstance(_store, packageId, version, packageDirectory);
}
catch (Exception ex) when (ex is UnauthorizedAccessException || ex is IOException)
{
@ -126,8 +112,8 @@ namespace Microsoft.DotNet.ToolPackage
}
private FilePath CreateTempProject(
string packageId,
string packageVersion,
PackageId packageId,
VersionRange versionRange,
string targetFramework,
DirectoryPath restoreDirectory)
{
@ -159,8 +145,9 @@ namespace Microsoft.DotNet.ToolPackage
new XElement("DisableImplicitNuGetFallbackFolder", "true")), // disable SDK side implicit NuGetFallbackFolder
new XElement("ItemGroup",
new XElement("PackageReference",
new XAttribute("Include", packageId),
new XAttribute("Version", packageVersion ?? "*") // nuget will restore * for latest
new XAttribute("Include", packageId.ToString()),
new XAttribute("Version",
versionRange?.ToString("S", new VersionRangeFormatter()) ?? "*") // nuget will restore latest stable for *
))
));

View file

@ -6,6 +6,7 @@ using Microsoft.DotNet.Cli;
using Microsoft.DotNet.Tools;
using Microsoft.Extensions.EnvironmentAbstractions;
using NuGet.ProjectModel;
using NuGet.Versioning;
namespace Microsoft.DotNet.ToolPackage
{
@ -17,20 +18,21 @@ namespace Microsoft.DotNet.ToolPackage
public ToolPackageInstance(
IToolPackageStore store,
string packageId,
string packageVersion,
PackageId id,
NuGetVersion version,
DirectoryPath packageDirectory)
{
_store = store ?? throw new ArgumentNullException(nameof(store));
PackageId = packageId ?? throw new ArgumentNullException(nameof(packageId));
PackageVersion = packageVersion ?? throw new ArgumentNullException(nameof(packageVersion));
PackageDirectory = packageDirectory;
_commands = new Lazy<IReadOnlyList<CommandSettings>>(GetCommands);
Id = id;
Version = version ?? throw new ArgumentNullException(nameof(version));
PackageDirectory = packageDirectory;
}
public string PackageId { get; private set; }
public PackageId Id { get; private set; }
public string PackageVersion { get; private set; }
public NuGetVersion Version { get; private set; }
public DirectoryPath PackageDirectory { get; private set; }
@ -53,13 +55,9 @@ namespace Microsoft.DotNet.ToolPackage
{
if (Directory.Exists(PackageDirectory.Value))
{
// Use the same staging directory for uninstall instead of temp
// Use the staging directory for uninstall
// This prevents cross-device moves when temp is mounted to a different device
var tempPath = _store
.Root
.WithSubDirectories(ToolPackageInstaller.StagingDirectory)
.WithFile(Path.GetRandomFileName())
.Value;
var tempPath = _store.GetRandomStagingDirectory().Value;
Directory.Move(PackageDirectory.Value, tempPath);
tempPackageDirectory = tempPath;
}
@ -75,7 +73,7 @@ namespace Microsoft.DotNet.ToolPackage
throw new ToolPackageException(
string.Format(
CommonLocalizableStrings.FailedToUninstallToolPackage,
PackageId,
Id,
ex.Message),
ex);
}
@ -109,16 +107,14 @@ namespace Microsoft.DotNet.ToolPackage
var dotnetToolSettings = FindItemInTargetLibrary(library, ToolSettingsFileName);
if (dotnetToolSettings == null)
{
throw new ToolPackageException(
string.Format(
CommonLocalizableStrings.ToolPackageMissingSettingsFile,
PackageId));
throw new ToolConfigurationException(
CommonLocalizableStrings.MissingToolSettingsFile);
}
var toolConfigurationPath =
PackageDirectory
.WithSubDirectories(
PackageId,
Id.ToString(),
library.Version.ToNormalizedString())
.WithFile(dotnetToolSettings.Path);
@ -127,11 +123,11 @@ namespace Microsoft.DotNet.ToolPackage
var entryPointFromLockFile = FindItemInTargetLibrary(library, configuration.ToolAssemblyEntryPoint);
if (entryPointFromLockFile == null)
{
throw new ToolPackageException(
throw new ToolConfigurationException(
string.Format(
CommonLocalizableStrings.ToolPackageMissingEntryPointFile,
PackageId,
configuration.ToolAssemblyEntryPoint));
CommonLocalizableStrings.MissingToolEntryPointFile,
configuration.ToolAssemblyEntryPoint,
configuration.CommandName));
}
// Currently only "dotnet" commands are supported
@ -140,7 +136,7 @@ namespace Microsoft.DotNet.ToolPackage
"dotnet",
PackageDirectory
.WithSubDirectories(
PackageId,
Id.ToString(),
library.Version.ToNormalizedString())
.WithFile(entryPointFromLockFile.Path)));
@ -148,10 +144,9 @@ namespace Microsoft.DotNet.ToolPackage
}
catch (Exception ex) when (ex is UnauthorizedAccessException || ex is IOException)
{
throw new ToolPackageException(
throw new ToolConfigurationException(
string.Format(
CommonLocalizableStrings.FailedToRetrieveToolConfiguration,
PackageId,
ex.Message),
ex);
}
@ -161,7 +156,8 @@ namespace Microsoft.DotNet.ToolPackage
{
return lockFile
?.Targets?.SingleOrDefault(t => t.RuntimeIdentifier != null)
?.Libraries?.SingleOrDefault(l => l.Name == PackageId);
?.Libraries?.SingleOrDefault(l =>
string.Compare(l.Name, Id.ToString(), StringComparison.CurrentCultureIgnoreCase) == 0);
}
private static LockFileItem FindItemInTargetLibrary(LockFileTargetLibrary library, string targetRelativeFilePath)

View file

@ -2,12 +2,16 @@ using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Microsoft.DotNet.Tools;
using Microsoft.Extensions.EnvironmentAbstractions;
using NuGet.Versioning;
namespace Microsoft.DotNet.ToolPackage
{
internal class ToolPackageStore : IToolPackageStore
{
public const string StagingDirectory = ".stage";
public ToolPackageStore(DirectoryPath root)
{
Root = root;
@ -15,14 +19,72 @@ namespace Microsoft.DotNet.ToolPackage
public DirectoryPath Root { get; private set; }
public IEnumerable<IToolPackage> GetInstalledPackages(string packageId)
public DirectoryPath GetRandomStagingDirectory()
{
if (packageId == null)
return Root.WithSubDirectories(StagingDirectory, Path.GetRandomFileName());
}
public NuGetVersion GetStagedPackageVersion(DirectoryPath stagingDirectory, PackageId packageId)
{
if (NuGetVersion.TryParse(
Path.GetFileName(
Directory.EnumerateDirectories(
stagingDirectory.WithSubDirectories(packageId.ToString()).Value).FirstOrDefault()),
out var version))
{
throw new ArgumentNullException(nameof(packageId));
return version;
}
var packageRootDirectory = Root.WithSubDirectories(packageId);
throw new ToolPackageException(
string.Format(
CommonLocalizableStrings.FailedToFindStagedToolPackage,
packageId));
}
public DirectoryPath GetRootPackageDirectory(PackageId packageId)
{
return Root.WithSubDirectories(packageId.ToString());
}
public DirectoryPath GetPackageDirectory(PackageId packageId, NuGetVersion version)
{
if (version == null)
{
throw new ArgumentNullException(nameof(version));
}
return GetRootPackageDirectory(packageId)
.WithSubDirectories(version.ToNormalizedString().ToLowerInvariant());
}
public IEnumerable<IToolPackage> EnumeratePackages()
{
if (!Directory.Exists(Root.Value))
{
yield break;
}
foreach (var subdirectory in Directory.EnumerateDirectories(Root.Value))
{
var name = Path.GetFileName(subdirectory);
var packageId = new PackageId(name);
// Ignore the staging directory and any directory that isn't the same as the package id
if (name == StagingDirectory || name != packageId.ToString())
{
continue;
}
foreach (var package in EnumeratePackageVersions(packageId))
{
yield return package;
}
}
}
public IEnumerable<IToolPackage> EnumeratePackageVersions(PackageId packageId)
{
var packageRootDirectory = Root.WithSubDirectories(packageId.ToString());
if (!Directory.Exists(packageRootDirectory.Value))
{
yield break;
@ -30,13 +92,27 @@ namespace Microsoft.DotNet.ToolPackage
foreach (var subdirectory in Directory.EnumerateDirectories(packageRootDirectory.Value))
{
var version = Path.GetFileName(subdirectory);
yield return new ToolPackageInstance(
this,
packageId,
version,
packageRootDirectory.WithSubDirectories(version));
NuGetVersion.Parse(Path.GetFileName(subdirectory)),
new DirectoryPath(subdirectory));
}
}
public IToolPackage GetPackage(PackageId packageId, NuGetVersion version)
{
if (version == null)
{
throw new ArgumentNullException(nameof(version));
}
var directory = GetPackageDirectory(packageId, version);
if (!Directory.Exists(directory.Value))
{
return null;
}
return new ToolPackageInstance(this, packageId, version, directory);
}
}
}

View file

@ -1,22 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="cs" original="../LocalizableStrings.resx">
<body>
<trans-unit id="AppFullName">
<source>.NET Add Project to Solution Command</source>
<target state="translated">Příkaz rozhraní .NET pro přidání projektu do řešení</target>
<note />
</trans-unit>
<trans-unit id="AppDescription">
<source>Command to add project to solution</source>
<target state="translated">Příkaz pro přidání projektu do řešení</target>
<note />
</trans-unit>
<trans-unit id="AppHelpText">
<source>Projects to add to solution</source>
<target state="translated">Projekty přidané do řešení</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -1,22 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="de" original="../LocalizableStrings.resx">
<body>
<trans-unit id="AppFullName">
<source>.NET Add Project to Solution Command</source>
<target state="translated">.NET-Befehl zum Hinzufügen eines Projekts zur Projektmappe</target>
<note />
</trans-unit>
<trans-unit id="AppDescription">
<source>Command to add project to solution</source>
<target state="translated">Befehl zum Hinzufügen eines Projekts zur Projektmappe</target>
<note />
</trans-unit>
<trans-unit id="AppHelpText">
<source>Projects to add to solution</source>
<target state="translated">Zur Projektmappe hinzuzufügende Projekte</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -1,22 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="es" original="../LocalizableStrings.resx">
<body>
<trans-unit id="AppFullName">
<source>.NET Add Project to Solution Command</source>
<target state="translated">Comando de .NET Agregar proyecto a solución</target>
<note />
</trans-unit>
<trans-unit id="AppDescription">
<source>Command to add project to solution</source>
<target state="translated">Comando para agregar un proyecto a una solución</target>
<note />
</trans-unit>
<trans-unit id="AppHelpText">
<source>Projects to add to solution</source>
<target state="translated">Proyectos que se agregarán a la solución</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -1,22 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="fr" original="../LocalizableStrings.resx">
<body>
<trans-unit id="AppFullName">
<source>.NET Add Project to Solution Command</source>
<target state="translated">Commande .NET d'ajout de projet à une solution</target>
<note />
</trans-unit>
<trans-unit id="AppDescription">
<source>Command to add project to solution</source>
<target state="translated">Commande d'ajout de projet à une solution</target>
<note />
</trans-unit>
<trans-unit id="AppHelpText">
<source>Projects to add to solution</source>
<target state="translated">Projets à ajouter à la solution</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -1,22 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="it" original="../LocalizableStrings.resx">
<body>
<trans-unit id="AppFullName">
<source>.NET Add Project to Solution Command</source>
<target state="translated">Comando Aggiungi progetto a soluzione .NET</target>
<note />
</trans-unit>
<trans-unit id="AppDescription">
<source>Command to add project to solution</source>
<target state="translated">Comando per aggiungere il progetto alla soluzione</target>
<note />
</trans-unit>
<trans-unit id="AppHelpText">
<source>Projects to add to solution</source>
<target state="translated">Progetti da aggiungere alla soluzione</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -1,22 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="ja" original="../LocalizableStrings.resx">
<body>
<trans-unit id="AppFullName">
<source>.NET Add Project to Solution Command</source>
<target state="translated">.NET Add Project to Solution コマンド</target>
<note />
</trans-unit>
<trans-unit id="AppDescription">
<source>Command to add project to solution</source>
<target state="translated">ソリューションにプロジェクトを追加するコマンド</target>
<note />
</trans-unit>
<trans-unit id="AppHelpText">
<source>Projects to add to solution</source>
<target state="translated">ソリューションに追加するプロジェクト</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -1,22 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="ko" original="../LocalizableStrings.resx">
<body>
<trans-unit id="AppFullName">
<source>.NET Add Project to Solution Command</source>
<target state="translated">.NET 솔루션에 프로젝트 추가 명령</target>
<note />
</trans-unit>
<trans-unit id="AppDescription">
<source>Command to add project to solution</source>
<target state="translated">솔루션에 프로젝트를 추가하기 위한 명령입니다.</target>
<note />
</trans-unit>
<trans-unit id="AppHelpText">
<source>Projects to add to solution</source>
<target state="translated">솔루션에 추가할 프로젝트</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -1,22 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="pl" original="../LocalizableStrings.resx">
<body>
<trans-unit id="AppFullName">
<source>.NET Add Project to Solution Command</source>
<target state="translated">Polecenie dodawania projektu do rozwiązania dla platformy .NET</target>
<note />
</trans-unit>
<trans-unit id="AppDescription">
<source>Command to add project to solution</source>
<target state="translated">Polecenie umożliwiające dodanie projektu do rozwiązania</target>
<note />
</trans-unit>
<trans-unit id="AppHelpText">
<source>Projects to add to solution</source>
<target state="translated">Projekty, które mają zostać dodane do rozwiązania</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -1,22 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="pt-BR" original="../LocalizableStrings.resx">
<body>
<trans-unit id="AppFullName">
<source>.NET Add Project to Solution Command</source>
<target state="translated">Comando Adicionar Projeto à Solução do .NET</target>
<note />
</trans-unit>
<trans-unit id="AppDescription">
<source>Command to add project to solution</source>
<target state="translated">Comando para adicionar o projeto à solução</target>
<note />
</trans-unit>
<trans-unit id="AppHelpText">
<source>Projects to add to solution</source>
<target state="translated">Projetos a serem adicionados à solução</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -1,22 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="ru" original="../LocalizableStrings.resx">
<body>
<trans-unit id="AppFullName">
<source>.NET Add Project to Solution Command</source>
<target state="translated">Команда .NET "Добавить проект в решение"</target>
<note />
</trans-unit>
<trans-unit id="AppDescription">
<source>Command to add project to solution</source>
<target state="translated">Команда для добавления проекта в решение</target>
<note />
</trans-unit>
<trans-unit id="AppHelpText">
<source>Projects to add to solution</source>
<target state="translated">Проекты, добавляемые в решение</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -1,22 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="tr" original="../LocalizableStrings.resx">
<body>
<trans-unit id="AppFullName">
<source>.NET Add Project to Solution Command</source>
<target state="translated">.NET Çözüme Proje Ekleme Komutu</target>
<note />
</trans-unit>
<trans-unit id="AppDescription">
<source>Command to add project to solution</source>
<target state="translated">Çözüme proje ekleme komutu</target>
<note />
</trans-unit>
<trans-unit id="AppHelpText">
<source>Projects to add to solution</source>
<target state="translated">Çözüme eklenecek projeler</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -1,20 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" original="src/dotnet/commands/dotnet-add/dotnet-add-proj/LocalizableStrings.resx">
<body>
<group id="src/dotnet/commands/dotnet-add/dotnet-add-proj/LocalizableStrings.resx" />
<trans-unit id="AppFullName">
<source>.NET Add Project to Solution Command</source>
<note />
</trans-unit>
<trans-unit id="AppDescription">
<source>Command to add project to solution</source>
<note />
</trans-unit>
<trans-unit id="AppHelpText">
<source>Projects to add to solution</source>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -1,22 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="zh-Hans" original="../LocalizableStrings.resx">
<body>
<trans-unit id="AppFullName">
<source>.NET Add Project to Solution Command</source>
<target state="translated">.NET 将项目添加到解决方案命令</target>
<note />
</trans-unit>
<trans-unit id="AppDescription">
<source>Command to add project to solution</source>
<target state="translated">将项目添加到解决方案的命令</target>
<note />
</trans-unit>
<trans-unit id="AppHelpText">
<source>Projects to add to solution</source>
<target state="translated">要添加到解决方案的项目</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -1,22 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="zh-Hant" original="../LocalizableStrings.resx">
<body>
<trans-unit id="AppFullName">
<source>.NET Add Project to Solution Command</source>
<target state="translated">.NET 將專案新增至解決方案命令</target>
<note />
</trans-unit>
<trans-unit id="AppDescription">
<source>Command to add project to solution</source>
<target state="translated">命令,將專案新增至解決方案</target>
<note />
</trans-unit>
<trans-unit id="AppHelpText">
<source>Projects to add to solution</source>
<target state="translated">要新增至解決方案的專案</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -193,7 +193,7 @@
<value>Remove reference from the project.</value>
</data>
<data name="ListDefinition" xml:space="preserve">
<value>List reference in the project.</value>
<value>List project references or installed tools.</value>
</data>
<data name="AdvancedCommands" xml:space="preserve">
<value>Advanced Commands</value>
@ -271,6 +271,6 @@
<value>Installs an item into the development environment.</value>
</data>
<data name="UninstallDefinition" xml:space="preserve">
<value>Uninstalls a tool from the development environment.</value>
<value>Uninstalls an item from the development environment.</value>
</data>
</root>

View file

@ -153,8 +153,8 @@
<note />
</trans-unit>
<trans-unit id="ListDefinition">
<source>List reference in the project.</source>
<target state="translated">Vypíše odkaz v projektu.</target>
<source>List project references or installed tools.</source>
<target state="needs-review-translation">Vypíše odkaz v projektu.</target>
<note />
</trans-unit>
<trans-unit id="CommandDoesNotExist">
@ -258,8 +258,8 @@
<note />
</trans-unit>
<trans-unit id="UninstallDefinition">
<source>Uninstalls a tool from the development environment.</source>
<target state="new">Uninstalls a tool from the development environment.</target>
<source>Uninstalls an item from the development environment.</source>
<target state="new">Uninstalls an item from the development environment.</target>
<note />
</trans-unit>
</body>

View file

@ -153,8 +153,8 @@
<note />
</trans-unit>
<trans-unit id="ListDefinition">
<source>List reference in the project.</source>
<target state="translated">Verweis im Projekt auflisten.</target>
<source>List project references or installed tools.</source>
<target state="needs-review-translation">Verweis im Projekt auflisten.</target>
<note />
</trans-unit>
<trans-unit id="CommandDoesNotExist">
@ -258,8 +258,8 @@
<note />
</trans-unit>
<trans-unit id="UninstallDefinition">
<source>Uninstalls a tool from the development environment.</source>
<target state="new">Uninstalls a tool from the development environment.</target>
<source>Uninstalls an item from the development environment.</source>
<target state="new">Uninstalls an item from the development environment.</target>
<note />
</trans-unit>
</body>

View file

@ -153,8 +153,8 @@
<note />
</trans-unit>
<trans-unit id="ListDefinition">
<source>List reference in the project.</source>
<target state="translated">Muestra referencias en el proyecto.</target>
<source>List project references or installed tools.</source>
<target state="needs-review-translation">Muestra referencias en el proyecto.</target>
<note />
</trans-unit>
<trans-unit id="CommandDoesNotExist">
@ -258,8 +258,8 @@
<note />
</trans-unit>
<trans-unit id="UninstallDefinition">
<source>Uninstalls a tool from the development environment.</source>
<target state="new">Uninstalls a tool from the development environment.</target>
<source>Uninstalls an item from the development environment.</source>
<target state="new">Uninstalls an item from the development environment.</target>
<note />
</trans-unit>
</body>

View file

@ -153,8 +153,8 @@
<note />
</trans-unit>
<trans-unit id="ListDefinition">
<source>List reference in the project.</source>
<target state="translated">Listez une référence dans le projet.</target>
<source>List project references or installed tools.</source>
<target state="needs-review-translation">Listez une référence dans le projet.</target>
<note />
</trans-unit>
<trans-unit id="CommandDoesNotExist">
@ -258,8 +258,8 @@
<note />
</trans-unit>
<trans-unit id="UninstallDefinition">
<source>Uninstalls a tool from the development environment.</source>
<target state="new">Uninstalls a tool from the development environment.</target>
<source>Uninstalls an item from the development environment.</source>
<target state="new">Uninstalls an item from the development environment.</target>
<note />
</trans-unit>
</body>

View file

@ -153,8 +153,8 @@
<note />
</trans-unit>
<trans-unit id="ListDefinition">
<source>List reference in the project.</source>
<target state="translated">Elenca il riferimento nel progetto.</target>
<source>List project references or installed tools.</source>
<target state="needs-review-translation">Elenca il riferimento nel progetto.</target>
<note />
</trans-unit>
<trans-unit id="CommandDoesNotExist">
@ -258,8 +258,8 @@
<note />
</trans-unit>
<trans-unit id="UninstallDefinition">
<source>Uninstalls a tool from the development environment.</source>
<target state="new">Uninstalls a tool from the development environment.</target>
<source>Uninstalls an item from the development environment.</source>
<target state="new">Uninstalls an item from the development environment.</target>
<note />
</trans-unit>
</body>

View file

@ -153,8 +153,8 @@
<note />
</trans-unit>
<trans-unit id="ListDefinition">
<source>List reference in the project.</source>
<target state="translated">プロジェクト内の参照を一覧表示します。</target>
<source>List project references or installed tools.</source>
<target state="needs-review-translation">プロジェクト内の参照を一覧表示します。</target>
<note />
</trans-unit>
<trans-unit id="CommandDoesNotExist">
@ -258,8 +258,8 @@
<note />
</trans-unit>
<trans-unit id="UninstallDefinition">
<source>Uninstalls a tool from the development environment.</source>
<target state="new">Uninstalls a tool from the development environment.</target>
<source>Uninstalls an item from the development environment.</source>
<target state="new">Uninstalls an item from the development environment.</target>
<note />
</trans-unit>
</body>

View file

@ -153,8 +153,8 @@
<note />
</trans-unit>
<trans-unit id="ListDefinition">
<source>List reference in the project.</source>
<target state="translated">프로젝트의 참조를 나열합니다.</target>
<source>List project references or installed tools.</source>
<target state="needs-review-translation">프로젝트의 참조를 나열합니다.</target>
<note />
</trans-unit>
<trans-unit id="CommandDoesNotExist">
@ -258,8 +258,8 @@
<note />
</trans-unit>
<trans-unit id="UninstallDefinition">
<source>Uninstalls a tool from the development environment.</source>
<target state="new">Uninstalls a tool from the development environment.</target>
<source>Uninstalls an item from the development environment.</source>
<target state="new">Uninstalls an item from the development environment.</target>
<note />
</trans-unit>
</body>

View file

@ -153,8 +153,8 @@
<note />
</trans-unit>
<trans-unit id="ListDefinition">
<source>List reference in the project.</source>
<target state="translated">Wyświetl odwołanie w projekcie.</target>
<source>List project references or installed tools.</source>
<target state="needs-review-translation">Wyświetl odwołanie w projekcie.</target>
<note />
</trans-unit>
<trans-unit id="CommandDoesNotExist">
@ -258,8 +258,8 @@
<note />
</trans-unit>
<trans-unit id="UninstallDefinition">
<source>Uninstalls a tool from the development environment.</source>
<target state="new">Uninstalls a tool from the development environment.</target>
<source>Uninstalls an item from the development environment.</source>
<target state="new">Uninstalls an item from the development environment.</target>
<note />
</trans-unit>
</body>

View file

@ -153,8 +153,8 @@
<note />
</trans-unit>
<trans-unit id="ListDefinition">
<source>List reference in the project.</source>
<target state="translated">Listar referência no projeto.</target>
<source>List project references or installed tools.</source>
<target state="needs-review-translation">Listar referência no projeto.</target>
<note />
</trans-unit>
<trans-unit id="CommandDoesNotExist">
@ -258,8 +258,8 @@
<note />
</trans-unit>
<trans-unit id="UninstallDefinition">
<source>Uninstalls a tool from the development environment.</source>
<target state="new">Uninstalls a tool from the development environment.</target>
<source>Uninstalls an item from the development environment.</source>
<target state="new">Uninstalls an item from the development environment.</target>
<note />
</trans-unit>
</body>

View file

@ -153,8 +153,8 @@
<note />
</trans-unit>
<trans-unit id="ListDefinition">
<source>List reference in the project.</source>
<target state="translated">Список ссылок в проекте.</target>
<source>List project references or installed tools.</source>
<target state="needs-review-translation">Список ссылок в проекте.</target>
<note />
</trans-unit>
<trans-unit id="CommandDoesNotExist">
@ -258,8 +258,8 @@
<note />
</trans-unit>
<trans-unit id="UninstallDefinition">
<source>Uninstalls a tool from the development environment.</source>
<target state="new">Uninstalls a tool from the development environment.</target>
<source>Uninstalls an item from the development environment.</source>
<target state="new">Uninstalls an item from the development environment.</target>
<note />
</trans-unit>
</body>

View file

@ -153,8 +153,8 @@
<note />
</trans-unit>
<trans-unit id="ListDefinition">
<source>List reference in the project.</source>
<target state="translated">Projede başvuruyu listeleyin.</target>
<source>List project references or installed tools.</source>
<target state="needs-review-translation">Projede başvuruyu listeleyin.</target>
<note />
</trans-unit>
<trans-unit id="CommandDoesNotExist">
@ -258,8 +258,8 @@
<note />
</trans-unit>
<trans-unit id="UninstallDefinition">
<source>Uninstalls a tool from the development environment.</source>
<target state="new">Uninstalls a tool from the development environment.</target>
<source>Uninstalls an item from the development environment.</source>
<target state="new">Uninstalls an item from the development environment.</target>
<note />
</trans-unit>
</body>

View file

@ -153,8 +153,8 @@
<note />
</trans-unit>
<trans-unit id="ListDefinition">
<source>List reference in the project.</source>
<target state="translated">列出项目中的引用。</target>
<source>List project references or installed tools.</source>
<target state="needs-review-translation">列出项目中的引用。</target>
<note />
</trans-unit>
<trans-unit id="CommandDoesNotExist">
@ -258,8 +258,8 @@
<note />
</trans-unit>
<trans-unit id="UninstallDefinition">
<source>Uninstalls a tool from the development environment.</source>
<target state="new">Uninstalls a tool from the development environment.</target>
<source>Uninstalls an item from the development environment.</source>
<target state="new">Uninstalls an item from the development environment.</target>
<note />
</trans-unit>
</body>

View file

@ -153,8 +153,8 @@
<note />
</trans-unit>
<trans-unit id="ListDefinition">
<source>List reference in the project.</source>
<target state="translated">列出專案中的參考。</target>
<source>List project references or installed tools.</source>
<target state="needs-review-translation">列出專案中的參考。</target>
<note />
</trans-unit>
<trans-unit id="CommandDoesNotExist">
@ -258,8 +258,8 @@
<note />
</trans-unit>
<trans-unit id="UninstallDefinition">
<source>Uninstalls a tool from the development environment.</source>
<target state="new">Uninstalls a tool from the development environment.</target>
<source>Uninstalls an item from the development environment.</source>
<target state="new">Uninstalls an item from the development environment.</target>
<note />
</trans-unit>
</body>

View file

@ -13,6 +13,7 @@ using Microsoft.DotNet.Configurer;
using Microsoft.DotNet.ShellShim;
using Microsoft.DotNet.ToolPackage;
using Microsoft.Extensions.EnvironmentAbstractions;
using NuGet.Versioning;
namespace Microsoft.DotNet.Tools.Install.Tool
{
@ -25,7 +26,7 @@ namespace Microsoft.DotNet.Tools.Install.Tool
private readonly IReporter _reporter;
private readonly IReporter _errorReporter;
private readonly string _packageId;
private readonly PackageId _packageId;
private readonly string _packageVersion;
private readonly string _configFilePath;
private readonly string _framework;
@ -48,7 +49,7 @@ namespace Microsoft.DotNet.Tools.Install.Tool
throw new ArgumentNullException(nameof(appliedCommand));
}
_packageId = appliedCommand.Arguments.Single();
_packageId = new PackageId(appliedCommand.Arguments.Single());
_packageVersion = appliedCommand.ValueOrDefault<string>("version");
_configFilePath = appliedCommand.ValueOrDefault<string>("configfile");
_framework = appliedCommand.ValueOrDefault<string>("framework");
@ -91,8 +92,16 @@ namespace Microsoft.DotNet.Tools.Install.Tool
Path.GetFullPath(_configFilePath)));
}
// Prevent installation if any version of the package is installed
if (_toolPackageStore.GetInstalledPackages(_packageId).FirstOrDefault() != null)
VersionRange versionRange = null;
if (!string.IsNullOrEmpty(_packageVersion) && !VersionRange.TryParse(_packageVersion, out versionRange))
{
throw new GracefulException(
string.Format(
LocalizableStrings.InvalidNuGetVersionRange,
_packageVersion));
}
if (_toolPackageStore.EnumeratePackageVersions(_packageId).FirstOrDefault() != null)
{
_errorReporter.WriteLine(string.Format(LocalizableStrings.ToolAlreadyInstalled, _packageId).Red());
return 1;
@ -113,7 +122,7 @@ namespace Microsoft.DotNet.Tools.Install.Tool
{
package = _toolPackageInstaller.InstallPackage(
packageId: _packageId,
packageVersion: _packageVersion,
versionRange: versionRange,
targetFramework: _framework,
nugetConfig: configFile,
source: _source,
@ -133,8 +142,8 @@ namespace Microsoft.DotNet.Tools.Install.Tool
string.Format(
LocalizableStrings.InstallationSucceeded,
string.Join(", ", package.Commands.Select(c => c.Name)),
package.PackageId,
package.PackageVersion).Green());
package.Id,
package.Version.ToNormalizedString()).Green());
return 0;
}
catch (ToolPackageException ex)

View file

@ -178,4 +178,7 @@ Tool '{1}' (version '{2}') was successfully installed.</value>
<data name="FailedToCreateToolShim" xml:space="preserve">
<value>Failed to create shell shim for tool '{0}': {1}</value>
</data>
<data name="InvalidNuGetVersionRange" xml:space="preserve">
<value>Specified version '{0}' is not a valid NuGet version range.</value>
</data>
</root>

View file

@ -104,6 +104,11 @@ Instalace byla úspěšná. Pokud nejsou další pokyny, můžete přímo do já
<target state="translated">Balíček nástroje nebylo možné obnovit.</target>
<note />
</trans-unit>
<trans-unit id="InvalidNuGetVersionRange">
<source>Specified version '{0}' is not a valid NuGet version range.</source>
<target state="new">Specified version '{0}' is not a valid NuGet version range.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -104,6 +104,11 @@ Die Installation war erfolgreich. Sofern keine weiteren Anweisungen vorliegen, k
<target state="translated">Das Toolpaket konnte nicht wiederhergestellt werden.</target>
<note />
</trans-unit>
<trans-unit id="InvalidNuGetVersionRange">
<source>Specified version '{0}' is not a valid NuGet version range.</source>
<target state="new">Specified version '{0}' is not a valid NuGet version range.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -104,6 +104,11 @@ La instalación se completó correctamente. Si no hay más instrucciones, puede
<target state="translated">No se puede restaurar el paquete de la herramienta.</target>
<note />
</trans-unit>
<trans-unit id="InvalidNuGetVersionRange">
<source>Specified version '{0}' is not a valid NuGet version range.</source>
<target state="new">Specified version '{0}' is not a valid NuGet version range.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -104,6 +104,11 @@ L'installation a réussi. En l'absence d'instructions supplémentaires, vous pou
<target state="translated">Impossible de restaurer le package de l'outil.</target>
<note />
</trans-unit>
<trans-unit id="InvalidNuGetVersionRange">
<source>Specified version '{0}' is not a valid NuGet version range.</source>
<target state="new">Specified version '{0}' is not a valid NuGet version range.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -104,6 +104,11 @@ L'installazione è riuscita. Se non ci sono altre istruzioni, è possibile digit
<target state="translated">Non è stato possibile ripristinare il pacchetto dello strumento.</target>
<note />
</trans-unit>
<trans-unit id="InvalidNuGetVersionRange">
<source>Specified version '{0}' is not a valid NuGet version range.</source>
<target state="new">Specified version '{0}' is not a valid NuGet version range.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -104,6 +104,11 @@ Tool '{1}' (version '{2}') was successfully installed.</source>
<target state="translated">ツール パッケージを復元できませんでした。</target>
<note />
</trans-unit>
<trans-unit id="InvalidNuGetVersionRange">
<source>Specified version '{0}' is not a valid NuGet version range.</source>
<target state="new">Specified version '{0}' is not a valid NuGet version range.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -104,6 +104,11 @@ Tool '{1}' (version '{2}') was successfully installed.</source>
<target state="translated">도구 패키지를 복원할 수 없습니다.</target>
<note />
</trans-unit>
<trans-unit id="InvalidNuGetVersionRange">
<source>Specified version '{0}' is not a valid NuGet version range.</source>
<target state="new">Specified version '{0}' is not a valid NuGet version range.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -104,6 +104,11 @@ Instalacja powiodła się. Jeśli nie ma dodatkowych instrukcji, możesz wpisać
<target state="translated">Nie można przywrócić pakietu narzędzia.</target>
<note />
</trans-unit>
<trans-unit id="InvalidNuGetVersionRange">
<source>Specified version '{0}' is not a valid NuGet version range.</source>
<target state="new">Specified version '{0}' is not a valid NuGet version range.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -104,6 +104,11 @@ A instalação foi bem-sucedida. Se não houver outras instruções, digite o se
<target state="translated">O pacote da ferramenta não pôde ser restaurado.</target>
<note />
</trans-unit>
<trans-unit id="InvalidNuGetVersionRange">
<source>Specified version '{0}' is not a valid NuGet version range.</source>
<target state="new">Specified version '{0}' is not a valid NuGet version range.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -104,6 +104,11 @@ Tool '{1}' (version '{2}') was successfully installed.</source>
<target state="translated">Не удалось восстановить пакет инструмента.</target>
<note />
</trans-unit>
<trans-unit id="InvalidNuGetVersionRange">
<source>Specified version '{0}' is not a valid NuGet version range.</source>
<target state="new">Specified version '{0}' is not a valid NuGet version range.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -104,6 +104,11 @@ Yükleme başarılı oldu. Daha fazla yönerge yoksa, çağırmak için şu komu
<target state="translated">Araç paketi geri yüklenemedi.</target>
<note />
</trans-unit>
<trans-unit id="InvalidNuGetVersionRange">
<source>Specified version '{0}' is not a valid NuGet version range.</source>
<target state="new">Specified version '{0}' is not a valid NuGet version range.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -104,6 +104,11 @@ Tool '{1}' (version '{2}') was successfully installed.</source>
<target state="translated">无法还原工具包。</target>
<note />
</trans-unit>
<trans-unit id="InvalidNuGetVersionRange">
<source>Specified version '{0}' is not a valid NuGet version range.</source>
<target state="new">Specified version '{0}' is not a valid NuGet version range.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -104,6 +104,11 @@ Tool '{1}' (version '{2}') was successfully installed.</source>
<target state="translated">此工具套件無法還原。</target>
<note />
</trans-unit>
<trans-unit id="InvalidNuGetVersionRange">
<source>Specified version '{0}' is not a valid NuGet version range.</source>
<target state="new">Specified version '{0}' is not a valid NuGet version range.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -7,6 +7,7 @@ using Microsoft.DotNet.Cli;
using Microsoft.DotNet.Cli.CommandLine;
using Microsoft.DotNet.Cli.Utils;
using Microsoft.DotNet.Tools.List.ProjectToProjectReferences;
using Microsoft.DotNet.Tools.List.Tool;
namespace Microsoft.DotNet.Tools.List
{
@ -22,16 +23,17 @@ namespace Microsoft.DotNet.Tools.List
{
{
"reference",
o => new ListProjectToProjectReferencesCommand(
o,
ParseResult)
o => new ListProjectToProjectReferencesCommand(o, ParseResult)
},
{
"tool",
o => new ListToolCommand(o["tool"], ParseResult)
}
};
public static int Run(string[] args)
{
var command = new ListCommand();
return command.RunCommand(args);
return new ListCommand().RunCommand(args);
}
}
}

View file

@ -3,24 +3,24 @@
using Microsoft.DotNet.Cli.CommandLine;
using Microsoft.DotNet.Tools;
using Microsoft.DotNet.Tools.List.ProjectToProjectReferences;
using Microsoft.DotNet.Tools.List.Tool;
using LocalizableStrings = Microsoft.DotNet.Tools.List.LocalizableStrings;
namespace Microsoft.DotNet.Cli
{
internal static class ListCommandParser
{
public static Command List() =>
Create.Command("list",
LocalizableStrings.NetListCommand,
Accept.ZeroOrOneArgument()
.With(name: CommonLocalizableStrings.CmdProjectFile,
description:
CommonLocalizableStrings.ArgumentsProjectDescription)
.DefaultToCurrentDirectory(),
CommonOptions.HelpOption(),
Create.Command("reference",
Tools.List.ProjectToProjectReferences.LocalizableStrings.AppFullName,
Accept.ZeroOrOneArgument(),
CommonOptions.HelpOption()));
public static Command List() => Create.Command(
"list",
LocalizableStrings.NetListCommand,
Accept.ZeroOrOneArgument()
.With(
name: CommonLocalizableStrings.CmdProjectFile,
description: CommonLocalizableStrings.ArgumentsProjectDescription)
.DefaultToCurrentDirectory(),
CommonOptions.HelpOption(),
ListProjectToProjectReferencesCommandParser.ListProjectToProjectReferences(),
ListToolCommandParser.ListTool());
}
}
}

View file

@ -1,126 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="AppFullName" xml:space="preserve">
<value>.NET Projects in Solution viewer</value>
</data>
<data name="AppDescription" xml:space="preserve">
<value>Command to list projects in a solution</value>
</data>
</root>

View file

@ -1,17 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="cs" original="../LocalizableStrings.resx">
<body>
<trans-unit id="AppFullName">
<source>.NET Projects in Solution viewer</source>
<target state="translated">Projekty .NET v prohlížeči řešení</target>
<note />
</trans-unit>
<trans-unit id="AppDescription">
<source>Command to list projects in a solution</source>
<target state="translated">Příkaz pro zobrazení seznamu projektů v řešení</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -1,17 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="de" original="../LocalizableStrings.resx">
<body>
<trans-unit id="AppFullName">
<source>.NET Projects in Solution viewer</source>
<target state="translated">.NET-Projekte in Projektmappenviewer</target>
<note />
</trans-unit>
<trans-unit id="AppDescription">
<source>Command to list projects in a solution</source>
<target state="translated">Befehl zum Auflisten von Projekten in einer Projektmappe</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -1,17 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="es" original="../LocalizableStrings.resx">
<body>
<trans-unit id="AppFullName">
<source>.NET Projects in Solution viewer</source>
<target state="translated">Visor de proyectos de NET en la solución</target>
<note />
</trans-unit>
<trans-unit id="AppDescription">
<source>Command to list projects in a solution</source>
<target state="translated">Comando para mostrar los proyectos de una solución</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -1,17 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="fr" original="../LocalizableStrings.resx">
<body>
<trans-unit id="AppFullName">
<source>.NET Projects in Solution viewer</source>
<target state="translated">Projets .NET dans la visionneuse de solutions</target>
<note />
</trans-unit>
<trans-unit id="AppDescription">
<source>Command to list projects in a solution</source>
<target state="translated">Commande permettant de lister les projets d'une solution</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -1,17 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="it" original="../LocalizableStrings.resx">
<body>
<trans-unit id="AppFullName">
<source>.NET Projects in Solution viewer</source>
<target state="translated">Progetti .NET nel visualizzatore soluzioni</target>
<note />
</trans-unit>
<trans-unit id="AppDescription">
<source>Command to list projects in a solution</source>
<target state="translated">Comando per elencare i progetti presenti in una soluzione</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -1,17 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="ja" original="../LocalizableStrings.resx">
<body>
<trans-unit id="AppFullName">
<source>.NET Projects in Solution viewer</source>
<target state="translated">ソリューション ビューアー内の .NET プロジェクト</target>
<note />
</trans-unit>
<trans-unit id="AppDescription">
<source>Command to list projects in a solution</source>
<target state="translated">ソリューションのプロジェクトを一覧表示するコマンド</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -1,17 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="ko" original="../LocalizableStrings.resx">
<body>
<trans-unit id="AppFullName">
<source>.NET Projects in Solution viewer</source>
<target state="translated">.NET 솔루션 뷰어의 프로젝트</target>
<note />
</trans-unit>
<trans-unit id="AppDescription">
<source>Command to list projects in a solution</source>
<target state="translated">솔루션의 프로젝트를 나열하기 위한 명령입니다.</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -1,17 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="pl" original="../LocalizableStrings.resx">
<body>
<trans-unit id="AppFullName">
<source>.NET Projects in Solution viewer</source>
<target state="translated">Podgląd projektów w rozwiązaniu dla platformy .NET</target>
<note />
</trans-unit>
<trans-unit id="AppDescription">
<source>Command to list projects in a solution</source>
<target state="translated">Polecenie umożliwiające wyświetlenie listy projektów w rozwiązaniu</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -1,17 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="pt-BR" original="../LocalizableStrings.resx">
<body>
<trans-unit id="AppFullName">
<source>.NET Projects in Solution viewer</source>
<target state="translated">Projetos .NET no visualizador da Solução</target>
<note />
</trans-unit>
<trans-unit id="AppDescription">
<source>Command to list projects in a solution</source>
<target state="translated">Comando para listar os projetos em uma solução</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -1,17 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="ru" original="../LocalizableStrings.resx">
<body>
<trans-unit id="AppFullName">
<source>.NET Projects in Solution viewer</source>
<target state="translated">Проекты .NET в средстве просмотра решений</target>
<note />
</trans-unit>
<trans-unit id="AppDescription">
<source>Command to list projects in a solution</source>
<target state="translated">Команда для перечисления проектов в решении</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -1,17 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="tr" original="../LocalizableStrings.resx">
<body>
<trans-unit id="AppFullName">
<source>.NET Projects in Solution viewer</source>
<target state="translated">Çözüm görüntüleyicisinde .NET Projeleri</target>
<note />
</trans-unit>
<trans-unit id="AppDescription">
<source>Command to list projects in a solution</source>
<target state="translated">Bir çözümdeki projeleri listeleme komutu</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -1,16 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" original="src/dotnet/commands/dotnet-list/dotnet-list-proj/LocalizableStrings.resx">
<body>
<group id="src/dotnet/commands/dotnet-list/dotnet-list-proj/LocalizableStrings.resx" />
<trans-unit id="AppFullName">
<source>.NET Projects in Solution viewer</source>
<note />
</trans-unit>
<trans-unit id="AppDescription">
<source>Command to list projects in a solution</source>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -1,17 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="zh-Hans" original="../LocalizableStrings.resx">
<body>
<trans-unit id="AppFullName">
<source>.NET Projects in Solution viewer</source>
<target state="translated">解决方案查看器中的 .NET 项目</target>
<note />
</trans-unit>
<trans-unit id="AppDescription">
<source>Command to list projects in a solution</source>
<target state="translated">用于列出解决方案中项目的命令</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -1,17 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="zh-Hant" original="../LocalizableStrings.resx">
<body>
<trans-unit id="AppFullName">
<source>.NET Projects in Solution viewer</source>
<target state="translated">解決方案檢視器中的 .NET 專案</target>
<note />
</trans-unit>
<trans-unit id="AppDescription">
<source>Command to list projects in a solution</source>
<target state="translated">命令,用以列出解決方案中的專案</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -50,4 +50,4 @@ namespace Microsoft.DotNet.Tools.List.ProjectToProjectReferences
return 0;
}
}
}
}

View file

@ -0,0 +1,20 @@
// Copyright (c) .NET Foundation and contributors. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
using Microsoft.DotNet.Cli.CommandLine;
using LocalizableStrings = Microsoft.DotNet.Tools.List.ProjectToProjectReferences.LocalizableStrings;
namespace Microsoft.DotNet.Cli
{
internal static class ListProjectToProjectReferencesCommandParser
{
public static Command ListProjectToProjectReferences()
{
return Create.Command(
"reference",
LocalizableStrings.AppFullName,
Accept.ZeroOrOneArgument(),
CommonOptions.HelpOption());
}
}
}

View file

@ -127,4 +127,4 @@
<value>There are no {0} references in project {1}.
{0} is the type of the item being requested (project, package, p2p) and {1} is the object operated on (a project file or a solution file). </value>
</data>
</root>
</root>

View file

@ -0,0 +1,88 @@
// Copyright (c) .NET Foundation and contributors. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.DotNet.Cli;
using Microsoft.DotNet.Cli.CommandLine;
using Microsoft.DotNet.Cli.Utils;
using Microsoft.DotNet.Configurer;
using Microsoft.DotNet.ToolPackage;
using Microsoft.Extensions.EnvironmentAbstractions;
namespace Microsoft.DotNet.Tools.List.Tool
{
internal class ListToolCommand : CommandBase
{
private const string CommandDelimiter = ", ";
private readonly AppliedOption _options;
private readonly IToolPackageStore _toolPackageStore;
private readonly IReporter _reporter;
private readonly IReporter _errorReporter;
public ListToolCommand(
AppliedOption options,
ParseResult result,
IToolPackageStore toolPackageStore = null,
IReporter reporter = null)
: base(result)
{
_options = options ?? throw new ArgumentNullException(nameof(options));
_toolPackageStore = toolPackageStore ?? new ToolPackageStore(
new DirectoryPath(new CliFolderPathCalculator().ToolsPackagePath));
_reporter = reporter ?? Reporter.Output;
_errorReporter = reporter ?? Reporter.Error;
}
public override int Execute()
{
if (!_options.ValueOrDefault<bool>("global"))
{
throw new GracefulException(LocalizableStrings.ListToolCommandOnlySupportsGlobal);
}
var table = new PrintableTable<IToolPackage>();
table.AddColumn(
LocalizableStrings.PackageIdColumn,
p => p.Id.ToString());
table.AddColumn(
LocalizableStrings.VersionColumn,
p => p.Version.ToNormalizedString());
table.AddColumn(
LocalizableStrings.CommandsColumn,
p => string.Join(CommandDelimiter, p.Commands.Select(c => c.Name)));
table.PrintRows(GetPackages(), l => _reporter.WriteLine(l));
return 0;
}
private IEnumerable<IToolPackage> GetPackages()
{
return _toolPackageStore.EnumeratePackages()
.Where(PackageHasCommands)
.OrderBy(p => p.Id)
.ToArray();
}
private bool PackageHasCommands(IToolPackage p)
{
try
{
// Attempt to read the commands collection
// If it fails, print a warning and treat as no commands
return p.Commands.Count >= 0;
}
catch (Exception ex) when (ex is ToolConfigurationException)
{
_errorReporter.WriteLine(
string.Format(
LocalizableStrings.InvalidPackageWarning,
p.Id,
ex.Message).Yellow());
return false;
}
}
}
}

View file

@ -0,0 +1,23 @@
// Copyright (c) .NET Foundation and contributors. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
using Microsoft.DotNet.Cli.CommandLine;
using LocalizableStrings = Microsoft.DotNet.Tools.List.Tool.LocalizableStrings;
namespace Microsoft.DotNet.Cli
{
internal static class ListToolCommandParser
{
public static Command ListTool()
{
return Create.Command(
"tool",
LocalizableStrings.CommandDescription,
Create.Option(
"-g|--global",
LocalizableStrings.GlobalOptionDescription,
Accept.NoArguments()),
CommonOptions.HelpOption());
}
}
}

View file

@ -117,13 +117,25 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="AppFullName" xml:space="preserve">
<value>.NET Add Project to Solution Command</value>
<data name="CommandDescription" xml:space="preserve">
<value>Lists installed tools in the current development environment.</value>
</data>
<data name="AppDescription" xml:space="preserve">
<value>Command to add project to solution</value>
<data name="GlobalOptionDescription" xml:space="preserve">
<value>List user wide tools.</value>
</data>
<data name="AppHelpText" xml:space="preserve">
<value>Projects to add to solution</value>
<data name="ListToolCommandOnlySupportsGlobal" xml:space="preserve">
<value>The --global switch (-g) is currently required because only user wide tools are supported.</value>
</data>
</root>
<data name="InvalidPackageWarning" xml:space="preserve">
<value>Warning: tool package '{0}' is invalid: {1}</value>
</data>
<data name="PackageIdColumn" xml:space="preserve">
<value>Package Id</value>
</data>
<data name="VersionColumn" xml:space="preserve">
<value>Version</value>
</data>
<data name="CommandsColumn" xml:space="preserve">
<value>Commands</value>
</data>
</root>

View file

@ -0,0 +1,42 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="cs" original="../LocalizableStrings.resx">
<body>
<trans-unit id="CommandDescription">
<source>Lists installed tools in the current development environment.</source>
<target state="new">Lists installed tools in the current development environment.</target>
<note />
</trans-unit>
<trans-unit id="GlobalOptionDescription">
<source>List user wide tools.</source>
<target state="new">List user wide tools.</target>
<note />
</trans-unit>
<trans-unit id="ListToolCommandOnlySupportsGlobal">
<source>The --global switch (-g) is currently required because only user wide tools are supported.</source>
<target state="new">The --global switch (-g) is currently required because only user wide tools are supported.</target>
<note />
</trans-unit>
<trans-unit id="VersionColumn">
<source>Version</source>
<target state="new">Version</target>
<note />
</trans-unit>
<trans-unit id="CommandsColumn">
<source>Commands</source>
<target state="new">Commands</target>
<note />
</trans-unit>
<trans-unit id="PackageIdColumn">
<source>Package Id</source>
<target state="new">Package Id</target>
<note />
</trans-unit>
<trans-unit id="InvalidPackageWarning">
<source>Warning: tool package '{0}' is invalid: {1}</source>
<target state="new">Warning: tool package '{0}' is invalid: {1}</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -0,0 +1,42 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="de" original="../LocalizableStrings.resx">
<body>
<trans-unit id="CommandDescription">
<source>Lists installed tools in the current development environment.</source>
<target state="new">Lists installed tools in the current development environment.</target>
<note />
</trans-unit>
<trans-unit id="GlobalOptionDescription">
<source>List user wide tools.</source>
<target state="new">List user wide tools.</target>
<note />
</trans-unit>
<trans-unit id="ListToolCommandOnlySupportsGlobal">
<source>The --global switch (-g) is currently required because only user wide tools are supported.</source>
<target state="new">The --global switch (-g) is currently required because only user wide tools are supported.</target>
<note />
</trans-unit>
<trans-unit id="VersionColumn">
<source>Version</source>
<target state="new">Version</target>
<note />
</trans-unit>
<trans-unit id="CommandsColumn">
<source>Commands</source>
<target state="new">Commands</target>
<note />
</trans-unit>
<trans-unit id="PackageIdColumn">
<source>Package Id</source>
<target state="new">Package Id</target>
<note />
</trans-unit>
<trans-unit id="InvalidPackageWarning">
<source>Warning: tool package '{0}' is invalid: {1}</source>
<target state="new">Warning: tool package '{0}' is invalid: {1}</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -0,0 +1,42 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="es" original="../LocalizableStrings.resx">
<body>
<trans-unit id="CommandDescription">
<source>Lists installed tools in the current development environment.</source>
<target state="new">Lists installed tools in the current development environment.</target>
<note />
</trans-unit>
<trans-unit id="GlobalOptionDescription">
<source>List user wide tools.</source>
<target state="new">List user wide tools.</target>
<note />
</trans-unit>
<trans-unit id="ListToolCommandOnlySupportsGlobal">
<source>The --global switch (-g) is currently required because only user wide tools are supported.</source>
<target state="new">The --global switch (-g) is currently required because only user wide tools are supported.</target>
<note />
</trans-unit>
<trans-unit id="VersionColumn">
<source>Version</source>
<target state="new">Version</target>
<note />
</trans-unit>
<trans-unit id="CommandsColumn">
<source>Commands</source>
<target state="new">Commands</target>
<note />
</trans-unit>
<trans-unit id="PackageIdColumn">
<source>Package Id</source>
<target state="new">Package Id</target>
<note />
</trans-unit>
<trans-unit id="InvalidPackageWarning">
<source>Warning: tool package '{0}' is invalid: {1}</source>
<target state="new">Warning: tool package '{0}' is invalid: {1}</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -0,0 +1,42 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="fr" original="../LocalizableStrings.resx">
<body>
<trans-unit id="CommandDescription">
<source>Lists installed tools in the current development environment.</source>
<target state="new">Lists installed tools in the current development environment.</target>
<note />
</trans-unit>
<trans-unit id="GlobalOptionDescription">
<source>List user wide tools.</source>
<target state="new">List user wide tools.</target>
<note />
</trans-unit>
<trans-unit id="ListToolCommandOnlySupportsGlobal">
<source>The --global switch (-g) is currently required because only user wide tools are supported.</source>
<target state="new">The --global switch (-g) is currently required because only user wide tools are supported.</target>
<note />
</trans-unit>
<trans-unit id="VersionColumn">
<source>Version</source>
<target state="new">Version</target>
<note />
</trans-unit>
<trans-unit id="CommandsColumn">
<source>Commands</source>
<target state="new">Commands</target>
<note />
</trans-unit>
<trans-unit id="PackageIdColumn">
<source>Package Id</source>
<target state="new">Package Id</target>
<note />
</trans-unit>
<trans-unit id="InvalidPackageWarning">
<source>Warning: tool package '{0}' is invalid: {1}</source>
<target state="new">Warning: tool package '{0}' is invalid: {1}</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -0,0 +1,42 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="it" original="../LocalizableStrings.resx">
<body>
<trans-unit id="CommandDescription">
<source>Lists installed tools in the current development environment.</source>
<target state="new">Lists installed tools in the current development environment.</target>
<note />
</trans-unit>
<trans-unit id="GlobalOptionDescription">
<source>List user wide tools.</source>
<target state="new">List user wide tools.</target>
<note />
</trans-unit>
<trans-unit id="ListToolCommandOnlySupportsGlobal">
<source>The --global switch (-g) is currently required because only user wide tools are supported.</source>
<target state="new">The --global switch (-g) is currently required because only user wide tools are supported.</target>
<note />
</trans-unit>
<trans-unit id="VersionColumn">
<source>Version</source>
<target state="new">Version</target>
<note />
</trans-unit>
<trans-unit id="CommandsColumn">
<source>Commands</source>
<target state="new">Commands</target>
<note />
</trans-unit>
<trans-unit id="PackageIdColumn">
<source>Package Id</source>
<target state="new">Package Id</target>
<note />
</trans-unit>
<trans-unit id="InvalidPackageWarning">
<source>Warning: tool package '{0}' is invalid: {1}</source>
<target state="new">Warning: tool package '{0}' is invalid: {1}</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -0,0 +1,42 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="ja" original="../LocalizableStrings.resx">
<body>
<trans-unit id="CommandDescription">
<source>Lists installed tools in the current development environment.</source>
<target state="new">Lists installed tools in the current development environment.</target>
<note />
</trans-unit>
<trans-unit id="GlobalOptionDescription">
<source>List user wide tools.</source>
<target state="new">List user wide tools.</target>
<note />
</trans-unit>
<trans-unit id="ListToolCommandOnlySupportsGlobal">
<source>The --global switch (-g) is currently required because only user wide tools are supported.</source>
<target state="new">The --global switch (-g) is currently required because only user wide tools are supported.</target>
<note />
</trans-unit>
<trans-unit id="VersionColumn">
<source>Version</source>
<target state="new">Version</target>
<note />
</trans-unit>
<trans-unit id="CommandsColumn">
<source>Commands</source>
<target state="new">Commands</target>
<note />
</trans-unit>
<trans-unit id="PackageIdColumn">
<source>Package Id</source>
<target state="new">Package Id</target>
<note />
</trans-unit>
<trans-unit id="InvalidPackageWarning">
<source>Warning: tool package '{0}' is invalid: {1}</source>
<target state="new">Warning: tool package '{0}' is invalid: {1}</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -0,0 +1,42 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="ko" original="../LocalizableStrings.resx">
<body>
<trans-unit id="CommandDescription">
<source>Lists installed tools in the current development environment.</source>
<target state="new">Lists installed tools in the current development environment.</target>
<note />
</trans-unit>
<trans-unit id="GlobalOptionDescription">
<source>List user wide tools.</source>
<target state="new">List user wide tools.</target>
<note />
</trans-unit>
<trans-unit id="ListToolCommandOnlySupportsGlobal">
<source>The --global switch (-g) is currently required because only user wide tools are supported.</source>
<target state="new">The --global switch (-g) is currently required because only user wide tools are supported.</target>
<note />
</trans-unit>
<trans-unit id="VersionColumn">
<source>Version</source>
<target state="new">Version</target>
<note />
</trans-unit>
<trans-unit id="CommandsColumn">
<source>Commands</source>
<target state="new">Commands</target>
<note />
</trans-unit>
<trans-unit id="PackageIdColumn">
<source>Package Id</source>
<target state="new">Package Id</target>
<note />
</trans-unit>
<trans-unit id="InvalidPackageWarning">
<source>Warning: tool package '{0}' is invalid: {1}</source>
<target state="new">Warning: tool package '{0}' is invalid: {1}</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -0,0 +1,42 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="pl" original="../LocalizableStrings.resx">
<body>
<trans-unit id="CommandDescription">
<source>Lists installed tools in the current development environment.</source>
<target state="new">Lists installed tools in the current development environment.</target>
<note />
</trans-unit>
<trans-unit id="GlobalOptionDescription">
<source>List user wide tools.</source>
<target state="new">List user wide tools.</target>
<note />
</trans-unit>
<trans-unit id="ListToolCommandOnlySupportsGlobal">
<source>The --global switch (-g) is currently required because only user wide tools are supported.</source>
<target state="new">The --global switch (-g) is currently required because only user wide tools are supported.</target>
<note />
</trans-unit>
<trans-unit id="VersionColumn">
<source>Version</source>
<target state="new">Version</target>
<note />
</trans-unit>
<trans-unit id="CommandsColumn">
<source>Commands</source>
<target state="new">Commands</target>
<note />
</trans-unit>
<trans-unit id="PackageIdColumn">
<source>Package Id</source>
<target state="new">Package Id</target>
<note />
</trans-unit>
<trans-unit id="InvalidPackageWarning">
<source>Warning: tool package '{0}' is invalid: {1}</source>
<target state="new">Warning: tool package '{0}' is invalid: {1}</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -0,0 +1,42 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="pt-BR" original="../LocalizableStrings.resx">
<body>
<trans-unit id="CommandDescription">
<source>Lists installed tools in the current development environment.</source>
<target state="new">Lists installed tools in the current development environment.</target>
<note />
</trans-unit>
<trans-unit id="GlobalOptionDescription">
<source>List user wide tools.</source>
<target state="new">List user wide tools.</target>
<note />
</trans-unit>
<trans-unit id="ListToolCommandOnlySupportsGlobal">
<source>The --global switch (-g) is currently required because only user wide tools are supported.</source>
<target state="new">The --global switch (-g) is currently required because only user wide tools are supported.</target>
<note />
</trans-unit>
<trans-unit id="VersionColumn">
<source>Version</source>
<target state="new">Version</target>
<note />
</trans-unit>
<trans-unit id="CommandsColumn">
<source>Commands</source>
<target state="new">Commands</target>
<note />
</trans-unit>
<trans-unit id="PackageIdColumn">
<source>Package Id</source>
<target state="new">Package Id</target>
<note />
</trans-unit>
<trans-unit id="InvalidPackageWarning">
<source>Warning: tool package '{0}' is invalid: {1}</source>
<target state="new">Warning: tool package '{0}' is invalid: {1}</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -0,0 +1,42 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="ru" original="../LocalizableStrings.resx">
<body>
<trans-unit id="CommandDescription">
<source>Lists installed tools in the current development environment.</source>
<target state="new">Lists installed tools in the current development environment.</target>
<note />
</trans-unit>
<trans-unit id="GlobalOptionDescription">
<source>List user wide tools.</source>
<target state="new">List user wide tools.</target>
<note />
</trans-unit>
<trans-unit id="ListToolCommandOnlySupportsGlobal">
<source>The --global switch (-g) is currently required because only user wide tools are supported.</source>
<target state="new">The --global switch (-g) is currently required because only user wide tools are supported.</target>
<note />
</trans-unit>
<trans-unit id="VersionColumn">
<source>Version</source>
<target state="new">Version</target>
<note />
</trans-unit>
<trans-unit id="CommandsColumn">
<source>Commands</source>
<target state="new">Commands</target>
<note />
</trans-unit>
<trans-unit id="PackageIdColumn">
<source>Package Id</source>
<target state="new">Package Id</target>
<note />
</trans-unit>
<trans-unit id="InvalidPackageWarning">
<source>Warning: tool package '{0}' is invalid: {1}</source>
<target state="new">Warning: tool package '{0}' is invalid: {1}</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -0,0 +1,42 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="tr" original="../LocalizableStrings.resx">
<body>
<trans-unit id="CommandDescription">
<source>Lists installed tools in the current development environment.</source>
<target state="new">Lists installed tools in the current development environment.</target>
<note />
</trans-unit>
<trans-unit id="GlobalOptionDescription">
<source>List user wide tools.</source>
<target state="new">List user wide tools.</target>
<note />
</trans-unit>
<trans-unit id="ListToolCommandOnlySupportsGlobal">
<source>The --global switch (-g) is currently required because only user wide tools are supported.</source>
<target state="new">The --global switch (-g) is currently required because only user wide tools are supported.</target>
<note />
</trans-unit>
<trans-unit id="VersionColumn">
<source>Version</source>
<target state="new">Version</target>
<note />
</trans-unit>
<trans-unit id="CommandsColumn">
<source>Commands</source>
<target state="new">Commands</target>
<note />
</trans-unit>
<trans-unit id="PackageIdColumn">
<source>Package Id</source>
<target state="new">Package Id</target>
<note />
</trans-unit>
<trans-unit id="InvalidPackageWarning">
<source>Warning: tool package '{0}' is invalid: {1}</source>
<target state="new">Warning: tool package '{0}' is invalid: {1}</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -0,0 +1,42 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="zh-Hans" original="../LocalizableStrings.resx">
<body>
<trans-unit id="CommandDescription">
<source>Lists installed tools in the current development environment.</source>
<target state="new">Lists installed tools in the current development environment.</target>
<note />
</trans-unit>
<trans-unit id="GlobalOptionDescription">
<source>List user wide tools.</source>
<target state="new">List user wide tools.</target>
<note />
</trans-unit>
<trans-unit id="ListToolCommandOnlySupportsGlobal">
<source>The --global switch (-g) is currently required because only user wide tools are supported.</source>
<target state="new">The --global switch (-g) is currently required because only user wide tools are supported.</target>
<note />
</trans-unit>
<trans-unit id="VersionColumn">
<source>Version</source>
<target state="new">Version</target>
<note />
</trans-unit>
<trans-unit id="CommandsColumn">
<source>Commands</source>
<target state="new">Commands</target>
<note />
</trans-unit>
<trans-unit id="PackageIdColumn">
<source>Package Id</source>
<target state="new">Package Id</target>
<note />
</trans-unit>
<trans-unit id="InvalidPackageWarning">
<source>Warning: tool package '{0}' is invalid: {1}</source>
<target state="new">Warning: tool package '{0}' is invalid: {1}</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -0,0 +1,42 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="zh-Hant" original="../LocalizableStrings.resx">
<body>
<trans-unit id="CommandDescription">
<source>Lists installed tools in the current development environment.</source>
<target state="new">Lists installed tools in the current development environment.</target>
<note />
</trans-unit>
<trans-unit id="GlobalOptionDescription">
<source>List user wide tools.</source>
<target state="new">List user wide tools.</target>
<note />
</trans-unit>
<trans-unit id="ListToolCommandOnlySupportsGlobal">
<source>The --global switch (-g) is currently required because only user wide tools are supported.</source>
<target state="new">The --global switch (-g) is currently required because only user wide tools are supported.</target>
<note />
</trans-unit>
<trans-unit id="VersionColumn">
<source>Version</source>
<target state="new">Version</target>
<note />
</trans-unit>
<trans-unit id="CommandsColumn">
<source>Commands</source>
<target state="new">Commands</target>
<note />
</trans-unit>
<trans-unit id="PackageIdColumn">
<source>Package Id</source>
<target state="new">Package Id</target>
<note />
</trans-unit>
<trans-unit id="InvalidPackageWarning">
<source>Warning: tool package '{0}' is invalid: {1}</source>
<target state="new">Warning: tool package '{0}' is invalid: {1}</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -1,129 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="AppFullName" xml:space="preserve">
<value>.NET Remove Project from Solution Command</value>
</data>
<data name="AppDescription" xml:space="preserve">
<value>Command to remove projects from a solution</value>
</data>
<data name="AppHelpText" xml:space="preserve">
<value>Projects to remove from a solution</value>
</data>
</root>

View file

@ -1,22 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="cs" original="../LocalizableStrings.resx">
<body>
<trans-unit id="AppFullName">
<source>.NET Remove Project from Solution Command</source>
<target state="translated">Příkaz rozhraní .NET pro odebrání projektu z řešení</target>
<note />
</trans-unit>
<trans-unit id="AppDescription">
<source>Command to remove projects from a solution</source>
<target state="translated">Příkaz pro odebrání projektů z řešení</target>
<note />
</trans-unit>
<trans-unit id="AppHelpText">
<source>Projects to remove from a solution</source>
<target state="translated">Projekty odebírané z řešení</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -1,22 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="de" original="../LocalizableStrings.resx">
<body>
<trans-unit id="AppFullName">
<source>.NET Remove Project from Solution Command</source>
<target state="translated">.NET-Befehl zum Entfernen des Projekts aus der Projektmappe</target>
<note />
</trans-unit>
<trans-unit id="AppDescription">
<source>Command to remove projects from a solution</source>
<target state="translated">Befehl zum Entfernen von Projekten aus einer Projektmappe</target>
<note />
</trans-unit>
<trans-unit id="AppHelpText">
<source>Projects to remove from a solution</source>
<target state="translated">Aus einer Projektmappe zu entfernende Projekte</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -1,22 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="es" original="../LocalizableStrings.resx">
<body>
<trans-unit id="AppFullName">
<source>.NET Remove Project from Solution Command</source>
<target state="translated">Comando de .NET Quitar proyecto de la solución</target>
<note />
</trans-unit>
<trans-unit id="AppDescription">
<source>Command to remove projects from a solution</source>
<target state="translated">Comando para quitar proyectos de una solución</target>
<note />
</trans-unit>
<trans-unit id="AppHelpText">
<source>Projects to remove from a solution</source>
<target state="translated">Proyectos que se quitarán de una solución</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -1,22 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="fr" original="../LocalizableStrings.resx">
<body>
<trans-unit id="AppFullName">
<source>.NET Remove Project from Solution Command</source>
<target state="translated">Commande .NET de suppression de projet d'une solution</target>
<note />
</trans-unit>
<trans-unit id="AppDescription">
<source>Command to remove projects from a solution</source>
<target state="translated">Commande permettant de supprimer des projets d'une solution</target>
<note />
</trans-unit>
<trans-unit id="AppHelpText">
<source>Projects to remove from a solution</source>
<target state="translated">Projets à supprimer d'une solution</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -1,22 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="it" original="../LocalizableStrings.resx">
<body>
<trans-unit id="AppFullName">
<source>.NET Remove Project from Solution Command</source>
<target state="translated">Comando Rimuovi progetto da soluzione .NET</target>
<note />
</trans-unit>
<trans-unit id="AppDescription">
<source>Command to remove projects from a solution</source>
<target state="translated">Comando per rimuovere il progetto da una soluzione</target>
<note />
</trans-unit>
<trans-unit id="AppHelpText">
<source>Projects to remove from a solution</source>
<target state="translated">Progetti da rimuovere da una soluzione</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -1,22 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="ja" original="../LocalizableStrings.resx">
<body>
<trans-unit id="AppFullName">
<source>.NET Remove Project from Solution Command</source>
<target state="translated">.NET Remove Project from Solution コマンド</target>
<note />
</trans-unit>
<trans-unit id="AppDescription">
<source>Command to remove projects from a solution</source>
<target state="translated">ソリューションからプロジェクトを削除するコマンド</target>
<note />
</trans-unit>
<trans-unit id="AppHelpText">
<source>Projects to remove from a solution</source>
<target state="translated">ソリューションから削除するプロジェクト</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -1,22 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="ko" original="../LocalizableStrings.resx">
<body>
<trans-unit id="AppFullName">
<source>.NET Remove Project from Solution Command</source>
<target state="translated">.NET 솔루션에서 프로젝트 제거 명령</target>
<note />
</trans-unit>
<trans-unit id="AppDescription">
<source>Command to remove projects from a solution</source>
<target state="translated">솔루션에서 프로젝트를 제거하기 위한 명령입니다.</target>
<note />
</trans-unit>
<trans-unit id="AppHelpText">
<source>Projects to remove from a solution</source>
<target state="translated">솔루션에서 제거할 프로젝트</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -1,22 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="pl" original="../LocalizableStrings.resx">
<body>
<trans-unit id="AppFullName">
<source>.NET Remove Project from Solution Command</source>
<target state="translated">Polecenie usuwania projektu z rozwiązania dla platformy .NET</target>
<note />
</trans-unit>
<trans-unit id="AppDescription">
<source>Command to remove projects from a solution</source>
<target state="translated">Polecenie służące do usuwania projektów z rozwiązania</target>
<note />
</trans-unit>
<trans-unit id="AppHelpText">
<source>Projects to remove from a solution</source>
<target state="translated">Projekty do usunięcia z rozwiązania</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -1,22 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="pt-BR" original="../LocalizableStrings.resx">
<body>
<trans-unit id="AppFullName">
<source>.NET Remove Project from Solution Command</source>
<target state="translated">Comando para Remover Projetos de uma Solução do .NET</target>
<note />
</trans-unit>
<trans-unit id="AppDescription">
<source>Command to remove projects from a solution</source>
<target state="translated">Comando para remover projetos de uma solução</target>
<note />
</trans-unit>
<trans-unit id="AppHelpText">
<source>Projects to remove from a solution</source>
<target state="translated">Projetos a serem removidos de uma solução</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

View file

@ -1,22 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en" target-language="ru" original="../LocalizableStrings.resx">
<body>
<trans-unit id="AppFullName">
<source>.NET Remove Project from Solution Command</source>
<target state="translated">Команда .NET "Удалить проект из решения"</target>
<note />
</trans-unit>
<trans-unit id="AppDescription">
<source>Command to remove projects from a solution</source>
<target state="translated">Команда для удаления проектов из решения</target>
<note />
</trans-unit>
<trans-unit id="AppHelpText">
<source>Projects to remove from a solution</source>
<target state="translated">Проекты, удаляемые из решения</target>
<note />
</trans-unit>
</body>
</file>
</xliff>

Some files were not shown because too many files have changed in this diff Show more