public static string GenTableAdapters(System.IO.Stream xmlStream, TypedDataSetGenerator.GenerateOption genOption, string customToolNamespace) { try { EnsureCustomDbProviders(); var designSource = Activator.CreateInstance(assm.GetType("System.Data.Design.DesignDataSource")); designSource.Invoke("ReadXmlSchema", xmlStream, string.Empty ); var dataSourceGeneratorType = assm.GetType("System.Data.Design.TypedDataSourceCodeGenerator"); //get the specific constructor var constructor = dataSourceGeneratorType.GetConstructor(BindingFlags.Instance | BindingFlags.NonPublic, null, CallingConventions.Any, new Type[0], new ParameterModifier[0]); var dataSourceGenerator = constructor.Invoke(null); var codeProvider = new Microsoft.CSharp.CSharpCodeProvider(); dataSourceGenerator.SetInternalPropertyValue("CodeProvider", codeProvider); var codeCompileUnit = new CodeCompileUnit(); var codeNamespace = new CodeNamespace(customToolNamespace); codeCompileUnit.Namespaces.Add(codeNamespace); dataSourceGenerator.InvokeInternal("GenerateDataSource", designSource, codeCompileUnit, codeNamespace, customToolNamespace, genOption ); var writer = new StringWriter(); var adapterNameSpace = codeCompileUnit.Namespaces[1]; codeProvider.GenerateCodeFromNamespace(adapterNameSpace, writer, new CodeGeneratorOptions()); //codeProvider.GenerateCodeFromCompileUnit(codeCompileUnit, writer, options); var res = writer.ToString(); return (string)res; } catch (Exception e) { return e.ToString(); } }
public static void service_info_methods() { uri = new Uri("http://localhost:60377/Service1.asmx?wsdl"); WebRequest webRequest = WebRequest.Create(uri); System.IO.Stream requestStream = webRequest.GetResponse().GetResponseStream(); // Get a WSDL file describing a service ServiceDescription sd = ServiceDescription.Read(requestStream); string sdName = sd.Services[0].Name; // Initialize a service description servImport ServiceDescriptionImporter servImport = new ServiceDescriptionImporter(); servImport.AddServiceDescription(sd, String.Empty, String.Empty); servImport.ProtocolName = "Soap"; servImport.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties; CodeNamespace nameSpace = new CodeNamespace(); CodeCompileUnit codeCompileUnit = new CodeCompileUnit(); codeCompileUnit.Namespaces.Add(nameSpace); // Set Warnings ServiceDescriptionImportWarnings warnings = servImport.Import(nameSpace, codeCompileUnit); if (warnings == 0) { StringWriter stringWriter = new StringWriter(System.Globalization.CultureInfo.CurrentCulture); Microsoft.CSharp.CSharpCodeProvider prov = new Microsoft.CSharp.CSharpCodeProvider(); prov.GenerateCodeFromNamespace(nameSpace, stringWriter, new CodeGeneratorOptions()); string[] assemblyReferences = new string[2] { "System.Web.Services.dll", "System.Xml.dll" }; CompilerParameters param = new CompilerParameters(assemblyReferences); param.GenerateExecutable = false; param.GenerateInMemory = true; param.TreatWarningsAsErrors = false; param.WarningLevel = 4; CompilerResults results = new CompilerResults(new TempFileCollection()); results = prov.CompileAssemblyFromDom(param, codeCompileUnit); Assembly assembly = results.CompiledAssembly; service = assembly.GetType(sdName); methodInfo = service.GetMethods(); int c = 0; foreach (MethodInfo t in methodInfo) { if (t.Name == "Discover") break; c++; } listurl = new string[c]; c = 0; foreach (MethodInfo t in methodInfo) { if (t.Name == "Discover") break; listurl[c++] = t.Name; } } }
/// <summary> /// Generates the file. /// </summary> /// <param name="outputFile">The output file.</param> /// <exception cref="System.ArgumentNullException">Code not generated. Namespace is empty.</exception> public void GenerateFile(string outputFile) { if (ns == null) { throw new ArgumentNullException("Code not generated. Namespace is empty."); } string generatedCode = string.Empty; try { using (CodeDomProvider provider = new Microsoft.CSharp.CSharpCodeProvider()) { using (MemoryMappedFile mappedFile = MemoryMappedFile.CreateNew(memoryMappedFileName, nemoryMappedFileCapacity)) { MemoryMappedViewStream stream = mappedFile.CreateViewStream(); using (StreamWriter sw = new StreamWriter(stream)) { provider.GenerateCodeFromNamespace(ns, sw, new CodeGeneratorOptions()); } stream = mappedFile.CreateViewStream(); TextReader tr = new StreamReader(stream); generatedCode = tr.ReadToEnd(); generatedCode = generatedCode.Trim(new char()); tr.Close(); } } } catch (Exception ex) { generatedCode = "#error " + ex.Message; throw; } finally { string directory = Path.GetDirectoryName(outputFile); if (!Directory.Exists(directory)) { Directory.CreateDirectory(directory); } using (StreamWriter outfile = new StreamWriter(outputFile)) { outfile.Write(generatedCode); } } }
protected string ComplieNameSpaceToString(CodeNamespace nameSpace) { using (Microsoft.CSharp.CSharpCodeProvider cprovider = new Microsoft.CSharp.CSharpCodeProvider()) { StringBuilder fileContent = new StringBuilder(); var option = new System.CodeDom.Compiler.CodeGeneratorOptions(); option.BlankLinesBetweenMembers = false; using (StringWriter sw = new StringWriter(fileContent)) { cprovider.GenerateCodeFromNamespace(nameSpace, sw, option); } return(fileContent.ToString()); } }
public static void Main(string[] args) { string schemaFilename = @"..\doc\COLLADASchema_141.xsd"; string targetFilename = @"..\lib\Collada\Collada\Autogenerated\Collada.cs"; string targetNamespace = @"Collada"; // Generate CodeDOM classes CodeNamespace code; using(FileStream schemaStream = new FileStream(schemaFilename, FileMode.Open)) { code = GenerateCode(schemaStream, targetNamespace); } // Write classes to file CodeDomProvider provider = new Microsoft.CSharp.CSharpCodeProvider(); using(StreamWriter writer = new StreamWriter(targetFilename, false)) { provider.GenerateCodeFromNamespace(code, writer, new CodeGeneratorOptions()); } }
public Assembly GetServiceInspector(Stream stream) { var wsdlRequestStream = stream; var sd = ServiceDescription.Read(wsdlRequestStream); var sdImport = new ServiceDescriptionImporter(); sdImport.AddServiceDescription(sd, String.Empty, String.Empty); sdImport.ProtocolName = "Soap"; sdImport.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties; var codeNameSpace = new CodeNamespace(); var codeCompileUnit = new CodeCompileUnit(); codeCompileUnit.Namespaces.Add(codeNameSpace); var warnings = sdImport.Import(codeNameSpace, codeCompileUnit); if (warnings == 0) { var stringWriter = new StringWriter(System.Globalization.CultureInfo.CurrentCulture); var prov = new Microsoft.CSharp.CSharpCodeProvider(); prov.GenerateCodeFromNamespace(codeNameSpace, stringWriter, new CodeGeneratorOptions()); //Compile the assembly var assemblyReferences = new string[2] { "System.Web.Services.dll", "System.Xml.dll" }; var param = new CompilerParameters(assemblyReferences) { GenerateExecutable = false, GenerateInMemory = true, TreatWarningsAsErrors = false, WarningLevel = 4 }; var results = new CompilerResults(new TempFileCollection()); results = prov.CompileAssemblyFromDom(param, codeCompileUnit); var assembly = results.CompiledAssembly; return(assembly); } else { return(null); } }
private bool CompileAssembly(out Assembly outputAssembly, out string outpurFilePath) { CodeNamespace nameSpace = new CodeNamespace(); CodeCompileUnit codeCompileUnit = new CodeCompileUnit(); codeCompileUnit.Namespaces.Add(nameSpace); // Set Warnings ServiceDescriptionImportWarnings warnings = ServiceImporter.Import(nameSpace, codeCompileUnit); if (warnings == 0 || warnings.ToString().EndsWith("Ignored")) { StringWriter stringWriter = new StringWriter(System.Globalization.CultureInfo.CurrentCulture); Microsoft.CSharp.CSharpCodeProvider prov = new Microsoft.CSharp.CSharpCodeProvider(); prov.GenerateCodeFromNamespace(nameSpace, stringWriter, new CodeGeneratorOptions()); // Compile the assembly with the appropriate references string[] assemblyReferences = new string[5] { "System.Web.Services.dll", "System.Xml.dll", "System.dll", "System.Web.dll", "System.Data.dll" }; CompilerParameters param = new CompilerParameters(assemblyReferences); param.GenerateExecutable = false; param.GenerateInMemory = false; param.TreatWarningsAsErrors = false; param.WarningLevel = 4; CompilerResults results = new CompilerResults(new TempFileCollection()); results = prov.CompileAssemblyFromDom(param, codeCompileUnit); outpurFilePath = results.PathToAssembly; outputAssembly = results.CompiledAssembly; return(true); } else { outpurFilePath = warnings.ToString(); outputAssembly = null; return(false); } }
private string GenerateDataSet(DataSet pDs, string pNamespace, string pTableName, string pSchemaName, string pDatabaseName) { Microsoft.CSharp.CSharpCodeProvider cp = new Microsoft.CSharp.CSharpCodeProvider(); CodeNamespace cns = new CodeNamespace(pNamespace); //get autoincrement column if available string sAutoIncColName = IdentityColumnName; //set autoincrement seed and step to -1 if (!String.IsNullOrEmpty(sAutoIncColName) && checkBoxPkIsIdentity.Checked) { pDs.Tables[0].Columns[sAutoIncColName].AutoIncrement = true; pDs.Tables[0].Columns[sAutoIncColName].AutoIncrementStep = -1; pDs.Tables[0].Columns[sAutoIncColName].AutoIncrementSeed = -1; } using (StringWriter schemaWr = new StringWriter()) { pDs.WriteXmlSchema(schemaWr); System.Data.Design.TypedDataSetGenerator.Generate(schemaWr.ToString(), new CodeCompileUnit(), cns, cp, System.Data.Design.TypedDataSetGenerator.GenerateOption.LinqOverTypedDatasets); } string name = cns.Types[0].Name; //Change DataSet type name name = pDs.Tables[0].TableName + textBoxDataSetSuffix.Text; cns.Types[0].Name = name; CodeMemberMethod oClone = (CodeMemberMethod)FindMember("Clone", cns.Types[0].Members); CodeCastExpression exp = new CodeCastExpression(name, new CodeMethodInvokeExpression( new CodeMethodReferenceExpression( new CodeBaseReferenceExpression(), "Clone"), new CodePrimitiveExpression[] { })); CodeVariableDeclarationStatement cvds = new CodeVariableDeclarationStatement(name, "cln", exp); oClone.Statements[0] = cvds; foreach (CodeAttributeDeclaration cad in cns.Types[0].CustomAttributes) { if (cad.Name == "System.ComponentModel.ToolboxItem") { ((CodePrimitiveExpression)cad.Arguments[0].Value).Value = false; break; } } // Find DataTable. // Add Attributes. CodeTypeDeclaration oDataTable = (CodeTypeDeclaration)FindMember(pTableName + "DataTable", cns.Types[0].Members); AddTableSchemaMember(oDataTable, pSchemaName); AddDatabaseMember(oDataTable, pDatabaseName); AddFullTableNameMember(oDataTable, TableFullName); AddFullTableNameAttribute(oDataTable, TableFullName); // Add HasAutoIcrementColumn and AutoIncrementColumnName properties... AddAutoIncrementColNameMember(oDataTable, sAutoIncColName); if (sAutoIncColName == string.Empty) { AddHasAutoIncrementMember(oDataTable, false); } else { AddHasAutoIncrementMember(oDataTable, true); } AddAutoIncrementColumnNameAttribute(oDataTable, sAutoIncColName); //Change dataset name in Initvars method. CodeMemberMethod oInitClass = (CodeMemberMethod)FindMember("InitClass", cns.Types[0].Members); ((CodeAssignStatement)oInitClass.Statements[0]).Right = new CodePrimitiveExpression(name); //Change dataset type in GetTypedDataSetSchema method. CodeMemberMethod oGetTypedDataSetSchema = (CodeMemberMethod)FindMember("GetTypedDataSetSchema", cns.Types[0].Members); CodeObjectCreateExpression exp2 = new CodeObjectCreateExpression(name, new CodePrimitiveExpression[] { }); CodeVariableDeclarationStatement cvds2 = new CodeVariableDeclarationStatement(name, "ds", exp2); oGetTypedDataSetSchema.Statements[0] = cvds2; //Change type in GetTypedTableSchema of table. oGetTypedDataSetSchema = (CodeMemberMethod)FindMember("GetTypedTableSchema", ((CodeTypeDeclaration)FindMember(pDs.Tables[0].TableName + "DataTable", cns.Types[0].Members)).Members); exp2 = new CodeObjectCreateExpression(name, new CodePrimitiveExpression[] { }); cvds2 = new CodeVariableDeclarationStatement(name, "ds", exp2); oGetTypedDataSetSchema.Statements[2] = cvds2; StringBuilder sb = new StringBuilder(); TextWriter tw = new StringWriter(sb); CodeGeneratorOptions cgo = new CodeGeneratorOptions(); cp.GenerateCodeFromNamespace(cns, tw, cgo); return(sb.ToString()); }
/// <summary> /// Generates the code. /// </summary> /// <param name="inputFileName">Name of the input file.</param> /// <param name="inputFileContent">Content of the input file.</param> /// <param name="renderMode">The render mode.</param> /// <param name="desiredNamespace">The desired namespace.</param> /// <param name="header">The header.</param> /// <returns></returns> public string GenerateCode(string inputFileName, string inputFileContent, RenderMode renderMode, string desiredNamespace, string header) { inputFileContent = RemoveClass(inputFileContent); var parserContext = new ParserContext { BaseUri = new Uri(inputFileName, UriKind.Absolute) }; object source = null; try { using (Stream stream = new MemoryStream(Encoding.UTF8.GetBytes(inputFileContent))) { source = XamlReader.Load(stream, parserContext); } } catch (Exception ex) { Console.WriteLine(ex); throw; } if (source == null) { return("Source is empty. XAML file is not valid."); } Console.WriteLine(); Console.WriteLine("Generating " + inputFileName); ElementGeneratorType.NameUniqueId = 0; string className = Path.GetFileNameWithoutExtension(inputFileName); CodeNamespace ns = new CodeNamespace(desiredNamespace); ns.Imports.Add(new CodeNamespaceImport("System")); ns.Imports.Add(new CodeNamespaceImport("System.CodeDom.Compiler")); ns.Imports.Add(new CodeNamespaceImport("System.Collections.ObjectModel")); ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface")); ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface.Charts")); ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface.Data")); ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface.Controls")); ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface.Controls.Primitives")); ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface.Input")); ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface.Interactions.Core")); ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface.Interactivity")); ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface.Media")); ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface.Media.Effects")); ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface.Media.Animation")); ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface.Media.Imaging")); ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface.Shapes")); ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface.Renderers")); ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface.Themes")); CodeTypeDeclaration classType = new CodeTypeDeclaration(className); GeneratedCodeAttribute generatedCodeAttribute = new GeneratedCodeAttribute("Empty Keys UI Generator", Assembly.GetExecutingAssembly().GetName().Version.ToString()); CodeAttributeDeclaration codeAttrDecl = new CodeAttributeDeclaration(generatedCodeAttribute.GetType().Name, new CodeAttributeArgument( new CodePrimitiveExpression(generatedCodeAttribute.Tool)), new CodeAttributeArgument( new CodePrimitiveExpression(generatedCodeAttribute.Version))); classType.CustomAttributes.Add(codeAttrDecl); if (string.IsNullOrEmpty(header)) { ns.Comments.Add(new CodeCommentStatement("-----------------------------------------------------------", false)); ns.Comments.Add(new CodeCommentStatement(" ", false)); ns.Comments.Add(new CodeCommentStatement(" This file was generated, please do not modify.", false)); ns.Comments.Add(new CodeCommentStatement(" ", false)); ns.Comments.Add(new CodeCommentStatement("-----------------------------------------------------------", false)); } else { ns.Comments.Add(new CodeCommentStatement(header, false)); } CodeMemberMethod initMethod = null; if (source is UIRoot) { initMethod = CreateUIRootClass(ns, classType, renderMode); generator.ProcessGenerators(source, classType, initMethod, true); } else if (source is UserControl) { initMethod = CreateUserControlClass(ns, classType); generator.ProcessGenerators(source, classType, initMethod, true); } else if (source is ResourceDictionary) { initMethod = CreateDictionaryClass(ns, classType); ResourceDictionary dictionary = source as ResourceDictionary; if (dictionary != null) { ResourceDictionaryGenerator resourcesGenerator = new ResourceDictionaryGenerator(); resourcesGenerator.Generate(dictionary, classType, initMethod, new CodeThisReferenceExpression()); } } else { string errorText = "#error This type is not supported - " + source.GetType(); Console.WriteLine(errorText); return(errorText); } ImageAssets.Instance.GenerateManagerCode(initMethod); ImageAssets.Instance.ClearAssets(); EffectAssets.Instance.GenerateManagerCode(initMethod); EffectAssets.Instance.ClearAssets(); FontGenerator.Instance.GenerateManagerCode(initMethod); if (BindingGenerator.Instance.IsEnabled) { BindingGenerator.Instance.GenerateRegistrationCode(initMethod); } string resultCode = string.Empty; using (CodeDomProvider provider = new Microsoft.CSharp.CSharpCodeProvider()) { string mappedFileName = memoryMappedFileName + className; using (MemoryMappedFile mappedFile = MemoryMappedFile.CreateNew(mappedFileName, nemoryMappedFileCapacity)) { MemoryMappedViewStream stream = mappedFile.CreateViewStream(); using (StreamWriter sw = new StreamWriter(stream)) { provider.GenerateCodeFromNamespace(ns, sw, new CodeGeneratorOptions()); } stream = mappedFile.CreateViewStream(); TextReader tr = new StreamReader(stream); resultCode = tr.ReadToEnd(); resultCode = resultCode.Trim(new char()); tr.Close(); } } return(resultCode); }
/// <summary> /// Generates the code. /// </summary> /// <param name="inputFileName">Name of the input file.</param> /// <param name="inputFileContent">Content of the input file.</param> /// <param name="renderMode">The render mode.</param> /// <param name="desiredNamespace">The desired namespace.</param> /// <returns></returns> public string GenerateCode(string inputFileName, string inputFileContent, RenderMode renderMode, string desiredNamespace) { inputFileContent = RemoveClass(inputFileContent); var parserContext = new ParserContext { BaseUri = new Uri(inputFileName, UriKind.Absolute) }; object source = null; try { //source = XamlReader.Parse(inputFileContent); //, parserContext); using (Stream stream = new MemoryStream(Encoding.UTF8.GetBytes(inputFileContent))) { source = XamlReader.Load(stream, parserContext); } } catch (Exception ex) { Console.WriteLine(ex); throw; } if (source == null) { return "Source is empty. XAML file is not valid."; } Console.WriteLine(); Console.WriteLine("Generating " + inputFileName); string resultCode = string.Empty; string className = Path.GetFileNameWithoutExtension(inputFileName); CodeNamespace ns = new CodeNamespace(desiredNamespace); ns.Imports.Add(new CodeNamespaceImport("System")); ns.Imports.Add(new CodeNamespaceImport("System.CodeDom.Compiler")); ns.Imports.Add(new CodeNamespaceImport("System.Collections.ObjectModel")); ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface")); ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface.Data")); ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface.Controls")); ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface.Controls.Primitives")); ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface.Input")); ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface.Media")); ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface.Media.Animation")); ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface.Media.Imaging")); ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface.Shapes")); ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface.Renderers")); ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface.Themes")); /* switch (renderMode) { case RenderMode.SunBurn: ns.Imports.Add(new CodeNamespaceImport("SynapseGaming.SunBurn.Framework.Primitives")); break; case RenderMode.MonoGame: ns.Imports.Add(new CodeNamespaceImport("Microsoft.Xna.Framework")); ns.Imports.Add(new CodeNamespaceImport("Microsoft.Xna.Framework.Graphics")); break; default: break; } */ CodeTypeDeclaration classType = new CodeTypeDeclaration(className); GeneratedCodeAttribute generatedCodeAttribute = new GeneratedCodeAttribute("Empty Keys UI Generator", Assembly.GetExecutingAssembly().GetName().Version.ToString()); CodeAttributeDeclaration codeAttrDecl = new CodeAttributeDeclaration(generatedCodeAttribute.GetType().Name, new CodeAttributeArgument( new CodePrimitiveExpression(generatedCodeAttribute.Tool)), new CodeAttributeArgument( new CodePrimitiveExpression(generatedCodeAttribute.Version))); classType.CustomAttributes.Add(codeAttrDecl); ns.Comments.Add(new CodeCommentStatement("-----------------------------------------------------------", false)); ns.Comments.Add(new CodeCommentStatement(" ", false)); ns.Comments.Add(new CodeCommentStatement(" This file was generated, please do not modify.", false)); ns.Comments.Add(new CodeCommentStatement(" ", false)); ns.Comments.Add(new CodeCommentStatement("-----------------------------------------------------------", false)); CodeMemberMethod initMethod = null; if (source is UIRoot) { initMethod = CreateUIRootClass(ns, classType, renderMode); generator.ProcessGenerators(source, classType, initMethod, true); } else if (source is UserControl) { initMethod = CreateUserControlClass(ns, classType); generator.ProcessGenerators(source, classType, initMethod, true); } else if (source is ResourceDictionary) { initMethod = CreateDictionaryClass(ns, classType); ResourceDictionary dictionary = source as ResourceDictionary; if (dictionary != null) { ResourceDictionaryGenerator resourcesGenerator = new ResourceDictionaryGenerator(); resourcesGenerator.Generate(dictionary, classType, initMethod, new CodeThisReferenceExpression()); } } else { string errorText = "#error This type is not supported - " + source.GetType(); Console.WriteLine(errorText); return errorText; } ImageAssets.Instance.GenerateManagerCode(initMethod); ImageAssets.Instance.ClearAssets(); FontGenerator.Instance.GenerateManagerCode(initMethod); using (CodeDomProvider provider = new Microsoft.CSharp.CSharpCodeProvider()) { string mappedFileName = memoryMappedFileName + className; using (MemoryMappedFile mappedFile = MemoryMappedFile.CreateNew(mappedFileName, nemoryMappedFileCapacity)) { MemoryMappedViewStream stream = mappedFile.CreateViewStream(); using (StreamWriter sw = new StreamWriter(stream)) { provider.GenerateCodeFromNamespace(ns, sw, new CodeGeneratorOptions()); } stream = mappedFile.CreateViewStream(); TextReader tr = new StreamReader(stream); resultCode = tr.ReadToEnd(); resultCode = resultCode.Trim(new char()); tr.Close(); } } return resultCode; }
private void DynamicInvocation() { try { uri = new Uri(Session["Deviceurl"].ToString() + "?wsdl"); } catch { uri = new Uri("http://localhost:60377/Service1.asmx?wsdl"); } WebRequest webRequest = WebRequest.Create(uri); System.IO.Stream requestStream = webRequest.GetResponse().GetResponseStream(); // Get a WSDL file describing a service ServiceDescription sd = ServiceDescription.Read(requestStream); string sdName = sd.Services[0].Name; // Initialize a service description servImport ServiceDescriptionImporter servImport = new ServiceDescriptionImporter(); servImport.AddServiceDescription(sd, String.Empty, String.Empty); servImport.ProtocolName = "Soap"; servImport.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties; CodeNamespace nameSpace = new CodeNamespace(); CodeCompileUnit codeCompileUnit = new CodeCompileUnit(); codeCompileUnit.Namespaces.Add(nameSpace); // Set Warnings ServiceDescriptionImportWarnings warnings = servImport.Import(nameSpace, codeCompileUnit); if (warnings == 0) { StringWriter stringWriter = new StringWriter(System.Globalization.CultureInfo.CurrentCulture); Microsoft.CSharp.CSharpCodeProvider prov = new Microsoft.CSharp.CSharpCodeProvider(); prov.GenerateCodeFromNamespace(nameSpace, stringWriter, new CodeGeneratorOptions()); string[] assemblyReferences = new string[2] { "System.Web.Services.dll", "System.Xml.dll" }; CompilerParameters param = new CompilerParameters(assemblyReferences); param.GenerateExecutable = false; param.GenerateInMemory = true; param.TreatWarningsAsErrors = false; param.WarningLevel = 4; CompilerResults results = new CompilerResults(new TempFileCollection()); results = prov.CompileAssemblyFromDom(param, codeCompileUnit); Assembly assembly = results.CompiledAssembly; service = assembly.GetType(sdName); Session["service"] = service; methodInfo = service.GetMethods(); Session["methodInfo"] = methodInfo; int c = 0; foreach (MethodInfo t in methodInfo) { if (t.Name == "Discover") { break; } c++; } listurl = new string[c]; c = 0; foreach (MethodInfo t in methodInfo) { if (t.Name == "Discover") { break; } listurl[c++] = t.Name; } Session["listurl"] = listurl; } }
/// <summary> /// Generates the file. /// </summary> /// <param name="outputFile">The output file.</param> /// <exception cref="System.ArgumentNullException">Code not generated. Namespace is empty.</exception> public void GenerateFile(string outputFile) { if (ns == null) { throw new ArgumentNullException("Code not generated. Namespace is empty."); } string generatedCode = string.Empty; try { using (CodeDomProvider provider = new Microsoft.CSharp.CSharpCodeProvider()) { using (MemoryMappedFile mappedFile = MemoryMappedFile.CreateNew(memoryMappedFileName, nemoryMappedFileCapacity)) { MemoryMappedViewStream stream = mappedFile.CreateViewStream(); using (StreamWriter sw = new StreamWriter(stream)) { provider.GenerateCodeFromNamespace(ns, sw, new CodeGeneratorOptions()); } stream = mappedFile.CreateViewStream(); TextReader tr = new StreamReader(stream); generatedCode = tr.ReadToEnd(); generatedCode = generatedCode.Trim(new char()); tr.Close(); } } } catch (Exception ex) { generatedCode = "#error " + ex.Message; throw; } finally { using (StreamWriter outfile = new StreamWriter(outputFile)) { outfile.Write(generatedCode); } } }
/// <summary> /// Generates the code. /// </summary> /// <param name="inputFileName">Name of the input file.</param> /// <param name="inputFileContent">Content of the input file.</param> /// <param name="renderMode">The render mode.</param> /// <returns></returns> public string GenerateCode(string inputFileName, string inputFileContent, RenderMode renderMode) { inputFileContent = RemoveClass(inputFileContent); object source = null; try { source = XamlReader.Parse(inputFileContent); } catch (Exception ex) { Console.WriteLine(ex); throw; } if (source == null) { return("Source is empty. XAML file is not valid."); } Console.WriteLine(); Console.WriteLine("Generating " + inputFileName); string resultCode = string.Empty; string className = Path.GetFileNameWithoutExtension(inputFileName); CodeNamespace ns = new CodeNamespace("EmptyKeys.UserInterface.Generated"); ns.Imports.Add(new CodeNamespaceImport("System")); ns.Imports.Add(new CodeNamespaceImport("System.CodeDom.Compiler")); ns.Imports.Add(new CodeNamespaceImport("System.Collections.ObjectModel")); ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface")); ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface.Data")); ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface.Controls")); ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface.Controls.Primitives")); ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface.Input")); ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface.Media")); ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface.Media.Animation")); ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface.Media.Imaging")); ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface.Shapes")); ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface.Renderers")); ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface.Themes")); /* * switch (renderMode) * { * case RenderMode.SunBurn: * ns.Imports.Add(new CodeNamespaceImport("SynapseGaming.SunBurn.Framework.Primitives")); * break; * case RenderMode.MonoGame: * ns.Imports.Add(new CodeNamespaceImport("Microsoft.Xna.Framework")); * ns.Imports.Add(new CodeNamespaceImport("Microsoft.Xna.Framework.Graphics")); * break; * default: * break; * } */ CodeTypeDeclaration classType = new CodeTypeDeclaration(className); GeneratedCodeAttribute generatedCodeAttribute = new GeneratedCodeAttribute("Empty Keys UI Generator", Assembly.GetExecutingAssembly().GetName().Version.ToString()); CodeAttributeDeclaration codeAttrDecl = new CodeAttributeDeclaration(generatedCodeAttribute.GetType().Name, new CodeAttributeArgument( new CodePrimitiveExpression(generatedCodeAttribute.Tool)), new CodeAttributeArgument( new CodePrimitiveExpression(generatedCodeAttribute.Version))); classType.CustomAttributes.Add(codeAttrDecl); ns.Comments.Add(new CodeCommentStatement("-----------------------------------------------------------", false)); ns.Comments.Add(new CodeCommentStatement(" ", false)); ns.Comments.Add(new CodeCommentStatement(" This file was generated, please do not modify.", false)); ns.Comments.Add(new CodeCommentStatement(" ", false)); ns.Comments.Add(new CodeCommentStatement("-----------------------------------------------------------", false)); CodeMemberMethod initMethod = null; if (source is UIRoot) { initMethod = CreateUIRootClass(ns, classType, renderMode); generator.ProcessGenerators(source, classType, initMethod, true); } else if (source is UserControl) { initMethod = CreateUserControlClass(ns, classType); generator.ProcessGenerators(source, classType, initMethod, true); } else if (source is ResourceDictionary) { initMethod = CreateDictionaryClass(ns, classType); ResourceDictionary dictionary = source as ResourceDictionary; if (dictionary != null) { ResourceDictionaryGenerator resourcesGenerator = new ResourceDictionaryGenerator(); resourcesGenerator.Generate(dictionary, classType, initMethod, new CodeThisReferenceExpression()); } } else { string errorText = "#error This type is not supported - " + source.GetType(); Console.WriteLine(errorText); return(errorText); } using (CodeDomProvider provider = new Microsoft.CSharp.CSharpCodeProvider()) { string mappedFileName = memoryMappedFileName + className; using (MemoryMappedFile mappedFile = MemoryMappedFile.CreateNew(mappedFileName, nemoryMappedFileCapacity)) { MemoryMappedViewStream stream = mappedFile.CreateViewStream(); using (StreamWriter sw = new StreamWriter(stream)) { provider.GenerateCodeFromNamespace(ns, sw, new CodeGeneratorOptions()); } stream = mappedFile.CreateViewStream(); TextReader tr = new StreamReader(stream); resultCode = tr.ReadToEnd(); resultCode = resultCode.Trim(new char()); tr.Close(); } } return(resultCode); }
private static void RenderStatements(CodeNamespace ns) { Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider(); provider.GenerateCodeFromNamespace(ns, Console.Out, null); }
/// <summary> /// Creates a new Service Inspector from a given Uri of a WSDL /// </summary> /// <param name="serviceLocation">The location of the services WSDL file</param> public ServiceInspector(Uri serviceLocation) { if (serviceLocation.Query == string.Empty) { UriBuilder uriB = new UriBuilder(serviceLocation); uriB.Query = "WSDL"; serviceLocation = uriB.Uri; } _serviceLocation = serviceLocation; WebRequest wsdlWebRequest = WebRequest.Create(serviceLocation); Stream wsdlRequestStream = wsdlWebRequest.GetResponse().GetResponseStream(); //Get the ServiceDescription from the WSDL file ServiceDescription sd = ServiceDescription.Read(wsdlRequestStream); string sdName = sd.Services[0].Name; ServiceDescriptionImporter sdImport = new ServiceDescriptionImporter(); sdImport.AddServiceDescription(sd, String.Empty, String.Empty); sdImport.ProtocolName = "Soap"; sdImport.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties; CodeNamespace codeNameSpace = new CodeNamespace(); CodeCompileUnit codeCompileUnit = new CodeCompileUnit(); codeCompileUnit.Namespaces.Add(codeNameSpace); ServiceDescriptionImportWarnings warnings = sdImport.Import(codeNameSpace, codeCompileUnit); if (warnings == 0) { StringWriter stringWriter = new StringWriter(System.Globalization.CultureInfo.CurrentCulture); Microsoft.CSharp.CSharpCodeProvider prov = new Microsoft.CSharp.CSharpCodeProvider(); prov.GenerateCodeFromNamespace(codeNameSpace, stringWriter, new CodeGeneratorOptions()); //Compile the assembly string[] assemblyReferences = new string[2] { "System.Web.Services.dll", "System.Xml.dll" }; CompilerParameters param = new CompilerParameters(assemblyReferences); param.GenerateExecutable = false; param.GenerateInMemory = true; param.TreatWarningsAsErrors = false; param.WarningLevel = 4; CompilerResults results = new CompilerResults(new TempFileCollection()); results = prov.CompileAssemblyFromDom(param, codeCompileUnit); Assembly assembly = results.CompiledAssembly; _service = assembly.GetType(sdName); _methodInfo.Clear(); foreach (MethodInfo mi in _service.GetMethods()) { if (mi.Name == "Discover") { break; } _methodInfo.Add(mi); } } }
private void DynamicInvocation() { try { messageTextBox.Text += "Generating WSDL \r\n"; progressBar1.PerformStep(); Uri uri = new Uri(textBox1.Text); messageTextBox.Text += "Generating WSDL \r\n"; progressBar1.PerformStep(); WebRequest webRequest = WebRequest.Create(uri); System.IO.Stream requestStream = webRequest.GetResponse().GetResponseStream(); // Get a WSDL file describing a service ServiceDescription sd = ServiceDescription.Read(requestStream); string sdName = sd.Services[0].Name; // Add in tree view treeWsdl.Nodes.Add(sdName); messageTextBox.Text += "Generating Proxy \r\n"; progressBar1.PerformStep(); // Initialize a service description servImport ServiceDescriptionImporter servImport = new ServiceDescriptionImporter(); servImport.AddServiceDescription(sd, String.Empty, String.Empty); servImport.ProtocolName = "Soap"; servImport.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties; messageTextBox.Text += "Generating assembly \r\n"; progressBar1.PerformStep(); CodeNamespace nameSpace = new CodeNamespace(); CodeCompileUnit codeCompileUnit = new CodeCompileUnit(); codeCompileUnit.Namespaces.Add(nameSpace); // Set Warnings ServiceDescriptionImportWarnings warnings = servImport.Import(nameSpace, codeCompileUnit); if (warnings == 0) { StringWriter stringWriter = new StringWriter(System.Globalization.CultureInfo.CurrentCulture); Microsoft.CSharp.CSharpCodeProvider prov = new Microsoft.CSharp.CSharpCodeProvider(); prov.GenerateCodeFromNamespace(nameSpace, stringWriter, new CodeGeneratorOptions()); messageTextBox.Text += "Compiling assembly \r\n"; progressBar1.PerformStep(); // Compile the assembly with the appropriate references string[] assemblyReferences = new string[2] { "System.Web.Services.dll", "System.Xml.dll" }; CompilerParameters param = new CompilerParameters(assemblyReferences); param.GenerateExecutable = false; param.GenerateInMemory = true; param.TreatWarningsAsErrors = false; param.WarningLevel = 4; CompilerResults results = new CompilerResults(new TempFileCollection()); results = prov.CompileAssemblyFromDom(param, codeCompileUnit); Assembly assembly = results.CompiledAssembly; service = assembly.GetType(sdName); messageTextBox.Text += "Get Methods of Wsdl \r\n"; progressBar1.PerformStep(); methodInfo = service.GetMethods(); foreach (MethodInfo t in methodInfo) { if (t.Name == "Discover") { break; } treeWsdl.Nodes[0].Nodes.Add(t.Name); } treeWsdl.Nodes[0].Expand(); messageTextBox.Text += "Now ready to invoke \r\n "; progressBar1.PerformStep(); this.tabControl1.SelectedTab = this.tabPage1; } else { messageTextBox.Text += warnings; } } catch (Exception ex) { messageTextBox.Text += "\r\n" + ex.Message + "\r\n\r\n" + ex.ToString();; progressBar1.Value = 70; } }
/// <summary> /// 取得webservice instance /// </summary> /// <param name="url">url+?wsdl</param> /// <param name="assemblyReferences"></param> /// <param name="output"></param> /// <returns></returns> public static bool GetWebServiceInstance(string url, string[] assemblyReferences, out LkReflectModel output, string userName = "", string password = "") { //http://www.codeproject.com/Articles/18950/Dynamic-Discovery-and-Invocation-of-Web-Services //https://dotblogs.com.tw/jimmyyu/archive/2009/04/22/8139.aspx output = new LkReflectModel(); if (assemblyReferences == null) { assemblyReferences = new string[3] { "System.Web.Services.dll", "System.Xml.dll", "System.Data.dll" }; } bool result = false; try { WebRequest webRequest = WebRequest.Create(url); //有要權限的話要加下面 //webRequest.Credentials = System.Net.CredentialCache.DefaultCredentials; if (!string.IsNullOrEmpty(userName) && !string.IsNullOrEmpty(password)) { webRequest.Credentials = new NetworkCredential(userName, password); webRequest.PreAuthenticate = true; } Stream requestStream = webRequest.GetResponse().GetResponseStream(); // Get a WSDL file describing a service //ServiceDescription类提供一种方法,以创建和格式化用于描述 XML Web services 的有效的 Web 服务描述语言 (WSDL) 文档文件,该文件是完整的,具有适当的命名空间、元素和特性。 无法继承此类。 //ServiceDescription.Read 方法 (Stream) 通过直接从 Stream实例加载 XML 来初始化ServiceDescription类的实例。 ServiceDescription sd = ServiceDescription.Read(requestStream); string sdName = sd.Services[0].Name; // Initialize a service description servImport //ServiceDescriptionImporter 类 公开一种为 XML Web services 生成客户端代理类的方法。 //ServiceDescriptionImporter.AddServiceDescription 方法 将指定的ServiceDescription添加到要导入的ServiceDescriptions值的集合中。 ServiceDescriptionImporter servImport = new ServiceDescriptionImporter(); servImport.AddServiceDescription(sd, String.Empty, String.Empty); servImport.ProtocolName = "Soap"; servImport.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties; //CodeNamespace表示命名空间声明。 CodeNamespace nameSpace = new CodeNamespace(); //CodeCompileUnit会提供一个CodeDOM程式圆形的容器,CodeCompileUnit含有一个集合,可以储存含有CodeDOM原始程式码原形,专案参考的组件集合以及专案组件属性集合的CodeNamespace物件。 CodeCompileUnit codeCompileUnit = new CodeCompileUnit(); codeCompileUnit.Namespaces.Add(nameSpace); // Set Warnings ServiceDescriptionImportWarnings warnings = servImport.Import(nameSpace, codeCompileUnit); if (warnings == 0) { StringWriter stringWriter = new StringWriter(System.Globalization.CultureInfo.CurrentCulture); //CSharpCodeProvider类提供存取C#程式码产生器和程式码编译器的执行个体。 Microsoft.CSharp.CSharpCodeProvider prov = new Microsoft.CSharp.CSharpCodeProvider(); // 取得C#程式码编译器的执行个体 prov.GenerateCodeFromNamespace(nameSpace, stringWriter, new CodeGeneratorOptions()); // Compile the assembly with the appropriate references // 创建编译器的参数实例 CompilerParameters param = new CompilerParameters(assemblyReferences); param.GenerateExecutable = false; param.GenerateInMemory = true; param.TreatWarningsAsErrors = false; param.WarningLevel = 4; // CompilerResults表示从编译器返回的编译结果。使用指定的编译器设定,根据CodeCompileUnit物件之指定阵列所包含的System.CodeDom树状结构,编译一个组件。 CompilerResults results = new CompilerResults(new TempFileCollection()); // Compile results = prov.CompileAssemblyFromDom(param, codeCompileUnit); if (true == results.Errors.HasErrors) { System.Text.StringBuilder tStr = new System.Text.StringBuilder(); foreach (System.CodeDom.Compiler.CompilerError tComError in results.Errors) { tStr.Append(tComError.ToString()); tStr.Append(System.Environment.NewLine); } throw new Exception(tStr.ToString()); } output.Assembly = results.CompiledAssembly; output.Class = output.Assembly.GetType(sdName); output.ClassInstance = Activator.CreateInstance(output.Class); result = true; } } catch (Exception e) { throw e; } return(result); }