如何在启动CLR后设置程序集查找路径?

时间:2011-08-08 11:06:03

标签: c# c++ windows clr

启动CLR主机后是否有办法(API函数)设置C#程序集查找路径,以便ExecuteInDefaultAppDomain()函数找到它?

提前感谢。

2 个答案:

答案 0 :(得分:2)

你可以这样做。基本上每次无法找到程序集的路径时都会调用AssemblyResolve事件。然后,您有机会手动加载该程序集。

AppDomain.CurrentDomain.AssemblyResolve += 
  new ResolveEventHandler(CurrentDomain_AssemblyResolve);

private System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender,
  ResolveEventArgs args)
    {
      string name = args.Name;
      //You can return null if you don't know how to load this assembly
      return Assembly.LoadFrom(SomeFunction(name));
    }

答案 1 :(得分:0)

似乎只有two ways来指定程序集的位置。

不幸的是,它们都不适合这种情况。因此,拥有程序集目录的可能列表和程序集的名称,需要手动定位文件,然后将完整路径传递给ExecuteInDefaultAppDomain()函数。

但是,我仍然不明白为什么CLR api中没有提供这样的功能(或者可能是这样,但没有正确记录)。