代码之家  ›  专栏  ›  技术社区  ›  FantaMango77

加载程序集及其依赖项

  •  21
  • FantaMango77  · 技术社区  · 16 年前

    我的应用程序在运行时从特定子文件夹动态加载程序集。这些程序集是用对其他程序集的依赖项编译的。运行时尝试从应用程序目录加载这些。但我想把它们放到模块目录中。

    有没有一种方法可以告诉运行时DLL在单独的子文件夹中?

    3 回复  |  直到 12 年前
        1
  •  18
  •   Shaun Austin    16 年前

    我最近使用的一种好方法是为AppDomain的assemblyResolve事件添加事件处理程序。

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

    然后,在事件处理程序方法中,可以加载试图使用assembly.load、assembly.load from重写之一解析的程序集,并从该方法返回该程序集。

    编辑:

    基于您的附加信息,我认为使用上面的技术,特别是自己解析对程序集的引用是在不重新构造应用程序的情况下唯一可行的方法。它给您的是,每个clr无法解析的程序集的位置都可以由您的代码在运行时确定并加载…我已经在类似的情况下将其用于可插拔架构和程序集引用完整性扫描工具。

        2
  •  4
  •   samjudson    16 年前

    你可以使用 <probing> 元素,指示运行时在不同目录中查找其程序集文件。

    http://msdn.microsoft.com/en-us/library/823z9h8w.aspx

    例如。:

    <configuration>
     <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <probing privatePath="bin;bin2\subbin;bin3"/>
      </assemblyBinding>
     </runtime>
    </configuration>
    
        3
  •  1
  •   jfs    16 年前

    你可以使用 <codeBase> 在应用程序配置文件中找到元素。有关“的详细信息” Locating the Assembly through Codebases or Probing “。

    好吧,装载的组件没有 应用程序配置文件。

    如果你在运行时知道特定的文件夹,你可以使用 Assembly.LoadFrom .