2013-11-22 77 views
5

靜態和動態裝配之間有什麼區別?只有這樣的事實,一個可以從文件加載,另一個可以在程序運行期間創建?裝配類型 - 有什麼區別

+2

好問題!簡單但沒有處理很多! –

回答

6

靜態程序集可以包含.NET Framework類型(接口和類)以及程序集資源(位圖,JPEG文件,資源文件等)。靜態程序集存儲在可移植可執行文件(PE)中的磁盤上。您還可以使用.NET Framework創建動態程序集,這些程序集可以直接從內存中運行,並且在執行之前不會保存到磁盤中。您可以將動態程序集執行後保存到磁盤。

靜態組件是那些永久存儲在磁盤上的組件。它們可能包括.NET Framework類,接口以及資源文件。這些程序集不是直接從內存中加載,而是在CLR(公共語言運行時)請求它們時直接從磁盤加載。這些程序集用於在磁盤上存儲一個文件或一組文件。每當編譯C#代碼時,都會獲得STATIC程序集。

動態程序集是那些在執行前未存儲在磁盤上的程序集,事實上它們在執行後存儲在磁盤上。當.NET運行時調用它們時,它們直接從內存加載而不是從磁盤加載。反射發射提供了許多方法來創建動態程序集手段這些是使用System.Reflection.emit命名空間在內存中創建的。System.Reflection.Emit命名空間包含允許編譯器或工具發出元數據和Microsoft中間語言(MSIL)的類和可選擇在磁盤上生成一個PE文件。當應用程序需要這些程序集中的類型時,這些動態程序集是在運行時動態創建的

簡單地說,靜態程序集是我們每天與其交互的常規程序集加載解析它等。用反射和調用來創建它。

信息來源:http://www.dotnetheaven.com/article/static-assembly-vs-dynamic-assembly-in-csharp和MSDN

+1

我也只是嘗試閱讀和使用'System.Reflection.Emit' - 可以創建(使用step-bystep教程一些應用程序 - 結果得到的類可以管理的4個變種之一 - 根據AppDomain.DefineDynamicAssembly( )和'AssemblyBuilderAccess ' - 反射,運行,RunANdSave,保存。嘗試使用保存。現在我保存它 - 得到lib(* .dll文件),但仍然沒有看到它什麼時候可以使用。 – gbk

相關問題