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);
}
}
}
}
}



浙公网安备 33010602011771号