示例#1
0
        public static Assembly BuildInMemory(string code, out string errors)
        {
            CSharpCodeProvider cp   = new CSharpCodeProvider();
            CompilerParameters cpar = new CompilerParameters();

            cpar.GenerateInMemory   = true;
            cpar.GenerateExecutable = false;

            cpar.ReferencedAssemblies.Add("system.dll");
            cpar.ReferencedAssemblies.Add(Assembly.GetAssembly(typeof(Vector2)).Location); //"Microsoft.Xna.Framework, Version=3.0.0.0, PublicKeyToken=6d5c3888ef60e27d");
            cpar.ReferencedAssemblies.Add("Gnomic.dll");
            cpar.ReferencedAssemblies.Add("SquareHeroesTypes.dll");

            CompilerResults cr = cp.CompileAssemblyFromSource(cpar, new string[] { code });

            cp.Dispose();

            errors = "";
            if (cr.Errors.Count == 0 && cr.CompiledAssembly != null)
            {
                return(cr.CompiledAssembly);
            }

            for (int i = 0; i < cr.Errors.Count; i++)
            {
                errors += cr.Errors[i].ErrorText + "\n";
            }
            return(null);
        }
 public void Dispose()
 {
     if (null != compiler)
     {
         compiler.Dispose();
     }
 }
示例#3
0
        /// <inheritdoc />
        protected override bool OnStepStart()
        {
            var codeProvider   = new CSharpCodeProvider();
            var rspFilePath    = MakeResponseFile();
            var compilerParams = MakeCompilerParameters(rspFilePath);

            // create a missing directory path
            var directoryPath = PathHelpers.GetDirectoryName(OutputPath);

            if (!Directory.Exists(directoryPath))
            {
                Directory.CreateDirectory(directoryPath);
            }

            // compile the DLL then dispose of code provider
            var compilerResults = codeProvider.CompileAssemblyFromFile(compilerParams);

            codeProvider.Dispose();

            if (!compilerResults.Errors.HasErrors)
            {
                return(true);
            }

            foreach (CompilerError compilerError in compilerResults.Errors)
            {
                RockLog.WriteLine(this, compilerError.IsWarning
                    ? LogTier.Warning
                    : LogTier.Error, compilerError.ToString());
            }

            return(false);
        }
 private bool CompileCSharpCode(string script, string filename, out List <string> errors)
 {
     errors = new List <string>();
     try
     {
         CSharpCodeProvider provider = new CSharpCodeProvider();
         CompilerParameters cp       = new CompilerParameters
         {
             GenerateInMemory        = false,
             GenerateExecutable      = false,
             IncludeDebugInformation = true,
             OutputAssembly          = filename,
         };
         cp.ReferencedAssemblies.Add("System.dll");
         cp.ReferencedAssemblies.Add("Newtonsoft.Json.dll");
         cp.ReferencedAssemblies.Add("System.ComponentModel.DataAnnotations.dll");
         CompilerResults cr = provider.CompileAssemblyFromSource(cp, script);
         if (cr.Errors.Count > 0)
         {
             foreach (CompilerError ce in cr.Errors)
             {
                 errors.Add(ce.ToString());
             }
             return(false);
         }
         provider.Dispose();
     }
     catch (Exception e)
     {
         errors.Add("Error: " + e.Message + e.StackTrace.ToString());
         return(false);
     }
     return(true);
 }
    public static Assembly CompileInMemory(string code)
    {
        var provider = new CSharpCodeProvider(new Dictionary <string, string>()
        {
            { "CompilerVersion", "v4.0" }
        });

        CompilerParameters options = new CompilerParameters();

        options.ReferencedAssemblies.Add("System.dll");
        options.ReferencedAssemblies.Add("System.Core.dll");
        options.ReferencedAssemblies.Add("WindowsBase.dll");
        options.ReferencedAssemblies.Add("PresentationFramework.dll");
        options.ReferencedAssemblies.Add("PresentationCore.dll");
        options.IncludeDebugInformation = false;
        options.GenerateExecutable      = false;
        options.GenerateInMemory        = true;
        CompilerResults results = provider.CompileAssemblyFromSource(options, code);

        provider.Dispose();
        if (results.Errors.Count == 0)
        {
            return(results.CompiledAssembly);
        }
        else
        {
            return(null);
        }
    }
