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;
}