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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (104)

我的DLL由第三方应用程序加载,我们无法自定义。我的程序集必须位于它们自己的文件夹中。我无法将它们放入GAC(我的应用程序需要使用XCOPY进行部署)。当根DLL尝试从另一个DLL(在同一文件夹中)加载资源或类型时,加载失败(FileNotFound)。是否可以通过编程方式(从根DLL)将我的DLL所在的文件夹添加到程序集搜索路径中?我不允许更改应用程序的配置文件。

提问于
用户回答回答于

可以将探测路径添加到应用程序的.config文件中,但只有探测路径包含在应用程序的基本目录中时才能使用。

用户回答回答于

听起来你可以使用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;
}

扫码关注云+社区

领取腾讯云代金券