示例#6
0
文件: Form1.cs 项目: nougatchi/dreary
 private void createOneExecuteScriptToolStripMenuItem_Click(object sender, EventArgs e)
 {
     try
     {
         Forms.OneExecute ox = new Forms.OneExecute();
         ox.ShowDialog();
         CSharpCodeProvider provider   = new CSharpCodeProvider();
         CompilerParameters parameters = new CompilerParameters();
         parameters.GenerateInMemory = true;
         parameters.ReferencedAssemblies.Add("System.dll");
         parameters.ReferencedAssemblies.Add("System.Windows.Forms.dll");
         parameters.ReferencedAssemblies.Add("dal.dll");
         parameters.ReferencedAssemblies.Add("dgl.dll");
         parameters.ReferencedAssemblies.Add("dglw.dll");
         parameters.ReferencedAssemblies.Add("dreary.exe");
         Console.WriteLine("Code transmorgified: \n" + TransmorgifyCode(ox.output, true));
         CompilerResults results = provider.CompileAssemblyFromSource(parameters, TransmorgifyCode(ox.output, true));
         foreach (string i in results.Output)
         {
             Console.WriteLine(i);
         }
         foreach (CompilerError i in results.Errors)
         {
             Console.WriteLine("[ERROR in JIT Code] " + i.ErrorText);
         }
         results.CompiledAssembly.GetType("RuntimeCode.Code").GetMethod("Entry").Invoke(null, new object[] { scene, pcam, this, 1.0 });
         provider.Dispose();
     }
     catch (Exception exc)
     {
         MessageBox.Show(exc.ToString(), "Script Error");
     }
 }
示例#7
0
        /// <summary>
        /// Writes the current code scope to file.
        /// </summary>
        /// <param name="fileName">File name to write the code to.</param>
        public void WriteToFile(string fileName)
        {
            // Create a new CSharpCodeProvider to generate the code for us.
            CSharpCodeProvider codeProvider = new CSharpCodeProvider();

            // Create a new stream writer to write the file.
            using (StreamWriter writer = new StreamWriter(fileName))
            {
                // Create a new IndentedTextWriter to format the code is a nice mannor.
                IndentedTextWriter tw = new IndentedTextWriter(writer, "    ");

                // Setup the code generation options for style preferences.
                CodeGeneratorOptions options = new CodeGeneratorOptions();
                options.BlankLinesBetweenMembers = true;
                options.BracingStyle             = "C";
                options.VerbatimOrder            = false;

                // Generate the code using the code provider.
                codeProvider.GenerateCodeFromCompileUnit(this.codeUnit, tw, options);

                // Close the text writer.
                tw.Close();
            }

            // Dispose of the code provider.
            codeProvider.Dispose();
        }
示例#8
0
        /// <summary>
        /// 动态编译类
        /// </summary>
        /// <param name="code"></param>
        /// <param name="err"></param>
        /// <returns></returns>
        private static string NewCompilerClass(string code, string nodeId, ref ErrorInfo err)
        {
            string assemblyName = "";
            string pathServer   = AppDomain.CurrentDomain.BaseDirectory + "Easyman.ScriptService.exe";

            #region 判断类库是否存在

            if (!System.IO.File.Exists(pathServer))
            {
                pathServer = AppDomain.CurrentDomain.BaseDirectory + "Bin\\Easyman.ScriptService.exe";
            }

            if (!System.IO.File.Exists(pathServer))
            {
                err.IsError = true;
                err.Message = string.Format("类库【{0}】不存在", pathServer);
                return(null);
            }

            #endregion

            using (CSharpCodeProvider objCSharpCodePrivoder = new CSharpCodeProvider())
            {
                //生成程序集名(动态)
                string assemblyNameTemp = AppDomain.CurrentDomain.BaseDirectory + "dlls\\DynamicalCode_" + nodeId + "_" + DateTime.Now.Ticks + ".dll";

                //ICodeCompiler objICodeCompiler = objCSharpCodePrivoder.CreateCompiler();
                CompilerParameters objCompilerParameters = new CompilerParameters();
                objCompilerParameters.ReferencedAssemblies.Add("System.dll");
                objCompilerParameters.ReferencedAssemblies.Add("System.Windows.Forms.dll");

                //objCompilerParameters.ReferencedAssemblies.Add(AppDomain.CurrentDomain.BaseDirectory + "Easyman.Librarys.dll");
                objCompilerParameters.ReferencedAssemblies.Add(pathServer);

                //objCompilerParameters.GenerateExecutable = false;
                objCompilerParameters.GenerateInMemory = false;
                objCompilerParameters.OutputAssembly   = assemblyNameTemp;

                CompilerResults cr = objCSharpCodePrivoder.CompileAssemblyFromSource(objCompilerParameters, code);
                if (cr.Errors.HasErrors)
                {
                    StringBuilder sb = new StringBuilder("编译错误:");
                    foreach (CompilerError e in cr.Errors)
                    {
                        sb.AppendLine(string.Format("行{0}列{1}:{2}\r\n", e.Line - 12, e.Column, e.ErrorText));
                    }
                    err.IsError = true;
                    err.Message = sb.ToString();

                    //return null;
                }
                else
                {
                    assemblyName = assemblyNameTemp; //赋值返回变量
                }
                objCSharpCodePrivoder.Dispose();     //手动释放
            }
            return(assemblyName);
        }
