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); }
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); }
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); }
/// <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; } }
private static void InitializeVSIXProjectItems(ProjectRootElement root) { ProjectElement lastChild = root.LastChild; ProjectItemGroupElement group = root.CreateItemGroupElement(); root.InsertBeforeChild(group, lastChild); group.AddItem("None", "source.extension.vsixmanifest"); }
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); }
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); }
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); }
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); }
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); }
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"); }
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); } }