如何从程序集动态实例化C#类,然后运行一个

时间:2016-03-27 12:55:14

标签: c# .net

我有一个名为“Gcim.Management.Module.dll”的程序集(除了我正在运行的程序集之外),我需要实例化一个特定的类:

Assembly myAssembly = Assembly.LoadFile(@"C:\Projects\Gcim.Management\Gcim.Management.Module\bin\Debug\Gcim.Management.Module.dll");

我感兴趣的课程名称为“DataSources”。 我正在尝试迭代这个程序集并匹配我正在寻找的名称:

var types = myAssembly.ManifestModule.GetTypes();

foreach (var item in types)
{
    if(item.Name == "DataSources")
    {
        Type myType = Type.GetType(item.FullName);

        object targetObject = ObjectSpace.CreateObject(myType);
    }
}

"ObjectSpace.CreateObject"来自第三方库,要使其正常工作,它需要有效的myType。 我在迭代时得到一个匹配,但在myType

之后Type myType = Type.GetType(item.FullName);仍然为空

获取程序集类型的正确方法是什么,所以我可以实例化该类型的对象?

1 个答案:

答案 0 :(得分:2)

如果item.Name=="DataSources"返回true,那么item就是您想要的类型...不需要调用Type.GetType来获取它。

但是,要回答您的问题,Type.GetType(字符串名称)将仅在当前程序集或“核心”程序集(mscorlib)中按全名返回类型。您可以使用程序集限定名称...

Type.GetType( item.AssemblyQualifiedName )

然后会找到类型。