示例#9
0
 /// <summary>
 /// Releases all the resources used by this object.
 /// </summary>
 public void Dispose()
 {
     if (csCompiler != null)
     {
         csCompiler.Dispose();
         csCompiler = null;
     }
 }
示例#10
0
 protected override void DisposeCore(bool disposing)
 {
     if (disposing)
     {
         _compiler?.Dispose();
         _compiler = null;
     }
 }
示例#11
0
 void IDisposable.Dispose()
 {
     if (run != null)
     {
         run.Dispose();
     }
     _csCodeProvider.Dispose();
 }
示例#12
0
 void Dispose(bool disposing)
 {
     if (provider != null && disposing)
     {
         provider.Dispose();
         provider = null;
     }
 }
示例#13
0
        ///// <summary>
        ///// 获取地址
        ///// </summary>
        ///// <param name="lab"></param>
        ///// <returns></returns>
        //public static string getURL(string lab)
        //{
        //    string URL = string.Empty;

        //    bool IsExist = ConfigurationSettings.AppSettings.AllKeys.Contains(lab);
        //    if (IsExist)
        //    {
        //        URL = ConfigurationSettings.AppSettings[lab];
        //    }
        //    return URL;
        //}

        ///// <summary>
        ///// 执行各地webservice方法
        ///// </summary>
        ///// <param name="lab"></param>
        ///// <returns></returns>
        //public static string Execute(string lab, string methodname, object[] obj)
        //{
        //    if (lab == string.Empty) { return ErrorCode.Login_1001; }

        //    string url = getURL(lab);

        //    if (url == string.Empty)
        //    {
        //        return string.Format(ErrorCode.Login_1002 + " 分点代码[ {0} ]!", lab);
        //    }
        //    return InvokeWebservice(url, "LISWebService", "LISService", methodname, obj).ToString();
        //}


        /// <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/GSP_WorkflowWebservice/common.asmx","Genersoft.Platform.Service.Workflow","Common","GetToolType",new object[]{"1"});
        /// </code>
        /// </example>
        public static object InvokeWebservice(string url, string @namespace, string classname, string methodname, object[] args)
        {
            WebClient wc     = null;
            Stream    stream = null;

            try
            {
                wc     = new WebClient();
                stream = wc.OpenRead(url + "?WSDL");
                ServiceDescription         sd  = ServiceDescription.Read(stream);
                ServiceDescriptionImporter sdi = new ServiceDescriptionImporter();
                sdi.AddServiceDescription(sd, "", "");
                CodeNamespace   cn  = new CodeNamespace(@namespace);
                CodeCompileUnit ccu = new CodeCompileUnit();
                ccu.Namespaces.Add(cn);
                sdi.Import(cn, ccu);

                CSharpCodeProvider csc = new CSharpCodeProvider();
                //CodeDomProvider icc = csc.crete;

                CompilerParameters cplist = new 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");


                CompilerResults cr = CodeDomProvider.CreateProvider("C#").CompileAssemblyFromDom(cplist, ccu);
                if (true == cr.Errors.HasErrors)
                {
                    StringBuilder sb = new StringBuilder();
                    foreach (CompilerError ce in cr.Errors)
                    {
                        sb.Append(ce.ToString());
                        sb.Append(System.Environment.NewLine);
                    }
                    throw new Exception(sb.ToString());
                }
                Assembly   assembly = cr.CompiledAssembly;
                Type       t        = assembly.GetType(@namespace + "." + classname, true, true);
                object     obj      = Activator.CreateInstance(t);
                MethodInfo mi       = t.GetMethod(methodname);
                csc.Dispose();
                return(mi.Invoke(obj, args));
            }
            catch (Exception ex)
            {
                return(string.Format(" {0} \r\n 请求地址:[ {1} ] \r\n  {2}", ex.Message, url, ex.InnerException == null ? "" : ex.InnerException.Message));
            }
            finally
            {
                stream.Close();
                wc.Dispose();
                GC.Collect();
            }
        }
