2
0
Эх сурвалжийг харах

Fix C# solution directory settings

Co-authored-by: Ignacio Roldán Etcheverry <[email protected]>
NeilKleistGao 2 жил өмнө
parent
commit
2bab84c8c7

+ 1 - 2
modules/mono/editor/Godot.NET.Sdk/Godot.NET.Sdk/Sdk/Sdk.props

@@ -12,8 +12,7 @@
     <Configurations>Debug;ExportDebug;ExportRelease</Configurations>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
 
-    <GodotProjectDir Condition=" '$(SolutionDir)' != '' ">$(SolutionDir)</GodotProjectDir>
-    <GodotProjectDir Condition=" '$(SolutionDir)' == '' ">$(MSBuildProjectDirectory)</GodotProjectDir>
+    <GodotProjectDir Condition=" '$(GodotProjectDir)' == '' ">$(MSBuildProjectDirectory)</GodotProjectDir>
     <GodotProjectDir>$([MSBuild]::EnsureTrailingSlash('$(GodotProjectDir)'))</GodotProjectDir>
 
     <!-- Custom output paths for Godot projects. In brief, 'bin\' and 'obj\' are moved to '$(GodotProjectDir)\.godot\mono\temp\'. -->

+ 7 - 7
modules/mono/editor/GodotTools/GodotTools/GodotSharpEditor.cs

@@ -57,24 +57,22 @@ namespace GodotTools
             {
                 pr.Step("Generating C# project...".TTR());
 
-                string resourceDir = ProjectSettings.GlobalizePath("res://");
-
-                string path = resourceDir;
+                string csprojDir = Path.GetDirectoryName(GodotSharpDirs.ProjectCsProjPath);
+                string slnDir = Path.GetDirectoryName(GodotSharpDirs.ProjectSlnPath);
                 string name = GodotSharpDirs.ProjectAssemblyName;
-
-                string guid = CsProjOperations.GenerateGameProject(path, name);
+                string guid = CsProjOperations.GenerateGameProject(csprojDir, name);
 
                 if (guid.Length > 0)
                 {
                     var solution = new DotNetSolution(name)
                     {
-                        DirectoryPath = path
+                        DirectoryPath = slnDir
                     };
 
                     var projectInfo = new DotNetSolution.ProjectInfo
                     {
                         Guid = guid,
-                        PathRelativeToSolution = name + ".csproj",
+                        PathRelativeToSolution = Path.GetRelativePath(slnDir, GodotSharpDirs.ProjectCsProjPath),
                         Configs = new List<string> { "Debug", "ExportDebug", "ExportRelease" }
                     };
 
@@ -375,6 +373,8 @@ namespace GodotTools
         {
             base._EnablePlugin();
 
+            ProjectSettingsChanged += GodotSharpDirs.DetermineProjectLocation;
+
             if (Instance != null)
                 throw new InvalidOperationException();
             Instance = this;

+ 5 - 5
modules/mono/editor/GodotTools/GodotTools/Internals/GodotSharpDirs.cs

@@ -52,10 +52,9 @@ namespace GodotTools.Internals
         {
             GlobalDef("dotnet/project/assembly_name", "");
             GlobalDef("dotnet/project/solution_directory", "");
-            GlobalDef("dotnet/project/c#_project_directory", "");
         }
 
-        private static void DetermineProjectLocation()
+        public static void DetermineProjectLocation()
         {
             static string DetermineProjectName()
             {
@@ -76,10 +75,11 @@ namespace GodotTools.Internals
             string slnParentDir = (string)ProjectSettings.GetSetting("dotnet/project/solution_directory");
             if (string.IsNullOrEmpty(slnParentDir))
                 slnParentDir = "res://";
+            else if (!slnParentDir.StartsWith("res://"))
+                slnParentDir = "res://" + slnParentDir;
 
-            string csprojParentDir = (string)ProjectSettings.GetSetting("dotnet/project/c#_project_directory");
-            if (string.IsNullOrEmpty(csprojParentDir))
-                csprojParentDir = "res://";
+            // The csproj should be in the same folder as project.godot.
+            string csprojParentDir = "res://";
 
             _projectSlnPath = Path.Combine(ProjectSettings.GlobalizePath(slnParentDir),
                 string.Concat(_projectAssemblyName, ".sln"));