原来的:using System;
using System.Reflection;
public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        System.Reflection.Assembly asm = Assembly.Load("__code");
        Type tp = asm.GetType("Tools");
        if (tp != null)
        {
            object o = Activator.CreateInstance(tp);//创建实例
            MethodInfo mi = tp.GetMethod("Reg");//反射方法
            object ret = mi.Invoke(o, null);//执行方法
            string str = ret.ToString();//获取结果
        }
    }
}using System;
/// 
/// Test 的摘要说明
/// 
public class Tools
{
public  string Reg()
{
        return "aa";
}
}测试OK
现在我改为System.Reflection.Assembly asm = Assembly.Load("__code");
Type tp = asm.GetType("System.Web.UI.ScriptManager");
if (tp != null)
{
    object o = Activator.CreateInstance(tp);//创建实例
    MethodInfo mi = tp.GetMethod("RegisterClientScriptBlock");//反射方法
    Type tpUpPanel = asm.GetType("System.Web.UI.UpdatePanel");
    object[] objPara = new Object[] { (Page)System.Web.HttpContext.Current.Handler, tpUpPanel, "Message", "alert('Message')", true };
    object ret = mi.Invoke(o, objPara);//执行方法
    string str = ret.ToString();//获取结果
}
这里的tp就为null了还有我想问一下 这个“__code” 是什么东西 以前的“ASP.”还知道
但这个__code 在程序里面都引用不出谢谢

解决方案 »

  1.   

    加载App_Code中的程序集,
    System.Web.UI.ScriptManager不在App_Code中,当然唯null啦
      

  2.   

    RE:
    那System.Web.UI.ScriptManager
    在什么地方啊
    -------------------------------------System.Web.UI
    没有啊
      

  3.   

    ScriptManager在程序集System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35中
                System.Reflection.Assembly asm = Assembly.Load("System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35");
                Type tp = asm.GetType("System.Web.UI.ScriptManager");
                if (tp != null)
                {
                    object o = Activator.CreateInstance(tp);//创建实例
                    MethodInfo mi = tp.GetMethod("RegisterClientScriptBlock");//反射方法
                    Type tpUpPanel = asm.GetType("System.Web.UI.UpdatePanel");
                    object[] objPara = new Object[] { (Page)System.Web.HttpContext.Current.Handler, tpUpPanel, "Message", "alert('Message')", true };
                    object ret = mi.Invoke(o, objPara);//执行方法
                    string str = ret.ToString();//获取结果
                }不过我觉得你这个代码应该还是有问题的,因为RegisterClientScriptBlock有多个重载版本,你获取mi的时候应该会出错
      

  4.   


                System.Reflection.Assembly asm = Assembly.Load("System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35");
                Type tp = asm.GetType("System.Web.UI.ScriptManager");
                if (tp != null)
                {
                    object o = Activator.CreateInstance(tp);//创建实例
                    MethodInfo mi = tp.GetMethod("RegisterClientScriptBlock", new Type[] { typeof(Control), typeof(Type), typeof(string), typeof(string), typeof(bool) });//反射方法
                    mi.Invoke(o, new object[] { this, this.GetType(), "Message", "alert('Message')", true });
                }
    测试通过了
      

  5.   

    你把
    System.Reflection.Assembly asm = Assembly.Load("__code");
    改为System.Reflection.Assembly asm = Assembly.LoadFrom("D:\\Tools.dll");  //这样比较直观点,Tools.dll类库所生成的dll