示例#14
0
 public void Dispose()
 {
     _provider?.Dispose();
     if (_ownStream)
     {
         _stream?.Dispose();
     }
     _document?.Dispose();
 }
示例#15
0
        /// <exception cref="Exception"><c>Exception</c>.</exception>
        public void CreateLauncher(bool retributionLauncher)
        {
            LoggingManager.SendMessage("ModPacker - Generating launcher for mod " + ModManager.ModName);

            string          outputPath = m_sOutputDirectory + "Launch " + ModManager.ModName + ".exe";
            CodeDomProvider provider   = null;

            try
            {
                var provOpts = new Dictionary <string, string> {
                    { "CompilerVersion", "v2.0" }
                };
                provider = new CSharpCodeProvider(provOpts);
                var compilerParams = new CompilerParameters
                {
                    GenerateExecutable      = true,
                    IncludeDebugInformation = false,
                    OutputAssembly          = outputPath
                };
                compilerParams.ReferencedAssemblies.Add("System.dll");

                // set an icon if the user wishes to include one
                if (m_sIconPath != string.Empty && File.Exists(m_sIconPath))
                {
                    compilerParams.CompilerOptions = "/win32icon:\"" + m_sIconPath + "\"";
                }
                string tmp = Resources.CrudeLauncherSource.Replace("_MODNAME_", ModManager.ModName);
                tmp = tmp.Replace("_APPID_", retributionLauncher ? GameConstants.RETRIBUTION_APP_ID : GameConstants.CR_APP_ID);
                provider.CompileAssemblyFromSource(compilerParams, tmp);
                provider.Dispose();
            }
            catch (Exception ex)
            {
                if (provider != null)
                {
                    provider.Dispose();
                }
                LoggingManager.SendMessage("ModPacker - Failed to create launcher for mod " + ModManager.ModName);
                LoggingManager.HandleException(ex);
                throw;
            }
            LoggingManager.SendMessage("ModPacker - Successfully created launcher for mod " + ModManager.ModName);
        }
示例#16
0
        private bool disposedValue = false; // To detect redundant calls

        void Dispose(bool disposing)
        {
            if (!disposedValue)
            {
                if (disposing)
                {
                    codeProvider.Dispose();
                }
                disposedValue = true;
            }
        }
示例#17
0
        private bool disposedValue = false; // To detect redundant calls

        protected virtual void Dispose(bool disposing)
        {
            if (!disposedValue)
            {
                disposedValue = true;

                if (disposing)
                {
                    codeProvider.Dispose();
                }
            }
        }
示例#18
0
        static public void Dispose()
        {
            if (CSharpCodeProvider != null)
            {
                CSharpCodeProvider.Dispose();
                CSharpCodeProvider = null;
            }

            if (PythonEngine != null)
            {
                PythonEngine.Runtime.Shutdown();
                PythonEngine = null;
            }
        }
示例#19
0
        protected virtual void Dispose(bool disposing)
        {
            if (_disposed)
            {
                return;
            }

            if (disposing)
            {
                _cSharpCodeProvider.Dispose();
            }

            _disposed = true;
        }
