[英]How can I dynamically load assemblies referenced by project, but not referenced in code
[英]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.