public InternalCodeGenerationOptions(MetadataResolverOptions metadataResolverOptions, PrimaryCodeGenerationOptions primaryOptions, CustomCodeGenerationOptions customOptions, CodeWriterOptions writerOptions, CodeGenerationOptions allOptions) { this.metadataResolverOptions = metadataResolverOptions; this.primaryOptions = primaryOptions; this.customOptions = customOptions; this.writerOptions = writerOptions; this.allOptions = allOptions; }
static void Main(string[] args) { if (args.Length != 3) { PrintUsage(); return; } try { string destinationNamespace = args[0].Substring(3); string wsdlLocation = args[1].Substring(3); string outputFolder = args[2].Substring(3); ; CodeGenerator codeGen = new CodeGenerator(); CodeGenerationOptions options = new CodeGenerationOptions(); options.GenerateDataContracts = false; options.GenerateProperties = true; options.GenerateCollections = false; options.GenerateSeparateFiles = false; options.OverwriteExistingFiles = true; options.AdjustCasing = false; options.EnableDataBinding = false; options.GenerateOrderIdentifiers = true; options.GenerateTypedLists = true; options.ClrNamespace = destinationNamespace; options.OutputFileName = destinationNamespace + ".cs"; options.OutputLocation = outputFolder; options.ProjectDirectory = outputFolder; options.Language = CodeLanguage.CSharp; options.ConfigurationFile = "App.config"; options.EnableWsdlEndpoint = false; options.FormatSoapActions = false; options.GenerateAsyncCode = false; options.GenerateService = false; options.GenerateSvcFile = true; options.ConcurrencyMode = "Single"; options.InstanceContextMode = "PerCall"; options.MetadataLocation = wsdlLocation; options.MethodImplementation = MethodImplementation.NotImplementedException; options.UseSynchronizationContext = true; codeGen.GenerateCode(options); } catch (Exception e) { System.Console.WriteLine("Exception: " + e.Message); PrintUsage(); } }
// Filters the metadata resolver options. private static MetadataResolverOptions GetMetadataResolverOptions(CodeGenerationOptions options) { MetadataResolverOptions resolverOptions = new MetadataResolverOptions(); resolverOptions.MetadataLocation = options.MetadataLocation; resolverOptions.DataContractFiles = options.DataContractFiles; resolverOptions.Username = options.Username; resolverOptions.Password = options.Password; return resolverOptions; }
/// <summary> /// Parses the code generation options specified by options parameter and returns an instance of /// InternalCodeGenearationOptions type. /// </summary> public static InternalCodeGenerationOptions ParseCodeGenerationOptions(CodeGenerationOptions options) { MetadataResolverOptions resolverOptions = GetMetadataResolverOptions(options); PrimaryCodeGenerationOptions primaryOptions = GetPrimaryCodeGenerationOptions(options); CustomCodeGenerationOptions customOptions = GetCustomCodeGenerationOptions(options); CodeWriterOptions writerOptions = GetCodeWriterOptions(options); InternalCodeGenerationOptions icgo = new InternalCodeGenerationOptions(resolverOptions, primaryOptions, customOptions, writerOptions, options); return icgo; }
// Filters the code writer options. private static CodeWriterOptions GetCodeWriterOptions(CodeGenerationOptions options) { CodeWriterOptions writerOptions = new CodeWriterOptions(); writerOptions.GenerateSeparateFiles = options.GenerateSeparateFiles; writerOptions.ConfigurationFile = options.ConfigurationFile; writerOptions.OutputLocation = options.OutputLocation; writerOptions.ProjectDirectory = options.ProjectDirectory; writerOptions.OutputFileName = options.OutputFileName; writerOptions.OverwriteExistingFiles = options.OverwriteExistingFiles; writerOptions.Language = options.Language; return writerOptions; }
// Filters the primary code generation options. private static PrimaryCodeGenerationOptions GetPrimaryCodeGenerationOptions(CodeGenerationOptions options) { PrimaryCodeGenerationOptions primaryOptions = new PrimaryCodeGenerationOptions(); primaryOptions.EnableDataBinding = options.EnableDataBinding; primaryOptions.GenerateAsyncCode = options.GenerateAsyncCode; primaryOptions.GenerateOrderIdentifiers = options.GenerateOrderIdentifiers; primaryOptions.GenerateProperties = options.GenerateProperties; primaryOptions.GenerateService = options.GenerateService; primaryOptions.GenerateDataContracts = options.GenerateDataContracts; primaryOptions.ClrNamespace = options.ClrNamespace; return primaryOptions; }
public WebServiceCodeGenDialogNew() { // // Required for Windows Form Designer support // InitializeComponent(); // Initialize the .wsdl file cache. wsdlFileCache = new ArrayList(); options= new CodeGenerationOptions(); // // TODO: Add any constructor code after InitializeComponent call // }
/// <summary> /// Executes the code generation workflow. /// </summary> public CodeWriterOutput GenerateCode(CodeGenerationOptions options) { // Step 1 - Parse the code generation options and create the code provider. codeGenerationOptions = CodeGenerationOptionsParser.ParseCodeGenerationOptions(options); CreateCodeProvider(); ExtendedCodeDomTree extendedCodeDomTree; MetadataSet metadataSet = null; if (options.GenerateDataContracts) { // Step 2 - Build the set of XML schemas. XmlSchemas schemas = MetadataFactory.GetXmlSchemas(codeGenerationOptions.MetadataResolverOptions); // Step 3 - Generate the data contract code and get the CodeNamespace. DataContractGenerator dataContractGenerator = new DataContractGenerator(schemas, codeGenerationOptions.PrimaryOptions, codeProvider); CodeNamespace codeNamespace = dataContractGenerator.GenerateCode(); // Step 4 - Wrap the CodeDOM in the custom object model. extendedCodeDomTree = new ExtendedCodeDomTree(codeNamespace, codeGenerationOptions.WriterOptions.Language, null); } else { // Step 2 - Build the service metadata. metadataSet = MetadataFactory.GetMetadataSet(codeGenerationOptions.MetadataResolverOptions); // Step 3 - Generate the client/service code and get the CodeNamespace. ClientServiceGenerator clientServiceGenerator = new ClientServiceGenerator(metadataSet, codeGenerationOptions.PrimaryOptions, codeProvider); CodeNamespace codeNamespace = clientServiceGenerator.GenerateCode(); // Step 4 - Wrap the CodeDOM in the custom object model. extendedCodeDomTree = new ExtendedCodeDomTree(codeNamespace, codeGenerationOptions.WriterOptions.Language, clientServiceGenerator.Configuration); } // Step 5 - Apply the code decorations. CodeDecorators decorators = new CodeDecorators(metadataSet); decorators.ApplyDecorations(extendedCodeDomTree, codeGenerationOptions.CustomOptions); // Step 6 - Restore the original CodeDOM. CodeNamespace cns = extendedCodeDomTree.UnwrapCodeDomTree(); // Step 6 - Finally, write out the code to physical files. return CodeWriter.Write(cns, extendedCodeDomTree.Configuration, codeGenerationOptions.WriterOptions, extendedCodeDomTree.TextFiles, codeProvider); }
// Filters the custom code generation options. private static CustomCodeGenerationOptions GetCustomCodeGenerationOptions(CodeGenerationOptions options) { CustomCodeGenerationOptions customOptions = new CustomCodeGenerationOptions(); customOptions.FormatSoapActions = options.FormatSoapActions; customOptions.AdjustCasing = options.AdjustCasing; customOptions.GenerateCollections = options.GenerateCollections; customOptions.GenerateService = options.GenerateService; customOptions.GenerateTypedLists = options.GenerateTypedLists; customOptions.ClrNamespace = options.ClrNamespace; customOptions.EnableWsdlEndpoint = options.EnableWsdlEndpoint; customOptions.GenerateSvcFile = options.GenerateSvcFile; customOptions.MetadataLocation = options.MetadataLocation; customOptions.ConcurrencyMode = options.ConcurrencyMode; customOptions.InstanceContextMode = options.InstanceContextMode; customOptions.UseSynchronizationContext = options.UseSynchronizationContext; customOptions.MethodImplementation = options.MethodImplementation; return customOptions; }
static void Main(string[] args) { if (args.Length == 0) { PrintUsage(); return; } try { string destinationNamespace = "Namespace"; string wsdlLocation = string.Empty; string outputFolder = "."; bool isServer = false; bool separateFiles = false; foreach (string arg in args) { if (arg.Substring(0, 2) == "/n") { destinationNamespace = arg.Substring(3); } else if (arg.Substring(0, 2) == "/i") { wsdlLocation = arg.Substring(3); ; } else if (arg.Substring(0, 2) == "/o") { outputFolder = arg.Substring(3); ; } else if (arg == "/server") { isServer = true; } else if (arg == "/separateFiles") { separateFiles = true; } else { PrintUsage(); return; } } if (wsdlLocation == string.Empty) { System.Console.WriteLine("Please specifi a WSDL file."); PrintUsage(); return; } CodeGenerator codeGen = new CodeGenerator(); CodeGenerationOptions options = new CodeGenerationOptions(); options.GenerateDataContracts = false; options.GenerateProperties = true; options.GenerateCollections = false; options.GenerateSeparateFiles = separateFiles; options.OverwriteExistingFiles = true; options.AdjustCasing = false; options.EnableDataBinding = false; options.GenerateOrderIdentifiers = true; options.GenerateTypedLists = false; options.ClrNamespace = destinationNamespace; options.OutputFileName = destinationNamespace + ".cs"; options.OutputLocation = outputFolder; options.ProjectDirectory = outputFolder; // only support C# for now options.Language = CodeLanguage.CSharp; options.ConfigurationFile = "App.config"; options.EnableWsdlEndpoint = false; options.FormatSoapActions = false; options.GenerateAsyncCode = false; options.GenerateService = isServer; options.GenerateSvcFile = true; options.ConcurrencyMode = "Single"; options.InstanceContextMode = "PerCall"; string wsdlFullPath = Path.GetFullPath(wsdlLocation); System.Console.WriteLine("Wsdl Full Path: " + wsdlFullPath); options.MetadataLocation = wsdlFullPath; options.MethodImplementation = MethodImplementation.NotImplementedException; options.UseSynchronizationContext = true; codeGen.GenerateCode(options); } catch (Exception e) { System.Console.WriteLine("Exception: " + e.Message); PrintUsage(); } }
private bool ProcessXsdCodeGenerationRequest() { try { VisualStudioProject project = currentProject; IEnumerable<VisualStudioSelectedItem> selectedItems = vsInstance.SelectedItems; if (selectedItems.Count() == 0) { MessageBox.Show( "Cannot generate code for items outside of a project.", "Web Services Contract-First code generation", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return true; } foreach (VisualStudioSelectedItem selectedItem in selectedItems) { string extension = Path.GetExtension(selectedItem.FileName).ToLower(); if (extension == ".xsd" || extension == ".wsdl") continue; MessageBox.Show( "Data Contracts can only be generated for .xsd or .wsdl files.", "Web Services Contract-First code generation", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return true; } string[] dataContractFiles = selectedItems.Select(i => i.FileName).ToArray(); XsdCodeGenDialog dialogForm = new XsdCodeGenDialog(dataContractFiles); if (!project.IsWebProject) { dialogForm.Namespace = project.AssemblyNamespace; } dialogForm.TargetFileName = project.GetDefaultDestinationFilename(dataContractFiles[0]); if (dialogForm.ShowDialog() == DialogResult.Cancel) { return false; } CodeGenerationOptions options = new CodeGenerationOptions(); options.GenerateDataContracts = true; options.DataContractFiles = dataContractFiles; options.GenerateProperties = dialogForm.PublicProperties; options.GenerateCollections = dialogForm.Collections; options.GenerateSeparateFiles = dialogForm.GenerateMultipleFiles; options.OverwriteExistingFiles = dialogForm.OverwriteFiles; options.AdjustCasing = dialogForm.AdjustCasing; options.EnableDataBinding = dialogForm.DataBinding; options.GenerateOrderIdentifiers = dialogForm.OrderIdentifiers; options.GenerateTypedLists = dialogForm.GenericLists; options.ClrNamespace = dialogForm.Namespace; options.OutputFileName = dialogForm.TargetFileName; options.OutputLocation = GetOutputDirectory(); options.ProjectDirectory = project.ProjectDirectory; options.Language = project.ProjectLanguage; CodeGenerator codeGenerator = new CodeGenerator(); CodeWriterOutput output = codeGenerator.GenerateCode(options); AddGeneratedFilesToProject(output); // Finally add the project references. AddAssemblyReferences(); MessageBox.Show("Code generation successfully completed.", "WSCF.Blue", MessageBoxButtons.OK, MessageBoxIcon.Information); } catch (Exception ex) { AppLog.LogMessage(ex.ToString()); MessageBox.Show(ex.ToString(), "CodeGeneration", MessageBoxButtons.OK, MessageBoxIcon.Error); // TODO: Log the exception. //System.Diagnostics.Debugger.Break(); } return true; } // End of ProcessXsdCodeGenerationRequestFunction.
private bool ProcessCodeGenerationRequestCore(string wsdlFile) { try { VisualStudioProject project = this.visualStudio.SelectedProject; VisualStudioSelectedItem selectedItem = this.visualStudio.SelectedItem; // Fist display the UI and get the options. WebServiceCodeGenDialogNew dialog = new WebServiceCodeGenDialogNew(); if (!project.IsWebProject) { dialog.DestinationNamespace = project.AssemblyNamespace; } dialog.DestinationFilename = project.GetDefaultDestinationFilename(wsdlFile); if (!selectedItem.IsProject) { //dialog.WsdlLocation = selectedItem.FileName; dialog.WsdlLocation = wsdlFile; } if (dialog.ShowDialog() == DialogResult.Cancel) { return false; } wsdlFile = dialog.WsdlPath; // Try the Rpc2DocumentLiteral translation first. // wsdlFile = TryTranslateRpc2DocumentLiteral(wsdlFile); CodeGenerationOptions options = new CodeGenerationOptions(); options.MetadataLocation = wsdlFile; options.ClrNamespace = dialog.DestinationNamespace; options.OutputFileName = dialog.DestinationFilename; options.OutputLocation = GetOutputDirectory(); options.ProjectDirectory = project.ProjectDirectory; options.Language = project.ProjectLanguage; // TODO: Infer the config file type according to the project type // and merge the generated config file with the existing one. options.ConfigurationFile = "output.config"; options.GenerateService = dialog.ServiceCode; options.GenerateProperties = dialog.GenerateProperties; options.FormatSoapActions = dialog.FormatSoapActions; options.GenerateCollections = dialog.Collections; options.GenerateTypedLists = dialog.GenericList; options.EnableDataBinding = dialog.EnableDataBinding; options.GenerateOrderIdentifiers = dialog.OrderIdentifiers; options.GenerateAsyncCode = dialog.AsyncMethods; options.GenerateSeparateFiles = dialog.GenerateMultipleFiles; options.AdjustCasing = dialog.ChangeCasing; options.OverwriteExistingFiles = dialog.Overwrite; options.EnableWsdlEndpoint = dialog.EnabledWsdlEndpoint; options.GenerateSvcFile = dialog.GenerateSvcFile; options.ConcurrencyMode = dialog.ConcurrencyMode; options.InstanceContextMode = dialog.InstanceContextMode; options.UseSynchronizationContext = dialog.UseSynchronizationContext; options.MethodImplementation = dialog.MethodImplementation; outputWindowWriter.Clear(); CodeGenerator codeGenerator = new CodeGenerator(); CodeWriterOutput output = codeGenerator.GenerateCode(options); AddGeneratedFilesToProject(output); // Finally add the project references. AddAssemblyReferences(); // add custom assembly references if necessary if(options.EnableWsdlEndpoint) { AddMetadataExtensionsReference(); } MessageBox.Show("Code generation successfully completed.", "WSCF.Blue", MessageBoxButtons.OK, MessageBoxIcon.Information); } catch (ClientServiceGenerationException ex) { AppLog.LogMessage(ex.ToString()); const string separator = "---------------------------------------------------------------------------------"; foreach (string message in ex.Messages) { outputWindowWriter.WriteMessage(message + "\r\n" + separator + "\r\n"); } MessageBox.Show("Errors were found while importing the contract. Please check the 'WSCF.blue' pane in the Output window for more information.", "CodeGeneration", MessageBoxButtons.OK, MessageBoxIcon.Error); } catch (Exception ex) { AppLog.LogMessage(ex.ToString()); MessageBox.Show(ex.ToString(), "CodeGeneration", MessageBoxButtons.OK, MessageBoxIcon.Error); // TODO: Log the exception. //System.Diagnostics.Debugger.Break(); } return true; }