Compiler("MessageBox.Show(\""+ sys.kjid + "\");");
呢
呢
解决方案 »
- C#编写的一款工作任务管理小工具,大家提点参考,会发布源码的
- 如何触发其他软件的click事件,希望大家帮忙解决下?
- MDI子窗体切换的事件是什么?
- 急!急!急!在线等:C#中使用WebClient.UploadFile上传文件没权限,如何改权限?
- 利用.net tool command 生成 DevExpress.Key 是什么意思
- 怎样telnet smtp.live.com 25?
- 请教:在c#中怎么读取ini文件中的值,怎样连接数据库?谢谢!
- 这个linq语句怎么写?
- 请教大家一个问题,在c#中的datagrid中的第一列设置成DataGridBoolColumn.......
- C#坛送分王。。。。。。。。。一个不算难的问题,400多分阿。
- 急急急~~打包出现的问题~~~~
- [求助]不同客户端用Socket发送同一数据,服务端接收到的数据却不同
Compiler(string code, string kjid)
{
code =code.substring(0,code.length-2)+"\""+kjid+"\");";
...
..
}
private void button1_Click(object sender, EventArgs e)
{
Compiler("MessageBox.Show();",sys.kjid);
}
欢迎使用CSDN 小秘书
***********************************************************[/align]
改造
MethodInfo vTest = vTemp.GetType().GetMethod("Test");
vTest.Invoke(vTemp, null);GetMethod有重载方法,可以加参数
动态创建代码。然后再反射
param.ReferencedAssemblies.Add(AppDomain.CurrentDomain.BaseDirectory + "a.exe");
/// <summary>
/// 执行代码,返回结果(默认引用了System.dll、System.Data.dll、System.Xml.dll、System.Web.dll 4个程序集)
/// </summary>
/// <param name="code">代码</param>
/// <param name="arrReferencedAssemblies">要引用的程序集</param>
/// <returns></returns>
public static object ExecuteCode(string code, string[] arrReferencedAssemblies)
{
CSharpCodeProvider objCSharpCodePrivoder = new CSharpCodeProvider(); CompilerParameters objCompilerParameters = new CompilerParameters();
objCompilerParameters.ReferencedAssemblies.Add("System.dll"); //引用dll
objCompilerParameters.ReferencedAssemblies.Add("System.Data.dll"); //引用dll
objCompilerParameters.ReferencedAssemblies.Add("System.Xml.dll"); //引用dll
objCompilerParameters.ReferencedAssemblies.Add("System.Web.dll"); //引用dll
if (arrReferencedAssemblies != null)
foreach (string item in arrReferencedAssemblies)
objCompilerParameters.ReferencedAssemblies.Add(item);
objCompilerParameters.GenerateExecutable = false;
objCompilerParameters.GenerateInMemory = true; CompilerResults cr = (objCSharpCodePrivoder.CompileAssemblyFromSource(objCompilerParameters,
new [] { GenerateCode(code) })); if (cr.Errors.HasErrors)
{
StringBuilder l_err = new StringBuilder("编译错误:");
foreach (CompilerError err in cr.Errors)
{
l_err.AppendLine(err.ErrorText);
}
return l_err.ToString();
}
// 通过反射,调用HelloWorld的实例
Assembly objAssembly = cr.CompiledAssembly;
object objHelloWorld = objAssembly.CreateInstance("CommonOtherDynamicCodeGenerate.CommonOtherDynamicCodeGenerateClass");
MethodInfo objMI = objHelloWorld.GetType().GetMethod("OutPut");
// 调用执行
return objMI.Invoke(objHelloWorld, null);
} /// <summary>
/// 执行代码,返回结果(默认引用了System.dll、System.Data.dll、System.Xml.dll 3个程序集)
/// </summary>
/// <param name="code"></param>
/// <returns></returns>
public static object ExecuteCode(string code)
{
return ExecuteCode(code, null);
} private static string GenerateCode(string code)
{
StringBuilder sb = new StringBuilder();
sb.Append("using System;");
sb.Append(Environment.NewLine);
sb.Append("using System.Text;");
sb.Append(Environment.NewLine);
sb.Append("using System.IO;");
sb.Append(Environment.NewLine);
sb.Append("using System.Data;");
sb.Append(Environment.NewLine);
sb.Append("using System.Xml;");
sb.Append(Environment.NewLine);
sb.Append("using System.Web;");
sb.Append(Environment.NewLine);
sb.Append("using System.Collections;");
sb.Append(Environment.NewLine);
sb.Append("using System.Collections.Generic;");
sb.Append(Environment.NewLine);
sb.Append("namespace CommonOtherDynamicCodeGenerate");
sb.Append(Environment.NewLine);
sb.Append("{");
sb.Append(Environment.NewLine);
sb.Append(" public class CommonOtherDynamicCodeGenerateClass");
sb.Append(Environment.NewLine);
sb.Append(" {");
sb.Append(Environment.NewLine);
sb.Append(" public object OutPut()");
sb.Append(Environment.NewLine);
sb.Append(" {");
sb.Append(Environment.NewLine);
sb.Append(" return " + code + ";");
sb.Append(Environment.NewLine);
sb.Append(" }");
sb.Append(Environment.NewLine);
sb.Append(" }");
sb.Append(Environment.NewLine);
sb.Append("}"); return sb.ToString();
}
#endregion