系统找不到DLL

时间:2012-05-10 10:11:22

标签: c# .net

我有一个名为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);
        }

3 个答案:

答案 0 :(得分:4)

使用LoadFrom代替LoadFile。引自documentation

  

使用LoadFile方法加载和检查具有。的程序集   相同的身份,但位于不同的路径。 LoadFile没有   将文件加载到LoadFrom上下文中,并且无法解析   使用加载路径的依赖关系,如LoadFrom方法所做的那样。   LoadFile在这种有限的场景中非常有用,因为LoadFrom不可用   用于加载具有相同身份但不同的程序集   路径;它只会加载第一个这样的组件。

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:0)

获取test.dll fileInfo:

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

并使用fullName加载程序集:

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

我希望它有所帮助。