|
3 | 3 |
|
4 | 4 | using System.CommandLine; |
5 | 5 | using Microsoft.DotNet.Cli.Commands.Restore; |
| 6 | +using Microsoft.DotNet.Cli.Commands.Run; |
6 | 7 | using Microsoft.DotNet.Cli.Extensions; |
7 | 8 |
|
8 | 9 | namespace Microsoft.DotNet.Cli.Commands.Build; |
9 | 10 |
|
10 | | -public class BuildCommand( |
11 | | - IEnumerable<string> msbuildArgs, |
12 | | - bool noRestore, |
13 | | - string msbuildPath = null) : RestoringCommand(msbuildArgs, noRestore, msbuildPath) |
| 11 | +public static class BuildCommand |
14 | 12 | { |
15 | | - public static BuildCommand FromArgs(string[] args, string msbuildPath = null) |
| 13 | + public static CommandBase FromArgs(string[] args, string msbuildPath = null) |
16 | 14 | { |
17 | 15 | var parser = Parser.Instance; |
18 | 16 | var parseResult = parser.ParseFrom("dotnet build", args); |
19 | 17 | return FromParseResult(parseResult, msbuildPath); |
20 | 18 | } |
21 | 19 |
|
22 | | - public static BuildCommand FromParseResult(ParseResult parseResult, string msbuildPath = null) |
| 20 | + public static CommandBase FromParseResult(ParseResult parseResult, string msbuildPath = null) |
23 | 21 | { |
24 | 22 | PerformanceLogEventSource.Log.CreateBuildCommandStart(); |
25 | 23 |
|
26 | | - var msbuildArgs = new List<string>(); |
27 | | - |
28 | 24 | parseResult.ShowHelpOrErrorIfAppropriate(); |
29 | 25 |
|
30 | 26 | CommonOptions.ValidateSelfContainedOptions( |
31 | 27 | parseResult.GetResult(BuildCommandParser.SelfContainedOption) is not null, |
32 | 28 | parseResult.GetResult(BuildCommandParser.NoSelfContainedOption) is not null); |
33 | 29 |
|
34 | | - msbuildArgs.Add($"-consoleloggerparameters:Summary"); |
| 30 | + string[] fileArgument = parseResult.GetValue(BuildCommandParser.SlnOrProjectOrFileArgument) ?? []; |
| 31 | + |
| 32 | + string[] forwardedOptions = parseResult.OptionValuesToBeForwarded(BuildCommandParser.GetCommand()).ToArray(); |
| 33 | + |
| 34 | + bool noRestore = parseResult.GetResult(BuildCommandParser.NoRestoreOption) is not null; |
| 35 | + |
| 36 | + bool noIncremental = parseResult.GetResult(BuildCommandParser.NoIncrementalOption) is not null; |
35 | 37 |
|
36 | | - if (parseResult.GetResult(BuildCommandParser.NoIncrementalOption) is not null) |
| 38 | + CommandBase command; |
| 39 | + |
| 40 | + if (fileArgument is [{ } arg] && VirtualProjectBuildingCommand.IsValidEntryPointPath(arg)) |
37 | 41 | { |
38 | | - msbuildArgs.Add("-target:Rebuild"); |
| 42 | + command = new VirtualProjectBuildingCommand( |
| 43 | + entryPointFileFullPath: Path.GetFullPath(arg), |
| 44 | + msbuildArgs: forwardedOptions, |
| 45 | + verbosity: parseResult.GetValue(CommonOptions.VerbosityOption), |
| 46 | + interactive: parseResult.GetValue(CommonOptions.InteractiveMsBuildForwardOption)) |
| 47 | + { |
| 48 | + NoRestore = noRestore, |
| 49 | + NoCache = true, |
| 50 | + NoIncremental = noIncremental, |
| 51 | + }; |
39 | 52 | } |
40 | | - var arguments = parseResult.GetValue(BuildCommandParser.SlnOrProjectArgument) ?? []; |
| 53 | + else |
| 54 | + { |
| 55 | + var msbuildArgs = new List<string>(); |
41 | 56 |
|
42 | | - msbuildArgs.AddRange(parseResult.OptionValuesToBeForwarded(BuildCommandParser.GetCommand())); |
| 57 | + msbuildArgs.Add($"-consoleloggerparameters:Summary"); |
43 | 58 |
|
44 | | - msbuildArgs.AddRange(arguments); |
| 59 | + if (noIncremental) |
| 60 | + { |
| 61 | + msbuildArgs.Add("-target:Rebuild"); |
| 62 | + } |
45 | 63 |
|
46 | | - bool noRestore = parseResult.GetResult(BuildCommandParser.NoRestoreOption) is not null; |
| 64 | + msbuildArgs.AddRange(forwardedOptions); |
47 | 65 |
|
48 | | - BuildCommand command = new( |
49 | | - msbuildArgs, |
50 | | - noRestore, |
51 | | - msbuildPath); |
| 66 | + msbuildArgs.AddRange(fileArgument); |
| 67 | + |
| 68 | + command = new RestoringCommand( |
| 69 | + msbuildArgs: msbuildArgs, |
| 70 | + noRestore: noRestore, |
| 71 | + msbuildPath: msbuildPath); |
| 72 | + } |
52 | 73 |
|
53 | 74 | PerformanceLogEventSource.Log.CreateBuildCommandStop(); |
54 | 75 |
|
|
0 commit comments