private void WriteNode(XmlWriter xmlWriter, VisualStudioProjectNode node, string projectPath)
        {
            var ns   = node.Attributes?.SingleOrDefault(x => x.Name.Equals("xmlns"));
            var attr = node.Attributes?.Where(x => !x.Name.Equals("xmlns"));

            if (ns != null)
            {
                xmlWriter.WriteStartElement(node.Name, ns.Value);
            }
            else
            {
                xmlWriter.WriteStartElement(node.Name);
            }
            WriteAttributes(xmlWriter, attr);
            foreach (var child in node.Children)
            {
                WriteNode(xmlWriter, child, projectPath);
            }
            if (!string.IsNullOrWhiteSpace(node.Value))
            {
                xmlWriter.WriteString(node.Value);
            }
            xmlWriter.WriteEndElement();

            if (!string.IsNullOrWhiteSpace(node.GeneratedData))
            {
                WriteGeneratedData(node, projectPath);
            }
        }
示例#2
0
        private int GetWarningLevel(VisualStudioProjectNode node)
        {
            var warningLevelNode = _projectNodeSelector.First(node, "WarningLevel");

            if (warningLevelNode == null)
            {
                return(4); // Default, node is not always present in .Net Standard project structure.
            }
            return(int.Parse(warningLevelNode.Value));
        }
示例#3
0
        public (string configuration, string platform) GetConfigurationAndPlatform(VisualStudioProjectNode node)
        {
            var attribute = node.Attributes.First(x => x.Name.Equals("Condition", StringComparison.OrdinalIgnoreCase));

            string pattern = @"==\s*'(?<configuration>.*)\|(?<platform>.*)'";

            var match = Regex.Match(attribute.Value, pattern);

            return(match.Groups["configuration"].Value, match.Groups["platform"].Value);
        }
示例#4
0
        private bool GetTreatWarningsAsErrors(VisualStudioProjectNode node)
        {
            var treatWarningsAsErrorsNode = _projectNodeSelector.First(node, "TreatWarningsAsErrors");

            if (treatWarningsAsErrorsNode == null)
            {
                return(false);
            }

            return(bool.Parse(treatWarningsAsErrorsNode.Value));
        }
示例#5
0
        private string GetLanguageVersion(VisualStudioProjectNode node)
        {
            var languageVersion = _projectNodeSelector.First(node, "");

            if (languageVersion == null)
            {
                return("default");
            }

            return(languageVersion.Value);
        }
示例#6
0
        private bool GetCodeAnalysisIngoreGeneratedCode(VisualStudioProjectNode node)
        {
            var codeAnalysisIngoreGeneratedCode = _projectNodeSelector.First(node, "CodeAnalysisIgnoreGeneratedCode");

            if (codeAnalysisIngoreGeneratedCode == null)
            {
                return(true);
            }

            return(bool.Parse(codeAnalysisIngoreGeneratedCode.Value));
        }
示例#7
0
        private bool GetRunCodeAnalysis(VisualStudioProjectNode node)
        {
            var runCodeAnalysis = _projectNodeSelector.First(node, "RunCodeAnalysis");

            if (runCodeAnalysis == null)
            {
                return(false);
            }

            return(bool.Parse(runCodeAnalysis.Value));
        }
示例#8
0
        public VisualStudioProject ReadProject(string fileName)
        {
            VisualStudioProjectNode activeNode = null;

            var project = new VisualStudioProject();

            project.ProjectFileName = fileName;

            using (var xmlReader = XmlReader.Create(fileName))
            {
                while (xmlReader.Read())
                {
                    if (xmlReader.IsStartElement())
                    {
                        bool isEmptyElement = xmlReader.IsEmptyElement;
                        var  newNode        = new VisualStudioProjectNode
                        {
                            Name     = xmlReader.Name,
                            Value    = xmlReader.Value,
                            NodeType = VisualStudioProjectNodeType.Element
                        };

                        if (xmlReader.HasAttributes)
                        {
                            newNode.Attributes = ReadAttributes(xmlReader);
                        }

                        if (activeNode == null)
                        {
                            project.Root = newNode;
                        }
                        else
                        {
                            newNode.Parent = activeNode;
                            activeNode.Children.Add(newNode);
                        }

                        if (!isEmptyElement)
                        {
                            activeNode = newNode;
                        }
                    }
                    else if (xmlReader.NodeType == XmlNodeType.EndElement)
                    {
                        activeNode = activeNode?.Parent;
                    }
                    else if (xmlReader.NodeType == XmlNodeType.Text)
                    {
                        activeNode.Value = xmlReader.Value;
                    }
                    else if (xmlReader.NodeType == XmlNodeType.Comment)
                    {
                        var newNode = new VisualStudioProjectNode
                        {
                            Name     = xmlReader.Name,
                            Value    = xmlReader.Value,
                            NodeType = VisualStudioProjectNodeType.Comment
                        };
                        newNode.Parent = activeNode;
                        activeNode.Children.Add(newNode);
                    }
                }
            }

            project.PackageConfiguration = ReadPackages(fileName);

            return(project);
        }
        private void WriteGeneratedData(VisualStudioProjectNode node, string projectPath)
        {
            var fileName = Path.Combine(projectPath, GetNodeFileName(node));

            _fileReaderWriter.WriteFile(fileName, node.GeneratedData, Encoding.UTF8);
        }
        private string GetNodeFileName(VisualStudioProjectNode node)
        {
            var nodeFilename = node.Attributes.FirstOrDefault(a => a.Name == "Include")?.Value;

            return(nodeFilename);
        }
示例#11
0
        private string GetCodeAnalysisRuleSet(VisualStudioProjectNode node)
        {
            var codeAnalysisRuleset = _projectNodeSelector.First(node, "CodeAnalysisRuleSet");

            return(codeAnalysisRuleset?.Value);
        }