0

我有一个名为 test 的 dll,在 test.dll 中,我引用了另一个名为 process 的 dll。现在,当我尝试加载 test.dll 时,我收到错误“系统找不到 process.dll。请帮助

Assembly u = Assembly.LoadFile(@"C:\test\test.dll");

        Type t = u.GetType("Test.Process");
        MethodInfo m = t.GetMethod("ProcessFile");

        try
        {
            object[] myparam = new object[1];
            myparam[0] = @"C:\test\testFile.csv";

            result = (string)m.Invoke(null, myparam);

            Console.WriteLine(result);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message.ToString());
            Console.WriteLine(ex.InnerException.ToString());
            System.Threading.Thread.Sleep(100000);
        }
4

3 回答 3

4

使用LoadFrom而不是LoadFile. 从文档中引用:

使用 LoadFile 方法加载和检查具有相同标识但位于不同路径中的程序集。LoadFile 不会将文件加载到 LoadFrom 上下文中,也不会像 LoadFrom 方法那样使用加载路径解析依赖关系。LoadFile 在这种有限的场景中很有用,因为 LoadFrom 不能用于加载具有相同身份但不同路径的程序集;它只会加载第一个这样的程序集。

Assembly u = Assembly.LoadFrom(@"C:\test\test.dll");
...
于 2012-05-10T10:13:27.087 回答
3

我怀疑你想要LoadFrom而不是LoadFile在这种情况下。不同之处在于额外路径 ( c:\test) 将被添加到“加载自”上下文中,然后将用于依赖关系,例如process.dll.

目前,它试图在process.dll不考虑的情况下解决c:\test。阅读链接的文档以获取更多信息。

于 2012-05-10T10:13:16.040 回答
0

获取 test.dll 文件信息:

 FileInfo fileInfo = new FileInfo("test.dll");

并使用 fullName 加载程序集:

Assembly assem = Assembly.LoadFile(fileInfo.FullName);

我希望它有所帮助。

于 2012-05-10T10:17:49.397 回答