示例#20
0
        private void ThrowIfErrorsIn(CompilerResults results, IEnumerable <SourceFile> files)
        {
            if (results.Errors.Count > 0)
            {
                StringBuilder   message = new StringBuilder();
                CodeDomProvider cSharpCodeProvider;
                try
                {
                    cSharpCodeProvider = CodeDomProvider.GetCompilerInfo("csharp").CreateProvider();
                }
                catch (SecurityException)
                {
                    cSharpCodeProvider = new CSharpCodeProvider();
                }
                catch (ConfigurationException)
                {
                    cSharpCodeProvider = new CSharpCodeProvider();
                }

                try
                {
                    foreach (SourceFile file in files)
                    {
                        CompilerResults result = cSharpCodeProvider.CompileAssemblyFromSource(parameters, file.ConcreteClass);
                        if (result.Errors.Count > 0)
                        {
                            foreach (CompilerError err in result.Errors)
                            {
                                message.AppendLine(string.Format(@"
On '{0}' (class name: {1}) Line {2}, Column {3}, {4} {5}:
{6}
========================================",
                                                                 file.ViewName,
                                                                 file.ClassName,
                                                                 err.Line,
                                                                 err.Column,
                                                                 err.IsWarning ? "Warning" : "Error",
                                                                 err.ErrorNumber,
                                                                 err.ErrorText));
                            }
                        }
                    }
                }
                finally
                {
                    cSharpCodeProvider.Dispose();
                }
                throw new Exception("Error while compiling views: " + message);
            }
        }
        public string Build()
        {
            IEnumerable <FunctionEntry> entries;

            using (StreamReader reader = new StreamReader(_commandOptions.Input, Encoding.GetEncoding("SHIFT_JIS")))
                using (var csv = new CsvReader(reader, new CultureInfo("ja-JP", false)))
                {
                    csv.Configuration.HasHeaderRecord = true;

                    entries = csv.GetRecords <FunctionEntry>().ToList();
                }

            var unit       = new CodeCompileUnit();
            var @namespace = _commandOptions.ClassNamespace != null
                ? new CodeNamespace(_commandOptions.ClassNamespace)
                : new CodeNamespace();
            var @class = new CodeTypeDeclaration(NoConflictSyntaxText(_commandOptions.ClassName));

            @class.IsEnum = _commandOptions.Type == TypeSpec.Enum;
            if (@class.IsEnum)
            {
                @class.BaseTypes.Add(new CodeTypeReference(typeof(long)));
            }

            foreach (FunctionEntry entry in entries)
            {
                var field = new CodeMemberField(typeof(long), SignatureParse(entry.Name, entry.Location));
                field.InitExpression = new CodeSnippetExpression("0x" + entry.Location);
                if (_commandOptions.Type == TypeSpec.Const)
                {
                    field.Attributes = MemberAttributes.Const | MemberAttributes.Public;
                }
                field.Comments.Add(new CodeCommentStatement("<summary>" + EscapeDoc(entry.Signature) + "</summary>", true));

                @class.Members.Add(field);
            }

            @namespace.Types.Add(@class);
            unit.Namespaces.Add(@namespace);

            CSharpCodeProvider provider = new CSharpCodeProvider();

            using (StringWriter writer = new StringWriter())
            {
                provider.GenerateCodeFromCompileUnit(unit, writer, new CodeGeneratorOptions());
                provider.Dispose();

                return(writer.ToString());
            }
        }
