Exemplo n.º 1
0
        internal void ClearOldLinkedCode()
        {
            Log.WriteLine("Housekeeping old Linked Code.");
            if (RootXelement != null)
            {
                if (StartPlaceHolder != null && EndPlaceHolder != null)
                {
                    try
                    {
                        string oldLinkedXml = "<root>" + OldLinkedXml + "</root>";

                        if (oldLinkedXml.Contains("ItemGroup"))
                        {
                            XElement keeperElements = XElement.Parse(oldLinkedXml); // http://stackoverflow.com/a/11644640/492

                            foreach (XElement descendant in keeperElements.DescendantsAndSelf().Where(e => e.Attribute("Include") != null))
                            {
                                XAttribute xAttribute = descendant.Attribute("Include");
                                if (xAttribute != null /*&& !xAttribute.Value.StartsWith("..")*/)
                                {
                                    Keepers.Add(descendant); // keep stray code that is not a relative link. VS *may* have added it here.
                                }
                            }

                            if (Keepers.Any())
                            {
                                Log.WriteLine($"Found {Keepers.Count} potential Project Items in the Linked Zone to rescue.", ConsoleColor.Cyan);
                            }
                        }

                        if (StartPlaceHolder != null && EndPlaceHolder != null && StartPlaceHolder.IsBefore(EndPlaceHolder))
                        {
                            XNode startNode = StartPlaceHolder;
                            while (startNode.NextNode != EndPlaceHolder)
                            {
                                startNode.NextNode.Remove();
                            }
                        }

                        foreach (XElement itemGroup in ItemGroups)
                        {
                            if (itemGroup.IsEmpty || (!itemGroup.Descendants().Any() && string.IsNullOrEmpty(itemGroup.Value)))
                            {
                                itemGroup.Remove();
                            }
                        }

                        ItemGroups = RootXelement?.Elements(Settings.MSBuild + "ItemGroup").ToList();
                    }
                    catch (Exception e)
                    {
                        App.Crash(e, "Bad Proj No ItemGroups: " + DestProjAbsolutePath);
                    }
                }
                Log.WriteLine("finished parsing source project xml.", ConsoleColor.Gray);
            }
        }
Exemplo n.º 2
0
        /// <summary> Reads XML of between the Linked zone placeholders. Does not add a <c> &lt;Root&gt; </c> element </summary>
        internal string ReadLinkedXml()
        {
            var xmlBuilder = new StringBuilder();

            if (StartPlaceHolder != null && EndPlaceHolder != null && StartPlaceHolder.IsBefore(EndPlaceHolder))
            {
                XNode startNode = StartPlaceHolder;
                while (startNode.NextNode != EndPlaceHolder)
                {
                    xmlBuilder.Append(startNode.NextNode);
                    startNode = startNode.NextNode;
                }
                return(xmlBuilder.ToString());
            }

            App.Crash($"Problem with placeholders in {DestProjAbsolutePath}. Has Start: {StartPlaceHolder != null}, "
                      + $"has End: {EndPlaceHolder != null}, Start is before End: {StartPlaceHolder?.IsBefore(EndPlaceHolder)}");

            return(null); // for the compiler, it never comes back from the crash
        }
Exemplo n.º 3
0
        internal void ClearOldLinkedCode()
        {
            Log.WriteLine("Housekeeping old Linked Code.", ConsoleColor.White, ConsoleColor.DarkGray);
            if (RootXelement != null)
            {
                if (StartPlaceHolder != null && EndPlaceHolder != null)
                {
                    try
                    {
                        string oldXml = "<root>" + OldLinkedXml + "</root>";

                        if (oldXml.Contains("ItemGroup"))
                        {
                            XElement keeperElements = XElement.Parse(oldXml); // http://stackoverflow.com/a/11644640/492

                            foreach (XElement descendant in keeperElements.DescendantsAndSelf().Where(e => (e.Attribute("Include") ?? e.Attribute("Exclude")) != null))
                            {
                                XAttribute xAttribute = descendant.Attribute("Include") ?? descendant.Attribute("Exclude");
                                if (xAttribute != null)
                                {
                                    Keepers.Add(descendant); // keep stray code that is not a relative link. VS *may* have added it here.
                                }
                            }

                            if (Keepers.Any())
                            {
                                Log.WriteLine($"Found {Keepers.Count} potential Project Items in the Linked Zone to rescue.", ConsoleColor.Cyan);
                            }
                        }

                        if (StartPlaceHolder != null && EndPlaceHolder != null && StartPlaceHolder.IsBefore(EndPlaceHolder))
                        {
                            XNode startNode = StartPlaceHolder;
                            while (startNode.NextNode != EndPlaceHolder)
                            {
                                startNode.NextNode.Remove();
                            }
                        }

                        foreach (XElement itemGroup in ItemGroups)
                        {
                            if (itemGroup.IsEmpty || (!itemGroup.Descendants().Any() && string.IsNullOrEmpty(itemGroup.Value)))
                            {
                                itemGroup.Remove();
                            }

                            /*else if (itemGroup.IsAfter(StartPlaceHolder) && itemGroup.IsBefore(EndPlaceHolder))
                             *  itemGroup.Remove();*/
                            //  System.InvalidOperationException: A common ancestor is missing.
                        }

                        ItemGroups = RootXelement?.Elements(Settings.MSBuild + "ItemGroup").ToList();
                    }
                    catch (Exception e)
                    {
                        App.Crash(e, $"FAILed clearing old linked code from: {DestProjAbsolutePath}");
                    }
                }
                Log.WriteLine("finished clearing old linked XML from source project", ConsoleColor.Gray);
            }
        }