public bool SetVersionProject(DtoProject obj, string version)
        {
            XDocument  doc = XDocument.Load(obj.FullPath);
            XNamespace ns  = "http://schemas.microsoft.com/developer/msbuild/2003";

            Match match = Regex.Match(version, @"^([0-9]{0,3})\.([0-9]{0,3})\.([0-9]{0,3})\.([0-9]{0,3})", RegexOptions.IgnoreCase);

            if (match.Success)
            {
                string temp = doc
                              .Element(ns + "Project")
                              .Elements(ns + "PropertyGroup")
                              .Elements(ns + "ApplicationVersion")
                              .Select(refElem => refElem.Value)
                              .SingleOrDefault <string>();

                string sReplace = Regex.Replace(temp, @"^([0-9]{0,3})\.([0-9]{0,3})\.([0-9]{0,3})\.", string.Concat(match.Groups[1], ".", match.Groups[2], ".", match.Groups[3], "."));

                doc
                .Element(ns + "Project")
                .Element(ns + "PropertyGroup")
                .SetElementValue(ns + "ApplicationVersion", sReplace);

                doc
                .Element(ns + "Project")
                .Element(ns + "PropertyGroup")
                .SetElementValue(ns + "ApplicationRevision", match.Groups[4]);

                doc.Save(obj.FullPath);
                return(true);
            }
            return(false);
        }
        private void ShowInfoVersionProject(DtoProject project)
        {
            Print obj = new Print();

            obj.ClearConsole();
            obj.PrintTitle("Mantenimiento de Versiones Click Once");
            obj.PrintString(string.Format("\n Project: {0} \n Version Actual: {1}", project.Name, project.Version));
            obj.PrintString("Ingrese la nueva version...");

            string version = obj.GetKeyString();

            if (!new UtilsProjects().SetVersionProject(project, version))
            {
                obj.PrintError("No se pudo actualizar la version del Click Once");
                obj.PressKeyToContinue();
                ReloadMenu();
            }

            project.VersionNew = version;
        }
        private DtoProject GetClickOnceRelation(DtoProject proj)
        {
            DtoProject[] CLICK_ONCE_FINDED = new UtilsProjects().FindProjects(_CLICK_ONCE_PATH, true);
            DtoProject   clickOnce;
            Print        obj = new Print();

            if (proj == null)
            {
                obj.PrintError("No se ha encontrado el proyecto.");
                obj.PressKeyToContinue();
                ReloadMenu();
            }

            if (string.IsNullOrEmpty(proj.ClickOnceSolution))
            {
                clickOnce = (DtoProject)CLICK_ONCE_FINDED
                            .Where(x => x.Name == (string.IsNullOrEmpty(_CLICK_ONCE_PREFIX) ? proj.Name : string.Concat(proj.Name, ".", _CLICK_ONCE_PREFIX)))
                            .SingleOrDefault();
            }
            else
            {
                clickOnce = (DtoProject)CLICK_ONCE_FINDED
                            .Where(x => x.Name == proj.ClickOnceSolution)
                            .SingleOrDefault();
            }

            if (clickOnce == null)
            {
                obj.PrintError("No se ha encontrado el proyecto del Click Once asociado.");
                obj.PressKeyToContinue();
                ReloadMenu();
            }

            ShowInfoVersionProject(clickOnce);
            return(clickOnce);
        }
        private void GenerateClickOnce()
        {
            Print obj = new Print();

            obj.ClearConsole();
            obj.PrintTitle("Proyectos Disponibles para la Publicacion");
            obj.PrintNewLine();

            DtoProject[] PROJECTS_FINDED = new UtilsProjects().FindProjects(Directory.GetParent(_SOLUTION_PATH).ToString());

            foreach (DtoProject project in PROJECTS_FINDED)
            {
                obj.PrintString(string.Format("{0}: {1}", project.id, project.Name));
            }

            obj.PrintNewLine();
            obj.PrintString("Seleccione los proyectos que desee publicar.....");
            obj.PrintString("Ejemplo...");
            obj.PrintString("\t Para un solo Proyecto: 1");
            obj.PrintString("\t Para Multiples Proyectos: 1 3");
            obj.PrintString("\t Para Todos los proyectos: A");
            obj.PrintString("\t Para Cancelar teclee Esc");
            obj.PrintNewLine();

            object[] selection = obj.GetKeyInt(" ");
            ValidProjectSelection(selection, PROJECTS_FINDED);

            obj.ClearConsole();
            obj.PrintString("Iniciando espere un momento...");

            obj.PrintInfo("Compilando Solucion....");

            //COMPILE SOLUTION
            if (!RunDevEnv(_SOLUTION_PATH))
            {
                obj.PrintError("No se puede continuar error en la compilación del proyecto.");
                return;
            }

            obj.PrintString("Iniciando Generacion de Click Once....");

            List <DtoProject> CollectionCO = new List <DtoProject>();

            foreach (object valor in selection)
            {
                DtoProject proj      = (DtoProject)PROJECTS_FINDED.Where(x => x.id == int.Parse(valor.ToString())).SingleOrDefault();
                DtoProject clickOnce = GetClickOnceRelation(proj);

                obj.PrintInfo("Generando Click Once....");

                //PUBLISH PROJECT
                if (!RunMsbuild(clickOnce.FullPath))
                {
                    if (!obj.ShowQuestionContinue())
                    {
                        return;
                    }
                }
                CollectionCO.Add(clickOnce);
            }

            if (_SQL_GENERATE)
            {
                GenerateScripts(CollectionCO.ToArray());
            }
        }