示例#22
0
        /// <summary>
        /// 动态编译类
        /// </summary>
        /// <param name="code"></param>
        /// <param name="err"></param>
        /// <returns></returns>
        private static CompilerResults CompilerClass(string code, ref ErrorInfo err)
        {
            string pathServer = AppDomain.CurrentDomain.BaseDirectory + "Easyman.ScriptService.exe";

            #region 判断类库是否存在

            if (!System.IO.File.Exists(pathServer))
            {
                pathServer = AppDomain.CurrentDomain.BaseDirectory + "Bin\\Easyman.ScriptService.exe";
            }

            if (!System.IO.File.Exists(pathServer))
            {
                err.IsError = true;
                err.Message = string.Format("类库【{0}】不存在", pathServer);
                return(null);
            }

            #endregion

            CompilerResults cr = null;//初始化
            using (CSharpCodeProvider objCSharpCodePrivoder = new CSharpCodeProvider())
            {
                ICodeCompiler      objICodeCompiler      = objCSharpCodePrivoder.CreateCompiler();
                CompilerParameters objCompilerParameters = new CompilerParameters();
                objCompilerParameters.ReferencedAssemblies.Add("System.dll");
                objCompilerParameters.ReferencedAssemblies.Add("System.Windows.Forms.dll");
                //objCompilerParameters.ReferencedAssemblies.Add(AppDomain.CurrentDomain.BaseDirectory + "Easyman.Librarys.dll");
                objCompilerParameters.ReferencedAssemblies.Add(pathServer);

                objCompilerParameters.GenerateExecutable = false;
                objCompilerParameters.GenerateInMemory   = true;

                cr = objICodeCompiler.CompileAssemblyFromSource(objCompilerParameters, code);
                if (cr.Errors.HasErrors)
                {
                    StringBuilder sb = new StringBuilder("编译错误:");
                    foreach (CompilerError e in cr.Errors)
                    {
                        sb.AppendLine(string.Format("行{0}列{1}:{2}\r\n", e.Line - 12, e.Column, e.ErrorText));
                    }
                    err.IsError = true;
                    err.Message = sb.ToString();
                    return(null);
                }
                objCSharpCodePrivoder.Dispose();//手动释放
            }
            return(cr);
        }
        protected void AssertCompilationFails(string expectedError, string csharpline)
        {
            CSharpCodeProvider codeProvider = null;

            try
            {
                codeProvider = new CSharpCodeProvider();
                var compilerparams = new CompilerParameters();
                compilerparams.GenerateExecutable = false;
                compilerparams.GenerateInMemory   = true;
                compilerparams.ReferencedAssemblies.Add("System.dll");
                compilerparams.ReferencedAssemblies.Add("System.Core.dll");
                compilerparams.ReferencedAssemblies.Add("System.Numerics.dll");
                compilerparams.ReferencedAssemblies.Add("NGenericDimensions.dll");

                var className = "UnitTestDynamicCompiledCode";

                string codeStr = @"
                 public static class " + className + @"  
                 {
                     public static void Eval()
                     {
                            " + csharpline + @";
                       }
                 }";

                var results = codeProvider.CompileAssemblyFromSource(compilerparams, codeStr);

                var resultsMessage = string.Join(@" | ", results.Errors.OfType <CompilerError>().Select(e => e.ToString()));

                if (string.IsNullOrEmpty(expectedError))
                {
                    Assert.IsFalse(results.Errors.HasErrors, resultsMessage);
                }
                else
                {
                    Assert.IsTrue(resultsMessage.Contains(expectedError), resultsMessage);
                }
            }
            catch (Exception ex)
            {
                Assert.Fail(ex.Message);
            }
            finally
            {
                codeProvider.Dispose();
            }
        }
示例#24
0
        /// <summary>
        /// ±àÒë
        /// </summary>
        /// <param name="code">´úÂë</param>
        /// <param name="errorMessage">´íÎóÐÅÏ¢</param>
        /// <returns></returns>
        public static CodeGenInfo DoCompiler(string code, string className, List <string> dllReference, StringBuilder errorMessage)
        {
            using (CodeDomProvider cdp = new CSharpCodeProvider(_codeProviderVersion))
            {
                // ±àÒëÆ÷µÄ²ÎÊý
                CompilerParameters cp = new CompilerParameters();
                cp.ReferencedAssemblies.Add("System.dll");
                cp.ReferencedAssemblies.Add("System.Data.dll");
                cp.ReferencedAssemblies.Add("System.Xml.dll");
                foreach (string link in dllReference)
                {
                    if (!string.IsNullOrEmpty(link))
                    {
                        string elink = link.Trim('\r', '\n', ' ');
                        if (!string.IsNullOrEmpty(elink))
                        {
                            cp.ReferencedAssemblies.Add(elink);
                        }
                    }
                }

                cp.GenerateExecutable = false;
                cp.GenerateInMemory   = true;
                // ±àÒë½á¹û
                CompilerResults cr = cdp.CompileAssemblyFromSource(cp, code);

                if (cr.Errors.HasErrors)
                {
                    foreach (CompilerError cerror in cr.Errors)
                    {
                        errorMessage.AppendLine(cerror.ToString());
                    }
                    cdp.Dispose();
                    return(null);
                }
                else
                {
                    Assembly    ass     = cr.CompiledAssembly;
                    Type        objType = ass.GetType(className);
                    CodeGenInfo info    = new CodeGenInfo(objType, code);
                    return(info);
                }
            }
        }
