我的C#动态DLL引用返回值不能为空

时间:2011-07-07 22:25:29

标签: c# dll dynamic

我正在尝试调用我想创建的DLL,我想动态加载。

DLL的类定义

namespace pqs.Utilities
{
    public class Transform
    {
        public string ImportXMLFile(string cFileSource, string VirtDir, string cFileXSLT, string cFileDest)
        {

但是当我在下面调用这段代码时,我得到的值不能为空。参数名称:类型 我不明白为什么..

    string ClasstoInstantiate = "pqs.Utilities.pqs_util_Transform.Transform";
    Type classType = Type.GetType(ClasstoInstantiate);
    object o = Activator.CreateInstance(classType);
    string x;
    x= (string) classType.InvokeMember("ImportXMLFile",
     BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.Public,
     null, o, new object[]{"", "", "", ""});

2 个答案:

答案 0 :(得分:4)

Type.GetType仅查找执行和mscorlib程序集。它不知道你的pqs_util_Transform集会。您需要传递一个程序集限定的类型名称,例如

string classToInstantiate = "pqs.Utilities.Transform, pqs_util_Transform";
                                                    ^^^^^^^^^^^^^^^^^^^^

其中pqs_util_Transform是包含Transform类的程序集(DLL)的名称。请注意,DLL名称放在逗号之后,而不是在命名空间和类名之间,这是您目前正在执行的操作。

有关程序集限定名称格式的详细信息,请参阅Type.AssemblyQualifiedName,尤其是在需要处理版本控制,GACed程序集等时。

答案 1 :(得分:0)

我认为您应该首先使用Assembly.Load方法动态加载程序集。加载程序集后,您应该能够创建类的实例。看来,ClasstoInstantiate变量似乎是错误的。不应该是:“pqs.Utilities.Transform,assemblyName”值?