Browse Source

Mono/C#: Use /restore instead of /t:restore when building

Documentation recommends not to use /t:restore
together with other targets (like /t:build),
as it messes with the environment.
Ignacio Etcheverry 5 years ago
parent
commit
4b0c78b3ca

+ 1 - 3
modules/mono/build_scripts/solution_builder.py

@@ -142,9 +142,7 @@ def build_solution(env, solution_path, build_config, extra_msbuild_args=[]):
 
 
     # Build solution
     # Build solution
 
 
-    targets = ["Restore", "Build"]
-
-    msbuild_args += [solution_path, "/t:%s" % ",".join(targets), "/p:Configuration=" + build_config]
+    msbuild_args += [solution_path, "/restore", "/t:Build", "/p:Configuration=" + build_config]
     msbuild_args += extra_msbuild_args
     msbuild_args += extra_msbuild_args
 
 
     run_command(msbuild_path, msbuild_args, env_override=msbuild_env, name="msbuild")
     run_command(msbuild_path, msbuild_args, env_override=msbuild_env, name="msbuild")

+ 10 - 26
modules/mono/editor/GodotTools/GodotTools/Build/BuildSystem.cs

@@ -47,19 +47,14 @@ namespace GodotTools.Build
         private static bool PrintBuildOutput =>
         private static bool PrintBuildOutput =>
             (bool)EditorSettings.GetSetting("mono/builds/print_build_output");
             (bool)EditorSettings.GetSetting("mono/builds/print_build_output");
 
 
