我有一个名为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);
}
答案 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);
我希望它有所帮助。