Пример #1
0
 /// <summary>
 /// Repairs the provided project.
 /// </summary>
 /// <param name="projectResult"></param>
 void Repair(ScriptProjectAnalysisResult projectResult)
 {
     RepairBadReferences(projectResult);
     RepairWhitelist(projectResult);
     RepairOptions(projectResult);
     projectResult.ProjectDocument.Save(projectResult.ProjectInfo.FileName, SaveOptions.OmitDuplicateNamespaces);
 }
Пример #2
0
        void RepairOptions(ScriptProjectAnalysisResult projectResult)
        {
            var projectFileInfo       = new FileInfo(projectResult.ProjectInfo.FileName);
            var targetOptionsFileInfo = new FileInfo(Path.Combine(projectFileInfo.Directory.FullName, TargetOptionsSubPath));
            var document  = XDocument.Load(targetOptionsFileInfo.FullName);
            var attribute = document.Element("mdk")?.Attribute("version");

            if (attribute != null)
            {
                attribute.Value = ProjectScriptInfo.TargetPackageVersion.ToString();
                document.Save(targetOptionsFileInfo.FullName, SaveOptions.OmitDuplicateNamespaces);
            }
        }
Пример #3
0
        void RepairWhitelist(ScriptProjectAnalysisResult projectResult)
        {
            var whitelist = projectResult.Whitelist;

            if (!whitelist.HasValidWhitelistFile)
            {
                var projectFileInfo         = new FileInfo(projectResult.ProjectInfo.FileName);
                var targetWhitelistFileInfo = new FileInfo(Path.Combine(projectFileInfo.Directory.FullName, TargetWhitelistSubPath));
                if (!targetWhitelistFileInfo.Directory.Exists)
                {
                    targetWhitelistFileInfo.Directory.Create();
                }
                File.Copy(whitelist.SourceWhitelistFilePath, targetWhitelistFileInfo.FullName, true);
            }

            if (!whitelist.HasValidWhitelistElement)
            {
                var projectElement = projectResult.ProjectDocument
                                     .Element($"{{{Xmlns}}}Project");
                if (projectElement == null)
                {
                    throw new InvalidOperationException("Bad MDK project");
                }
                var badElements = projectElement
                                  .Elements($"{{{Xmlns}}}ItemGroup")
                                  .Elements()
                                  .Where(e =>
                                         string.Equals((string)e.Attribute("Include"), TargetWhitelistSubPath, StringComparison.CurrentCultureIgnoreCase) ||
                                         string.Equals((string)e.Element($"{{{Xmlns}}}Link"), TargetWhitelistSubPath, StringComparison.CurrentCultureIgnoreCase))
                                  .ToArray();
                foreach (var element in badElements)
                {
                    element.Remove();
                }

                var targetGroup = projectElement
                                  .Elements($"{{{Xmlns}}}ItemGroup")
                                  .Elements()
                                  .FirstOrDefault(e => string.Equals((string)e.Attribute("Include"), TargetOptionsSubPath, StringComparison.CurrentCultureIgnoreCase))
                                  ?.Parent;
                if (targetGroup == null)
                {
                    targetGroup = new XElement(XName.Get("ItemGroup", Xmlns));
                    projectElement.Add(targetGroup);
                }

                var itemElement = new XElement(XName.Get("AdditionalFiles", Xmlns),
                                               new XAttribute("Include", TargetWhitelistSubPath));
                targetGroup.Add(itemElement);
            }
        }
Пример #4
0
        static void RepairBadReferences(ScriptProjectAnalysisResult projectResult)
        {
            foreach (var badReference in projectResult.BadReferences)
            {
                switch (badReference.Type)
                {
                case BadReferenceType.File:
                    badReference.Element.AddOrUpdateAttribute("Include", badReference.ExpectedPath);
                    break;

                case BadReferenceType.Assembly:
                    badReference.Element.AddOrUpdateElement(XName.Get("HintPath", Xmlns), badReference.ExpectedPath);
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }
        }
Пример #5
0
        /// <summary>
        /// Upgrades the provided project to the current package version.
        /// </summary>
        /// <param name="projectResult"></param>
        void Upgrade(ScriptProjectAnalysisResult projectResult)
        {
            foreach (var badReference in projectResult.BadReferences)
            {
                switch (badReference.Type)
                {
                case BadReferenceType.File:
                    badReference.Element.AddOrUpdateAttribute("Include", badReference.ExpectedPath);
                    break;

                case BadReferenceType.Assembly:
                    badReference.Element.AddOrUpdateElement(XName.Get("HintPath", Xmlns), badReference.ExpectedPath);
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }
            projectResult.ProjectDocument.Save(projectResult.ProjectInfo.FileName, SaveOptions.OmitDuplicateNamespaces);
        }
Пример #6
0
        ScriptProjectAnalysisResult AnalyzeProject(Project project, ScriptUpgradeAnalysisOptions options)
        {
            if (!project.IsLoaded())
            {
                return(ScriptProjectAnalysisResult.NotAScriptProject);
            }
            var projectInfo = MDKProjectProperties.Load(project.FullName, project.Name);

            if (!projectInfo.IsValid)
            {
                return(ScriptProjectAnalysisResult.NotAScriptProject);
            }

            if (projectInfo.Options.Version < new Version(1, 2))
            {
                return(ScriptProjectAnalysisResult.For(project, projectInfo).AsLegacyProject());
            }

            return(ScriptProjectAnalysisResult.For(project, projectInfo));
        }