diff --git a/GodotAddinVS/GodotAddinVS.csproj b/GodotAddinVS/GodotAddinVS.csproj
index cb3223c..e6b1c32 100644
--- a/GodotAddinVS/GodotAddinVS.csproj
+++ b/GodotAddinVS/GodotAddinVS.csproj
@@ -71,8 +71,10 @@
+
+
diff --git a/GodotAddinVS/GodotSolutionEventsListener.cs b/GodotAddinVS/GodotSolutionEventsListener.cs
index 0d0be66..1bd68d7 100644
--- a/GodotAddinVS/GodotSolutionEventsListener.cs
+++ b/GodotAddinVS/GodotSolutionEventsListener.cs
@@ -8,6 +8,7 @@
using GodotAddinVS.GodotMessaging;
using GodotTools.IdeMessaging;
using GodotTools.IdeMessaging.Requests;
+using Microsoft.VisualStudio;
using Microsoft.VisualStudio.Shell;
using Microsoft.VisualStudio.Shell.Interop;
@@ -85,7 +86,7 @@ public override int OnAfterOpenProject(IVsHierarchy hierarchy, int added)
if (_registered)
return 0;
- _godotProjectDir = SolutionDir;
+ _godotProjectDir = EvalGodotProjectDir(hierarchy);
DebuggerEvents = ServiceProvider.GetService().Events.DebuggerEvents;
DebuggerEvents.OnEnterDesignMode += DebuggerEvents_OnEnterDesignMode;
@@ -162,5 +163,38 @@ private void Close()
DebuggerEvents = null;
}
}
+
+ private string EvalGodotProjectDir(IVsHierarchy hierarchy)
+ {
+ try
+ {
+ ThreadHelper.ThrowIfNotOnUIThread();
+ var dteProject = GetDTEProject(hierarchy);
+ if (dteProject == null)
+ {
+ return SolutionDir;
+ }
+
+ var evalProj = new Microsoft.Build.Evaluation.Project(dteProject.FullName);
+ var evaluated = evalProj.GetPropertyValue("GodotProjectDir");
+ return string.IsNullOrWhiteSpace(evaluated) ? SolutionDir : evaluated;
+ }
+ catch
+ {
+ return SolutionDir;
+ }
+ }
+
+ private static EnvDTE.Project GetDTEProject(IVsHierarchy hierarchy)
+ {
+ ThreadHelper.ThrowIfNotOnUIThread();
+
+ var itemid = VSConstants.VSITEMID_ROOT;
+
+ object objProj;
+ hierarchy.GetProperty(itemid, (int)__VSHPROPID.VSHPROPID_ExtObject, out objProj);
+
+ return objProj as EnvDTE.Project;
+ }
}
}