我正在尝试调用我想创建的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[]{"", "", "", ""});
答案 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”值?