.net 运行时不探测插件文件夹



我们有一个.net插件,用于不从插件文件夹加载依赖库的应用程序。场景:应用程序(program files中的Revit.exe(->从c:programdatarevitplugindirourplugindir<plugin.dll+dependencies>加载插件

在大多数机器上,负载工作良好。对于问题的上下文,dll依赖关系如下

  • Revit.exe加载plugin.dll(revit.exeprogramfiles中,插件在programdata下的单独预定义目录中(
  • plugin.dll加载IdentityModel.dll(在ourplugindir目录中(
  • IdentityModel.dll加载System.Text.Encodings.Web.DLL(在ourplugindir中(

成功的探测如下所示:IdentityModel需要System.Text.Encodings.Web.DLL

启动探测

  • 检查GAC(失败(
  • 检查Revit.exe所在的根文件夹(失败(
  • 检查Revit.ext所在的私有子文件夹(失败(
  • 检查ourplugindir(成功(

在插件加载失败的机器上,由于某种原因,它不会探测ourplugindir,因此无法找到System.Text.Encodings.Web.DLL

插件dll是使用.net 4.7构建的。依赖关系是一种间接依赖关系。

来自MSDN:https://learn.microsoft.com/en-us/dotnet/framework/deployment/how-the-runtime-locates-assemblies

程序集位置也可以使用当前绑定来确定上下文这种情况最常发生在大会上。LoadFrom方法为在COM互操作场景中使用和。如果程序集使用LoadFrom方法引用另一个程序集,调用程序集的位置被认为是关于在哪里可以找到引用的装配

由于插件是由Revit.exe动态加载的,我只能假设应用程序使用Assembly.LoadFrom或类似的东西来加载插件。

所以问题是,为什么运行时在某些机器上正确地探测并找到插件文件夹中的依赖dll,而在其他机器上却没有探测到相同的文件夹?

您尝试过使用汇编解析器吗?

最新更新