Example #1
0
        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);
                }
            }
        }
Example #2
0
        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);
                }
            }
        }
Example #3
0
        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);
        }