59 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
		
		
			
		
	
	
			59 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
|  | using System.Reflection; | |||
|  | using CommandLine; | |||
|  | using CommandLine.Text; | |||
|  | 
 | |||
|  | namespace UnrealSharpWeaver; | |||
|  | 
 | |||
|  | public class WeaverOptions | |||
|  | { | |||
|  |     [Option('p', "path", Required = true, HelpText = "Search paths for assemblies.")] | |||
|  |     public required IEnumerable<string> AssemblyPaths { get; set; } | |||
|  | 
 | |||
|  |     [Option('o', "output", Required = true, HelpText = "DLL output directory.")] | |||
|  |     public required string OutputDirectory { get; set; } | |||
|  | 
 | |||
|  |     public WeaverOptions(IEnumerable<string> assemblyPaths, string outputDirectory) | |||
|  |     { | |||
|  |         AssemblyPaths = assemblyPaths; | |||
|  |         OutputDirectory = outputDirectory; | |||
|  |     } | |||
|  | 
 | |||
|  |     public WeaverOptions() : this([], string.Empty) | |||
|  |     { | |||
|  |     } | |||
|  | 
 | |||
|  |     private static void PrintHelp(ParserResult<WeaverOptions> result) | |||
|  |     { | |||
|  |         if (result.Tag != ParserResultType.NotParsed) | |||
|  |         { | |||
|  |             return; | |||
|  |         } | |||
|  | 
 | |||
|  |         string name = Path.GetFileNameWithoutExtension(Assembly.GetEntryAssembly()!.Location); | |||
|  |         Console.Error.WriteLine($"Usage: {name}"); | |||
|  |         Console.Error.WriteLine("Commands: "); | |||
|  | 
 | |||
|  |         var helpText = HelpText.AutoBuild(result, h => h, e => e); | |||
|  |         Console.WriteLine(helpText); | |||
|  |     } | |||
|  | 
 | |||
|  |     public static WeaverOptions ParseArguments(IEnumerable<string> args) | |||
|  |     { | |||
|  |         Parser parser = new Parser(settings => | |||
|  |         { | |||
|  |             settings.AllowMultiInstance = true; | |||
|  |             settings.HelpWriter = null; | |||
|  |         }); | |||
|  | 
 | |||
|  |         ParserResult<WeaverOptions> result = parser.ParseArguments<WeaverOptions>(args); | |||
|  | 
 | |||
|  |         if (result.Tag != ParserResultType.NotParsed) | |||
|  |         { | |||
|  |             return result.Value; | |||
|  |         } | |||
|  | 
 | |||
|  |         PrintHelp(result); | |||
|  |         throw new InvalidOperationException("Invalid arguments."); | |||
|  |     } | |||
|  | } |