示例#25
0
        internal static Assembly GetProxyAssembly(string wsdlUri, string codeNamespace)
        {
            var provider            = new CSharpCodeProvider();
            var client              = new WebClient();
            var referenceAssemblies = new[] { "system.dll", "System.Xml.dll", "System.Web.Services.dll" };
            var wsdlStream          = client.OpenRead(wsdlUri);

            var wsdl       = ServiceDescription.Read(wsdlStream);
            var wsdlImport = new ServiceDescriptionImporter();

            wsdlImport.AddServiceDescription(wsdl, null, null);

            var proxyClassNamespace = new CodeNamespace(codeNamespace);
            var codeCompileUnit     = new CodeCompileUnit();

            codeCompileUnit.Namespaces.Add(proxyClassNamespace);

            var warnings = wsdlImport.Import(proxyClassNamespace, codeCompileUnit);

            if (warnings != 0)
            {
                throw new ApplicationException("SOAPHTTPRequestResponseStep experienced problems while importing the WSDL!");
            }

            var compileParam = new CompilerParameters(referenceAssemblies)
            {
                GenerateInMemory = false,
                OutputAssembly   = GetProxyFileName()
            };

            CompilerResults compilerResults = provider.CompileAssemblyFromDom(compileParam, codeCompileUnit);

            if (compilerResults.Errors.HasErrors)
            {
                throw new ApplicationException("SOAPHTTPRequestResponseStep experienced problems while executing CompileAssemblyFromDom");
            }

            provider.Dispose();

            return(compilerResults.CompiledAssembly);
        }
        public static void Initialize()
        {
            CSharpCodeProvider codeProvider = new CSharpCodeProvider();

            CompilerParameters parameters = new CompilerParameters();

            parameters.GenerateExecutable      = false;
            parameters.GenerateInMemory        = true;
            parameters.OutputAssembly          = string.Empty;
            parameters.IncludeDebugInformation = false;

            parameters.ReferencedAssemblies.Add(Assembly.GetExecutingAssembly().Location);
            parameters.ReferencedAssemblies.Add("System.Drawing.dll");

            var files = Directory.GetFiles(Path.Combine(Environment.CurrentDirectory, PATH)).Where(x => Path.GetExtension(x) == EXTENSION).ToArray();

            CompilerResults results = codeProvider.CompileAssemblyFromFile(parameters, files);

            if (results.Errors.Count > 0)
            {
                StringBuilder sb = new StringBuilder();

                foreach (CompilerError err in results.Errors)
                {
                    sb.AppendLine(string.Format("{0}({1},{2}) : {3}", Path.GetFileName(err.FileName), err.Line, err.Column, err.ErrorText));
                }
                Logger.Write(sb.ToString(), MessageState.WARNING);
                Console.Read();
                Environment.Exit(0);
            }

            codeProvider.Dispose();

            foreach (var type in results.CompiledAssembly.GetTypes())
            {
                Scripts.Add(type.Name, type);
            }
        }
示例#27
0
        internal static Type BuildWithAttrCS(string source, string[] additionalReferencedAssemblies = null)
        {
            CSharpCodeProvider codeProvider = new CSharpCodeProvider();

            CompilerParameters parameters = new CompilerParameters();

            parameters.GenerateExecutable = true;
            parameters.GenerateInMemory   = true;
            parameters.ReferencedAssemblies.Add(typeof(Template.AttrFill).Assembly.Location);
            parameters.ReferencedAssemblies.Add("System.Core.dll");
            parameters.ReferencedAssemblies.Add("System.dll");
            if (additionalReferencedAssemblies != null)
            {
                foreach (string dll in additionalReferencedAssemblies)
                {
                    parameters.ReferencedAssemblies.Add(dll);
                }
            }
            CompilerResults results = codeProvider.CompileAssemblyFromSource(parameters, source);


            if (results.Errors.Count > 0)
            {
                string errs = "";
                foreach (CompilerError CompErr in results.Errors)
                {
                    errs += "Line number " + CompErr.Line +
                            ", Error Number: " + CompErr.ErrorNumber +
                            ", '" + CompErr.ErrorText + ";" + Environment.NewLine + Environment.NewLine;
                }
            }

            var type = results.CompiledAssembly.GetTypes()[0];

            codeProvider.Dispose();

            return(type);
        }