-        private static Process LaunchBuild(string solution, IEnumerable<string> targets, string config, string loggerOutputDir, IEnumerable<string> customProperties = null)
+        private static Process LaunchBuild(BuildInfo buildInfo)
         {
         {
             (string msbuildPath, BuildTool buildTool) = MsBuildFinder.FindMsBuild();
             (string msbuildPath, BuildTool buildTool) = MsBuildFinder.FindMsBuild();
 
 
             if (msbuildPath == null)
             if (msbuildPath == null)
                 throw new FileNotFoundException("Cannot find the MSBuild executable.");
                 throw new FileNotFoundException("Cannot find the MSBuild executable.");
 
 
-            var customPropertiesList = new List<string>();
-
-            if (customProperties != null)
-                customPropertiesList.AddRange(customProperties);
-
-            string compilerArgs = BuildArguments(buildTool, solution, targets, config, loggerOutputDir, customPropertiesList);
+            string compilerArgs = BuildArguments(buildTool, buildInfo);
 
 
             var startInfo = new ProcessStartInfo(msbuildPath, compilerArgs);
             var startInfo = new ProcessStartInfo(msbuildPath, compilerArgs);
 
 
@@ -100,19 +95,7 @@ namespace GodotTools.Build
 
 
         public static int Build(BuildInfo buildInfo)
         public static int Build(BuildInfo buildInfo)
         {
         {
-            return Build(buildInfo.Solution, buildInfo.Targets, buildInfo.Configuration,
-                buildInfo.LogsDirPath, buildInfo.CustomProperties);
-        }
-
-        public static Task<int> BuildAsync(BuildInfo buildInfo)
-        {
-            return BuildAsync(buildInfo.Solution, buildInfo.Targets, buildInfo.Configuration,
-                buildInfo.LogsDirPath, buildInfo.CustomProperties);
-        }
-
-        public static int Build(string solution, string[] targets, string config, string loggerOutputDir, IEnumerable<string> customProperties = null)
-        {
-            using (var process = LaunchBuild(solution, targets, config, loggerOutputDir, customProperties))
+            using (var process = LaunchBuild(buildInfo))
             {
             {
                 process.WaitForExit();
                 process.WaitForExit();
 
 
@@ -120,9 +103,9 @@ namespace GodotTools.Build
             }
             }
         }
         }
 
 
-        public static async Task<int> BuildAsync(string solution, IEnumerable<string> targets, string config, string loggerOutputDir, IEnumerable<string> customProperties = null)
+        public static async Task<int> BuildAsync(BuildInfo buildInfo)
         {
         {
-            using (var process = LaunchBuild(solution, targets, config, loggerOutputDir, customProperties))
+            using (var process = LaunchBuild(buildInfo))
             {
             {
                 await process.WaitForExitAsync();
                 await process.WaitForExitAsync();
 
 
@@ -130,17 +113,18 @@ namespace GodotTools.Build
             }
             }
         }
         }
 
 
-        private static string BuildArguments(BuildTool buildTool, string solution, IEnumerable<string> targets, string config, string loggerOutputDir, IEnumerable<string> customProperties)
+        private static string BuildArguments(BuildTool buildTool, BuildInfo buildInfo)
         {
         {
             string arguments = string.Empty;
             string arguments = string.Empty;
 
 
             if (buildTool == BuildTool.DotnetCli)
             if (buildTool == BuildTool.DotnetCli)
                 arguments += "msbuild "; // `dotnet msbuild` command
                 arguments += "msbuild "; // `dotnet msbuild` command
 
 
-            arguments += $@"""{solution}"" /v:normal /t:{string.Join(",", targets)} ""/p:{"Configuration=" + config}"" " +
-                         $@"""/l:{typeof(GodotBuildLogger).FullName},{GodotBuildLogger.AssemblyPath};{loggerOutputDir}""";
+            arguments += $@"""{buildInfo.Solution}"" /t:{string.Join(",", buildInfo.Targets)} " +
+                         $@"""/p:{"Configuration=" + buildInfo.Configuration}"" /v:normal " +
+                         $@"""/l:{typeof(GodotBuildLogger).FullName},{GodotBuildLogger.AssemblyPath};{buildInfo.LogsDirPath}""";
 
 
-            foreach (string customProperty in customProperties)
+            foreach (string customProperty in buildInfo.CustomProperties)
             {
             {
                 arguments += " /p:" + customProperty;
                 arguments += " /p:" + customProperty;
             }
             }

+ 3 - 1
modules/mono/editor/GodotTools/GodotTools/BuildInfo.cs

@@ -12,6 +12,7 @@ namespace GodotTools
         public string Solution { get; }
         public string Solution { get; }
         public string[] Targets { get; }
         public string[] Targets { get; }
         public string Configuration { get; }
         public string Configuration { get; }
+        public bool Restore { get; }
         public Array<string> CustomProperties { get; } = new Array<string>(); // TODO Use List once we have proper serialization
         public Array<string> CustomProperties { get; } = new Array<string>(); // TODO Use List once we have proper serialization
 
 
         public string LogsDirPath => Path.Combine(GodotSharpDirs.BuildLogsDirs, $"{Solution.MD5Text()}_{Configuration}");
         public string LogsDirPath => Path.Combine(GodotSharpDirs.BuildLogsDirs, $"{Solution.MD5Text()}_{Configuration}");
@@ -39,11 +40,12 @@ namespace GodotTools
         {
         {
         }
         }
 
 
-        public BuildInfo(string solution, string[] targets, string configuration)
+        public BuildInfo(string solution, string[] targets, string configuration, bool restore)
         {
         {
             Solution = solution;
             Solution = solution;
             Targets = targets;
             Targets = targets;
             Configuration = configuration;
             Configuration = configuration;
+            Restore = restore;
         }
         }
     }
     }
 }
 }

+ 1 - 1
modules/mono/editor/GodotTools/GodotTools/BuildManager.cs

@@ -175,7 +175,7 @@ namespace GodotTools
             {
             {
                 pr.Step("Building project solution", 0);
                 pr.Step("Building project solution", 0);
 
 
-                var buildInfo = new BuildInfo(GodotSharpDirs.ProjectSlnPath, targets: new[] {"Restore", "Build"}, config);
+                var buildInfo = new BuildInfo(GodotSharpDirs.ProjectSlnPath, targets: new[] {"Build"}, config, restore: true);
 
 
                 bool escapeNeedsDoubleBackslash = buildTool == BuildTool.MsBuildMono || buildTool == BuildTool.DotnetCli;
                 bool escapeNeedsDoubleBackslash = buildTool == BuildTool.MsBuildMono || buildTool == BuildTool.DotnetCli;