diff --git a/MvsSln/Core/IXProject.cs b/MvsSln/Core/IXProject.cs index 6b69a04..48f863c 100644 --- a/MvsSln/Core/IXProject.cs +++ b/MvsSln/Core/IXProject.cs @@ -120,8 +120,9 @@ public interface IXProject /// To remove 'Import' element. /// /// Specified 'Import' element to remove. + /// Holds empty group if it was inside. /// true value if it has been removed. - bool RemoveImport(ImportElement element); + bool RemoveImport(ImportElement element, bool holdEmptyGroup = true); /// /// Retrieve the first found 'Import' element if it exists. diff --git a/MvsSln/Core/XProject.cs b/MvsSln/Core/XProject.cs index a178209..46423ab 100644 --- a/MvsSln/Core/XProject.cs +++ b/MvsSln/Core/XProject.cs @@ -197,14 +197,36 @@ public bool RemoveImport(string project) /// To remove 'Import' element. /// /// Specified 'Import' element to remove. + /// Holds empty group if it was inside. /// true value if it has been removed. - public bool RemoveImport(ImportElement element) + public bool RemoveImport(ImportElement element, bool holdEmptyGroup = true) { if(element.parentElement == null) { return false; } - Project.Xml.RemoveChild(element.parentElement); + // https://github.com/3F/DllExport/issues/77 + // 'The node is not parented by this object' if an `Import` element is already placed inside `ImportGroup`. + //Project.Xml.RemoveChild(element.parentElement); + + var imp = element.parentElement; + if(imp.Parent is ProjectImportGroupElement container) + { + if(container.Imports.Count > 1) { + container.RemoveChild(imp); + return true; + } + + if(holdEmptyGroup) { + container.RemoveChild(imp); // leave as an ~ + } + else { + Project.Xml.RemoveChild(container); + } + return true; + } + + Project.Xml.RemoveChild(imp); return true; }