0

我想加载一个程序集(dll-test.dll),并运行该方法GetLabel

namespace Dlltest.Test
{
    public class Main
    {
        public string GetLabel()
        {
            string test = "TestString";
            return test;
        }
    }
}

我有以下代码但是我无法运行GetLabel

Assembly assembly = Assembly.LoadFile(@"C:\dll-test.dll");
Type type = assembly.GetType();
var obj = Activator.CreateInstance(type);

var result = type.InvokeMember("GetLabel",
                              BindingFlags.Default | BindingFlags.InvokeMethod,
                              null,
                              obj,
                              null);

MessageBox.Show(result.ToString);

它应该显示一个带有TestString.

编辑

我最终使它与:

Assembly assembly = Assembly.LoadFile(@"C:\dll-test.dll");
var type = assembly.GetTypes();
var obj = Activator.CreateInstance(type[0]);

var result = type[0].InvokeMember("GetLabel",
                          BindingFlags.Default | BindingFlags.InvokeMethod,
                          null,
                          obj,
                          null);

MessageBox.Show(result.ToString());
4

2 回答 2

3

排队

Type type = assembly.GetType();

您正在分配assembly变量类型而不是您想要的类型。试试assembly.GetType(type_name)。此外,将“GetGabel”更改为“GetLabel”:)

于 2012-05-16T14:48:04.543 回答
2

尝试

Type type = assembly.GetType("MyType");
if(temp == null) throw new InvalidOperationException();
//...
于 2012-05-16T14:48:30.740 回答