反射动态调用DLL文件中的方法

项目需求,需要从一堆DLL文件中反射出相关的一些方法并执行,现在遇到一个问题。
DLL文件中的方法里可能还运用到了其他第三方DLL文件,例如业务实体Entity.DLL,这种情况下反射获取到方法,执行方法时会报错
未能加载文件或程序集“XXXXX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”或它的某一个依赖项。系统找不到指定的文件。

不知道诸位有没有遇到过类似问题,还望帮忙给个解决方案,谢谢

阅读 5k
1 个回答

注意两个问题,一个是第三方DLL要在 Path 路径里面,一般情况下就是在你的执行文件目录下就行了。如果不在 Path 里面,可以用代码加路径

public static void AddPathToDomainSetup(string path)
{
    AppDomain.CurrentDomain.SetupInformation.PrivateBinPath
        = AddPath(AppDomain.CurrentDomain.SetupInformation.PrivateBinPath,
        path);
}

private static string AddPath(string pathList, string path)
{
    if (string.IsNullOrEmpty(pathList))
    {
        pathList = path;
    }
    else
    {
        string[] pathes = pathList.Split(';');
        foreach (string p in pathes)
        {
            if (StringComparer.OrdinalIgnoreCase.Compare(p, path) == 0)
            {
                return pathList;
            }
        }
        pathList += Path.PathSeparator + path;
    }
    return pathList;
}

另一个,就是要注意DLL的Arch,是 x86,还是 x64,还是 Any CPU,x86 和 x64 不能互调。而且关键要看启动的那个进程是 x86 启动的还是 x64 启动的(如果是 Any CPU 就是由系统决定的)。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进