2016-09-20 91 views
0

我有我的DLL:查找类失败并GetMethod调用抛出NullReferenceException异常

using System; 
namespace DLLtest 
{ 
    public static class TestDll 
    { 
     public static void TestVoid() 
     { 
      Console.WriteLine("TestVoid called"); 
     } 
    } 
} 

,并在我的节目我做:

Assembly a = Assembly.LoadFile(
    Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "DLLtest.dll")); 
var b = a.GetType("TestDll").GetMethod("TestVoid"); 
b.Invoke(null, new object[] { }); 

我也得到NullReferenceException的 “var b...” 行(确实如What is a NullReferenceException, and how do I fix it?所解释的那样,有些东西是空的,但是程序集已经加载并且类应该在那里)。

我尝试添加的BindingFlags,但总是同样的错误......

+1

我不认为应该重复的问题与OP的错误有任何关系。 – RafaelC

+0

@RafaelCardoso空引用副本被滥用。 – LarsTech

+0

我认为OP还需要将'a'作为第一个参数传递给'Invoke'调用,否则'Invoke'将不知道要调用哪个对象。编辑:这个建议是不正确的,问题示例中的方法是静态的。 – cskwrd

回答

4

类型的名称是DLLTest.TestDll - 所以你得到null搜索只是TestDll

修复:

  • 使用完整的类名称
  • 得到集中的所有类型,并通过匹配名称的一部分查找类型。
+0

他正在寻找'DLLTest.dll'而不是'TestDll' – RafaelC

+0

哦,这就是问题所在...... 谢谢:) – TheChilliPL

+0

@RafaelCardoso OP是*正在加载*“DLLTest.dll”(它应该工作正常,假设DLL在应用程序的文件夹中,也会抛出,如果你不能加载DLL),但GetType(“TestDll”)'应该失败,因为使用部分班级名称。 –