public void Write (System.CodeDom.CodeCompileUnit ccu, FilePath path) { //no? just write out to disc if (!OpenFiles.Contains (path)) { try { using (var sw = new StreamWriter (path)) { provider.GenerateCodeFromCompileUnit (ccu, sw, options); } //mark the file as changed so it gets reparsed Gtk.Application.Invoke (delegate { FileService.NotifyFileChanged (path); }); WrittenCount++; } catch (IOException ex) { monitor.ReportError (GettextCatalog.GetString ("Failed to write file '{0}'.", path), ex); } catch (Exception ex) { monitor.ReportError (GettextCatalog.GetString ("Failed to generate code for file '{0}'.", path), ex); } } //file is open, so generate code and queue up for a write in the GUI thread else { try { using (StringWriter sw = new StringWriter ()) { provider.GenerateCodeFromCompileUnit (ccu, sw, options); filesToWrite.Add (new KeyValuePair<FilePath, string> ( path, sw.ToString ())); } } catch (Exception ex) { monitor.ReportError ( GettextCatalog.GetString ("Failed to generate code for file '{0}'.", path), ex); } } }
public void GenerateCodeFromCompileUnit( System.CodeDom.CodeCompileUnit e , System.IO.TextWriter w , System.CodeDom.Compiler.CodeGeneratorOptions o) { throw new System.NotImplementedException(); }
/// <summary> /// Generates a C# designer class. /// </summary> /// <param name="resXFile">The source resx file.</param> /// <param name="className">The base class name.</param> /// <param name="namespaceName">The namespace for the generated code.</param> /// <param name="publicClass">Specifies if the class has public or public access level.</param> /// <returns>false if generation of at least one property failed.</returns> public static bool GenerateDesignerFile(string resXFile, string className, string namespaceName, bool publicClass) { if (!File.Exists(resXFile)) { ThrowExceptions.Custom(Exc.GetStackTrace(), type, Exc.CallingMethod(), $"The file '{resXFile}' could not be found"); } if (string.IsNullOrEmpty(className)) { ThrowExceptions.Custom(Exc.GetStackTrace(), type, Exc.CallingMethod(), $"The class name must not be empty or null"); } if (string.IsNullOrEmpty(namespaceName)) { ThrowExceptions.Custom(Exc.GetStackTrace(), type, Exc.CallingMethod(), $"The namespace name must not be empty or null"); } string[] unmatchedElements; //System.Resources.Tools. var codeProvider = new Microsoft.CSharp.CSharpCodeProvider(); System.CodeDom.CodeCompileUnit code = StronglyTypedResourceBuilder.Create( resXFile, className, namespaceName, codeProvider, publicClass, out unmatchedElements); var designerFileName = Path.Combine(Path.GetDirectoryName(resXFile), $"{className}.Designer.cs"); using (StreamWriter writer = new StreamWriter(designerFileName, false, System.Text.Encoding.UTF8)) { codeProvider.GenerateCodeFromCompileUnit(code, writer, new System.CodeDom.Compiler.CodeGeneratorOptions()); } return(unmatchedElements.Length == 0); }
public static void UpdateResourceDesign(string filename) { var codeProvider = new Microsoft.CSharp.CSharpCodeProvider(); System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo("en-EN"); var Namespace = GetNameSpace(filename); var currentPath = Directory.GetCurrentDirectory(); // pour qu'il puissent trouver les fichiers contenu dans les resources (exemple icône) Directory.SetCurrentDirectory(Path.GetDirectoryName(filename)); // Needs System.Design.dll System.CodeDom.CodeCompileUnit code = System.Resources.Tools.StronglyTypedResourceBuilder.Create(Path.GetFileName(filename), Path.GetFileNameWithoutExtension(filename), Namespace, codeProvider, false, out string[] unmatchedElements); var fileinfos = new FileInfo(Path.Combine(Path.GetDirectoryName(filename), Path.GetFileNameWithoutExtension(filename) + ".Designer.cs")); if (fileinfos.Exists && fileinfos.Length == 0) { return; } using (StreamWriter writer = new StreamWriter(Path.Combine(Path.GetDirectoryName(filename), Path.GetFileNameWithoutExtension(filename) + ".Designer.cs"), false, Encoding.UTF8)) { codeProvider.GenerateCodeFromCompileUnit(code, writer, new System.CodeDom.Compiler.CodeGeneratorOptions()); } Directory.SetCurrentDirectory(currentPath); }
/// <summary> /// get an Assembly according to wsdl path. /// </summary> /// <param name="wsdl">wsdl path</param> /// <param name="nameSpace">namespace</param> /// <returns>return Assembly</returns> public static Assembly GetWebServiceAssembly(string wsdl, string nameSpace) { try { System.Net.WebClient webClient = new System.Net.WebClient(); System.IO.Stream webStream = webClient.OpenRead(wsdl); ServiceDescription serviceDescription = ServiceDescription.Read(webStream); ServiceDescriptionImporter serviceDescroptImporter = new ServiceDescriptionImporter(); serviceDescroptImporter.AddServiceDescription(serviceDescription, "", ""); System.CodeDom.CodeNamespace codeNameSpace = new System.CodeDom.CodeNamespace(nameSpace); System.CodeDom.CodeCompileUnit codeCompileUnit = new System.CodeDom.CodeCompileUnit(); codeCompileUnit.Namespaces.Add(codeNameSpace); serviceDescroptImporter.Import(codeNameSpace, codeCompileUnit); System.CodeDom.Compiler.CodeDomProvider codeDom = new Microsoft.CSharp.CSharpCodeProvider(); System.CodeDom.Compiler.CompilerParameters codeParameters = new System.CodeDom.Compiler.CompilerParameters(); codeParameters.GenerateExecutable = false; codeParameters.GenerateInMemory = true; codeParameters.ReferencedAssemblies.Add("System.dll"); codeParameters.ReferencedAssemblies.Add("System.XML.dll"); codeParameters.ReferencedAssemblies.Add("System.Web.Services.dll"); codeParameters.ReferencedAssemblies.Add("System.Data.dll"); System.CodeDom.Compiler.CompilerResults compilerResults = codeDom.CompileAssemblyFromDom(codeParameters, codeCompileUnit); return(compilerResults.CompiledAssembly); } catch (Exception ex) { throw ex; } }
/// <summary> /// get an Assembly according to wsdl path. /// </summary> /// <param name="wsdl">wsdl path</param> /// <param name="nameSpace">namespace</param> /// <returns>return Assembly</returns> public static Assembly GetWebServiceAssembly(string wsdl, string nameSpace) { try { System.Net.WebClient webClient = new System.Net.WebClient(); System.IO.Stream webStream = webClient.OpenRead(wsdl); ServiceDescription serviceDescription = ServiceDescription.Read(webStream); ServiceDescriptionImporter serviceDescroptImporter = new ServiceDescriptionImporter(); serviceDescroptImporter.AddServiceDescription(serviceDescription, "", ""); System.CodeDom.CodeNamespace codeNameSpace = new System.CodeDom.CodeNamespace(nameSpace); System.CodeDom.CodeCompileUnit codeCompileUnit = new System.CodeDom.CodeCompileUnit(); codeCompileUnit.Namespaces.Add(codeNameSpace); serviceDescroptImporter.Import(codeNameSpace, codeCompileUnit); System.CodeDom.Compiler.CodeDomProvider codeDom = new Microsoft.CSharp.CSharpCodeProvider(); System.CodeDom.Compiler.CompilerParameters codeParameters = new System.CodeDom.Compiler.CompilerParameters(); codeParameters.GenerateExecutable = false; codeParameters.GenerateInMemory = true; codeParameters.ReferencedAssemblies.Add("System.dll"); codeParameters.ReferencedAssemblies.Add("System.XML.dll"); codeParameters.ReferencedAssemblies.Add("System.Web.Services.dll"); codeParameters.ReferencedAssemblies.Add("System.Data.dll"); System.CodeDom.Compiler.CompilerResults compilerResults = codeDom.CompileAssemblyFromDom(codeParameters, codeCompileUnit); return compilerResults.CompiledAssembly; } catch (Exception ex) { throw ex; } }
public static object UploadData(string url, string @namespace, string classname, string methodname, object[] args, ArrayList al) { try { System.Net.WebClient wc = new System.Net.WebClient(); //System.IO.Stream stream = wc.OpenRead(url + "?WSDL"); System.IO.Stream stream = wc.OpenRead(url); System.Web.Services.Description.ServiceDescription sd = System.Web.Services.Description.ServiceDescription.Read(stream); System.Web.Services.Description.ServiceDescriptionImporter sdi = new System.Web.Services.Description.ServiceDescriptionImporter(); sdi.AddServiceDescription(sd, string.Empty, string.Empty); //将sd描述导入到sdi中 System.CodeDom.CodeNamespace cn = new System.CodeDom.CodeNamespace(@namespace); System.CodeDom.CodeCompileUnit ccu = new System.CodeDom.CodeCompileUnit(); ccu.Namespaces.Add(cn); sdi.Import(cn, ccu); Microsoft.CSharp.CSharpCodeProvider csc = new Microsoft.CSharp.CSharpCodeProvider(); System.CodeDom.Compiler.ICodeCompiler icc = csc.CreateCompiler(); System.CodeDom.Compiler.CompilerParameters cplist = new System.CodeDom.Compiler.CompilerParameters(); cplist.GenerateExecutable = false; cplist.GenerateInMemory = true; cplist.ReferencedAssemblies.Add("System.dll"); cplist.ReferencedAssemblies.Add("System.XML.dll"); cplist.ReferencedAssemblies.Add("System.Web.Services.dll"); cplist.ReferencedAssemblies.Add("System.Data.dll"); System.CodeDom.Compiler.CompilerResults cr = icc.CompileAssemblyFromDom(cplist, ccu); if (cr.Errors.HasErrors) { System.Text.StringBuilder sb = new System.Text.StringBuilder(); foreach (System.CodeDom.Compiler.CompilerError ce in cr.Errors) { sb.Append(ce.ToString()); sb.Append(System.Environment.NewLine); } throw new Exception(sb.ToString()); } System.Reflection.Assembly assembly = cr.CompiledAssembly; Type t = assembly.GetType(@namespace + "." + classname, true, true); object obj = Activator.CreateInstance(t); ParameterModifier[] paramsModifer = new ParameterModifier[1]; paramsModifer[0] = new ParameterModifier(args.Length); //paramsModifer[0][7] = true; object result = t.InvokeMember(methodname, BindingFlags.Default | BindingFlags.InvokeMethod, null, obj, args, paramsModifer, null, null); //al.Add(args[7]); return(result); } catch (Exception ex) { WriteLog(ex.Message, EXCEPTION_LOG_TITLE); return(null); } }
/// <summary> /// 根据指定的信息,调用远程WebService方法 /// </summary> /// <param name="url">WebService的http形式的地址</param> /// <param name="namespace">欲调用的WebService的命名空间</param> /// <param name="classname">欲调用的WebService的类名(不包括命名空间前缀)</param> /// <param name="methodname">欲调用的WebService的方法名</param> /// <param name="args">参数列表</param> /// <returns>WebService的执行结果</returns> /// <remarks> /// 如果调用失败,将会抛出Exception。请调用的时候,适当截获异常。 /// 异常信息可能会发生在两个地方: /// 1、动态构造WebService的时候,CompileAssembly失败。 /// 2、WebService本身执行失败。 /// </remarks> /// <example> /// <code> /// object obj = InvokeWebService("http://localhost/Service.asmx","method",new object[]{"1"}); /// </code> /// </example> public static object InvokeWebService(string url, string methodname, object[] args) { try { string @namespace = "WebService.DynamicWebCalling"; string[] parts = url.Split('/'); string[] pps = parts[parts.Length - 1].Split('.'); string classname = pps[0]; System.Net.WebClient wc = new System.Net.WebClient(); System.IO.Stream stream = wc.OpenRead(url + "?WSDL"); System.Web.Services.Description.ServiceDescription sd = System.Web.Services.Description.ServiceDescription.Read(stream); System.Web.Services.Description.ServiceDescriptionImporter sdi = new System.Web.Services.Description.ServiceDescriptionImporter(); sdi.AddServiceDescription(sd, "", ""); System.CodeDom.CodeNamespace cn = new System.CodeDom.CodeNamespace(@namespace); System.CodeDom.CodeCompileUnit ccu = new System.CodeDom.CodeCompileUnit(); ccu.Namespaces.Add(cn); sdi.Import(cn, ccu); Microsoft.CSharp.CSharpCodeProvider csc = new Microsoft.CSharp.CSharpCodeProvider(); System.CodeDom.Compiler.ICodeCompiler icc = csc.CreateCompiler(); System.CodeDom.Compiler.CompilerParameters cplist = new System.CodeDom.Compiler.CompilerParameters(); cplist.GenerateExecutable = false; cplist.GenerateInMemory = true; cplist.ReferencedAssemblies.Add("System.dll"); cplist.ReferencedAssemblies.Add("System.XML.dll"); cplist.ReferencedAssemblies.Add("System.Web.Services.dll"); cplist.ReferencedAssemblies.Add("System.Data.dll"); System.CodeDom.Compiler.CompilerResults cr = icc.CompileAssemblyFromDom(cplist, ccu); if (true == cr.Errors.HasErrors) { System.Text.StringBuilder sb = new System.Text.StringBuilder(); foreach (System.CodeDom.Compiler.CompilerError ce in cr.Errors) { sb.Append(ce.ToString()); sb.Append(System.Environment.NewLine); } throw new Exception(sb.ToString()); } System.Reflection.Assembly assembly = cr.CompiledAssembly; Type t = assembly.GetType(@namespace + "." + classname, true, true); object obj = Activator.CreateInstance(t); System.Reflection.MethodInfo mi = t.GetMethod(methodname); return(mi.Invoke(obj, args)); } catch (Exception ex) { StringBuilder str = new StringBuilder(); for (int m = 0; m < args.Length; m++) { str.Append(args[m]); str.Append(","); } LogUtility.DataLog.WriteLog(LogUtility.LogLevel.Info, ex.Message + "--" + ex.Source.ToString() + "--" + url + methodname + "--" + str, new LogUtility.RunningPlace("WebServiceHelper", "InvokeWebService"), "WebService获取数据失败"); return(""); } }
private object InvokeWebservice(string url, string space, string classname, string methodname, object[] args) { try { System.Net.WebClient wc = new System.Net.WebClient(); System.IO.Stream stream = wc.OpenRead(url + "?WSDL"); System.Web.Services.Description.ServiceDescription sd = System.Web.Services.Description.ServiceDescription.Read(stream); System.Web.Services.Description.ServiceDescriptionImporter sdi = new System.Web.Services.Description.ServiceDescriptionImporter(); sdi.AddServiceDescription(sd, "", ""); System.CodeDom.CodeNamespace cn = new System.CodeDom.CodeNamespace(space); System.CodeDom.CodeCompileUnit ccu = new System.CodeDom.CodeCompileUnit(); ccu.Namespaces.Add(cn); sdi.Import(cn, ccu); Microsoft.CSharp.CSharpCodeProvider csc = new Microsoft.CSharp.CSharpCodeProvider(); System.CodeDom.Compiler.ICodeCompiler icc = csc.CreateCompiler(); System.CodeDom.Compiler.CompilerParameters cplist = new System.CodeDom.Compiler.CompilerParameters(); cplist.GenerateExecutable = false; cplist.GenerateInMemory = true; cplist.ReferencedAssemblies.Add("System.dll"); cplist.ReferencedAssemblies.Add("System.XML.dll"); cplist.ReferencedAssemblies.Add("System.Web.Services.dll"); cplist.ReferencedAssemblies.Add("System.Data.dll"); System.CodeDom.Compiler.CompilerResults cr = icc.CompileAssemblyFromDom(cplist, ccu); if (true == cr.Errors.HasErrors) { System.Text.StringBuilder sb = new System.Text.StringBuilder(); foreach (System.CodeDom.Compiler.CompilerError ce in cr.Errors) { sb.Append(ce.ToString()); sb.Append(System.Environment.NewLine); } throw new Exception(sb.ToString()); } System.Reflection.Assembly assembly = cr.CompiledAssembly; Type t = assembly.GetType(space + "." + classname, true, true); object obj = Activator.CreateInstance(t); //用来解决webservice上面有重载函数的问题 Type[] types = new Type[args.Length]; for (int i = 0; i < args.Length; i++) { types[i] = args[i].GetType(); } System.Reflection.MethodInfo mi = t.GetMethod(methodname, types); if (null == mi) { return(null); } return(mi.Invoke(obj, args)); } catch (Exception ex) { throw new Exception(ex.InnerException.Message, new Exception(ex.InnerException.StackTrace)); } }
public System.CodeDom.CodeTypeDeclaration ProcessImportedType( System.CodeDom.CodeTypeDeclaration typeDeclaration, System.CodeDom.CodeCompileUnit compileUnit) { // Console.WriteLine("ProcessImportedType invoked") // Not used in this sample. // You could use this method to construct an entirely new CLR // type when a certain type is imported, or modify a // generated type in some way. return(typeDeclaration); }
private void TestGenerate <G>(string language, out int hr, out System.CodeDom.CodeCompileUnit compileUnit, out System.CodeDom.CodeTypeDeclaration typeDeclaration) where G : Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGeneratorBase, new() { IntPtr[] fileContents; uint bytesOutput; TestGenerate <G>(language, out hr, out fileContents, out bytesOutput, out compileUnit, out typeDeclaration); }
/* * 优点:不用引用,通过网址,目标命名空间,调用WebServices,用于主站向子站请求数据 * 缺点:使用上不如直接Web引用进来易用,如果只是单个并确定的,最好引用进来 */ /// <summary> /// 通过反射完成调用 /// </summary> public static object InvokeWebSer(string url, string @namespace, string classname, string methodname, object[] args) { System.Net.WebClient wc = new System.Net.WebClient(); string URL = string.Empty; if ((url.Substring(url.Length - 5, 5) != null) && ((url.Substring(url.Length - 5, 5).ToLower() != "?wsdl"))) { URL = url + "?WSDL"; } else { URL = url; } System.IO.Stream stream = wc.OpenRead(URL); System.Web.Services.Description.ServiceDescription sd = System.Web.Services.Description.ServiceDescription.Read(stream); System.Web.Services.Description.ServiceDescriptionImporter sdi = new System.Web.Services.Description.ServiceDescriptionImporter(); sdi.AddServiceDescription(sd, "", ""); System.CodeDom.CodeNamespace cn = new System.CodeDom.CodeNamespace(@namespace); System.CodeDom.CodeCompileUnit ccu = new System.CodeDom.CodeCompileUnit(); ccu.Namespaces.Add(cn); sdi.Import(cn, ccu); Microsoft.CSharp.CSharpCodeProvider csc = new Microsoft.CSharp.CSharpCodeProvider(); System.CodeDom.Compiler.CompilerParameters cplist = new System.CodeDom.Compiler.CompilerParameters(); cplist.GenerateExecutable = false; cplist.GenerateInMemory = true; cplist.ReferencedAssemblies.Add("System.dll"); cplist.ReferencedAssemblies.Add("System.XML.dll"); cplist.ReferencedAssemblies.Add("System.Web.Services.dll"); cplist.ReferencedAssemblies.Add("System.Data.dll"); System.CodeDom.Compiler.CompilerResults cr = csc.CompileAssemblyFromDom(cplist, ccu); if (true == cr.Errors.HasErrors) { System.Text.StringBuilder sb = new System.Text.StringBuilder(); foreach (System.CodeDom.Compiler.CompilerError ce in cr.Errors) { sb.Append(ce.ToString()); sb.Append(System.Environment.NewLine); } throw new Exception(sb.ToString()); } System.Reflection.Assembly assembly = cr.CompiledAssembly; Type t = assembly.GetType(@namespace + "." + classname, true, true); object obj = Activator.CreateInstance(t); System.Reflection.MethodInfo mi = t.GetMethod(methodname); return(mi.Invoke(obj, args)); }
private static int InvokeWebservice(string url, string @namespace, string classname, string methodname, object[] args) { try { System.Net.WebClient wc = new System.Net.WebClient(); System.IO.Stream stream = wc.OpenRead(url); System.Web.Services.Description.ServiceDescription sd = System.Web.Services.Description.ServiceDescription.Read(stream); System.Web.Services.Description.ServiceDescriptionImporter sdi = new System.Web.Services.Description.ServiceDescriptionImporter(); sdi.AddServiceDescription(sd, "", ""); System.CodeDom.CodeNamespace cn = new System.CodeDom.CodeNamespace(@namespace); System.CodeDom.CodeCompileUnit ccu = new System.CodeDom.CodeCompileUnit(); ccu.Namespaces.Add(cn); sdi.Import(cn, ccu); Microsoft.CSharp.CSharpCodeProvider csc = new Microsoft.CSharp.CSharpCodeProvider(); System.CodeDom.Compiler.ICodeCompiler icc = csc.CreateCompiler(); System.CodeDom.Compiler.CompilerParameters cplist = new System.CodeDom.Compiler.CompilerParameters(); cplist.GenerateExecutable = false; cplist.GenerateInMemory = true; cplist.ReferencedAssemblies.Add("System.dll"); cplist.ReferencedAssemblies.Add("System.XML.dll"); cplist.ReferencedAssemblies.Add("System.Web.Services.dll"); cplist.ReferencedAssemblies.Add("System.Data.dll"); System.CodeDom.Compiler.CompilerResults cr = icc.CompileAssemblyFromDom(cplist, ccu); if (true == cr.Errors.HasErrors) { System.Text.StringBuilder sb = new System.Text.StringBuilder(); foreach (System.CodeDom.Compiler.CompilerError ce in cr.Errors) { sb.Append(ce.ToString()); sb.Append(System.Environment.NewLine); } throw new Exception(sb.ToString()); } System.Reflection.Assembly assembly = cr.CompiledAssembly; Type t = assembly.GetType(@namespace + "." + classname, true, true); object obj = Activator.CreateInstance(t); System.Reflection.MethodInfo mi = t.GetMethod(methodname); mi.Invoke(obj, args); } catch { return(-1); } return(1); }
static void Run() { // ホスト作成 var language = new CSharpRazorCodeLanguage(); var host = new RazorEngineHost(language) { DefaultBaseClass = nameof(Legacy) + "." + nameof(LegacyTemplateBase), DefaultClassName = "Generated", DefaultNamespace = "RazorTemplate", // 生成されるメソッド名の指定(これはデフォルトと同じものを指定している) GeneratedClassContext = new GeneratedClassContext( nameof(LegacyTemplateBase.Execute), nameof(LegacyTemplateBase.Write), nameof(LegacyTemplateBase.WriteLiteral) ) }; // デフォルトで挿入する名前空間を追加 host.NamespaceImports.Add(nameof(System)); var engine = new RazorTemplateEngine(host); using (var reader = new StreamReader(File.OpenRead("../../../Page.cshtml"))) { // コードDOM生成 var generatorResults = engine.GenerateCode(reader); System.CodeDom.CodeCompileUnit unit = generatorResults.GeneratedCode; var provider = new CSharpCodeProvider(); // 表示用 provider.GenerateCodeFromCompileUnit(unit, Console.Out, new CodeGeneratorOptions()); Console.WriteLine("------------------------------------------------------------------------"); // 使用アセンブリ参照 var parameters = new CompilerParameters(); parameters.ReferencedAssemblies.Add("System.Core.dll"); parameters.ReferencedAssemblies.Add(typeof(LegacyTemplateBase).Assembly.Location); // コンパイル var compilerResults = provider.CompileAssemblyFromDom(parameters, unit); // 実行 var typeName = host.DefaultNamespace + "." + host.DefaultClassName; var instance = compilerResults.CompiledAssembly.CreateInstance(typeName) as LegacyTemplateBase; var generatedString = instance.Generate(); // 結果表示 Console.Write(generatedString); } }
//public void SendMail(string mailTo, string mailSubject, string content) //{ // object[] methodParams = new object[4]; // methodParams[0] = new object(); // methodParams[1] = new object(); // methodParams[2] = new object(); // methodParams[3] = new object(); // methodParams[0] = mailTo; // methodParams[1] = true; // methodParams[2] = mailSubject; // methodParams[3] = content; // InvokeWebservice(ConfigData.MailURL, "Achievo.MMIP.CommonWebService", "EMail", "SendByAdmin", methodParams); //} /// 根据指定的信息,调用远程WebService方法 /// </summary> /// <param name="url">WebService的http形式的地址</param> /// <param name="namespace">欲调用的WebService的命名空间</param> /// <param name="classname">欲调用的WebService的类名(不包括命名空间前缀)</param> /// <param name="methodname">欲调用的WebService的方法名</param> /// <param name="args">参数列表</param> /// <returns>WebService的执行结果</returns> /// <remarks> /// 如果调用失败,将会抛出Exception。请调用的时候,适当截获异常。 /// 异常信息可能会发生在两个地方: /// 1、动态构造WebService的时候,CompileAssembly失败。 /// 2、WebService本身执行失败。 /// </remarks> /// <example> /// <code> /// object obj = InvokeWebservice("http://localhost/GSP_WorkflowWebservice/common.asmx", /// "Genersoft.Platform.Service.Workflow", /// "Common", /// "GetToolType", /// new object[]{"1"}); /// </code> /// </example> public object InvokeWebservice(string url, string @namespace, string classname, string methodname, object[] args) { try { System.Net.WebClient wc = new System.Net.WebClient(); System.IO.Stream stream = wc.OpenRead(url + "?WSDL"); System.Web.Services.Description.ServiceDescription sd = System.Web.Services.Description.ServiceDescription.Read(stream); System.Web.Services.Description.ServiceDescriptionImporter sdi = new System.Web.Services.Description.ServiceDescriptionImporter(); sdi.AddServiceDescription(sd, "", ""); System.CodeDom.CodeNamespace cn = new System.CodeDom.CodeNamespace(@namespace); System.CodeDom.CodeCompileUnit ccu = new System.CodeDom.CodeCompileUnit(); ccu.Namespaces.Add(cn); sdi.Import(cn, ccu); Microsoft.CSharp.CSharpCodeProvider csc = new Microsoft.CSharp.CSharpCodeProvider(); System.CodeDom.Compiler.ICodeCompiler icc = csc.CreateCompiler(); System.CodeDom.Compiler.CompilerParameters cplist = new System.CodeDom.Compiler.CompilerParameters(); cplist.GenerateExecutable = false; cplist.GenerateInMemory = true; cplist.ReferencedAssemblies.Add("System.dll"); cplist.ReferencedAssemblies.Add("System.XML.dll"); cplist.ReferencedAssemblies.Add("System.Web.Services.dll"); cplist.ReferencedAssemblies.Add("System.Data.dll"); System.CodeDom.Compiler.CompilerResults cr = icc.CompileAssemblyFromDom(cplist, ccu); if (true == cr.Errors.HasErrors) { System.Text.StringBuilder sb = new System.Text.StringBuilder(); foreach (System.CodeDom.Compiler.CompilerError ce in cr.Errors) { sb.Append(ce.ToString()); sb.Append(System.Environment.NewLine); } throw new Exception(sb.ToString()); } System.Reflection.Assembly assembly = cr.CompiledAssembly; Type t = assembly.GetType(@namespace + "." + classname, true, true); object obj = Activator.CreateInstance(t); System.Reflection.MethodInfo mi = t.GetMethod(methodname); return mi.Invoke(obj, args); } catch (Exception ex) { throw new Exception(ex.InnerException.Message, new Exception(ex.InnerException.StackTrace)); } }
/// <summary> /// 根据WEBSERVICE地址获取一个 Assembly /// </summary> /// <param name="p_Url">地址</param> /// <param name="p_NameSpace">命名空间</param> /// <returns>返回Assembly</returns> public static Assembly GetWebServiceAssembly(string p_Url, string p_NameSpace) { try { System.Net.WebClient _WebClient = new System.Net.WebClient(); System.IO.Stream _WebStream = _WebClient.OpenRead(p_Url); ServiceDescription _ServiceDescription = ServiceDescription.Read(_WebStream); _WebStream.Close(); _WebClient.Dispose(); ServiceDescriptionImporter _ServiceDescroptImporter = new ServiceDescriptionImporter(); _ServiceDescroptImporter.AddServiceDescription(_ServiceDescription, "", ""); System.CodeDom.CodeNamespace _CodeNameSpace = new System.CodeDom.CodeNamespace(p_NameSpace); System.CodeDom.CodeCompileUnit _CodeCompileUnit = new System.CodeDom.CodeCompileUnit(); _CodeCompileUnit.Namespaces.Add(_CodeNameSpace); _ServiceDescroptImporter.Import(_CodeNameSpace, _CodeCompileUnit); System.CodeDom.Compiler.CodeDomProvider _CodeDom = new Microsoft.CSharp.CSharpCodeProvider(); System.CodeDom.Compiler.CompilerParameters _CodeParameters = new System.CodeDom.Compiler.CompilerParameters(); _CodeParameters.GenerateExecutable = false; _CodeParameters.GenerateInMemory = true; _CodeParameters.ReferencedAssemblies.Add("System.dll"); _CodeParameters.ReferencedAssemblies.Add("System.XML.dll"); _CodeParameters.ReferencedAssemblies.Add("System.Web.Services.dll"); _CodeParameters.ReferencedAssemblies.Add("System.Data.dll"); System.CodeDom.Compiler.CompilerResults _CompilerResults = _CodeDom.CompileAssemblyFromDom(_CodeParameters, _CodeCompileUnit); if (_CompilerResults.Errors.HasErrors) { string _ErrorText = ""; foreach (CompilerError _Error in _CompilerResults.Errors) { _ErrorText += _Error.ErrorText + "/r/n"; } throw new Exception(_ErrorText); } return _CompilerResults.CompiledAssembly; } catch (Exception ex) { throw ex; } }
/// < summary> /// 动态调用web服务 /// < /summary> /// < param name="url">WSDL服务地址< /param> /// < param name="classname">类名< /param> /// < param name="methodname">方法名< /param> /// < param name="args">参数< /param> /// < returns>< /returns> public static object Invoke(string url, string classname, string methodname, object[] args) { string ns = "EnterpriseServerBase.WebService.DynamicWebCalling"; if ((classname == null) || (classname == "")) { classname = WebServiceInvoker.GetWsClassName(url); } System.Net.WebClient wc = new System.Net.WebClient(); System.IO.Stream stream = wc.OpenRead(url + "?WSDL"); System.Web.Services.Description.ServiceDescription sd = System.Web.Services.Description.ServiceDescription.Read(stream); System.Web.Services.Description.ServiceDescriptionImporter sdi = new System.Web.Services.Description.ServiceDescriptionImporter(); sdi.AddServiceDescription(sd, "", ""); System.CodeDom.CodeNamespace cn = new System.CodeDom.CodeNamespace(ns); System.CodeDom.CodeCompileUnit ccu = new System.CodeDom.CodeCompileUnit(); ccu.Namespaces.Add(cn); sdi.Import(cn, ccu); Microsoft.CSharp.CSharpCodeProvider csc = new Microsoft.CSharp.CSharpCodeProvider(); // System.CodeDom.Compiler.ICodeCompiler csc = .CreateCompiler(); System.CodeDom.Compiler.CompilerParameters cplist = new System.CodeDom.Compiler.CompilerParameters(); cplist.GenerateExecutable = false; cplist.GenerateInMemory = true; cplist.ReferencedAssemblies.Add("System.dll"); cplist.ReferencedAssemblies.Add("System.XML.dll"); cplist.ReferencedAssemblies.Add("System.Web.Services.dll"); cplist.ReferencedAssemblies.Add("System.Data.dll"); System.CodeDom.Compiler.CompilerResults cr = csc.CompileAssemblyFromDom(cplist, ccu); if (true == cr.Errors.HasErrors) { System.Text.StringBuilder sb = new System.Text.StringBuilder(); foreach (System.CodeDom.Compiler.CompilerError ce in cr.Errors) { sb.Append(ce.ToString()); sb.Append(System.Environment.NewLine); } throw new NHExt.Runtime.Exceptions.RuntimeException("调用WebService开始编译发生错误:" + sb.ToString()); } System.Reflection.Assembly assembly = cr.CompiledAssembly; Type t = assembly.GetType(ns + "." + classname, true, true); object obj = Activator.CreateInstance(t); System.Reflection.MethodInfo mi = t.GetMethod(methodname); return mi.Invoke(obj, args); }
public virtual void GenerateCodeFromCodeDom(System.CodeDom.CodeCompileUnit compileUnit, TextWriter writer) { var provider = this.CreateCodeDomProvider(); if (provider != null) { var options = new System.CodeDom.Compiler.CodeGeneratorOptions(); options.BlankLinesBetweenMembers = AmbienceService.CodeGenerationProperties.Get("BlankLinesBetweenMembers", true); options.BracingStyle = AmbienceService.CodeGenerationProperties.Get("StartBlockOnSameLine", true) ? "Block" : "C"; options.ElseOnClosing = AmbienceService.CodeGenerationProperties.Get("ElseOnClosing", true); options.IndentString = SD.EditorControlService.GlobalOptions.IndentationString; provider.GenerateCodeFromCompileUnit(compileUnit, writer, options); } else { writer.WriteLine("No CodeDom provider was found for this language."); } }
private void button2_Click(object sender, EventArgs e) { Nequeo.Data.MongoDb.Connection conn = new Nequeo.Data.MongoDb.Connection("nequeompc"); Nequeo.Data.MongoDb.DataAccess access = new Nequeo.Data.MongoDb.DataAccess(conn); MongoDatabase database = access.GetDatabase("nequeo"); MongoCollection <BsonDocument> collb = access.GetCollection(database, "User"); BsonDocument document = access.FindAll(collb, limit: 1).ToArray().First(); Nequeo.Data.MongoDb.CodeDom.BsonDocumentModel bson = new Nequeo.Data.MongoDb.CodeDom.BsonDocumentModel(); Nequeo.Data.MongoDb.CodeDom.BsonModelContainer model = new Nequeo.Data.MongoDb.CodeDom.BsonModelContainer(); model.ClassName = "User"; model.Namespace = "Nequeo.MongoDb"; model.BsonDocument = document; model.AssignProperties(); System.CodeDom.CodeCompileUnit unit = bson.Generate(model); bson.CreateCodeFile(@"C:\Temp\BsonDocModel.cs", unit); }
static string TranslateJsonToCode(string filePath) { OpenApiDocument doc = ReadJson(filePath); Settings settings = new Settings() { ClientNamespace = "MyNS", }; System.CodeDom.CodeCompileUnit codeCompileUnit = new System.CodeDom.CodeCompileUnit(); System.CodeDom.CodeNamespace clientNamespace = new System.CodeDom.CodeNamespace(settings.ClientNamespace); codeCompileUnit.Namespaces.Add(clientNamespace);//namespace added to Dom ComponentsToCsTypes gen = new ComponentsToCsTypes(settings, codeCompileUnit, clientNamespace); gen.CreateCodeDom(doc.Components); return(gen.WriteToText()); }
public static void GenerateViaCodeDOM(string outputFileName, System.CodeDom.Compiler.CodeDomProvider provider, System.CodeDom.CodeCompileUnit compileunit) { System.CodeDom.Compiler.ICodeGenerator gen = provider.CreateGenerator(); System.CodeDom.Compiler.IndentedTextWriter tw; try { tw = new System.CodeDom.Compiler.IndentedTextWriter(new System.IO.StreamWriter(outputFileName, false), " "); gen.GenerateCodeFromCompileUnit(compileunit, tw, new System.CodeDom.Compiler.CodeGeneratorOptions()); tw.Flush(); tw.Close(); } catch (System.Exception ex) { System.Diagnostics.Debug.WriteLine(ex); throw; } }
System.CodeDom.CodeCompileUnit GenerateCompileUnit(System.CodeDom.Compiler.CodeDomProvider provider, System.CodeDom.Compiler.CodeGeneratorOptions options, string file, List <NSObjectTypeInfo> types) { var ccu = new System.CodeDom.CodeCompileUnit(); var namespaces = new Dictionary <string, System.CodeDom.CodeNamespace> (); foreach (var t in types) { System.CodeDom.CodeTypeDeclaration type; string nsName; System.CodeDom.CodeNamespace ns; t.GenerateCodeTypeDeclaration(provider, options, infoService.WrapperRoot, out type, out nsName); if (!namespaces.TryGetValue(nsName, out ns)) { namespaces[nsName] = ns = new System.CodeDom.CodeNamespace(nsName); ccu.Namespaces.Add(ns); } ns.Types.Add(type); } return(ccu); }
private void TestGenerate <G>(string language, out int hr, out IntPtr[] fileContents, out uint bytesOutput, out System.CodeDom.CodeCompileUnit compileUnit, out System.CodeDom.CodeTypeDeclaration typeDeclaration) where G : Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGeneratorBase, new() { SettingsSingleFileGeneratorSite site = new SettingsSingleFileGeneratorSite(language); string inputFile = site.DefaultSettingsFilePath; Mock <G> generatorMock = new Mock <G>(); System.CodeDom.CodeCompileUnit actualCompileUnit = null; System.CodeDom.CodeTypeDeclaration actualTypeDeclaration = null; generatorMock.Implement("GetProjectRootNamespace", "MyLittleNamespace"); generatorMock.Implement("AddRequiredReferences", new object[] { (Shell.Interop.IVsGeneratorProgress)null }); generatorMock.Implement("OnCompileUnitCreated", new object[] { MockConstraint.IsAnything <System.CodeDom.CodeCompileUnit>(), MockConstraint.IsAnything <System.CodeDom.CodeTypeDeclaration>() }, delegate(object obj, System.Reflection.MethodInfo method, object[] arguments) { actualCompileUnit = (System.CodeDom.CodeCompileUnit)arguments[0]; actualTypeDeclaration = (System.CodeDom.CodeTypeDeclaration)arguments[1]; return(null); }); IVsSingleFileGenerator generator = generatorMock.Instance; ((Microsoft.VisualStudio.OLE.Interop.IObjectWithSite)generator).SetSite(site); fileContents = new IntPtr[] { new IntPtr() }; bytesOutput = 0; hr = generator.Generate(inputFile, "", "", fileContents, out bytesOutput, null); compileUnit = actualCompileUnit; typeDeclaration = actualTypeDeclaration; }
public virtual System.CodeDom.CodeTypeDeclaration ProcessImportedType(System.CodeDom.CodeTypeDeclaration typeDeclaration, System.CodeDom.CodeCompileUnit compileUnit) { return(null); }
public object CallWebService(WsDTO param) { string ErrWebService = string.Empty; System.Net.WebClient client = new System.Net.WebClient(); // Connect To the web service System.IO.Stream stream = client.OpenRead(this.UrlWebService + "?wsdl"); // Now read the WSDL file describing a service. var description = System.Web.Services.Description.ServiceDescription.Read(stream); ///// LOAD THE DOM ///////// // Initialize a service description importer. var importer = new System.Web.Services.Description.ServiceDescriptionImporter(); importer.ProtocolName = "Soap12"; // Use SOAP 1.2. importer.AddServiceDescription(description, null, null); // Generate a proxy client. importer.Style = System.Web.Services.Description.ServiceDescriptionImportStyle.Client; // Generate properties to represent primitive values. importer.CodeGenerationOptions = System.Xml.Serialization.CodeGenerationOptions.GenerateProperties; // Initialize a Code-DOM tree into which we will import the service. var nmspace = new System.CodeDom.CodeNamespace(); var unit1 = new System.CodeDom.CodeCompileUnit(); unit1.Namespaces.Add(nmspace); // Import the service into the Code-DOM tree. This creates proxy code that uses the service. var warning = importer.Import(nmspace, unit1); if (warning == 0) // If zero then we are good to go { // Generate the proxy code var provider1 = System.CodeDom.Compiler.CodeDomProvider.CreateProvider("CSharp"); // Compile the assembly proxy with the appropriate references string[] assemblyReferences = new string[5] { "System.dll", "System.Web.Services.dll", "System.Web.dll", "System.Xml.dll", "System.Data.dll" }; var parms = new System.CodeDom.Compiler.CompilerParameters(assemblyReferences); var results = provider1.CompileAssemblyFromDom(parms, unit1); // Check For Errors if (results.Errors.Count > 0) { foreach (System.CodeDom.Compiler.CompilerError oops in results.Errors) { ErrWebService += " " + oops.ErrorText; } throw new System.Exception(string.Format("Error al llamar a WS [{0}]", ErrWebService)); } // Finally, Invoke the web service method object wsvcClass = results.CompiledAssembly.CreateInstance(param.ServiceName); var mi = wsvcClass.GetType().GetMethod(param.MethodName); return(mi.Invoke(wsvcClass, param.Args)); } else { return(null); } }
public static string Generate(string inputFileContent, System.CodeDom.CodeCompileUnit compileUnit, System.CodeDom.CodeNamespace mainNamespace, System.CodeDom.Compiler.CodeDomProvider codeProvider, GenerateOption option, string dataSetNamespace) { }
public static string Generate(string inputFileContent, System.CodeDom.CodeCompileUnit compileUnit, System.CodeDom.CodeNamespace mainNamespace, System.CodeDom.Compiler.CodeDomProvider codeProvider) { }
public static void Generate(string inputFileContent, System.CodeDom.CodeCompileUnit compileUnit, System.CodeDom.CodeNamespace mainNamespace, System.CodeDom.Compiler.CodeDomProvider codeProvider, System.Collections.Hashtable customDBProviders, GenerateOption option, string dataSetNamespace) { }
public static void Generate(string inputFileContent, System.CodeDom.CodeCompileUnit compileUnit, System.CodeDom.CodeNamespace mainNamespace, System.CodeDom.Compiler.CodeDomProvider codeProvider, System.Data.Common.DbProviderFactory specifiedFactory) { }
public virtual void ProcessGeneratedCode(System.CodeDom.CodeCompileUnit codeCompileUnit, System.CodeDom.CodeTypeDeclaration baseType, System.CodeDom.CodeTypeDeclaration derivedType, System.CodeDom.CodeMemberMethod buildMethod, System.CodeDom.CodeMemberMethod dataBindingMethod) { }
public void WriteFile(FilePath path, System.CodeDom.CodeCompileUnit ccu) { WriteFile(path, (TextWriter tw) => provider.GenerateCodeFromCompileUnit(ccu, tw, options)); }
System.CodeDom.CodeCompileUnit GenerateCompileUnit (System.CodeDom.Compiler.CodeDomProvider provider, System.CodeDom.Compiler.CodeGeneratorOptions options, string file, List<NSObjectTypeInfo> types) { var ccu = new System.CodeDom.CodeCompileUnit (); var namespaces = new Dictionary<string, System.CodeDom.CodeNamespace> (); foreach (var t in types) { System.CodeDom.CodeTypeDeclaration type; string nsName; System.CodeDom.CodeNamespace ns; t.GenerateCodeTypeDeclaration (provider, options, infoService.WrapperRoot, out type, out nsName); if (!namespaces.TryGetValue (nsName, out ns)) { namespaces[nsName] = ns = new System.CodeDom.CodeNamespace (nsName); ccu.Namespaces.Add (ns); } ns.Types.Add (type); } return ccu; }
public System.CodeDom.CodeTypeDeclaration ProcessImportedType(System.CodeDom.CodeTypeDeclaration typeDeclaration, System.CodeDom.CodeCompileUnit compileUnit) { //not used return(typeDeclaration); }
System.CodeDom.CodeTypeDeclaration IDataContractSurrogate.ProcessImportedType(System.CodeDom.CodeTypeDeclaration typeDeclaration, System.CodeDom.CodeCompileUnit compileUnit) { if (prevSurrogate != null) { return(prevSurrogate.ProcessImportedType(typeDeclaration, compileUnit)); } return(typeDeclaration); }
public XmlCodeExporter(System.CodeDom.CodeNamespace codeNamespace, System.CodeDom.CodeCompileUnit codeCompileUnit) { }
public static object UploadData(string url, string @namespace, string classname, string methodname, object[] args, ArrayList al) { try { System.Net.WebClient wc = new System.Net.WebClient(); //System.IO.Stream stream = wc.OpenRead(url + "?WSDL"); System.IO.Stream stream = wc.OpenRead(url); System.Web.Services.Description.ServiceDescription sd = System.Web.Services.Description.ServiceDescription.Read(stream); System.Web.Services.Description.ServiceDescriptionImporter sdi = new System.Web.Services.Description.ServiceDescriptionImporter(); sdi.AddServiceDescription(sd, string.Empty, string.Empty); //将sd描述导入到sdi中 System.CodeDom.CodeNamespace cn = new System.CodeDom.CodeNamespace(@namespace); System.CodeDom.CodeCompileUnit ccu = new System.CodeDom.CodeCompileUnit(); ccu.Namespaces.Add(cn); sdi.Import(cn, ccu); Microsoft.CSharp.CSharpCodeProvider csc = new Microsoft.CSharp.CSharpCodeProvider(); System.CodeDom.Compiler.ICodeCompiler icc = csc.CreateCompiler(); System.CodeDom.Compiler.CompilerParameters cplist = new System.CodeDom.Compiler.CompilerParameters(); cplist.GenerateExecutable = false; cplist.GenerateInMemory = true; cplist.ReferencedAssemblies.Add("System.dll"); cplist.ReferencedAssemblies.Add("System.XML.dll"); cplist.ReferencedAssemblies.Add("System.Web.Services.dll"); cplist.ReferencedAssemblies.Add("System.Data.dll"); System.CodeDom.Compiler.CompilerResults cr = icc.CompileAssemblyFromDom(cplist, ccu); if (cr.Errors.HasErrors) { System.Text.StringBuilder sb = new System.Text.StringBuilder(); foreach (System.CodeDom.Compiler.CompilerError ce in cr.Errors) { sb.Append(ce.ToString()); sb.Append(System.Environment.NewLine); } throw new Exception(sb.ToString()); } System.Reflection.Assembly assembly = cr.CompiledAssembly; Type t = assembly.GetType(@namespace + "." + classname, true, true); object obj = Activator.CreateInstance(t); ParameterModifier[] paramsModifer = new ParameterModifier[1]; paramsModifer[0] = new ParameterModifier(args.Length); //paramsModifer[0][7] = true; object result = t.InvokeMember(methodname, BindingFlags.Default | BindingFlags.InvokeMethod, null, obj, args, paramsModifer, null, null); //al.Add(args[7]); return result; } catch (Exception ex) { WriteLog(ex.Message, EXCEPTION_LOG_TITLE); return null; } }