mirror of
				https://github.com/godotengine/godot.git
				synced 2025-10-31 13:41:03 +00:00 
			
		
		
		
	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.
This commit is contained in:
		
							parent
							
								
									23f7f86914
								
							
						
					
					
						commit
						4b0c78b3ca
					
				
					 4 changed files with 15 additions and 31 deletions
				
			
		|  | @ -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, "/restore", "/t:Build", "/p:Configuration=" + build_config] | ||||||
| 
 |  | ||||||
|     msbuild_args += [solution_path, "/t:%s" % ",".join(targets), "/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") | ||||||
|  |  | ||||||
|  | @ -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>(); |             string compilerArgs = BuildArguments(buildTool, buildInfo); | ||||||
| 
 |  | ||||||
|             if (customProperties != null) |  | ||||||
|                 customPropertiesList.AddRange(customProperties); |  | ||||||
| 
 |  | ||||||
|             string compilerArgs = BuildArguments(buildTool, solution, targets, config, loggerOutputDir, customPropertiesList); |  | ||||||
| 
 | 
 | ||||||
|             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, |             using (var process = LaunchBuild(buildInfo)) | ||||||
|                 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)) |  | ||||||
|             { |             { | ||||||
|                 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}"" " + |             arguments += $@"""{buildInfo.Solution}"" /t:{string.Join(",", buildInfo.Targets)} " + | ||||||
|                          $@"""/l:{typeof(GodotBuildLogger).FullName},{GodotBuildLogger.AssemblyPath};{loggerOutputDir}"""; |                          $@"""/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; | ||||||
|             } |             } | ||||||
|  |  | ||||||
|  | @ -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; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -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; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Ignacio Etcheverry
						Ignacio Etcheverry