如何在.NET中的运行时将文件夹添加到程序集搜索路径?

我的DLL是由第三方应用程序加载,我们不能自定义。我的程序集必须位于自己的文件夹中。我不能把它们放入GAC(我的应用程序有一个要求使用XCOPY部署)。
当根DLL尝试从另一个DLL(在同一文件夹中)加载资源或类型时,加载失败(FileNotFound)。
是否可以通过编程方式(从根DLL)将我的DLL所在的文件夹添加到程序集搜索路径?我不允许更改应用程序的配置文件。
最佳答案
听起来你可以使用AppDomain.AssemblyResolve事件,并手动从DLL目录加载依赖项。

编辑(来自评论):

AppDomain currentDomain = AppDomain.CurrentDomain;
currentDomain.AssemblyResolve += new ResolveEventHandler(LoadFromSameFolder);

static Assembly LoadFromSameFolder(object sender, ResolveEventArgs args)
{
    string folderPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
    string assemblyPath = Path.Combine(folderPath, new AssemblyName(args.Name).Name + ".dll");
    if (!File.Exists(assemblyPath)) return null;
    Assembly assembly = Assembly.LoadFrom(assemblyPath);
    return assembly;
}

转载注明原文:如何在.NET中的运行时将文件夹添加到程序集搜索路径? - 代码日志