动态加载装配并手动强制路径以获取引用的装配

Yo *_*mma 7 c# reflection

我正在使用反射在C#中加载程序集:

Assembly = Assembly.Load([assembly_bytestream]);
Run Code Online (Sandbox Code Playgroud)

正在加载的程序集引用另外两个程序集.根据我的理解,反射将加载主程序集,然后在GAC中搜索引用的程序集,如果在那里找不到它,则可以将assemblyResolve事件包含在内:

AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;

Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
  if (args.Name.IndexOf([refAsm]) > -1)
  {
    Assembly shdocvw = Assembly.LoadFrom([dllPath]);
  }
}
Run Code Online (Sandbox Code Playgroud)

问题是,我不想首先查看GAC我想强制反射从我定义的特定路径加载引用程序集.关于如何做到这一点的任何想法?

Tim*_*son 8

据我所知,反射将加载主程序集,然后在GAC中搜索引用的程序集

正确,但另一个重要细节:框架将在查看GAC之前查看应用程序域的搜索路径.通常,应用程序域搜索路径仅包含主EXE所在的目录,但您也可以将应用程序配置为在特定子目录中查找app.config,或者通过启动第二个应用程序域并以编程方式配置它.

引用的程序集相对于应用程序的EXE位于何处?

编辑:在调试这样的问题时,我总是参考Suzanne Cook的装配负载备忘单.她博客的其余部分充满了类似的有用信息.


SLa*_*aks 4

您可以先加载依赖程序集,然后再加载需要它们的程序集。