示例#28
0
        private static List <MethodInfo> FindAllMethods <T>()
        {
            var types = Assembly.GetExecutingAssembly().GetTypes();
            // get BinaryReader extension methods from the executing assembly
            var extensionMethods = (from type in types
                                    where type.IsSealed && !type.IsGenericType && !type.IsNested
                                    from method in type.GetMethods(BindingFlags.Static
                                                                   | BindingFlags.Public | BindingFlags.NonPublic)
                                    where method.IsDefined(typeof(ExtensionAttribute), false)
                                    where method.GetParameters()[0].ParameterType == typeof(T)
                                    select method).ToList();

            // trim this down further to one of each return type
            extensionMethods = (from method in extensionMethods
                                group method by method.ReturnType
                                into g
                                select g.First()).ToList();

            var provider = new CSharpCodeProvider();

            var methods = (from method in typeof(T).GetMethods()
                           where method.ReturnType != typeof(void)
                           select method).Where(x =>
            {
                var typeString = provider.CreateValidIdentifier((x.ReturnType).ToString());
                typeString     = typeString.Split('.').Last();
                return(x.Name.ToLower().Contains(typeString.ToLower()));
            }).ToList();

            methods = (from method in methods
                       group method by method.ReturnType
                       into g
                       select g.First()).ToList();
            var totalMethods = methods.Union(extensionMethods).ToList();

            provider.Dispose();
            return(totalMethods);
        }
示例#29
0
    //编译类文件
    private static Assembly CreateDynamiClass(string className, string classSource)
    {
        Assembly           assembly;
        CSharpCodeProvider provider = new CSharpCodeProvider();
        CompilerParameters paras    = new CompilerParameters();

        //paras.ReferencedAssemblies.Add("Assets/Plugins/Editor/Excel/IConfig.dll");
        paras.GenerateExecutable = false;
        paras.GenerateInMemory   = false;
        CompilerResults result = provider.CompileAssemblyFromSource(paras, classSource);

        assembly = result.CompiledAssembly;
        provider.Dispose();
        if (result.Errors.Count > 0)
        {
            foreach (CompilerError vCompilerError in result.Errors)
            {
                Debug.Log("错误:" + vCompilerError.ErrorText);
            }
            return(null);
        }
        return(assembly);
    }
示例#30
0
        private static List <MethodInfo> FindAllMethodsByReturnValue <T>()
        {
            var types = Assembly.GetExecutingAssembly().GetTypes();
            // get BinaryReader extension methods from the executing assembly
            var extensionMethods = (from type in types
                                    where type.IsSealed && !type.IsGenericType && !type.IsNested
                                    from method in type.GetMethods(BindingFlags.Static
                                                                   | BindingFlags.Public | BindingFlags.NonPublic)
                                    where method.IsDefined(typeof(ExtensionAttribute), false)
                                    where method.ReturnType == typeof(void)
                                    where method.Name == "Write"
                                    where method.Parameters().Count > 1 && method.Parameters()[0].ParameterType == typeof(T)
                                    select method).ToList();

            // trim this down further to one of each return type
            extensionMethods = (from method in extensionMethods
                                group method by method.Parameters()[1].ParameterType
                                into g
                                select g.First()).ToList();

            var provider = new CSharpCodeProvider();

            var methods = (from method in typeof(T).GetMethods()
                           where method.ReturnType == typeof(void)
                           where method.Parameters().Count > 0
                           where method.Name == "Write"
                           select method).ToList();

            methods = (from method in methods
                       group method by method.Parameters()[0].ParameterType
                       into g
                       select g.First()).ToList();
            var totalMethods = methods.Union(extensionMethods).ToList();

            provider.Dispose();
            return(totalMethods);
        }