public BootstrappedSolution BootstrapSolution(SolutionConfiguration solutionConfig)
        {
            MarkMessagesAsEvents(solutionConfig);

            var solution           = new BootstrappedSolution();
            var projects           = new List <BootstrappedProject>();
            var globalDependencies = new List <ProjectReferenceData>();

            var messagesProject = GenerateMessagesProject(solutionConfig);

            var messagesProjectDependencies =
                dependencyMapper.GetDependencies(solutionConfig.NServiceBusVersion, solutionConfig.Transport);

            projects.Add(messagesProject);

            solution.ProjectDependencyDictionary.Add(messagesProject.ProjectName, messagesProjectDependencies);

            globalDependencies.Add(new ProjectReferenceData()
            {
                Name              = messagesProject.ProjectName,
                ProjectGuid       = messagesProject.ProjectGuid,
                QualifiedLocation = "",
            });

            foreach (var endpointConfig in solutionConfig.EndpointConfigurations)
            {
                var endpointProject = GenerateEndpoint(endpointConfig, globalDependencies);
                var dependencies    = dependencyMapper.GetEndpointDependencies(endpointConfig);
                solution.ProjectDependencyDictionary.Add(endpointProject.ProjectName, dependencies);
                projects.Add(endpointProject);
            }

            var consoleApplication = GenerateConsoleProject(solutionConfig, globalDependencies);

            projects.Add(consoleApplication);

            foreach (var project in projects)
            {
                var projectFolder = new FolderAbstraction()
                {
                    Name    = project.ProjectName,
                    Files   = project.ProjectRoot.Files,
                    Folders = project.ProjectRoot.Folders
                };

                solution.SolutionRoot.Folders.Add(projectFolder);
            }

            var solutionFile = SolutionFileTemplator.CreateSolutionFile(solutionConfig);

            solution.SolutionRoot.Files.Add(solutionFile);

            return(solution);
        }
        public string SaveSolution(string savePath, BootstrappedSolution solutionData)
        {
            Directory.CreateDirectory(savePath);

            solutionData.SolutionRoot.Files.Add(new FileAbstraction()
            {
                Name = "README.md",
                Content = ReadMeFile
            });

            CrawlAndSaveFiles(savePath + @"\", solutionData.SolutionRoot);

            var solutionFile = Directory.GetFiles(savePath).Single(fn => fn.EndsWith(".sln"));

            return solutionFile;
        }
        public string SaveSolution(string savePath, BootstrappedSolution solutionData)
        {
            Directory.CreateDirectory(savePath);

            solutionData.SolutionRoot.Files.Add(new FileAbstraction()
            {
                Name    = "README.md",
                Content = ReadMeFile
            });

            CrawlAndSaveFiles(savePath + @"\", solutionData.SolutionRoot);

            var solutionFile = Directory.GetFiles(savePath).Single(fn => fn.EndsWith(".sln"));

            return(solutionFile);
        }
        public void InstallNuGetPackages(string solutionFolder, BootstrappedSolution solution, string solutionFile, string nugetExePath)
        {
            //var nugetPsmModule = solutionFolder + @"\lib\nuget.psm1";

            //RunPowershell("Update-Package " + solutionFile + " -Reinstall", nugetPsmModule);

            var solutionNugetExe = solutionFolder + @"\NuGet.exe";

            File.Copy(nugetExePath, solutionNugetExe);

            ExecuteSilentCommandLineProcess(solutionNugetExe, "restore " + solutionFile);
            //ExecuteSilentCommandLineProcess(solutionNugetExe, "install " + solutionFile); //This does NOTHING

            //var packageConfigs = CrawlAndGrabPackageConfigs(solutionFolder + @"\");

            //foreach (var packageConfig in packageConfigs)
            //{
            //    var outputDirectory = packageConfig.Replace(@"packages.config", "");
            //    var commandOptions = "install " + packageConfig + " -OutputDirectory " + outputDirectory;
            //    ExecuteSilentCommandLineProcess(nugetExe, commandOptions);
            //}


            ////Connect to the official package repository
            //var repo = PackageRepositoryFactory.Default.CreateRepository("https://packages.nuget.org/api/v2");

            //var projectKeys = solution.ProjectDependencyDictionary.Keys;

            //foreach (var projectKey in projectKeys)
            //{
            //    var projectFolder = solutionFolder + @"\" + projectKey + @"\";
            //    var dependencies = solution.ProjectDependencyDictionary[projectKey];

            //    var packageManager = new PackageManager(repo, projectFolder);

            //    foreach (var nugetDependency in dependencies)
            //    {
            //        packageManager.InstallPackage(nugetDependency.Name, SemanticVersion.Parse(nugetDependency.Version));
            //        //var commandOptions = "install " + nugetDependency.Name + " -Version " + nugetDependency.Version;
            //        //ExecuteSilentCommandLineProcess(nugetExe, commandOptions + " -OutputDirectory " + projectFolder);
            //    }
            //}
        }
        public void InstallNuGetPackages(string solutionFolder, BootstrappedSolution solution, string solutionFile, string nugetExePath)
        {
            //var nugetPsmModule = solutionFolder + @"\lib\nuget.psm1";

            //RunPowershell("Update-Package " + solutionFile + " -Reinstall", nugetPsmModule);

            var solutionNugetExe = solutionFolder + @"\NuGet.exe";
            File.Copy(nugetExePath, solutionNugetExe);

            ExecuteSilentCommandLineProcess(solutionNugetExe, "restore " + solutionFile);
            //ExecuteSilentCommandLineProcess(solutionNugetExe, "install " + solutionFile); //This does NOTHING

            //var packageConfigs = CrawlAndGrabPackageConfigs(solutionFolder + @"\");

            //foreach (var packageConfig in packageConfigs)
            //{
            //    var outputDirectory = packageConfig.Replace(@"packages.config", "");
            //    var commandOptions = "install " + packageConfig + " -OutputDirectory " + outputDirectory;
            //    ExecuteSilentCommandLineProcess(nugetExe, commandOptions);
            //}


            ////Connect to the official package repository
            //var repo = PackageRepositoryFactory.Default.CreateRepository("https://packages.nuget.org/api/v2");

            //var projectKeys = solution.ProjectDependencyDictionary.Keys;

            //foreach (var projectKey in projectKeys)
            //{
            //    var projectFolder = solutionFolder + @"\" + projectKey + @"\";
            //    var dependencies = solution.ProjectDependencyDictionary[projectKey];

            //    var packageManager = new PackageManager(repo, projectFolder);

            //    foreach (var nugetDependency in dependencies)
            //    {
            //        packageManager.InstallPackage(nugetDependency.Name, SemanticVersion.Parse(nugetDependency.Version));
            //        //var commandOptions = "install " + nugetDependency.Name + " -Version " + nugetDependency.Version;
            //        //ExecuteSilentCommandLineProcess(nugetExe, commandOptions + " -OutputDirectory " + projectFolder);
            //    }
            //}
        }