.NET中的程序集绑定问题

Sak*_*kin 3 .net c# app-config assembly.load

我正在编写一个.NET库,由于各种原因无法在GAC中注册.这个DLL(我们称之为SDK.dll)依赖于其他DLL来加载.

在编写使用此SDK.dll的程序时,我注意到我的程序无法在抛出FileNotFoundException的情况下加载dll.发生这种情况是因为虽然我能够找到引用的SDK.dll,但CLR无法加载其依赖项.

我发现解决问题的唯一方法是"复制本地"SDK.dll及其所有依赖项(由于部署问题我无法做到),或者将我的程序编译到与SDK.dll相同的目录中

有没有办法告诉SDK.dll在哪里查找它的依赖项,无论它的位置如何?也许SDK.dll.config文件可以帮忙吗?

小智 8

您可以通过订阅此事件在运行时处理此问题:

AppDomain.CurrentDomain.AssemblyResolve
Run Code Online (Sandbox Code Playgroud)

当运行时无法解析程序集时会触发它.在事件处理程序方法中,编写逻辑以查找程序集并使用Assembly.LoadFrom()加载它.它看起来像这样:

public SDKClass()
{
  AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(FindAssembly);
}

private Assembly FindAssembly(object sender, ResolveEventArgs args)
{
  string assemblyPath = "c:\PathToAssembly";
  string assemblyName = args.Name.Substring(0, args.Name.IndexOf(",")) + ".dll";
  string assemblyFullName = Path.Combine(assemblyPath, assemblyName);

  Assembly theAssembly = Assembly.Load(assemblyFullName);

  return theAssembly;
}
Run Code Online (Sandbox Code Playgroud)