mirror of
				https://github.com/godotengine/godot.git
				synced 2025-10-31 21:51:22 +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 | ||||
| 
 | ||||
|     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 | ||||
| 
 | ||||
|     run_command(msbuild_path, msbuild_args, env_override=msbuild_env, name="msbuild") | ||||
|  |  | |||
|  | @ -47,19 +47,14 @@ namespace GodotTools.Build | |||
|         private static bool PrintBuildOutput => | ||||
|             (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(); | ||||
| 
 | ||||
|             if (msbuildPath == null) | ||||
|                 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); | ||||
| 
 | ||||
|  | @ -100,19 +95,7 @@ namespace GodotTools.Build | |||
| 
 | ||||
|         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(); | ||||
| 
 | ||||
|  | @ -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(); | ||||
| 
 | ||||
|  | @ -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; | ||||
| 
 | ||||
|             if (buildTool == BuildTool.DotnetCli) | ||||
|                 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; | ||||
|             } | ||||
|  |  | |||
|  | @ -12,6 +12,7 @@ namespace GodotTools | |||
|         public string Solution { get; } | ||||
|         public string[] Targets { 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 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; | ||||
|             Targets = targets; | ||||
|             Configuration = configuration; | ||||
|             Restore = restore; | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  |  | |||
|  | @ -175,7 +175,7 @@ namespace GodotTools | |||
|             { | ||||
|                 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; | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Ignacio Etcheverry
						Ignacio Etcheverry