|
1 | | -using System; |
| 1 | +using System.CommandLine; |
2 | 2 |
|
3 | | -string? name = null; |
4 | | -string? outputDirectory = null; |
5 | | -string? nugetPackageName = null; |
6 | | -string? nugetUsername = null; |
| 3 | +args = ["--name"]; |
7 | 4 |
|
8 | | -// TODO: Use System.CommandLine, or at least write a better parser if adding a dependency is problematic. |
9 | | -for (int i = 0; i < args.Length; i++) |
| 5 | +var nameOption = new Option<string>("--name") |
10 | 6 | { |
11 | | - if (args[i] == "--name") |
12 | | - { |
13 | | - name = GetArgumentValue(i, args); |
14 | | - } |
15 | | - else if (args[i] == "--output-directory") |
16 | | - { |
17 | | - outputDirectory = GetArgumentValue(i, args); |
18 | | - } |
19 | | - else if (args[i] == "--nuget-username") |
20 | | - { |
21 | | - nugetUsername = GetArgumentValue(i, args); |
22 | | - } |
23 | | -} |
| 7 | + Description = "The name of the project to create", |
| 8 | + Arity = ArgumentArity.ExactlyOne, |
| 9 | +}; |
24 | 10 |
|
25 | | -var options = new TemplateGenerationOptions(name, outputDirectory, nugetPackageName, nugetUsername); |
| 11 | +var outputDirectoryOption = new Option<string>("--output-directory") |
| 12 | +{ |
| 13 | + Description = "The directory where the project will be created", |
| 14 | + Arity = ArgumentArity.ExactlyOne, |
| 15 | +}; |
26 | 16 |
|
27 | | -var generator = new LibraryTemplateGenerator(); |
28 | | -generator.Generate(options); |
| 17 | +var nugetPackageNameOption = new Option<string>("--nuget-package-name") |
| 18 | +{ |
| 19 | + Description = "The name of the NuGet package for package publishing", |
| 20 | + Arity = ArgumentArity.ExactlyOne, |
| 21 | +}; |
29 | 22 |
|
30 | | -static string GetArgumentValue(int i, string[] args) |
| 23 | +var nugetUsernameOption = new Option<string>("--nuget-username") |
31 | 24 | { |
32 | | - if (args.Length < i + 2 || args[i + 1].StartsWith("--", StringComparison.Ordinal)) |
33 | | - { |
34 | | - throw new InvalidOperationException($"A value for '{args[i]}' was not provided."); |
35 | | - } |
| 25 | + Description = "The NuGet username for package publishing", |
| 26 | + Arity = ArgumentArity.ExactlyOne, |
| 27 | +}; |
| 28 | + |
| 29 | +var rootCommand = new RootCommand("Creates a new .NET project template"); |
| 30 | +rootCommand.Options.Add(nameOption); |
| 31 | +rootCommand.Options.Add(outputDirectoryOption); |
| 32 | +rootCommand.Options.Add(nugetPackageNameOption); |
| 33 | +rootCommand.Options.Add(nugetUsernameOption); |
36 | 34 |
|
37 | | - return args[i + 1]; |
38 | | -} |
| 35 | +var parseResult = rootCommand.Parse(args); |
| 36 | +var name = parseResult.GetValue(nameOption); |
| 37 | +var outputDirectory = parseResult.GetValue(outputDirectoryOption); |
| 38 | +var nugetPackageName = parseResult.GetValue(nugetPackageNameOption); |
| 39 | +var nugetUsername = parseResult.GetValue(nugetUsernameOption); |
| 40 | + |
| 41 | +var options = new TemplateGenerationOptions(name, outputDirectory, nugetPackageName, nugetUsername); |
| 42 | + |
| 43 | +var generator = new LibraryTemplateGenerator(); |
| 44 | +generator.Generate(options); |
0 commit comments