This commit is contained in:
jonsequitur 2017-03-09 18:36:05 -08:00
commit 58bf70a476
100 changed files with 845 additions and 376 deletions

View file

@ -9,6 +9,7 @@ using Microsoft.DotNet.Cli;
using System.Diagnostics;
using System;
using System.IO;
using System.Linq;
namespace Microsoft.DotNet.Tools.Cache
{
@ -31,9 +32,9 @@ namespace Microsoft.DotNet.Tools.Cache
app.ArgumentSeparatorHelpText = HelpMessageStrings.MSBuildAdditionalArgsHelpText;
app.HelpOption("-h|--help");
CommandOption projectArgument = app.Option(
CommandOption projectArguments = app.Option(
$"-e|--entries <{LocalizableStrings.ProjectEntries}>", LocalizableStrings.ProjectEntryDescription,
CommandOptionType.SingleValue);
CommandOptionType.MultipleValue);
CommandOption frameworkOption = app.Option(
$"-f|--framework <{LocalizableStrings.FrameworkOption}>", LocalizableStrings.FrameworkOptionDescription,
@ -70,13 +71,19 @@ namespace Microsoft.DotNet.Tools.Cache
{
msbuildArgs = new List<string>();
if (string.IsNullOrEmpty(projectArgument.Value()))
if (!projectArguments.HasValue())
{
throw new InvalidOperationException(LocalizableStrings.SpecifyEntries);
throw new InvalidOperationException(LocalizableStrings.SpecifyEntries).DisplayAsError();
}
msbuildArgs.Add("/t:ComposeCache");
msbuildArgs.Add(projectArgument.Value());
msbuildArgs.Add(projectArguments.Values[0]);
var additionalProjectsargs = projectArguments.Values.Skip(1);
if (additionalProjectsargs.Count() > 0)
{
msbuildArgs.Add($"/p:AdditionalProjects={string.Join("%3B", additionalProjectsargs)}");
}
if (!string.IsNullOrEmpty(frameworkOption.Value()))
{
@ -106,12 +113,12 @@ namespace Microsoft.DotNet.Tools.Cache
if (skipOptimizationOption.HasValue())
{
msbuildArgs.Add($"/p:SkipOptimization={skipOptimizationOption.HasValue()}");
msbuildArgs.Add($"/p:SkipOptimization=true");
}
if (preserveWorkingDir.HasValue())
{
msbuildArgs.Add($"/p:PreserveComposeWorkingDir={preserveWorkingDir.HasValue()}");
msbuildArgs.Add($"/p:PreserveComposeWorkingDir=true");
}
if (!string.IsNullOrEmpty(verbosityOption.Value()))

View file

@ -131,6 +131,7 @@ namespace Microsoft.DotNet.Tools.Migrate
}
var csprojFilesToAdd = new HashSet<string>();
var xprojFilesToRemove = new HashSet<string>();
var slnPathWithTrailingSlash = PathUtility.EnsureTrailingSlash(slnFile.BaseDirectory);
foreach (var report in migrationReport.ProjectMigrationReports)
@ -140,35 +141,35 @@ namespace Microsoft.DotNet.Tools.Migrate
slnPathWithTrailingSlash,
reportPathWithTrailingSlash);
var xprojPath = Path.Combine(relativeReportPath, report.ProjectName + ".xproj");
var xprojProjectsReferencedBySolution = slnFile.Projects.Where(p => p.FilePath == xprojPath);
var migratedProjectName = report.ProjectName + ".csproj";
if (xprojProjectsReferencedBySolution.Count() == 1)
{
var slnProject = xprojProjectsReferencedBySolution.Single();
slnProject.FilePath = Path.Combine(
Path.GetDirectoryName(slnProject.FilePath),
migratedProjectName);
slnProject.TypeGuid = ProjectTypeGuids.CSharpProjectTypeGuid;
}
else
{
var csprojPath = Path.Combine(relativeReportPath, migratedProjectName);
var solutionContainsCsprojPriorToMigration = slnFile.Projects
.Where(p => p.FilePath == csprojPath)
.Any();
var csprojPath = Path.Combine(relativeReportPath, migratedProjectName);
var solutionContainsCsprojPriorToMigration = slnFile.Projects
.Where(p => p.FilePath == csprojPath)
.Any();
if (!solutionContainsCsprojPriorToMigration)
{
csprojFilesToAdd.Add(Path.Combine(report.ProjectDirectory, migratedProjectName));
}
if (!solutionContainsCsprojPriorToMigration)
{
csprojFilesToAdd.Add(Path.Combine(report.ProjectDirectory, migratedProjectName));
}
foreach (var preExisting in report.PreExistingCsprojDependencies)
{
csprojFilesToAdd.Add(Path.Combine(report.ProjectDirectory, preExisting));
}
var projectDirectory = new DirectoryInfo(report.ProjectDirectory);
foreach (var xprojFileName in projectDirectory.EnumerateFiles("*.xproj"))
{
var xprojPath = Path.Combine(relativeReportPath, xprojFileName.Name);
var solutionContainsXprojFileToRemove = slnFile.Projects
.Where(p => p.FilePath == xprojPath)
.Any();
if (solutionContainsXprojFileToRemove)
{
xprojFilesToRemove.Add(Path.Combine(report.ProjectDirectory, xprojFileName.Name));
}
}
}
Version version;
@ -185,7 +186,12 @@ namespace Microsoft.DotNet.Tools.Migrate
foreach (var csprojFile in csprojFilesToAdd)
{
AddProject(slnFile.FullPath, csprojFile);
RunDotnetSlnCommand(slnFile.FullPath, csprojFile, "add");
}
foreach (var xprojFile in xprojFilesToRemove)
{
RunDotnetSlnCommand(slnFile.FullPath, xprojFile, "remove");
}
}
@ -209,19 +215,19 @@ namespace Microsoft.DotNet.Tools.Migrate
slnFile.RemoveEmptySolutionFolders();
}
private void AddProject(string slnPath, string csprojPath)
private void RunDotnetSlnCommand(string slnPath, string projPath, string commandName)
{
List<string> args = new List<string>()
var args = new List<string>()
{
"sln",
slnPath,
"add",
csprojPath,
commandName,
projPath,
};
var dotnetPath = Path.Combine(AppContext.BaseDirectory, "dotnet.dll");
var addCommand = new ForwardingApp(dotnetPath, args);
addCommand.Execute();
var command = new ForwardingApp(dotnetPath, args);
command.Execute();
}
private void MoveProjectJsonArtifactsToBackup(MigrationReport migrationReport)

View file

@ -35,6 +35,9 @@ namespace Microsoft.DotNet.Tools.Publish
var appliedPublishOption = result["dotnet"]["publish"];
CommandOption filterProjOption = app.Option(
$"--filter <{LocalizableStrings.FilterProjOption}>", LocalizableStrings.FilterProjOptionDescription,
CommandOptionType.MultipleValue);
msbuildArgs.AddRange(appliedPublishOption.OptionValuesToBeForwarded());
msbuildArgs.AddRange(appliedPublishOption.Arguments);