我想要動態加載一個或多個DLL,以便它們使用與我的主應用程序不同的安全性或基本路徑運行。如何將這些DLL加載到單獨的AppDomain中並從它們實例化對象?將DLL加載到單獨的AppDomain中
回答
更具體地說
AppDomain domain = AppDomain.CreateDomain("New domain name");
//Do other things to the domain like set the security policy
string pathToDll = @"C:\myDll.dll"; //Full path to dll you want to load
Type t = typeof(TypeIWantToLoad);
TypeIWantToLoad myObject = (TypeIWantToLoad)domain.CreateInstanceFromAndUnwrap(pathToDll, t.FullName);
如果一切正常去(沒有拋出異常),你現在有加載到新域TypeIWantToLoad的一個實例。您擁有的實例實際上是一個代理(因爲實際對象位於新域中),但您可以像使用普通對象一樣使用它。
注:據我所知TypeIWantToLoad必須從MarshalByRefObject繼承。
您可以使用AppDomain.CreateInstance方法來執行此操作。您需要調用返回的ObjectHandle的Unwrap方法以獲取實際對象。
如果我想要創建的實例的對象在我試圖加載的程序集中定義,該怎麼辦?我不知道什麼是這個對象的名稱,而實際上沒有實際加載程序集... – 2011-06-06 08:33:58
@liortal這個問題的接受答案做你需要做的? – Andy 2011-06-06 12:58:02
如果您的目標是3.5,則可以利用新的managed extensibility framework來處理所有繁重工作。
使用AppDomain.Create(...)創建一個新的AppDomain。 創建AppDomain後,將DLL加載到該AppDomain中。
查看AppDomain使用Create *創建的所有方法。有一些像CreateInstanceAndUnwrap等
如前所述,使用AppDomain.CreateDomain創建一個新的應用程序域。然後,您可以使用Load方法將程序集加載到程序集中,甚至可以使用ExecuteAssembly方法執行程序集。您可以使用GetAssemblies查看程序集是否已被加載。請注意,一旦它被加載,您就無法卸載程序集。您將需要卸載域。
- 1. 將DLL加載到單獨的AppDomain中
- 2. 將DLL加載到單獨的具有已知通用接口的AppDomain中
- 3. 將app.config加載到AppDomain中
- 4. 加載組件到單獨的AppDomain,越來越InvalidCastException的
- 5. AppDomain的影子副本 - 加載/卸載動態加載的DLL
- 6. 將一個獨立的dll加載到現有的AppDomain中並自動執行事件
- 7. C++ DLL不能卸載AppDomain
- 8. 在ASP.NET中已經加載AppDomain的情況下替換DLL
- 9. 如何在單獨的AppDomain中承載IronPython引擎?
- 10. 不被IIS加載到AppDomain中
- 11. 如何將此程序集加載到我的AppDomain中?
- 12. C# - .NET加載到大會獨立的AppDomain這樣你就可以卸載它
- 13. 將DLL的單個實例加載到應用程序:AppDomain,線程或其他東西?
- 14. 負載使用的AppDomain從DLL依賴的dll動態 - ResolveEventHandler
- 15. 從App.Config將程序集加載到AppDomain中
- 16. 如何將僅簽名的程序集加載到新的AppDomain?
- 17. 如何使用內存中的dll將應用程序加載到AppDomain中並執行它?
- 18. appdomain加載一個COM DLL多次並保持內存隔離
- 19. 在新的AppDomain中加載插件
- 20. 我該如何配置DCOM才能將我的DLL加載到單獨的進程中?
- 21. 在單獨的線程中加載TexturesAtlas
- 22. 在JQTouch中加載單獨的頁面
- 23. 單獨的AppDomain中的C#,MAF,未處理的異常管理
- 24. 如何將清單添加到.NET DLL?
- 25. 進程和AppDomain加載/卸載
- 26. 如何在Windows Mobile(.NET CF)上將程序集加載到不同的AppDomain中?
- 27. 如何在單獨的AppDomain中運行方法?
- 28. 將DLL加載到MFC中的不同方法?
- 29. 在運行時從另一個AppDomain調試動態加載的DLL
- 30. 單獨在HTML中重新加載div
[最簡單的方法來進行跨應用程序域調用?](http://stackoverflow.com/questions/6242573/simplest-way-to-make-cross-appdomain-call) – user626528 2017-02-14 18:23:25
引用的上下文可能的重複是不同的。在引用的問題中,目標是調用AppDomain中的代碼,而不是由開發人員創建或在其控制之下。這個問題特別關於在開發人員控制的AppDomain中加載代碼,以便他們可以修改AppDomain的特性。另外,引用的問題也沒有給出如何在運行時動態加載DLL的完整代碼示例,這是此問題的關鍵組成部分。 – 2017-02-15 16:41:11