diff --git a/src/AddIns/Misc/SharpDbTools/Project/SharpDbTools.csproj b/src/AddIns/Misc/SharpDbTools/Project/SharpDbTools.csproj
index 0cb15f8af4..c6cec9e840 100644
--- a/src/AddIns/Misc/SharpDbTools/Project/SharpDbTools.csproj
+++ b/src/AddIns/Misc/SharpDbTools/Project/SharpDbTools.csproj
@@ -70,6 +70,9 @@
GetConnectionLogicalNameDialog.cs
+
+ Configuration\GlobalAssemblyInfo.cs
+
diff --git a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/DirectoryNode.cs b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/DirectoryNode.cs
index 6af5b606a2..8289f5ae80 100644
--- a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/DirectoryNode.cs
+++ b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/DirectoryNode.cs
@@ -411,14 +411,29 @@ namespace ICSharpCode.SharpDevelop.Project
}
AbstractProjectBrowserTreeNode parentNode = fileNodeDictionary[fileName];
pair.Key.Parent.Nodes.Remove(pair.Key);
- pair.Key.AddTo(parentNode);
- if (pair.Key.FileNodeStatus != FileNodeStatus.Missing) {
- pair.Key.FileNodeStatus = FileNodeStatus.BehindFile;
+ if (NodeIsParent(parentNode, pair.Key)) {
+ // is pair.Key a parent of parentNode?
+ // if yes, we have a parent cycle - break it by adding one node to the directory
+ pair.Key.AddTo(this);
+ } else {
+ pair.Key.AddTo(parentNode);
+ if (pair.Key.FileNodeStatus != FileNodeStatus.Missing) {
+ pair.Key.FileNodeStatus = FileNodeStatus.BehindFile;
+ }
}
}
base.Initialize();
}
-
+
+ static bool NodeIsParent(TreeNode childNode, TreeNode parentNode)
+ {
+ do {
+ if (childNode == parentNode) return true;
+ childNode = childNode.Parent;
+ } while (childNode != null);
+ return false;
+ }
+
protected void BaseInitialize()
{
base.Initialize();