-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Adding dotnet add package sub command #5122
Changes from all commits
abd496a
3a5b89c
0f6e4e3
303a267
2738ea8
ac988a4
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
// 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. | ||
|
||
namespace Microsoft.DotNet.Tools.Add.PackageReference | ||
{ | ||
internal class LocalizableStrings | ||
This comment was marked as spam.
Sorry, something went wrong.
This comment was marked as spam.
Sorry, something went wrong.
This comment was marked as spam.
Sorry, something went wrong.
This comment was marked as spam.
Sorry, something went wrong.
This comment was marked as spam.
Sorry, something went wrong. |
||
{ | ||
public const string AppFullName = ".NET Add Package reference Command"; | ||
|
||
public const string AppDescription = "Command to add package reference"; | ||
|
||
public const string AppHelpText = "Package references to add"; | ||
|
||
public const string SpecifyExactlyOnePackageReference = "Please specify one package reference to add."; | ||
|
||
public const string CmdFrameworkDescription = "Add reference only when targetting a specific framework"; | ||
|
||
public const string CmdNoRestoreDescription = "Add reference without performing restore preview and compatibility check."; | ||
|
||
public const string CmdSourceDescription = "Use specific NuGet package sources to use during the restore."; | ||
|
||
public const string CmdPackageDirectoryDescription = "Restore the packages to this Directory ."; | ||
|
||
public const string CmdVersionDescription = "Version for the package to be added."; | ||
|
||
public const string CmdDGFileException = "Unable to Create Dependency graph file for project '{0}'. Cannot add package reference."; | ||
|
||
public const string CmdVersion = "VERSION"; | ||
|
||
public const string CmdFramework = "FRAMEWORK"; | ||
|
||
public const string CmdSource = "SOURCE"; | ||
|
||
public const string CmdPackageDirectory = "PACKAGE_DIRECTORY"; | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,176 @@ | ||
// 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.Diagnostics; | ||
using System.IO; | ||
using System.Linq; | ||
using System.Text; | ||
using Microsoft.Build.Evaluation; | ||
using Microsoft.DotNet.Cli; | ||
using Microsoft.DotNet.Cli.CommandLine; | ||
using Microsoft.DotNet.Cli.Utils; | ||
using Microsoft.DotNet.Tools.Common; | ||
using Microsoft.DotNet.Tools.MSBuild; | ||
using Microsoft.DotNet.Tools.NuGet; | ||
using NuGet.Frameworks; | ||
|
||
namespace Microsoft.DotNet.Tools.Add.PackageReference | ||
{ | ||
internal class AddPackageReferenceCommand : DotNetSubCommandBase | ||
{ | ||
private CommandOption _versionOption; | ||
private CommandOption _frameworkOption; | ||
private CommandOption _noRestoreOption; | ||
private CommandOption _sourceOption; | ||
private CommandOption _packageDirectoryOption; | ||
|
||
public static DotNetSubCommandBase Create() | ||
{ | ||
var command = new AddPackageReferenceCommand | ||
{ | ||
Name = "package", | ||
FullName = LocalizableStrings.AppFullName, | ||
Description = LocalizableStrings.AppDescription, | ||
HandleRemainingArguments = true, | ||
ArgumentSeparatorHelpText = LocalizableStrings.AppHelpText, | ||
}; | ||
|
||
command.HelpOption("-h|--help"); | ||
|
||
command._versionOption = command.Option( | ||
$"-v|--version <{LocalizableStrings.CmdVersion}>", | ||
LocalizableStrings.CmdVersionDescription, | ||
CommandOptionType.SingleValue); | ||
|
||
command._frameworkOption = command.Option( | ||
$"-f|--framework <{LocalizableStrings.CmdFramework}>", | ||
LocalizableStrings.CmdFrameworkDescription, | ||
CommandOptionType.SingleValue); | ||
|
||
command._noRestoreOption = command.Option( | ||
"-n|--no-restore ", | ||
LocalizableStrings.CmdNoRestoreDescription, | ||
CommandOptionType.NoValue); | ||
|
||
command._sourceOption = command.Option( | ||
$"-s|--source <{LocalizableStrings.CmdSource}>", | ||
LocalizableStrings.CmdSourceDescription, | ||
CommandOptionType.SingleValue); | ||
|
||
command._packageDirectoryOption = command.Option( | ||
$"--package-directory <{LocalizableStrings.CmdPackageDirectory}>", | ||
LocalizableStrings.CmdPackageDirectoryDescription, | ||
CommandOptionType.SingleValue); | ||
|
||
return command; | ||
} | ||
|
||
public override int Run(string fileOrDirectory) | ||
{ | ||
if (RemainingArguments.Count != 1) | ||
{ | ||
throw new GracefulException(LocalizableStrings.SpecifyExactlyOnePackageReference); | ||
} | ||
|
||
var projectFilePath = string.Empty; | ||
|
||
if (!File.Exists(fileOrDirectory)) | ||
{ | ||
projectFilePath = MsbuildProject.GetProjectFileFromDirectory(fileOrDirectory).FullName; | ||
} | ||
else | ||
{ | ||
projectFilePath = fileOrDirectory; | ||
This comment was marked as spam.
Sorry, something went wrong.
This comment was marked as spam.
Sorry, something went wrong.
This comment was marked as spam.
Sorry, something went wrong. |
||
} | ||
|
||
var tempDgFilePath = string.Empty; | ||
|
||
if (!_noRestoreOption.HasValue()) | ||
{ | ||
// Create a Dependency Graph file for the project | ||
tempDgFilePath = Path.GetTempFileName(); | ||
GetProjectDependencyGraph(projectFilePath, tempDgFilePath); | ||
} | ||
|
||
var result = NuGetCommand.Run(TransformArgs(RemainingArguments.First(), tempDgFilePath, projectFilePath)); | ||
This comment was marked as spam.
Sorry, something went wrong. |
||
DisposeTemporaryFile(tempDgFilePath); | ||
|
||
return result; | ||
} | ||
|
||
private void GetProjectDependencyGraph(string projectFilePath, string dgFilePath) | ||
{ | ||
var args = new List<string>(); | ||
|
||
// Pass the project file path | ||
args.Add(projectFilePath); | ||
|
||
// Pass the task as generate restore Dependency Graph file | ||
args.Add("/t:GenerateRestoreGraphFile"); | ||
|
||
// Pass Dependency Graph file output path | ||
args.Add($"/p:RestoreGraphOutputPath=\"{dgFilePath}\""); | ||
|
||
var result = new MSBuildForwardingApp(args).Execute(); | ||
|
||
if (result != 0) | ||
{ | ||
throw new GracefulException(string.Format(LocalizableStrings.CmdDGFileException, projectFilePath)); | ||
This comment was marked as spam.
Sorry, something went wrong.
This comment was marked as spam.
Sorry, something went wrong.
This comment was marked as spam.
Sorry, something went wrong. |
||
} | ||
} | ||
|
||
private void DisposeTemporaryFile(string filePath) | ||
{ | ||
if (File.Exists(filePath)) | ||
{ | ||
File.Delete(filePath); | ||
} | ||
} | ||
|
||
private string[] TransformArgs(string packageId, string tempDgFilePath, string projectFilePath) | ||
{ | ||
var args = new List<string>(){ | ||
"package", | ||
"add", | ||
"--package", | ||
packageId, | ||
This comment was marked as spam.
Sorry, something went wrong.
This comment was marked as spam.
Sorry, something went wrong.
This comment was marked as spam.
Sorry, something went wrong. |
||
"--project", | ||
projectFilePath | ||
}; | ||
This comment was marked as spam.
Sorry, something went wrong. |
||
|
||
if (_versionOption.HasValue()) | ||
{ | ||
args.Add("--version"); | ||
args.Add(_versionOption.Value()); | ||
} | ||
if (_sourceOption.HasValue()) | ||
{ | ||
args.Add("--source"); | ||
args.Add(_sourceOption.Value()); | ||
} | ||
if (_frameworkOption.HasValue()) | ||
{ | ||
args.Add("--framework"); | ||
args.Add(_frameworkOption.Value()); | ||
} | ||
if (_packageDirectoryOption.HasValue()) | ||
{ | ||
args.Add("--package-directory"); | ||
args.Add(_packageDirectoryOption.Value()); | ||
} | ||
if (_noRestoreOption.HasValue()) | ||
{ | ||
args.Add("--no-restore"); | ||
} | ||
else | ||
{ | ||
args.Add("--dg-file"); | ||
args.Add(tempDgFilePath); | ||
} | ||
|
||
return args.ToArray(); | ||
} | ||
} | ||
} |
This comment was marked as spam.
Sorry, something went wrong.
This comment was marked as spam.
Sorry, something went wrong.