public void UpdateProject (MSBuildProject project) { string importsRelativeDirectory = MSBuildProjectService.ToMSBuildPath (project.BaseDirectory, importsBaseDirectory); var importsToRemove = project.Imports.Where (import => IsMatch (import, importsRelativeDirectory)).ToList (); using (var updater = new EnsureNuGetPackageBuildImportsTargetUpdater ()) { foreach (MSBuildImport import in importsToRemove) { project.RemoveImport (import.Project); updater.RemoveImport (import.Project); updater.UpdateProject (project); } } }
internal protected override void OnWriteProject (ProgressMonitor monitor, MSBuildProject project) { base.OnWriteProject (monitor, project); HashSet<string> validProjitems = new HashSet<string> (); foreach (var r in Project.References.Where (rp => rp.ReferenceType == ReferenceType.Project)) { var ip = r.GetItemsProjectPath (); if (!string.IsNullOrEmpty (ip)) { ip = MSBuildProjectService.ToMSBuildPath (Project.ItemDirectory, ip); validProjitems.Add (ip); if (!project.Imports.Any (im => im.Project == ip)) { // If there is already a Shared import, place the new import in the same location MSBuildObject before = project.Imports.FirstOrDefault (i => i.Label == "Shared" && i.Project.EndsWith (".projitems")); if (before == null) { var fsharpProject = project.ProjectTypeGuids.Contains("{F2A71F9B-5D33-465A-A702-920D77279786}"); if (fsharpProject) //For F# use the first item group as the shared project files have to be listed first before = project.ItemGroups.FirstOrDefault (i => i.Label != "Shared"); else before = project.Imports.FirstOrDefault (i => i.Label != "Shared"); } var im = project.AddNewImport (ip, beforeObject: before); im.Label = "Shared"; im.Condition = "Exists('" + ip + "')"; } } } foreach (var im in project.Imports.ToArray ()) { if (im.Label == "Shared" && im.Project.EndsWith (".projitems") && !(validProjitems.Contains (im.Project))) project.RemoveImport (im.Project); } }