我的程序能够下载新的 DLL 并作为自我更新程序重新启动。我正在尝试添加一些检查,例如“在替换此 DLL 之前,确保它具有类 X 和方法 Y”。
我正在尝试使用 AssemblyLoaderHelper 来实现此目的。我的实现与互联网上的其他示例相匹配,请参见此处:https://gist.github.com/TsuyoshiUshio/29f930aa267ff8bea292715467b0f40a
要使用它,
var loadContext = new AssemblyLoaderHelper(dllDirectory);
var assemblyName = AssemblyName.GetAssemblyName(dllFile);
Assembly assembly = loadContext.LoadFromAssemblyName(assemblyName);
dllDirectory 肯定存在,并且 dllFile 包含在其中,但 LoadFromAssemblyName() 始终返回 null。
我做错了什么吗?我还可以问,有没有更好的方法来检查 DLL 中是否存在类/方法?我不需要从 DLL 中执行任何内容。我不能只使用 Assemmbly.Load() 因为我已经加载了另一个版本。
谢谢!
好吧,AssemblyDependencyResolver 想要的是 dll 的路径,而不是 dll 的目录(所以 c:\plugins\myDll.dll 而不是 c:\plugins)。看起来很奇怪,因为你可以使用它来加载多个 DLL,但无论如何。它有效!