之間的區別只是想知道在完全信任的asp.net mvc 2應用程序的上下文中兩者是否有任何區別。AppDomain.GetAssemblies和BuildManager.GetReferencedAssemblies
27
A
回答
51
.NET Framework將裝配加載到當前AppDomain中,直到需要它們。例如,如果僅從SomeMethod()調用第三方庫,則通常不會在第一次運行SomeMethod()時加載第三方DLL。
AppDomain.GetAssemblies()爲您提供了已經加載到當前AppDomain中的所有程序集。 BuildManager.GetReferencedAssemblies()返回從Web.config和別處引用的所有程序集的列表,並將這些程序集加載到當前AppDomain中。
這是上面的一個解決的例子。
- SomeMethod()尚未運行。
- 調用AppDomain.GetAssemblies(),返回一個不包含ThirdParty.dll的集合。
- 調用SomeMethod()。
- 調用AppDomain.GetAssemblies(),返回一個包含ThirdParty.dll的集合。
在這個例子中,CLR延遲加載ThirdParty.dll到當前的AppDomain中,直到它是絕對必要的。並且由於它需要執行SomeMethod(),那就是它被加載的時候。
或者:
- 的someMethod()尚未運行。
- 調用AppDomain.GetAssemblies(),返回一個不包含ThirdParty.dll的集合。
- 調用BuildManager.GetReferencedAssemblies(),返回一個包含ThirdParty.dll的集合。
- 調用AppDomain.GetAssemblies(),返回一個包含ThirdParty.dll的集合。
在這裏,即使您從未調用過SomeMethod(),代表您調用了BuildManager.GetReferencedAssemblies()將第三方庫加載到當前的AppDomain中。
當然,這都受到某些優化等,但一般的想法成立。
相關問題
- 1. .net控制檯應用程序生命週期 - 解決從BuildManager.GetReferencedAssemblies
- 2. 是否真的在Silverlight 4中支持AppDomain.GetAssemblies()?
- 3. 註冊T型接口的所有執行
- 4. ASP.NET MVC BuildManager.GetAssemblies()
- 5. PHP:OR和||和&&和
- 6. 更換 「#」, 「$」, 「%」, 「&」 和 「_」 和 「\#」, 「\ $」, 「\%」, 「\&」 和 「\ _」
- 7. 「[^」] *「和」。+「和」
- 8. Java和Android和SharedPreferences和OOP
- 9. MySQL的:`和`或`和`和`
- 10. SQL和NOT和和等價
- 11. Ninject MVC3 ASP.NET CustomMembershipService與Sqlite安裝
- 12. 搜索和和&
- 13. 求和和SQL
- 14. lxml和CDATA和&
- 15. Spring和JSF和JPA
- 16. laravel OrderBy和總和
- 17. 分析儀 '&' 和 '和'
- 18. OR和和預期
- 19. Postpost和log4net和log4postsharp
- 20. MVC和Ajax.BeginForm和DIV.Load
- 21. Chrome和YouTube和AppleScript
- 22. Telerik和jQuery:RadGrid和Fancybox
- 23. WCF和XmlSerialization和XmlWriterSettings
- 24. 與NFC和和Android
- 25. 集團和總和
- 26. jquery和jScrollPane和ajax
- 27. Prism和TabControl和TabIndex
- 28. 梨和pirum和package.xml
- 29. PHP和IRC和殼
- 30. 基本總和和
@starblue:照顧解釋投票下來? – Herman
感謝您提出這個問題。我不知道BuildManager存在,它完全救了我。 (由於Levi描述的行爲) –