[3.2] 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
f108037cbf
commit
abc453f9b6
|
@ -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, new[] {"Restore", "Build"}, config);
|
||||
var buildInfo = new BuildInfo(GodotSharpDirs.ProjectSlnPath, new[] {"Build"}, config, restore: true);
|
||||
|
||||
bool escapeNeedsDoubleBackslash = buildTool == BuildTool.MsBuildMono || buildTool == BuildTool.DotnetCli;
|
||||
|
||||
|
|
Loading…
Reference in New Issue