diff options
Diffstat (limited to 'main/src/core/MonoDevelop.Core/MonoDevelop.Projects.SharedAssetsProjects/SharedAssetsProjectMSBuildExtension.cs')
-rw-r--r-- | main/src/core/MonoDevelop.Core/MonoDevelop.Projects.SharedAssetsProjects/SharedAssetsProjectMSBuildExtension.cs | 34 |
1 files changed, 13 insertions, 21 deletions
diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.SharedAssetsProjects/SharedAssetsProjectMSBuildExtension.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.SharedAssetsProjects/SharedAssetsProjectMSBuildExtension.cs index 1da660c7a1..645d7b282a 100644 --- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.SharedAssetsProjects/SharedAssetsProjectMSBuildExtension.cs +++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.SharedAssetsProjects/SharedAssetsProjectMSBuildExtension.cs @@ -32,53 +32,45 @@ using MonoDevelop.Projects.Formats.MSBuild; namespace MonoDevelop.Projects.SharedAssetsProjects { - class SharedAssetsProjectMSBuildExtension: MSBuildExtension + [RegisterProjectModelExtension] + class SharedAssetsProjectMSBuildExtension: DotNetProjectExtension { - public override void LoadProject (IProgressMonitor monitor, SolutionEntityItem item, MSBuildProject msproject) + internal protected override void OnReadProject (ProgressMonitor monitor, MSBuildProject msproject) { - base.LoadProject (monitor, item, msproject); - - var dnp = item as DotNetProject; - if (dnp == null) - return; + base.OnReadProject (monitor, msproject); // Convert .projitems imports into project references foreach (var sp in msproject.Imports.Where (im => im.Label == "Shared" && im.Project.EndsWith (".projitems"))) { var projitemsFile = sp.Project; if (!string.IsNullOrEmpty (projitemsFile)) { - projitemsFile = MSBuildProjectService.FromMSBuildPath (item.ItemDirectory, projitemsFile); + projitemsFile = MSBuildProjectService.FromMSBuildPath (Project.ItemDirectory, projitemsFile); projitemsFile = Path.Combine (Path.GetDirectoryName (msproject.FileName), projitemsFile); if (File.Exists (projitemsFile)) { - MSBuildSerializer iser = Handler.CreateSerializer (); - iser.SerializationContext.BaseFile = projitemsFile; - iser.SerializationContext.ProgressMonitor = monitor; MSBuildProject p = new MSBuildProject (); p.Load (projitemsFile); - Handler.LoadProjectItems (p, iser, ProjectItemFlags.Hidden | ProjectItemFlags.DontPersist); + Project.LoadProjectItems (p, ProjectItemFlags.Hidden | ProjectItemFlags.DontPersist); var r = new ProjectReference (ReferenceType.Project, Path.GetFileNameWithoutExtension (projitemsFile)); r.Flags = ProjectItemFlags.DontPersist; r.SetItemsProjectPath (projitemsFile); - dnp.References.Add (r); + Project.References.Add (r); } } } } - public override void SaveProject (IProgressMonitor monitor, SolutionEntityItem item, MSBuildProject project) + internal protected override void OnWriteProject (ProgressMonitor monitor, MSBuildProject project) { - base.SaveProject (monitor, item, project); - var dnp = item as DotNetProject; - if (dnp == null) - return; + base.OnWriteProject (monitor, project); + HashSet<string> validProjitems = new HashSet<string> (); - foreach (var r in dnp.References.Where (rp => rp.ReferenceType == ReferenceType.Project)) { + foreach (var r in Project.References.Where (rp => rp.ReferenceType == ReferenceType.Project)) { var ip = r.GetItemsProjectPath (); if (!string.IsNullOrEmpty (ip)) { - ip = MSBuildProjectService.ToMSBuildPath (item.ItemDirectory, ip); + ip = MSBuildProjectService.ToMSBuildPath (Project.ItemDirectory, ip); validProjitems.Add (ip); if (!project.Imports.Any (im => im.Project == ip)) { - var im = project.AddNewImport (ip, project.Imports.FirstOrDefault (i => i.Label != "Shared")); + var im = project.AddNewImport (ip, beforeImport:project.Imports.FirstOrDefault (i => i.Label != "Shared")); im.Label = "Shared"; im.Condition = "Exists('" + ip + "')"; } |