簡體   English   中英

動態加載裝配並手動強制路徑以獲取引用的裝配

[英]Dynamically Load Assembly and manually force path to get referenced assemblies

我正在使用反射在C#中加載程序集:

Assembly = Assembly.Load([assembly_bytestream]);

正在加載的程序集引用另外兩個程序集。 根據我的理解,反射將加載主程序集,然后在GAC中搜索引用的程序集,如果在那里找不到它,則可以將assemblyResolve事件包含在內:

AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;

Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
  if (args.Name.IndexOf([refAsm]) > -1)
  {
    Assembly shdocvw = Assembly.LoadFrom([dllPath]);
  }
}

問題是,我不想首先查看GAC我想強制反射從我定義的特定路徑加載引用程序集。 關於如何做到這一點的任何想法?

據我所知,反射將加載主程序集,然后在GAC中搜索引用的程序集

正確,但另一個重要細節:框架將在查看GAC之前查看應用程序域的搜索路徑。 通常,應用程序域搜索路徑僅包含主EXE所在的目錄,但您也可以將應用程序配置為查看特定的子目錄,或者通過app.config ,或者通過啟動第二個應用程序域並以編程方式進行配置。

引用的程序集相對於應用程序的EXE位於何處?

編輯:在調試這樣的問題時,我總是參考Suzanne Cook的裝配負載備忘單 她博客的其余部分充滿了類似的有用信息。

您可以在加載需要它們之前自己加載依賴程序集。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM