none
程序集问题 RRS feed

  • 问题

  • 我需要在一个不包含System.Windows.Form 命名空间的程序域中使用Message.Show()方法,用assembly.Load()来动态加载程序集,请问,我应该如何写代码?
     Assembly ass = Assembly.Load("System.Windows.Forms");
                object obj = ass.CreateInstance("System.Windows.Forms.MessageBox");
                Type typ = obj.GetType();
                MethodInfo mtd = typ.GetMethod("Show");
                mtd.Invoke(obj, null);
    然后,调用MessageBox.Show();方法 里面是两个string类型的参数  提示找不到MessageBox
    请问,我写的有什么问题,该如何解决? 谢谢
    • 已编辑 chumen 2009年12月15日 8:33
    2009年12月11日 8:58

答案

  • 你好!
         可以用反射来实现:
                Assembly a=Assembly.Load("System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
               
                Type t=a.GetType("System.Windows.Forms.MessageBox");
                t.InvokeMember("Show", BindingFlags.InvokeMethod, null, null, new object[] { "asdf","消息" });
    周雪峰
    • 已标记为答案 chumen 2009年12月11日 13:32
    • 取消答案标记 chumen 2009年12月15日 8:28
    • 已建议为答案 Riquel_DongModerator 2009年12月16日 1:57
    • 取消建议作为答案 chumen 2009年12月16日 7:12
    • 已标记为答案 YiChun Chen 2009年12月18日 3:01
    2009年12月11日 12:00
    版主

全部回复

  • 加载弱命名程序集,
    你首先添加引用该 dll
    然后
    Assembly assembly = Assembly.Load("MyAssembly");//MyAssembly程序集名称
    努力+方法=成功
    2009年12月11日 9:23
  • 你好!
         可以用反射来实现:
                Assembly a=Assembly.Load("System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
               
                Type t=a.GetType("System.Windows.Forms.MessageBox");
                t.InvokeMember("Show", BindingFlags.InvokeMethod, null, null, new object[] { "asdf","消息" });
    周雪峰
    • 已标记为答案 chumen 2009年12月11日 13:32
    • 取消答案标记 chumen 2009年12月15日 8:28
    • 已建议为答案 Riquel_DongModerator 2009年12月16日 1:57
    • 取消建议作为答案 chumen 2009年12月16日 7:12
    • 已标记为答案 YiChun Chen 2009年12月18日 3:01
    2009年12月11日 12:00
    版主