草原上的野狼

啸苍天,没日月,孤单影只; 忍地寒,耐绝境,经熔炼,将成大业!

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::


using System;
using System.CodeDom.Compiler;
using System.Collections;
using System.IO;
using System.Reflection;
using System.Text;

namespace news.newsscript.impl
{
    
/// <summary>
    
/// Summary description for NewsCSharpScriptExcuter.
    
/// </summary>

    public class NewsCSharpScriptExcuter:AbstractNewsScriptExcuter
    
{
        
public NewsCSharpScriptExcuter()
        
{
            
//
            
// TODO: Add constructor logic here
            
//
        }


        
private CodeDomProvider provider;

        
private ICodeCompiler compiler;
        
        
private CompilerResults results;
        
        
private CompilerParameters compilerparams;

        
public override object RunNewsScript(object param)
        
{
            
return RunCSharpScript(Path,param);
        }



        
private object RunCSharpScript(string directory ,object param)
        
{
            DirectoryInfo directoryInfo 
=new DirectoryInfo(directory);
            provider 
= new Microsoft.CSharp.CSharpCodeProvider();
            compiler
= provider.CreateCompiler();
            compilerparams 
= new CompilerParameters();
            
//compilerparams.GenerateInMemory = true;
            compilerparams.ReferencedAssemblies.Add("System.dll");
            compilerparams.ReferencedAssemblies.Add(
"System.Windows.Forms.Dll");
            compilerparams.ReferencedAssemblies.Add(
"System.Configuration.Install.dll");
            compilerparams.ReferencedAssemblies.Add(
"System.Data.dll");
            compilerparams.ReferencedAssemblies.Add(
"System.Design.dll");
            compilerparams.ReferencedAssemblies.Add(
"System.DirectoryServices.dll");
            compilerparams.ReferencedAssemblies.Add(
"System.Drawing.Design.dll");
            compilerparams.ReferencedAssemblies.Add(
"System.Drawing.dll");
            compilerparams.ReferencedAssemblies.Add(
"System.EnterpriseServices.dll");
            compilerparams.ReferencedAssemblies.Add(
"System.Management.dll");
            compilerparams.ReferencedAssemblies.Add(
"System.Runtime.Remoting.dll");
            compilerparams.ReferencedAssemblies.Add(
"System.Messaging.dll");
            compilerparams.ReferencedAssemblies.Add(
"System.Security.dll");
            compilerparams.ReferencedAssemblies.Add(
"System.ServiceProcess.dll");
            compilerparams.ReferencedAssemblies.Add(
"System.XML.dll");
            compilerparams.GenerateExecutable 
= true;
            results 
= compiler.CompileAssemblyFromFileBatch(compilerparams,GetFileList(directoryInfo));
            
if (results.Errors.HasErrors)
            
{
                StringBuilder errors 
= new StringBuilder();
                
foreach(System.CodeDom.Compiler.CompilerError error in results.Errors)
                
{
                    errors.Append(error.ErrorText 
+ "\r\n");                    
                }

                
throw new NewsScriptCompileException(errors.ToString());
            }

            
else
            
{
                
try
                
{
                    Assembly generatedAssembly 
= results.CompiledAssembly;
                    
object obj = null;
                    
if (string.IsNullOrEmpty(this.ProcedureName)) {
                        obj 
= CallEntry(generatedAssembly, "NewsMainScript", param);
                    }
 else {
                        obj 
= CallEntry(generatedAssembly, ProcedureName, param);
                    }

                    
return obj;
                }

                
catch(Exception ex)
                
{
                    
throw new NewsScriptRuntimeException(ex.Message,ex);
                }

            }

        }

    }

}

 

posted on 2008-10-24 10:13  血狼  阅读(506)  评论(0)    收藏  举报