在獨立 AppDomain 中遞歸載入組件及其參考
將程式集載入到新的 AppDomain 時,請務必遞歸載入其所有引用,以防止出現 FileNotFoundException
錯誤。本文將探討完成此複雜任務的步驟。
首先,建立一個具有自訂 ApplicationBase
的獨立 AppDomain。然後,使用 AssemblyName.GetAssemblyName
載入根組件。但是,僅此一項還不夠;您需要手動載入組件的參考。
為此,使用 ReflectionOnlyLoadFrom
來取得引用的組件列表,而無需實際載入它們。對於每個引用,使用 domain.Load(refAsmName)
將其載入到 AppDomain 中。
但是,這裡有一個需要注意的地方。要在外部應用程式域中執行代理對象,您需要呼叫 CreateInstanceAndUnwrap
。此方法可確保物件在目標 AppDomain 中執行。
程式碼範例說明了此過程:
<code class="language-csharp">class Program { static void Main(string[] args) { AppDomainSetup domaininfo = new AppDomainSetup(); domaininfo.ApplicationBase = System.Environment.CurrentDirectory; Evidence adevidence = AppDomain.CurrentDomain.Evidence; AppDomain domain = AppDomain.CreateDomain("MyDomain", adevidence, domaininfo); Type type = typeof(Proxy); var value = (Proxy)domain.CreateInstanceAndUnwrap( type.Assembly.FullName, type.FullName); var assembly = value.GetAssembly(args[0]); // AppDomain.Unload(domain); } } public class Proxy : MarshalByRefObject { public Assembly GetAssembly(string assemblyPath) { try { return Assembly.LoadFile(assemblyPath); } catch (Exception) { return null; // throw new InvalidOperationException(ex); } } }</code>
請記住,當使用 LoadFile
而不是 LoadFrom
時,您必須自行載入任何依賴項,以避免 FileNotFound
異常。
以上是如何將組件參考遞歸載入到單獨的 AppDomain 中?的詳細內容。更多資訊請關注PHP中文網其他相關文章!