Click here to Skip to main content
Click here to Skip to main content

Evaluate C# Code (Eval Function)

By , 12 Oct 2005
 

Sample Image - EvalCSCode.jpg

Introduction

This example shows an "Eval" function for C# and implements different usages of this evaluate function. The library is written in C# and can be tested with the MainForm in the solution.

Source view

Here you will see all the trick. The code generates a class structure with a basic "function prototype" in which the code to evaluate is filled in. The execution of the function should execute your code:

// Eval > Evaluates C# sourcelanguage
public static object Eval(string sCSCode) {

  CSharpCodeProvider c = new CSharpCodeProvider();
  ICodeCompiler icc = c.CreateCompiler();
  CompilerParameters cp = new CompilerParameters();

  cp.ReferencedAssemblies.Add("system.dll");
  cp.ReferencedAssemblies.Add("system.xml.dll");
  cp.ReferencedAssemblies.Add("system.data.dll");
  cp.ReferencedAssemblies.Add("system.windows.forms.dll");
  cp.ReferencedAssemblies.Add("system.drawing.dll");

  cp.CompilerOptions = "/t:library";
  cp.GenerateInMemory = true;

  StringBuilder sb = new StringBuilder("");
  sb.Append("using System;\n" );
  sb.Append("using System.Xml;\n");
  sb.Append("using System.Data;\n");
  sb.Append("using System.Data.SqlClient;\n");
  sb.Append("using System.Windows.Forms;\n");
  sb.Append("using System.Drawing;\n");

  sb.Append("namespace CSCodeEvaler{ \n");
  sb.Append("public class CSCodeEvaler{ \n");
  sb.Append("public object EvalCode(){\n");
  sb.Append("return "+sCSCode+"; \n");
  sb.Append("} \n");
  sb.Append("} \n");
  sb.Append("}\n");

  CompilerResults cr = icc.CompileAssemblyFromSource(cp, sb.ToString());
  if( cr.Errors.Count > 0 ){
      MessageBox.Show("ERROR: " + cr.Errors[0].ErrorText, 
         "Error evaluating cs code", MessageBoxButtons.OK, 
         MessageBoxIcon.Error );
      return null;
  }

  System.Reflection.Assembly a = cr.CompiledAssembly;
  object o = a.CreateInstance("CSCodeEvaler.CSCodeEvaler");

  Type t = o.GetType();
  MethodInfo mi = t.GetMethod("EvalCode");

  object s = mi.Invoke(o, null);
  return s;

}

Thanks fly out to:

Credits:

  • Kim Hauser (dave) - Application Developer & System Engineer.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

kim.david.hauser
Software Developer (Senior)
Switzerland Switzerland
Member
programmer and software junkie since 1991 zurich switzerland

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
Hint: For improved responsiveness ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
QuestionGood workmemberSm.Abdullah6 Oct '12 - 20:13 
QuestionHow do you replace a string at a given position with it's working code representative?memberLarissa Schön17 Mar '12 - 0:47 
GeneralAwesome, though quick questionmembermbainrot10 Apr '09 - 21:03 
QuestionEvalToObject Questionmembergravelkm14 Nov '08 - 2:43 
Questioncan a web project use "ReferencedAssemblies.Add("customer.dll")"memberwlbkeats7 Dec '06 - 23:34 
AnswerRe: can a web project use "ReferencedAssemblies.Add("customer.dll")"memberlzuxiaolong27 Nov '12 - 15:13 
GeneralUses of EvalmemberAnup Shinde29 Sep '06 - 16:06 
GeneralTotal waste of time...membermarkman@shaw.ca3 Mar '06 - 12:08 
GeneralRe: Total waste of time...memberPascal Ganaye20 Mar '06 - 9:12 
GeneralRe: Total waste of time...membermarkman@shaw.ca21 Mar '06 - 5:54 
GeneralRe: Total waste of time...memberGraham Harrison11 Jan '07 - 23:34 
GeneralAn Eval Function for C# using JScript.NET (JavaScript)memberMichael Freidgeim5 Jan '11 - 0:48 
GeneralRe: Total waste of time...memberkim.hauser8 Feb '07 - 2:37 
GeneralRe: Total waste of time...membermarketware30 Aug '07 - 11:25 
GeneralRe: Total waste of time...membermarketware31 Aug '07 - 11:08 
GeneralI dont think Total waste of time..memberMidax27 Apr '10 - 9:40 
QuestionUsesmemberEvilToilet23 Oct '05 - 9:15 
AnswerRe: Usesmemberkim.hauser2 Nov '05 - 11:03 
GeneralThanks for review...memberkim.hauser21 Oct '05 - 10:13 
QuestionUsing a static method insteadmemberanonymous19 Oct '05 - 20:07 
AnswerRe: Using a static method insteadmemberaprenot21 Oct '05 - 10:17 
GeneralRe: Using a static method insteadmemberToli Cuturicu20 Dec '10 - 11:22 
GeneralExcellent! Butmembercccccbbbbb19 Oct '05 - 14:41 
GeneralRe: Excellent! Butmemberkim.hauser22 Oct '05 - 0:29 
AnswerRe: Excellent! ButmemberKevan Davis1 Dec '06 - 11:18 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Permalink | Advertise | Privacy | Mobile
Web01 | 2.6.130516.1 | Last Updated 13 Oct 2005
Article Copyright 2005 by kim.david.hauser
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid