using System; using System.IO; using System.Reflection; using Xsd2Code.Library; using Xsd2Code.Library.Helpers; using Xsd2Code.Properties; namespace Xsd2Code { /// /// Entry point class /// /// /// Revision history: /// /// Modified 2009-02-20 by Ruslan Urban /// Changed parsing of command-line arguments /// /// Modified 2009-03-12 By Ruslan Urban /// Enabled GenerateDataContracts option /// /// internal class EntryPoint { [STAThread] static private void Main(string[] args) { // Display hekp when no parameters have been specified if (args.Length < 1) { DisplayApplicationInfo(); DisplayHelp(); return; } DisplayApplicationInfo(); // Create new instance of GeneratorParams, which contains all generation parameters var xsdFilePath = args[0]; var generatorParams = new GeneratorParams {InputFilePath = xsdFilePath}; // When only the XSD file name is specified, // try to locate generated Designer file and load output parameters from the file header if (args.Length == 1) { string outputFilePath; var tempGeneratorParams = GeneratorParams.LoadFromFile(xsdFilePath, out outputFilePath); if (tempGeneratorParams != null) { generatorParams = tempGeneratorParams; generatorParams.InputFilePath = xsdFilePath; if (!string.IsNullOrEmpty(outputFilePath)) generatorParams.OutputFilePath = outputFilePath; } } // Second command-line parameter that is not a switch is the generated code namespace if (args.Length > 1 && !args[1].StartsWith("/")) { generatorParams.NameSpace = args[1]; // Third command-line parameter that is not a switch is the generated code namespace if (args.Length > 2 && !args[2].StartsWith("/")) generatorParams.OutputFilePath = args[2]; } // Process command-line parameter switches for (int i = 1; i < args.Length; i++) { switch (args[i].Trim().ToLower()) { case "/n": case "/ns": case "/namespace": if (i < args.Length - 1) { generatorParams.NameSpace = args[i + 1]; i++; } break; case "/o": case "/out": case "/output": if (i < args.Length - 1) { generatorParams.OutputFilePath = args[i + 1]; i++; } break; case "/l": case "/lang": case "/language": if (i < args.Length - 1) { generatorParams.Language = Utility.GetGenerationLanguage(args[i + 1]); i++; } break; case "/c": case "/col": case "/collection": case "/collectionbase": if (i < args.Length - 1) { generatorParams.CollectionObjectType = Utility.ToEnum(args[i + 1]); i++; } break; //Duplicate with /pl case "/cb": case "/codebase": if (i < args.Length - 1) { Console.WriteLine("Warning: /cb /codebase is obsolete please use /pl[atform] - Generated code target platform (Net20|Net30|Net35|Silverlight20). Default: Net20"); generatorParams.TargetFramework = Utility.ToEnum(args[i + 1]); i++; } break; case "/cu": case "/customusings": if (i < args.Length - 1) { //generatorParams.CustomUsingsString = args[i + 1]; foreach(string item in args[i+1].Split(',')) { generatorParams.CustomUsings.Add(new NamespaceParam { NameSpace = item }); } i++; } break; case "/lf": case "/lfm": if (i < args.Length - 1) { generatorParams.LoadFromFileMethodName = args[i + 1]; i++; } break; case "/sm": if (i < args.Length - 1) { generatorParams.SerializeMethodName = args[i + 1]; i++; } break; case "/sf": case "/sfm": if (i < args.Length - 1) { generatorParams.SaveToFileMethodName = args[i + 1]; i++; } break; case "/p": case "/pl": case "/tp": case "/tpl": case "/platform": if (i < args.Length - 1) { generatorParams.TargetFramework = Utility.GetTargetPlatform(args[i + 1]); i++; } break; case "/u": case "/us": case "/using": if (i < args.Length - 1) { var nsList = args[i + 1].Split(','); foreach (var ns in nsList) generatorParams.CustomUsings.Add(new NamespaceParam {NameSpace = ns}); i++; } break; case "/dbg": case "/dbg+": case "/debug": case "/debug+": generatorParams.DisableDebug = false; break; case "/dbg-": case "/debug-": generatorParams.DisableDebug = true; break; case "/db": case "/db+": generatorParams.EnableDataBinding = true; break; case "/db-": generatorParams.EnableDataBinding = false; break; case "/dc": case "/dc+": generatorParams.GenerateDataContracts = true; break; case "/dc-": generatorParams.GenerateDataContracts = false; break; case "/ap": case "/ap+": generatorParams.AutomaticProperties = true; break; case "/ap-": generatorParams.AutomaticProperties = false; break; case "/if": case "/if+": generatorParams.EnableInitializeFields = true; break; case "/if-": generatorParams.EnableInitializeFields = false; break; case "/eit": case "/eit+": generatorParams.ExcludeIncludedTypes = true; break; case "/eit-": generatorParams.ExcludeIncludedTypes = false; break; case "/gbc": case "/gbc+": generatorParams.UseGenericBaseClass = true; break; case "/gbc-": generatorParams.UseGenericBaseClass = false; break; case "/sc": case "/sc+": generatorParams.EnableSummaryComment = true; break; case "/sc-": case "/sum-": generatorParams.EnableSummaryComment = false; break; case "/xa": case "/xa+": generatorParams.GenerateXMLAttributes = true; break; case "/xa-": generatorParams.GenerateXMLAttributes = false; break; case "/cl": case "/cl+": generatorParams.GenerateCloneMethod = true; break; case "/cl-": generatorParams.GenerateCloneMethod = false; break; case "/hp": case "/hp+": generatorParams.HidePrivateFieldInIde = true; break; case "/hp-": generatorParams.HidePrivateFieldInIde = false; break; case "/ll": case "/ll+": generatorParams.EnableLasyLoading = true; break; case "/ll-": generatorParams.EnableLasyLoading = false; break; case "/s": case "/s+": case "/is": case "/is+": generatorParams.IncludeSerializeMethod = true; break; case "/s-": case "/is-": generatorParams.IncludeSerializeMethod = false; break; case "/lic": case "/license": DisplayLicense(); return; case "/?": case "/h": case "/hlp": case "/help": DisplayHelp(); return; } } // Auto-generate missing output file path if (string.IsNullOrEmpty(generatorParams.OutputFilePath)) { generatorParams.OutputFilePath = Utility.GetOutputFilePath(generatorParams.InputFilePath, generatorParams.Language); } // Auto-generate missing generated code namespace if (string.IsNullOrEmpty(generatorParams.NameSpace)) generatorParams.NameSpace = Path.GetFileNameWithoutExtension(generatorParams.InputFilePath); // Create an instance of Generator var generator = new GeneratorFacade(generatorParams); // Generate code var result = generator.Generate(); if (!result.Success) { // Display the error and wait for user confirmation Console.WriteLine(); Console.WriteLine(result.Messages.ToString()); Console.WriteLine(); Console.WriteLine("Press ENTER to continue..."); Console.ReadLine(); return; } Console.WriteLine("Generated code has been saved into the file {0}.", result.Entity); Console.WriteLine(); Console.WriteLine("Finished"); Console.WriteLine(); } static private void DisplayApplicationInfo() { var currentAssembly = Assembly.GetExecutingAssembly(); var currentAssemblyName = currentAssembly.GetName(); Console.WriteLine(); Console.WriteLine("Xsd2Code Version {0}", currentAssemblyName.Version); Console.WriteLine("Code generation utility from XML schema files."); Console.WriteLine(); } /// /// Display contents of the help file ~/Resources/Help.txt /// static private void DisplayHelp() { Console.WriteLine(); Console.WriteLine(Resources.Help); Console.WriteLine(); } /// /// Display contents of the help file ~/Resources/Help.txt /// static private void DisplayLicense() { Console.WriteLine(); Console.WriteLine(Resources.License); Console.WriteLine(); } } }