很多时候需要将某段C# 代码写在配置文件中,后续需要时进行编译;
比如,在配置文件中配置上“"echo.shine"=="echo.shine"”,然后将此段配置文件放进下面的方法中进行编译,就会得出true的值。
View Code
这是很简单的代码,在动态编译中比较实用
public
static
bool getExpressionValue(
string expression)
{
CSharpCodeProvider provider = new CSharpCodeProvider();
CompilerParameters parameter = new CompilerParameters();
parameter.ReferencedAssemblies.Add( " System.dll ");
parameter.GenerateExecutable = false;
parameter.GenerateInMemory = true;
var comp_string = @"
using System;
namespace ANameSpace
{
static class AClass
{
public static object AFunc()
{return " + expression + @" ;}
}
} ";
CompilerResults result = provider.CompileAssemblyFromSource(parameter,
comp_string);
if (result.Errors.Count > 0)
{
return false;
}
else
{
Assembly assembly = result.CompiledAssembly;
Type AType = assembly.GetType( " ANameSpace.AClass ");
MethodInfo method = AType.GetMethod( " AFunc ");
return Convert.ToBoolean(method.Invoke( null, null));
}
}
{
CSharpCodeProvider provider = new CSharpCodeProvider();
CompilerParameters parameter = new CompilerParameters();
parameter.ReferencedAssemblies.Add( " System.dll ");
parameter.GenerateExecutable = false;
parameter.GenerateInMemory = true;
var comp_string = @"
using System;
namespace ANameSpace
{
static class AClass
{
public static object AFunc()
{return " + expression + @" ;}
}
} ";
CompilerResults result = provider.CompileAssemblyFromSource(parameter,
comp_string);
if (result.Errors.Count > 0)
{
return false;
}
else
{
Assembly assembly = result.CompiledAssembly;
Type AType = assembly.GetType( " ANameSpace.AClass ");
MethodInfo method = AType.GetMethod( " AFunc ");
return Convert.ToBoolean(method.Invoke( null, null));
}
}