C# .net运行时没有';t探测器插件文件夹

C# .net运行时没有';t探测器插件文件夹,c#,revit-api,C#,Revit Api,我们有一个用于应用程序的.net插件,该应用程序不从插件文件夹加载依赖库。 脚本: 应用程序(程序文件中的Revit.exe)->从c:\programdata\Revit\plugindir\ourplugindir\ 在大多数机器上,负载工作正常。对于问题的上下文,dll依赖项如下所示 Revit.exe加载plugin.dll(Revit.exe位于programfiles中,插件位于programdata下单独的预定义目录中) plugin.dll加载IdentityModel.dll

我们有一个用于应用程序的.net插件,该应用程序不从插件文件夹加载依赖库。 脚本: 应用程序(
程序文件中的
Revit.exe
)->从
c:\programdata\Revit\plugindir\ourplugindir\

在大多数机器上,负载工作正常。对于问题的上下文,dll依赖项如下所示

  • Revit.exe
    加载
    plugin.dll
    Revit.exe
    位于
    programfiles
    中,插件位于
    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是使用.NET4.7构建的。依赖关系是一种间接依赖关系

从MSDN:

也可以使用当前绑定来确定程序集位置 上下文这通常在使用Assembly.LoadFrom方法时发生 在COM互操作场景中使用和。如果程序集使用LoadFrom 方法引用另一个程序集,即调用程序集的位置 被认为是关于在何处查找引用的 大会

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


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

您是否尝试过使用?

我在调查此问题时确实看到了这篇文章。我的问题是,为什么要这样做?还有,为什么它在某些机器上工作而在其他机器上不工作?非常令人不安的是,您需要像这样复杂的代码来让程序集加载依赖的dll。