2010-08-09 62 views

回答

10

Assembly.Load是一個動態引用,因爲您在運行時動態加載外部DLL。你會考慮一個靜態引用,就像你在添加一個.NET項目引用時一樣,並且建立了這個引用的項目。

編輯:

從MSDN文檔:

編譯器記錄的是靜態的 構建時引用 程序集清單的元數據。

嗯,不知道這一個我自己。我現在會保留我的答案,希望得到更多的更正意見或者看到更好的答案。

+0

這是不完全正確的我相信......在MSDN(http://msdn.microsoft.com/en-us/library/yx7xezcf(VS.71).aspx)中所述的一個dyanamic引用引用動態引用因爲只有足夠的信息加載引用,運行時必須搜索正在加載的程序集。對於靜態引用,程序集的位置(GAC,應用程序進程等)是已知的,並且仍然可以使用Assembly.load來完成。 – Achilles 2010-08-09 20:23:01

0

在MSDN(http://msdn.microsoft.com/en-us/library/yx7xezcf(VS.71).aspx)中引用的動態引用將動態引用引用爲加載只有足夠信息的引用,運行時必須搜索正在加載的程序集。對於靜態引用,程序集的位置(GAC,應用程序進程等)是已知的,並且仍然可以使用Assembly.load來完成。

2

中提到:

有哪些影響和 提出的方案要麼使用?

通常,如果我使用Assembly.Load(),這是因爲我正在開發一個可插拔系統。動態引用有助於包含不一定是我的構建的一部分的程序集。

從動態加載的程序集實例化類型至少需要一些反射。通過確保動態加載類型實現一些已知接口或基類(來自靜態加載的程序集),可以減輕必要的反射量。

總之,使用動態加載的程序集有很多工作要做;但是,通過允許用戶開發插件,這樣做可以使應用程序更加靈活。只需權衡動態引用的預期靈活性(這可能不是要求)和Visual Studio的靜態引用的設計時支持的權衡。

構建插件體系結構時需要考慮的做法是將程序集加載到其自己的AppDomain中。這樣做可以讓您對您可能不完全信任的程序集的安全權限進行更細粒度的控制,並提供了可在運行時卸載程序集的額外好處。就我個人而言,我發現與AppDomain合作是勞動密集型的;但是,如果需要這些好處,最好知道AppDomains在那裏。