blob: cbdb5b83f91eb857ce1e2a8a9fbba74dc977f8de (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
// SIDFX
// Copyright (C) 2004 Ian Cowburn
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// $Id$
//
using System;
using Microsoft.CSharp;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.Reflection;
namespace SIDFX
{
/// <summary>
/// Description of CompileScript.
/// </summary>
public class CompileScript
{
// -------------------------------------------------------
// PUBLIC
// -------------------------------------------------------
public CompileScript(string script)
{
try
{
script="using System;using SIDFX;\nusing System.Threading;\nclass Script { public void Main() {\n"+script;
script=script+"}}";
m_provider=new CSharpCodeProvider();
m_compiler=m_provider.CreateCompiler();
m_param=new CompilerParameters();
m_param.GenerateExecutable=false;
m_param.GenerateInMemory=true;
m_param.OutputAssembly=null;
m_param.MainClass="Script.Main";
m_param.IncludeDebugInformation=false;
foreach (Assembly a in AppDomain.CurrentDomain.GetAssemblies()) {
m_param.ReferencedAssemblies.Add(a.Location);
}
m_results=m_compiler.CompileAssemblyFromSource(m_param,script);
}
catch
{
throw;
}
}
public bool HasErrors
{
get
{
if (m_results!=null)
{
return m_results.Errors.Count>0;
}
else
{
return true;
}
}
}
public CompilerErrorCollection Errors
{
get {return m_results.Errors;}
}
public void Run()
{
if (!HasErrors)
{
object o = m_results.CompiledAssembly.CreateInstance("Script");
Type type = o.GetType();
MethodInfo m = type.GetMethod("Main");
m.Invoke(o, null);
}
}
// -------------------------------------------------------
// PRIVATE
// -------------------------------------------------------
private CSharpCodeProvider m_provider=null;
private ICodeCompiler m_compiler=null;
private CompilerParameters m_param=null;
private CompilerResults m_results=null;
}
}
|