Beispiel #1
0
        private ProjectItemGroupElement CreateItemGroupAtEndOfProject(ProjectRootElement csproj)
        {
            var itemGroup = csproj.CreateItemGroupElement();

            csproj.InsertBeforeChild(itemGroup, csproj.LastChild);
            return(itemGroup);
        }
        private ProjectTargetElement CreateTarget(ProjectRootElement csproj, string scriptSetName)
        {
            var targetName = $"{scriptSetName[0].ToString().ToUpper()}{string.Concat(scriptSetName.Skip(1))}Script";

            TargetHookInfo targetHookInfo;

            if (!ScriptSetToMSBuildHookTargetMap.TryGetValue(scriptSetName, out targetHookInfo))
            {
                MigrationErrorCodes.MIGRATE1019(
                    $"{scriptSetName} is an unsupported script event hook for project migration")
                .Throw();
            }

            var target = csproj.CreateTargetElement(targetName);

            csproj.InsertBeforeChild(target, csproj.LastChild);
            if (targetHookInfo.IsRunBefore)
            {
                target.BeforeTargets = targetHookInfo.TargetName;
            }
            else
            {
                target.AfterTargets = targetHookInfo.TargetName;
            }

            // Run Scripts After each inner build
            target.Condition = " '$(IsCrossTargetingBuild)' != 'true' ";

            return(target);
        }
Beispiel #3
0
        private ProjectPropertyGroupElement CreatePropertyGroupAtEndOfProject(ProjectRootElement csproj)
        {
            var propertyGroup = csproj.CreatePropertyGroupElement();

            csproj.InsertBeforeChild(propertyGroup, csproj.LastChild);
            return(propertyGroup);
        }
        static ProjectImportElement AddImportAtTop(ProjectRootElement projectRoot, string importedProjectFile)
        {
            ProjectImportElement import = projectRoot.CreateImportElement(importedProjectFile);

            projectRoot.InsertBeforeChild(import, projectRoot.FirstChild);
            return(import);
        }
Beispiel #5
0
        private ProjectTargetElement CreateTarget(ProjectRootElement csproj, string scriptSetName, bool isMultiTFM)
        {
            var targetName = $"{scriptSetName[0].ToString().ToUpper()}{string.Concat(scriptSetName.Skip(1))}Script";

            TargetHookInfo targetHookInfo;

            if (!ScriptSetToMSBuildHookTargetMap.TryGetValue(scriptSetName, out targetHookInfo))
            {
                MigrationErrorCodes.MIGRATE1019(
                    String.Format(LocalizableStrings.MIGRATE1019Arg, scriptSetName))
                .Throw();
            }

            var target = csproj.CreateTargetElement(targetName);

            csproj.InsertBeforeChild(target, csproj.LastChild);
            if (targetHookInfo.IsRunBefore)
            {
                target.BeforeTargets = targetHookInfo.TargetName;
            }
            else
            {
                target.AfterTargets = targetHookInfo.TargetName;
            }

            if (isMultiTFM)
            {
                ConditionTargetToRunScriptsAfterEachInnerBuild(target);
            }

            return(target);
        }
