public void Can_Rollback_If_Error(string scenario, string json, string xproj, string launchSettingsJson) { using (ApprovalResults.ForScenario(scenario + "_project_json")) { // arrange var testXProj = VsProjectHelper.LoadTestProject(xproj); var testFileUpgradeContext = new TestJsonBaseProjectUpgradeContext(json, testXProj, launchSettingsJson); var migrator = new ProjectMigrator(testFileUpgradeContext); var options = new ProjectMigrationOptions(ReleaseVersion.RTM); // options.UpgradeToPreview1 = true; // project.json files will be updated to the preview 1 schema. // options.UpgradePackagesToRc2 = true; // rc1 packages will be migrated to rc2 packages, including commands (migrated to tools). options.AddNetStandardTargetForLibraries = true; // libraries will have the netStandard TFM added (and dependency). options.AddNetCoreTargetForApplications = true; // applications will have the netCore app TFM added (and dependency) // add an upgrade that throws an exception.. var additionalUpgrades = new List <IProjectUpgradeAction>(); additionalUpgrades.Add(new ExceptionuringUpgradeAction()); try { // migrate migrator.Apply(options, additionalUpgrades); testFileUpgradeContext.SaveChanges(); } catch (Exception e) { // throw; } // assert. var modifiedContents = testFileUpgradeContext.ProjectJsonObject.ToString(); Approvals.Verify(modifiedContents); using (ApprovalResults.ForScenario(scenario + "_xproj")) { var projContents = VsProjectHelper.ToString(testFileUpgradeContext.VsProjectFile); Approvals.VerifyXml(projContents); } using (ApprovalResults.ForScenario(scenario + "_launchSettings")) { var modifiedLaunchSettingsContents = testFileUpgradeContext.LaunchSettingsObject.ToString(); Approvals.Verify(modifiedLaunchSettingsContents); } } }
public void Can_Apply(string scenario, string json, string xproj, string launchSettings, ReleaseVersion version) { using (ApprovalResults.ForScenario(scenario + "_project_json")) { // arrange var testXProj = VsProjectHelper.LoadTestProject(xproj); var testFileUpgradeContext = new TestJsonBaseProjectUpgradeContext(json, testXProj, launchSettings, new [] { "appSettings.json" }); var migrator = new ProjectMigrator(testFileUpgradeContext); var options = new ProjectMigrationOptions(version); // options.UpgradeToPreview1 = true; // project.json files will be updated to the preview 1 schema. // options.UpgradePackagesToRc2 = true; // rc1 packages will be migrated to rc2 packages, including commands (migrated to tools). options.AddNetStandardTargetForLibraries = true; // libraries will have the netStandard TFM added (and dependency). options.AddNetCoreTargetForApplications = true; // applications will have the netCore app TFM added (and dependency) // migrate migrator.Apply(options); // save the changes. testFileUpgradeContext.SaveChanges(); // assert. var modifiedContents = testFileUpgradeContext.ModifiedProjectJsonContents; Approvals.Verify(modifiedContents); // Approvals.VerifyJson(modifiedContents); using (ApprovalResults.ForScenario(scenario + "_xproj")) { var projContents = VsProjectHelper.ToString(testFileUpgradeContext.VsProjectFile); Approvals.VerifyXml(projContents); } using (ApprovalResults.ForScenario(scenario + "_launchSettings")) { var modifiedLaunchSettingsContents = testFileUpgradeContext.ModifiedLaunchSettingsJsonContents; Approvals.Verify(modifiedLaunchSettingsContents); } } }
static int Main(string[] args) { var result = CommandLine.Parser.Default.ParseArguments <Options.UpgradeSolutionOptions>(args); var exitCode = result .MapResult((options) => { var solutionDir = new DirectoryInfo(options.SolutionDir); var solutionUpgradeContext = new SolutionUpgradeContext(solutionDir); var solutionMigrator = new SolutionMigrator(solutionUpgradeContext); ToolingVersion toolingVersion = ToolingVersion.Preview1; if (options.ReleaseVersion == ReleaseVersion.RTM) { toolingVersion = ToolingVersion.Preview2; } var solutionMigratorOptions = new SolutionMigrationOptions(toolingVersion); solutionMigrator.Apply(solutionMigratorOptions); // upgrade projects. foreach (var project in solutionUpgradeContext.Projects) { Console.WriteLine("Upgrading " + project.ToString()); var projectMigrator = new ProjectMigrator(project); // using default options for each project, but should probably extend command line to set these. var projectUpgradeOptions = new ProjectMigrationOptions(options.ReleaseVersion); projectMigrator.Apply(projectUpgradeOptions); // upgrade csharp files in project if enabled. if (!options.NoCsharpRefactoring) { var codeMigrationoptions = new CsharpCodeMigrationOptions() { RewriteUsings = true }; var csharpMigrator = new CsharpCodeMigrator(codeMigrationoptions); foreach (var csharpFileUpgradeContext in project.CsharpFiles) { Console.WriteLine("Refactoring: {0}", csharpFileUpgradeContext.ToString()); csharpMigrator.Apply(csharpFileUpgradeContext, null); } } } // save changes to disk. solutionUpgradeContext.SaveChanges(); // perform refactorings? //Refactor(solutionUpgradeContext); Console.WriteLine("Deleting project.lock.json files.."); var projectLockFiles = solutionDir.GetFileSystemInfos("project.lock.json", SearchOption.AllDirectories); foreach (var projectLock in projectLockFiles) { Console.WriteLine("Deleting lock file " + projectLock.ToString()); projectLock.Delete(); } if (options.Verbose) { Console.WriteLine("Upgrade finished."); } return(0); }, (errors) => { //LogHelper.Log(errors); return(1); }); return(exitCode); }