有什麼含義和建議使用的方案?正在使用Assembly.Load一個靜態引用或動態引用?
8
A
回答
10
Assembly.Load
是一個動態引用,因爲您在運行時動態加載外部DLL。你會考慮一個靜態引用,就像你在添加一個.NET項目引用時一樣,並且建立了這個引用的項目。
編輯:
從MSDN文檔:
編譯器記錄的是靜態的 構建時引用 程序集清單的元數據。
嗯,不知道這一個我自己。我現在會保留我的答案,希望得到更多的更正意見或者看到更好的答案。
0
在MSDN(http://msdn.microsoft.com/en-us/library/yx7xezcf(VS.71).aspx)中引用的動態引用將動態引用引用爲加載只有足夠信息的引用,運行時必須搜索正在加載的程序集。對於靜態引用,程序集的位置(GAC,應用程序進程等)是已知的,並且仍然可以使用Assembly.load來完成。
2
中提到:
有哪些影響和 提出的方案要麼使用?
通常,如果我使用Assembly.Load()
,這是因爲我正在開發一個可插拔系統。動態引用有助於包含不一定是我的構建的一部分的程序集。
從動態加載的程序集實例化類型至少需要一些反射。通過確保動態加載類型實現一些已知接口或基類(來自靜態加載的程序集),可以減輕必要的反射量。
總之,使用動態加載的程序集有很多工作要做;但是,通過允許用戶開發插件,這樣做可以使應用程序更加靈活。只需權衡動態引用的預期靈活性(這可能不是要求)和Visual Studio的靜態引用的設計時支持的權衡。
構建插件體系結構時需要考慮的做法是將程序集加載到其自己的AppDomain中。這樣做可以讓您對您可能不完全信任的程序集的安全權限進行更細粒度的控制,並提供了可在運行時卸載程序集的額外好處。就我個人而言,我發現與AppDomain合作是勞動密集型的;但是,如果需要這些好處,最好知道AppDomains在那裏。
相關問題
- 1. PHP引用一個靜態變量
- 2. iOS靜態庫引用靜態庫
- 3. 創建一個引用其他靜態庫的靜態庫
- 4. PHP:引用靜態變量中的另一個靜態變量
- 5. 使用動態類引用
- 6. 使用Javascript - 不能讓靜態引用非靜態函數
- 7. C#靜態對象引用
- 8. 引用非靜態變量
- 9. 靜態類未被引用
- 10. Java「自我」(靜態)引用
- 11. 動態引用一個JavaScript文件
- 12. 在靜態內部類中引用非靜態變量
- 13. 對靜態方法的靜態引用(在主要方法中)
- 14. 如何在靜態方法中引用非靜態對象
- 15. 另一個「不能使靜態引用...」問題
- 16. 引用一個靜態的NSString * const的另一個類
- 17. 「不能讓一個靜態引用非靜態方法」的錯誤的Android
- 18. 如何動態使用css引用?
- 19. 非法引用非靜態成員在一個struct
- 20. 在類的構造函數中引用一個靜態變量
- 21. 引用/對象的靜態/動態轉換
- 22. C#'動態'變量可以引用靜態類型嗎?
- 23. 動態引用表而不使用動態SQL
- 24. 如何從靜態上下文中引用非靜態方法
- 25. 單鏈表 - 無法對靜態類型進行靜態引用
- 26. 非靜態方法不能從靜態上下文中引用?
- 27. 無法對非靜態方法進行靜態引用
- 28. 無法對非靜態類成員進行靜態引用
- 29. 非靜態方法不能從靜態上下文中引用
- 30. 非靜態方法不能從靜態上下文中引用?
這是不完全正確的我相信......在MSDN(http://msdn.microsoft.com/en-us/library/yx7xezcf(VS.71).aspx)中所述的一個dyanamic引用引用動態引用因爲只有足夠的信息加載引用,運行時必須搜索正在加載的程序集。對於靜態引用,程序集的位置(GAC,應用程序進程等)是已知的,並且仍然可以使用Assembly.load來完成。 – Achilles 2010-08-09 20:23:01