Beispiel #6
0
        /// <summary>
        /// Replaces all configuration propertygroups with empty property groups corresponding to the expected configurations.
        /// Doesn't attempt to preserve any content since it can all be regenerated.
        /// Does attempt to preserve the ordering in the project file.
        /// </summary>
        /// <param name="project">Project</param>
        /// <param name="oldPropertyGroups">PropertyGroups to remove</param>
        /// <param name="newConfigurations"></param>
        private static void ReplaceConfigurationPropertyGroups(ProjectRootElement project, IEnumerable <ProjectPropertyGroupElement> oldPropertyGroups, IEnumerable <string> newConfigurations)
        {
            ProjectElement insertAfter = null, insertBefore = null;

            foreach (var oldPropertyGroup in oldPropertyGroups)
            {
                insertBefore = oldPropertyGroup.NextSibling;
                project.RemoveChild(oldPropertyGroup);
            }

            if (insertBefore == null)
            {
                // find first itemgroup after imports
                var insertAt = project.Imports.FirstOrDefault()?.NextSibling;

                while (insertAt != null)
                {
                    if (insertAt is ProjectItemGroupElement)
                    {
                        insertBefore = insertAt;
                        break;
                    }

                    insertAt = insertAt.NextSibling;
                }
            }

            if (insertBefore == null)
            {
                // find last propertygroup after imports, defaulting to after imports
                insertAfter = project.Imports.FirstOrDefault();

                while (insertAfter?.NextSibling != null && insertAfter.NextSibling is ProjectPropertyGroupElement)
                {
                    insertAfter = insertAfter.NextSibling;
                }
            }


            foreach (var newConfiguration in newConfigurations)
            {
                var newPropertyGroup = project.CreatePropertyGroupElement();
                newPropertyGroup.Condition = $"'$(Configuration)|$(Platform)' == '{newConfiguration}'";
                if (insertBefore != null)
                {
                    project.InsertBeforeChild(newPropertyGroup, insertBefore);
                }
                else if (insertAfter != null)
                {
                    project.InsertAfterChild(newPropertyGroup, insertAfter);
                }
                else
                {
                    project.AppendChild(newPropertyGroup);
                }
                insertBefore = null;
                insertAfter  = newPropertyGroup;
            }
        }
Beispiel #7
0
        private static void InitializeVSIXProjectItems(ProjectRootElement root)
        {
            ProjectElement          lastChild = root.LastChild;
            ProjectItemGroupElement group     = root.CreateItemGroupElement();

            root.InsertBeforeChild(group, lastChild);
            group.AddItem("None", "source.extension.vsixmanifest");
        }
Beispiel #8
0
        private static void InitializeLegacyProjectImports(ProjectRootElement root)
        {
            ProjectElement       firstChild   = root.FirstChild;
            ProjectElement       lastChild    = root.LastChild;
            ProjectImportElement commonImport =
                root.CreateImportElement("$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props");

            commonImport.Condition = "Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')";
            ProjectImportElement csharpImport =
                root.CreateImportElement("$(MSBuildToolsPath)\\Microsoft.CSharp.targets");

            root.InsertBeforeChild(commonImport, firstChild);
            root.InsertAfterChild(csharpImport, lastChild);
        }
Beispiel #9
0
        private void InitializeCPSProjectXml()
        {
            _project = new Project(NewProjectFileOptions.None);
            ProjectRootElement   root                  = _project.Xml;
            ProjectElement       firstChild            = root.FirstChild;
            ProjectElement       lastChild             = root.LastChild;
            ProjectImportElement sdkPropsImportElement = root.CreateImportElement("Sdk.props");

            sdkPropsImportElement.Sdk = "Microsoft.NET.Sdk";
            ProjectImportElement sdkTargetsImportElement = root.CreateImportElement("Sdk.targets");

            sdkTargetsImportElement.Sdk = "Microsoft.NET.Sdk";
            root.InsertBeforeChild(sdkPropsImportElement, firstChild);
            root.InsertAfterChild(sdkTargetsImportElement, lastChild);
        }
Beispiel #10
0
        private static void InitializeCPSProjectImports(ProjectRootElement root)
        {
            ProjectElement       firstChild = root.FirstChild;
            ProjectElement       lastChild  = root.LastChild;
            ProjectImportElement sdkProps   =
                root.CreateImportElement("Sdk.props");

            sdkProps.Sdk = "Microsoft.NET.Sdk";
            ProjectImportElement sdkTargets =
                root.CreateImportElement("Sdk.targets");

            sdkTargets.Sdk = "Microsoft.NET.Sdk";
            root.InsertBeforeChild(sdkProps, firstChild);
            root.InsertAfterChild(sdkTargets, lastChild);
        }
