diff --git a/src/NuGet.Core/NuGet.CommandLine.XPlat/Commands/PackageReferenceCommands/AddPackageReferenceCommand.cs b/src/NuGet.Core/NuGet.CommandLine.XPlat/Commands/PackageReferenceCommands/AddPackageReferenceCommand.cs index 962d1c06c28..66e86650ac2 100644 --- a/src/NuGet.Core/NuGet.CommandLine.XPlat/Commands/PackageReferenceCommands/AddPackageReferenceCommand.cs +++ b/src/NuGet.Core/NuGet.CommandLine.XPlat/Commands/PackageReferenceCommands/AddPackageReferenceCommand.cs @@ -15,8 +15,6 @@ namespace NuGet.CommandLine.XPlat { public static class AddPackageReferenceCommand { - private const string MSBuildExeName = "MSBuild.dll"; - public static void Register(CommandLineApplication app, Func getLogger, Func getCommandRunner) { @@ -91,7 +89,7 @@ public static class AddPackageReferenceCommand NoVersion = noVersion, DgFilePath = dgFilePath.Value() }; - var msBuild = new MSBuildAPIUtility(); + var msBuild = new MSBuildAPIUtility(logger); var addPackageRefCommandRunner = getCommandRunner(); return addPackageRefCommandRunner.ExecuteCommand(packageRefArgs, msBuild); }); diff --git a/src/NuGet.Core/NuGet.CommandLine.XPlat/Commands/PackageReferenceCommands/AddPackageReferenceCommandRunner.cs b/src/NuGet.Core/NuGet.CommandLine.XPlat/Commands/PackageReferenceCommands/AddPackageReferenceCommandRunner.cs index 96152d7892b..0c135f11edd 100644 --- a/src/NuGet.Core/NuGet.CommandLine.XPlat/Commands/PackageReferenceCommands/AddPackageReferenceCommandRunner.cs +++ b/src/NuGet.Core/NuGet.CommandLine.XPlat/Commands/PackageReferenceCommands/AddPackageReferenceCommandRunner.cs @@ -2,21 +2,16 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; -using System.Collections.Concurrent; using System.Collections.Generic; -using System.Diagnostics; using System.Globalization; using System.IO; using System.Linq; -using System.Text; using System.Threading.Tasks; using NuGet.Commands; -using NuGet.Common; using NuGet.Configuration; using NuGet.Frameworks; using NuGet.Packaging.Core; using NuGet.ProjectModel; -using NuGet.Protocol; using NuGet.Protocol.Core.Types; using NuGet.Versioning; @@ -77,8 +72,6 @@ public async Task ExecuteCommand(PackageReferenceArgs packageReferenceArgs, .Where(t => t.Success) .Select(t => t.Graph.Framework)); - var x = restorePreviewResult.Result.GetAllUnresolved(); - if (packageReferenceArgs.Frameworks?.Any() == true) { // If the user has specified frameworks then we intersect that with the compatible frameworks. @@ -98,6 +91,7 @@ public async Task ExecuteCommand(PackageReferenceArgs packageReferenceArgs, packageReferenceArgs.Logger.LogError(string.Format(CultureInfo.CurrentCulture, Strings.Error_AddPkgIncompatibleWithAllFrameworks, packageReferenceArgs.PackageDependency.Id, + packageReferenceArgs.Frameworks?.Any() == true ? Strings.AddPkg_UserSpecified : Strings.AddPkg_All, packageReferenceArgs.ProjectPath)); return 1; @@ -141,7 +135,7 @@ public async Task ExecuteCommand(PackageReferenceArgs packageReferenceArgs, return 0; } - private async Task PreviewAddPackageReference(PackageReferenceArgs packageReferenceArgs, + private static async Task PreviewAddPackageReference(PackageReferenceArgs packageReferenceArgs, DependencyGraphSpec dgSpec, PackageSpec originalPackageSpec) { @@ -186,7 +180,7 @@ public async Task ExecuteCommand(PackageReferenceArgs packageReferenceArgs, } } - private DependencyGraphSpec ReadProjectDependencyGraph(PackageReferenceArgs packageReferenceArgs) + private static DependencyGraphSpec ReadProjectDependencyGraph(PackageReferenceArgs packageReferenceArgs) { DependencyGraphSpec spec = null; @@ -198,30 +192,60 @@ private DependencyGraphSpec ReadProjectDependencyGraph(PackageReferenceArgs pack return spec; } - private void UpdatePackageVersionIfNeeded(RestoreResultPair restorePreviewResult, + private static void UpdatePackageVersionIfNeeded(RestoreResultPair restorePreviewResult, PackageReferenceArgs packageReferenceArgs) { // If the user did not specify a version then write the exact resolved version if (packageReferenceArgs.NoVersion) { - // Get the flattened restore graph - var flattenedRestoreGraph = restorePreviewResult - .Result - .RestoreGraphs - .First() - .Flattened; - - // Get the package entry and version from the graph - var packageEntry = flattenedRestoreGraph - .Single(p => p.Key.Name.Equals(packageReferenceArgs.PackageDependency.Id, StringComparison.OrdinalIgnoreCase)); - var resolvedVersion = packageEntry - .Key - .Version; - - //Update the packagedependency with the new version - packageReferenceArgs.PackageDependency = new PackageDependency(packageReferenceArgs.PackageDependency.Id, - VersionRange.Parse(resolvedVersion.ToString())); + // Get the package version from the graph + var resolvedVersion = GetPackageVersionFromRestoreResult(restorePreviewResult, packageReferenceArgs); + + if (resolvedVersion != null) + { + //Update the packagedependency with the new version + packageReferenceArgs.PackageDependency = new PackageDependency(packageReferenceArgs.PackageDependency.Id, + new VersionRange(resolvedVersion)); + } + } + } + + private static NuGetVersion GetPackageVersionFromRestoreResult(RestoreResultPair restorePreviewResult, + PackageReferenceArgs packageReferenceArgs) + { + // Get the restore graphs from the restore result + var restoreGraphs = restorePreviewResult + .Result + .RestoreGraphs; + + if (packageReferenceArgs.Frameworks?.Any() == true) + { + // If the user specified frameworks then we get the flattened graphs only from the compatible frameworks. + var userSpecifiedFrameworks = new HashSet( + packageReferenceArgs + .Frameworks + .Select(f => NuGetFramework.Parse(f))); + + restoreGraphs = restoreGraphs + .Where(r => userSpecifiedFrameworks.Contains(r.Framework)); + } + + foreach (var restoreGraph in restoreGraphs) + { + var matchingPackageEntries = restoreGraph + .Flattened + .Select(p => p) + .Where(p => p.Key.Name.Equals(packageReferenceArgs.PackageDependency.Id, StringComparison.OrdinalIgnoreCase)); + + if (matchingPackageEntries.Any()) + { + return matchingPackageEntries + .First() + .Key + .Version; + } } + return null; } } } \ No newline at end of file diff --git a/src/NuGet.Core/NuGet.CommandLine.XPlat/Strings.Designer.cs b/src/NuGet.Core/NuGet.CommandLine.XPlat/Strings.Designer.cs index 1fa7b3ddef5..376a0cebd3d 100644 --- a/src/NuGet.Core/NuGet.CommandLine.XPlat/Strings.Designer.cs +++ b/src/NuGet.Core/NuGet.CommandLine.XPlat/Strings.Designer.cs @@ -59,6 +59,15 @@ public class Strings { } } + /// + /// Looks up a localized string similar to all. + /// + public static string AddPkg_All { + get { + return ResourceManager.GetString("AddPkg_All", resourceCulture); + } + } + /// /// Looks up a localized string similar to Adds a package reference to a project.. /// @@ -149,6 +158,15 @@ public class Strings { } } + /// + /// Looks up a localized string similar to user specified. + /// + public static string AddPkg_UserSpecified { + get { + return ResourceManager.GetString("AddPkg_UserSpecified", resourceCulture); + } + } + /// /// Looks up a localized string similar to The API key for the server.. /// @@ -249,7 +267,25 @@ public class Strings { } /// - /// Looks up a localized string similar to Package : '{0}' is incompatible with all the frameworks in project : '{1}'. + /// Looks up a localized string similar to Item '{0}' for '{1}' in Imported file '{2}'. + /// + public static string Error_AddPkgErrorStringForImportedEdit { + get { + return ResourceManager.GetString("Error_AddPkgErrorStringForImportedEdit", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Error while performing '{0}' for package '{1}'. Cannot edit items in imported files - {2}{3}. + /// + public static string Error_AddPkgFailOnImportEdit { + get { + return ResourceManager.GetString("Error_AddPkgFailOnImportEdit", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Package '{0}' is incompatible with '{1}' frameworks in project '{2}'. /// public static string Error_AddPkgIncompatibleWithAllFrameworks { get { @@ -321,7 +357,16 @@ public class Strings { } /// - /// Looks up a localized string similar to Adding PackageReference for package : '{0}', into project : '{1}'. + /// Looks up a localized string similar to PackageReference for package '{0}' version '{1}' added to file '{2}'. + /// + public static string Info_AddPkgAdded { + get { + return ResourceManager.GetString("Info_AddPkgAdded", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Adding PackageReference for package '{0}', into project '{1}'. /// public static string Info_AddPkgAddingReference { get { @@ -330,7 +375,7 @@ public class Strings { } /// - /// Looks up a localized string similar to Package : '{0}' is compatible with all the specified frameworks in project : '{1}'. + /// Looks up a localized string similar to Package '{0}' is compatible with all the specified frameworks in project '{1}'. /// public static string Info_AddPkgCompatibleWithAllFrameworks { get { @@ -339,7 +384,7 @@ public class Strings { } /// - /// Looks up a localized string similar to Package : '{0}' is compatible with a subset of the specified frameworks in project : '{1}'. + /// Looks up a localized string similar to Package '{0}' is compatible with a subset of the specified frameworks in project '{1}'. /// public static string Info_AddPkgCompatibleWithSubsetFrameworks { get { @@ -347,6 +392,15 @@ public class Strings { } } + /// + /// Looks up a localized string similar to PackageReference for package '{0}' version '{1}' updated in file '{2}'. + /// + public static string Info_AddPkgUpdated { + get { + return ResourceManager.GetString("Info_AddPkgUpdated", resourceCulture); + } + } + /// /// Looks up a localized string similar to Specify the location of the nuspec or project file to create a package.. /// diff --git a/src/NuGet.Core/NuGet.CommandLine.XPlat/Strings.resx b/src/NuGet.Core/NuGet.CommandLine.XPlat/Strings.resx index d425b5c983c..5b206b065d4 100644 --- a/src/NuGet.Core/NuGet.CommandLine.XPlat/Strings.resx +++ b/src/NuGet.Core/NuGet.CommandLine.XPlat/Strings.resx @@ -342,22 +342,23 @@ For more information, visit http://docs.nuget.org/docs/reference/command-line-re {0} - Project/csproj path - Package : '{0}' is incompatible with all the frameworks in project : '{1}' + Package '{0}' is incompatible with '{1}' frameworks in project '{2}' {0} - Package Id -{1} - Project Path +{1} - all / user specified +{2} - Project Path - Adding PackageReference for package : '{0}', into project : '{1}' + Adding PackageReference for package '{0}', into project '{1}' {0} - Package Id {1} - Project Path - Package : '{0}' is compatible with all the specified frameworks in project : '{1}' + Package '{0}' is compatible with all the specified frameworks in project '{1}' {0} - Package Id {1} - Project Path - Package : '{0}' is compatible with a subset of the specified frameworks in project : '{1}' + Package '{0}' is compatible with a subset of the specified frameworks in project '{1}' {0} - Package Id {1} - Project Path @@ -398,4 +399,35 @@ For more information, visit http://docs.nuget.org/docs/reference/command-line-re None or invalid DgSpec was passed to NuGet add package command. + + Item '{0}' for '{1}' in Imported file '{2}' + {0} - ItemType +{1} - Package Id +{2} - Imported File Path + + + Error while performing '{0}' for package '{1}'. Cannot edit items in imported files - {2}{3} + {0} - Operation Name +{1} - packageId +{2} - New line +{3} - Error string + + + PackageReference for package '{0}' version '{1}' added to file '{2}' + {0} - Package Id +{1} - package version +{2} - project file path + + + PackageReference for package '{0}' version '{1}' updated in file '{2}' + {0} - Package Id +{1} - package version +{2} - project file path + + + all + + + user specified + \ No newline at end of file diff --git a/src/NuGet.Core/NuGet.CommandLine.XPlat/Utility/MSBuildAPIUtility.cs b/src/NuGet.Core/NuGet.CommandLine.XPlat/Utility/MSBuildAPIUtility.cs index 066341293db..a4f099ed5d1 100644 --- a/src/NuGet.Core/NuGet.CommandLine.XPlat/Utility/MSBuildAPIUtility.cs +++ b/src/NuGet.Core/NuGet.CommandLine.XPlat/Utility/MSBuildAPIUtility.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.Globalization; using System.Linq; +using System.Text; using Microsoft.Build.Construction; using Microsoft.Build.Evaluation; using NuGet.Commands; @@ -19,13 +20,26 @@ public class MSBuildAPIUtility private const string VERSION_TAG = "Version"; private const string FRAMEWORK_TAG = "TargetFramework"; private const string FRAMEWORKS_TAG = "TargetFrameworks"; + private const string UPDATE_OPERATION = "Update"; + private const string REMOVE_OPERATION = "Remove"; + + public ILogger Logger { get; } + + public MSBuildAPIUtility(ILogger logger) + { + if (logger == null) + { + throw new ArgumentNullException(nameof(logger)); + } + Logger = logger; + } /// /// Opens an MSBuild.Evaluation.Project type from a csproj file. /// /// CSProj file which needs to be evaluated /// MSBuild.Evaluation.Project - private Project GetProject(string projectCSProjPath) + private static Project GetProject(string projectCSProjPath) { var projectRootElement = TryOpenProjectRootElement(projectCSProjPath); if (projectCSProjPath == null) @@ -41,7 +55,7 @@ private Project GetProject(string projectCSProjPath) /// CSProj file which needs to be evaluated /// Global properties that should be used to evaluate the project while opening. /// MSBuild.Evaluation.Project - private Project GetProject(string projectCSProjPath, IDictionary globalProperties) + private static Project GetProject(string projectCSProjPath, IDictionary globalProperties) { var projectRootElement = TryOpenProjectRootElement(projectCSProjPath); if (projectCSProjPath == null) @@ -88,7 +102,8 @@ public void AddPackageReference(string projectPath, PackageDependency packageDep } } - private void AddPackageReference(Project project, PackageDependency packageDependency, + private void AddPackageReference(Project project, + PackageDependency packageDependency, IEnumerable existingPackageReferences, string framework = null) { @@ -108,10 +123,11 @@ public void AddPackageReference(string projectPath, PackageDependency packageDep project.Save(); } - private IEnumerable GetItemGroups(Project project) + private static IEnumerable GetItemGroups(Project project) { return project .Items + .Where(i => !i.IsImported) .Select(item => item.Xml.Parent as ProjectItemGroupElement) .Distinct(); } @@ -123,7 +139,7 @@ private IEnumerable GetItemGroups(Project project) /// List of all item groups in the project /// An item type tag that must be in the item group. It if PackageReference in this case. /// An ItemGroup, which could be null. - private ProjectItemGroupElement GetItemGroup(Project project, IEnumerable itemGroups, + private static ProjectItemGroupElement GetItemGroup(Project project, IEnumerable itemGroups, string itemType) { var itemGroup = itemGroups? @@ -133,7 +149,7 @@ private IEnumerable GetItemGroups(Project project) return itemGroup; } - private ProjectItemGroupElement CreateItemGroup(Project project, string framework = null) + private static ProjectItemGroupElement CreateItemGroup(Project project, string framework = null) { // Create a new item group and add a condition if given var itemGroup = project.Xml.AddItemGroup(); @@ -147,33 +163,56 @@ private ProjectItemGroupElement CreateItemGroup(Project project, string framewor private void UpdatePackageReferenceItems(IEnumerable packageReferencesItems, PackageDependency packageDependency) { - foreach (var packageReferenceItem in packageReferencesItems) + var importedPackageReferences = packageReferencesItems + .Where(i => i.IsImported); + + // Throw if any of the package references to be updated are imported. + if (importedPackageReferences.Any()) { - var versionMetadata = packageReferenceItem - .Metadata - .Where(m => m.Name.Equals(VERSION_TAG, StringComparison.OrdinalIgnoreCase)) - .FirstOrDefault(); - if (versionMetadata == null) - { - packageReferenceItem.SetMetadataValue(VERSION_TAG, packageDependency.VersionRange.OriginalString); - } - else + var errors = new StringBuilder(); + foreach (var importedPackageReference in importedPackageReferences) { - versionMetadata.UnevaluatedValue = packageDependency.VersionRange.OriginalString; + errors.AppendLine(string.Format(CultureInfo.CurrentCulture, + "\t " + Strings.Error_AddPkgErrorStringForImportedEdit, + importedPackageReference.ItemType, + importedPackageReference.UnevaluatedInclude, + importedPackageReference.Xml.ContainingProject.FullPath)); } + throw new Exception(string.Format(CultureInfo.CurrentCulture, + Strings.Error_AddPkgFailOnImportEdit, + UPDATE_OPERATION, + packageDependency.Id, + Environment.NewLine, + errors)); + } + foreach (var packageReferenceItem in packageReferencesItems) + { + packageReferenceItem.SetMetadataValue(VERSION_TAG, packageDependency.VersionRange.OriginalString); + Logger.LogInformation(string.Format(CultureInfo.CurrentCulture, + Strings.Info_AddPkgUpdated, + packageDependency.Id, + packageDependency.VersionRange.OriginalString, + packageReferenceItem.Xml.ContainingProject.FullPath)); } } private void AddPackageReferenceIntoItemGroup(ProjectItemGroupElement itemGroup, PackageDependency packageDependency) { + var packageVersion = packageDependency.VersionRange.OriginalString ?? + packageDependency.VersionRange.MinVersion.ToString(); var packageMetadata = new Dictionary(StringComparer.OrdinalIgnoreCase) - { { VERSION_TAG, packageDependency.VersionRange.OriginalString } }; + { { VERSION_TAG, packageVersion } }; // Currently metadata is added as a metadata. As opposed to an attribute // Due to https://github.com/Microsoft/msbuild/issues/1393 itemGroup.AddItem(PACKAGE_REFERENCE_TYPE_TAG, packageDependency.Id, packageMetadata); itemGroup.ContainingProject.Save(); + Logger.LogInformation(string.Format(CultureInfo.CurrentCulture, + Strings.Info_AddPkgAdded, + packageDependency.Id, + packageDependency.VersionRange.OriginalString, + itemGroup.ContainingProject.FullPath)); } /// @@ -184,7 +223,7 @@ private void AddPackageReferenceIntoItemGroup(ProjectItemGroupElement itemGroup, /// The project should have the global property set to have a specific framework /// Dependency of the package. /// List of Items containing the package reference for the package. - private IEnumerable GetPackageReferences(Project project, PackageDependency packageDependency) + private static IEnumerable GetPackageReferences(Project project, PackageDependency packageDependency) { return project.AllEvaluatedItems .Where(item => item.ItemType.Equals(PACKAGE_REFERENCE_TYPE_TAG, StringComparison.OrdinalIgnoreCase) && @@ -200,7 +239,7 @@ private IEnumerable GetPackageReferences(Project project, PackageDe /// The project should have the global property set to have a specific framework /// Dependency of the package. /// List of Items containing the package reference for the package. - private IEnumerable GetPackageReferencesForAllFrameworks(Project project, + private static IEnumerable GetPackageReferencesForAllFrameworks(Project project, PackageDependency packageDependency) { var frameworks = GetProjectFrameworks(project); @@ -211,15 +250,13 @@ private IEnumerable GetPackageReferences(Project project, PackageDe { { "TargetFramework", framework } }; var projectPerFramework = GetProject(project.FullPath, globalProperties); - mergedPackageReferences.AddRange(projectPerFramework.AllEvaluatedItems - .Where(item => item.ItemType.Equals(PACKAGE_REFERENCE_TYPE_TAG, StringComparison.OrdinalIgnoreCase) && - item.EvaluatedInclude.Equals(packageDependency.Id, StringComparison.OrdinalIgnoreCase))); + mergedPackageReferences.AddRange(GetPackageReferences(projectPerFramework, packageDependency)); ProjectCollection.GlobalProjectCollection.UnloadProject(projectPerFramework); } return mergedPackageReferences; } - private IEnumerable GetProjectFrameworks(Project project) + private static IEnumerable GetProjectFrameworks(Project project) { var frameworks = project .AllEvaluatedProperties @@ -238,7 +275,7 @@ private IEnumerable GetProjectFrameworks(Project project) return frameworks; } - private ProjectRootElement TryOpenProjectRootElement(string filename) + private static ProjectRootElement TryOpenProjectRootElement(string filename) { try { @@ -252,7 +289,7 @@ private ProjectRootElement TryOpenProjectRootElement(string filename) } } - private string GetTargetFrameworkCondition(string targetFramework) + private static string GetTargetFrameworkCondition(string targetFramework) { return string.Format("'$(TargetFramework)' == '{0}'", targetFramework); } diff --git a/test/NuGet.Core.FuncTests/NuGet.XPlat.FuncTest/XPlatAddPkgTests.cs b/test/NuGet.Core.FuncTests/NuGet.XPlat.FuncTest/XPlatAddPkgTests.cs index 9c05ed8ebbe..05a578966d1 100644 --- a/test/NuGet.Core.FuncTests/NuGet.XPlat.FuncTest/XPlatAddPkgTests.cs +++ b/test/NuGet.Core.FuncTests/NuGet.XPlat.FuncTest/XPlatAddPkgTests.cs @@ -10,8 +10,6 @@ using Moq; using NuGet.CommandLine.XPlat; using NuGet.Commands; -using NuGet.Common; -using NuGet.Frameworks; using NuGet.Packaging; using NuGet.Packaging.Core; using NuGet.ProjectModel; @@ -25,6 +23,11 @@ public class XPlatAddPkgTests { private static readonly string projectName = "test_project_addpkg"; + private static MSBuildAPIUtility MsBuild + { + get { return new MSBuildAPIUtility(new TestCommandOutputLogger()); } + } + // Argument parsing related tests [Theory] @@ -131,7 +134,7 @@ public async void AddPkg_UnconditionalAdd_Success(string userInputVersion) var commandRunner = new AddPackageReferenceCommandRunner(); // Act - var result = commandRunner.ExecuteCommand(packageArgs, new MSBuildAPIUtility()).Result; + var result = commandRunner.ExecuteCommand(packageArgs, MsBuild).Result; var projectXmlRoot = LoadCSProj(projectA.ProjectPath).Root; var itemGroup = GetItemGroupForAllFrameworks(projectXmlRoot); @@ -169,7 +172,7 @@ public async void AddPkg_UnconditionalAdd_Success(string userInputVersion) var commandRunner = new AddPackageReferenceCommandRunner(); // Act - var result = commandRunner.ExecuteCommand(packageArgs, new MSBuildAPIUtility()) + var result = commandRunner.ExecuteCommand(packageArgs, MsBuild) .Result; var projectXmlRoot = LoadCSProj(projectA.ProjectPath).Root; @@ -205,7 +208,7 @@ public async void AddPkg_UnconditionalAddWithoutVersion_Success() var commandRunner = new AddPackageReferenceCommandRunner(); // Act - var result = commandRunner.ExecuteCommand(packageArgs, new MSBuildAPIUtility()) + var result = commandRunner.ExecuteCommand(packageArgs, MsBuild) .Result; var projectXmlRoot = LoadCSProj(projectA.ProjectPath).Root; @@ -241,7 +244,7 @@ public async void AddPkg_UnconditionalAddWithoutVersion_Success() var commonFramework = GetCommonFramework(packageFrameworks, projectFrameworks); // Act - var result = commandRunner.ExecuteCommand(packageArgs, new MSBuildAPIUtility()) + var result = commandRunner.ExecuteCommand(packageArgs, MsBuild) .Result; var projectXmlRoot = LoadCSProj(projectA.ProjectPath).Root; var itemGroup = GetItemGroupForFramework(projectXmlRoot, commonFramework); @@ -280,7 +283,7 @@ public async void AddPkg_ConditionalAddWithUserInputFramework_Success(string pac var commonFramework = GetCommonFramework(packageFrameworks, projectFrameworks, userInputFrameworks); // Act - var result = commandRunner.ExecuteCommand(packageArgs, new MSBuildAPIUtility()) + var result = commandRunner.ExecuteCommand(packageArgs, MsBuild) .Result; var projectXmlRoot = LoadCSProj(projectA.ProjectPath).Root; var itemGroup = GetItemGroupForFramework(projectXmlRoot, commonFramework); @@ -325,7 +328,7 @@ public async void AddPkg_ConditionalAddWithUserInputFramework_Success(string pac var commonFramework = GetCommonFramework(packageFrameworks, projectFrameworks, userInputFrameworks); // Act - var result = commandRunner.ExecuteCommand(packageArgs, new MSBuildAPIUtility()) + var result = commandRunner.ExecuteCommand(packageArgs, MsBuild) .Result; var projectXmlRoot = LoadCSProj(projectA.ProjectPath).Root; var itemGroup = GetItemGroupForFramework(projectXmlRoot, commonFramework); @@ -365,7 +368,7 @@ public async void AddPkg_FailureIncompatibleFrameworks(string packageFrameworks, var commandRunner = new AddPackageReferenceCommandRunner(); // Act - var result = commandRunner.ExecuteCommand(packageArgs, new MSBuildAPIUtility()) + var result = commandRunner.ExecuteCommand(packageArgs, MsBuild) .Result; var projectXmlRoot = LoadCSProj(projectA.ProjectPath).Root; @@ -395,7 +398,7 @@ public async void AddPkg_FailureUnknownPackage() var commandRunner = new AddPackageReferenceCommandRunner(); // Act - var result = commandRunner.ExecuteCommand(packageArgs, new MSBuildAPIUtility()) + var result = commandRunner.ExecuteCommand(packageArgs, MsBuild) .Result; var projectXmlRoot = LoadCSProj(projectA.ProjectPath).Root; @@ -431,14 +434,14 @@ public async void AddPkg_UnconditionalAddTwoPackages_Success() var commandRunner = new AddPackageReferenceCommandRunner(); // Act - var result = commandRunner.ExecuteCommand(packageArgs, new MSBuildAPIUtility()) + var result = commandRunner.ExecuteCommand(packageArgs, MsBuild) .Result; var projectXmlRoot = LoadCSProj(projectA.ProjectPath).Root; packageArgs = GetPackageReferenceArgs(packageY.Id, packageY.Version, projectA); // Act - result = commandRunner.ExecuteCommand(packageArgs, new MSBuildAPIUtility()) + result = commandRunner.ExecuteCommand(packageArgs, MsBuild) .Result; projectXmlRoot = LoadCSProj(projectA.ProjectPath).Root; @@ -477,16 +480,17 @@ public async void AddPkg_ConditionalAddTwoPackages_Success(string packageFramewo var packageArgs = GetPackageReferenceArgs(packageX.Id, packageX.Version, projectA, frameworks: userInputFrameworks); var commandRunner = new AddPackageReferenceCommandRunner(); var commonFramework = GetCommonFramework(packageFrameworks, projectFrameworks, userInputFrameworks); + var msBuild = MsBuild; // Act - var result = commandRunner.ExecuteCommand(packageArgs, new MSBuildAPIUtility()) + var result = commandRunner.ExecuteCommand(packageArgs, msBuild) .Result; var projectXmlRoot = LoadCSProj(projectA.ProjectPath).Root; packageArgs = GetPackageReferenceArgs(packageY.Id, packageY.Version, projectA); // Act - result = commandRunner.ExecuteCommand(packageArgs, new MSBuildAPIUtility()) + result = commandRunner.ExecuteCommand(packageArgs, msBuild) .Result; projectXmlRoot = LoadCSProj(projectA.ProjectPath).Root; var itemGroup = GetItemGroupForFramework(projectXmlRoot, commonFramework); @@ -519,7 +523,7 @@ public async void AddPkg_UnconditionalAddWithPackageDirectory_Success() var commandRunner = new AddPackageReferenceCommandRunner(); // Act - var result = commandRunner.ExecuteCommand(packageArgs, new MSBuildAPIUtility()) + var result = commandRunner.ExecuteCommand(packageArgs, MsBuild) .Result; var projectXmlRoot = LoadCSProj(projectA.ProjectPath).Root; var itemGroup = GetItemGroupForAllFrameworks(projectXmlRoot); @@ -560,9 +564,10 @@ public async void AddPkg_UnconditionalAddAsUpdate_Succcess(string userInputVersi var packageArgs = GetPackageReferenceArgs(packageX.Id, userInputVersionOld, projectA); var commandRunner = new AddPackageReferenceCommandRunner(); + var msBuild = MsBuild; // Create a package ref with the old version - var result = commandRunner.ExecuteCommand(packageArgs, new MSBuildAPIUtility()) + var result = commandRunner.ExecuteCommand(packageArgs, msBuild) .Result; var projectXmlRoot = LoadCSProj(projectA.ProjectPath).Root; @@ -571,7 +576,7 @@ public async void AddPkg_UnconditionalAddAsUpdate_Succcess(string userInputVersi // Act // Create a package ref with the new version - result = commandRunner.ExecuteCommand(packageArgs, new MSBuildAPIUtility()) + result = commandRunner.ExecuteCommand(packageArgs, msBuild) .Result; projectXmlRoot = LoadCSProj(projectA.ProjectPath).Root; @@ -631,10 +636,10 @@ public async void AddPkg_UnconditionalAddAsUpdate_Succcess(string userInputVersi var packageArgs = GetPackageReferenceArgs(packageX.Id, userInputVersionOld, projectA); var commandRunner = new AddPackageReferenceCommandRunner(); - var msBuild = new MSBuildAPIUtility(); + var msBuild = MsBuild; // Create a package ref with old version - var result = commandRunner.ExecuteCommand(packageArgs, new MSBuildAPIUtility()) + var result = commandRunner.ExecuteCommand(packageArgs, msBuild) .Result; var projectXmlRoot = LoadCSProj(projectA.ProjectPath).Root; @@ -644,7 +649,7 @@ public async void AddPkg_UnconditionalAddAsUpdate_Succcess(string userInputVersi // Act // Create a package ref with new version - result = commandRunner.ExecuteCommand(packageArgs, new MSBuildAPIUtility()) + result = commandRunner.ExecuteCommand(packageArgs, msBuild) .Result; projectXmlRoot = LoadCSProj(projectA.ProjectPath).Root;