无法从 Windows 服务调用动态加载的 DLL 中的类

Posted

技术标签:

【中文标题】无法从 Windows 服务调用动态加载的 DLL 中的类【英文标题】:Fail to invoke class in dynamic loaded DLL from windows service 【发布时间】:2012-12-19 07:34:01 【问题描述】:

这是我在 C# DLL 中的类

namespace MyNS

    public class MyClass
    
        public static int Execute(string logKey, 
                                  string key, 
                                  XmlNode xmlPars)
        
            return 0
        
    

我在运行时加载 DLL 并将 Class Type 加载到 _type 变量中。但是当我像这样从 Windows 服务调用函数 Execute 时:

counter = (int)_type.InvokeMember("Execute", 
                                  BindingFlags.Public |
                                  BindingFlags.InvokeMethod | 
                                  BindingFlags.Static, 
                                  null, 
                                  null, 
                                  new object[]  
                                                  logKey, 
                                                  Key, 
                                                  _xmlParams 
                                                );

我得到“调用的目标已抛出异常。” 我在这里做错了什么?

【问题讨论】:

在哪一行抛出异常?我尝试了一个类似的例子。你能发布你如何加载程序集和创建类型吗? 【参考方案1】:

你是如何加载DLL的,你能分享一下动态加载dll的代码吗?

这是示例代码。

Assembly assembly = Assembly.LoadFrom("ABC.dll");
object o = Activator.CreateInstance(assembly.GetType("ClassName"));
/// then invoke the method

【讨论】:

感谢您的回复。我加载DLL的方式与您的相同。一切正常,但我发现如果 DLL(我的插件)驻留在服务的不同目录中,并且 DLL 引用了其他 DLL。我必须将其他DLL复制到Windows服务目录而不是Plugin目录。现在问题解决了。

以上是关于无法从 Windows 服务调用动态加载的 DLL 中的类的主要内容,如果未能解决你的问题,请参考以下文章

动态加载.dll文件后释放.dll和.pdb

Windows动态链接库DLL

关于C++加载DLL文件 用的LoadLibrary方法的问题

C#动态加载dll 时程序集的卸载问题

PHP启动无法加载动态库php_mongo.dll

PHP 启动:无法加载动态库 'php_intl.dll'- 找不到指定的模块