Beispiel #11
0
        private void InitializeLegacyProjectXml()
        {
            _projectCollection = new ProjectCollection();
            _project           = new Project(new Dictionary <string, string>(), "12.0", _projectCollection, NewProjectFileOptions.IncludeXmlNamespace | NewProjectFileOptions.IncludeToolsVersion);
            ProjectRootElement   root         = _project.Xml;
            ProjectElement       firstChild   = root.FirstChild;
            ProjectElement       lastChild    = root.LastChild;
            ProjectImportElement commonImport =
                root.CreateImportElement("$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props");

            commonImport.Condition = "Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')";
            ProjectImportElement csharpImport =
                root.CreateImportElement("$(MSBuildToolsPath)\\Microsoft.CSharp.targets");

            root.InsertBeforeChild(commonImport, firstChild);
            root.InsertAfterChild(csharpImport, lastChild);
        }
Beispiel #12
0
        private ProjectTargetElement CreateTarget(ProjectRootElement csproj, string scriptSetName)
        {
            var targetName     = $"{scriptSetName[0].ToString().ToUpper()}{string.Concat(scriptSetName.Skip(1))}Script";
            var targetHookInfo = ScriptSetToMSBuildHookTargetMap[scriptSetName];

            var target = csproj.CreateTargetElement(targetName);

            csproj.InsertBeforeChild(target, csproj.LastChild);
            if (targetHookInfo.IsRunBefore)
            {
                target.BeforeTargets = targetHookInfo.TargetName;
            }
            else
            {
                target.AfterTargets = targetHookInfo.TargetName;
            }

            return(target);
        }
Beispiel #13
0
        private static void InitializeLegacyExtensibilityConfigurationProperties(ProjectRootElement root)
        {
            ProjectElement firstChild         = root.FirstChild;
            ProjectPropertyGroupElement group = root.CreatePropertyGroupElement();

            root.InsertBeforeChild(group, firstChild);
            group.Label = "Globals";
            group.AddProperty("EnableGlobbing", "false");
            group.AddProperty("ImportVSSDKTargets", "true");
            group.AddProperty("GeneratePkgDefFile", "false");
            group.AddProperty("DeployExtension", "true");
            group.AddProperty("DeployVSTemplates", "true");
            group.AddProperty("UseCodebase", "false");
            group.AddProperty("CreateVsixContainer", "true");
            group.AddProperty("IncludeAssemblyInVSIXContainer", "false");
            group.AddProperty("IncludeDebugSymbolsInVSIXContainer", "true");
            group.AddProperty("IncludeDebugSymbolsInLocalVSIXDeployment", "true");
            group.AddProperty("CopyBuildOutputToOutputDirectory", "false");
            group.AddProperty("CopyOutputSymbolsToOutputDirectory", "false");
            group.AddProperty("UseCommonOutputDirectory", "true");
        }
Beispiel #14
0
        public async Task SetExplicitSdkImportsIfNecessaryAsync(string filePath)
        {
            XDocument xdoc = XDocument.Load(filePath);

            await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();

            if (xdoc.Root.HasAttributes && xdoc.Root.Attribute("Sdk") != null)
            {
                xdoc.Root.Attribute("Sdk").Remove();
                xdoc.Save(filePath);

                ProjectRootElement   root                  = ProjectRootElement.Open(filePath, ProjectCollection, true);
                ProjectElement       firstChild            = root.FirstChild;
                ProjectElement       lastChild             = root.LastChild;
                ProjectImportElement sdkPropsImportElement = root.CreateImportElement("Sdk.props");
                sdkPropsImportElement.Sdk = "Microsoft.NET.Sdk";
                ProjectImportElement sdkTargetsImportElement = root.CreateImportElement("Sdk.targets");
                sdkTargetsImportElement.Sdk = "Microsoft.NET.Sdk";
                root.InsertBeforeChild(sdkPropsImportElement, firstChild);
                root.InsertAfterChild(sdkTargetsImportElement, lastChild);
                root.Save(filePath);
            }
        }