.NET應(yīng)用程序集DLL與EXE工作機制及原理介紹
.NET 中的程序集是什么?
根據(jù) MSDN 的說法,程序集是 .NET Framework 應(yīng)用程序的構(gòu)建基塊;它們構(gòu)成了部署的基本單位。簡單地說,我們可以說,程序集只不過是一個預(yù)編譯的 .NET 代碼,可以由 CLR(通用語言運行時)運行。
讓我們以一個示例來理解上述定義。為了理解這一點,讓我們創(chuàng)建一個名稱為 MyConsoleApp 的簡單控制臺應(yīng)用程序。創(chuàng)建控制臺應(yīng)用程序后,請修改程序類,如下所示。

現(xiàn)在,如果您右鍵單擊項目并單擊文件資源管理器中的"打開文件夾",您將發(fā)現(xiàn)許多內(nèi)容(源代碼,即 Program.cs 類文件、配置文件(即應(yīng)用程序、包含 AssemblyInfo.cs 類文件等的屬性文件夾),如下圖所示。

但是,當您構(gòu)建應(yīng)用程序時,它會將整個事情放入單個 EXE 中,如下圖所示。您可以在 bin => 調(diào)試文件夾下找到此文件。
您可以復制這個程序集,即 MyConsoleApp.exe,并把它放在計算機的任何地方,從那里你可以運行它。

因此,程序集只不過是一個部署單元,或者它是 CLR 可以執(zhí)行的預(yù)編譯代碼塊。為了更好地了解,請看下圖。

.NET 框架中的程序集類型
在 .NET 框架中,有兩種類型的程序集。它們?nèi)缦滤荆?/p>
1.EXE(可執(zhí)行)
2.DLL(動態(tài)鏈接庫)
在 .NET 框架中,當我們編譯控制臺應(yīng)用程序或 Windows 應(yīng)用程序時,它會生成 EXE,而當我們編譯類庫項目或 ASP.NET Web 應(yīng)用程序時,它會生成 DLL。In.NET框架中,EXE 和 DLL 都稱為程序集。
在 .NET 框架中了解 DLL 和 EXE
上面已經(jīng)創(chuàng)建了一個控制臺應(yīng)用程序,并且我們已經(jīng)看到它創(chuàng)建了一個 EXE。讓我們看看 DLL 的示例。
為了創(chuàng)建 DLL,讓我們將類庫項目添加到名稱為 MyClassLibrary 的同一解決方案中。
創(chuàng)建類庫項目后,默認情況下,它將創(chuàng)建一個名稱為 Class1 的類文件, 如下所示。

因此,現(xiàn)在我們的解決方案包含兩個項目。一個是控制臺應(yīng)用程序,另一個是類庫項目,如下所示。

現(xiàn)在,生成解決方案,您應(yīng)該在自己的 bin => Debug 文件夾中獲得預(yù)期中的程序集?,F(xiàn)在,你想到的問題是DLL和EXE有什么區(qū)別?
.NET 框架中的DLL和EXE有什么區(qū)別?
EXE 在其自己的地址空間或自己的內(nèi)存空間中運行。如果您雙擊 MyConsoleApp EXE,那么您將獲得以下輸出?,F(xiàn)在,這個程序在它自己的內(nèi)存空間中耗盡了。

如果不關(guān)閉此窗口,再次,如果您雙擊 MyConsoleApp EXE,它將再次運行,并顯示相同的輸出。
這是因為現(xiàn)在,兩個 EXE 都在自己的內(nèi)存空間中運行。您需要記住的是 EXE 是一個可執(zhí)行文件,可以作為應(yīng)用程序本身運行。
那么來到 DLL,它不能像EXE那樣自行運行。這意味著MyClassLibrary. dll不能由自己調(diào)用或運行。它需要一個要調(diào)用它的消費者。
因此,DLL 在其他內(nèi)存空間內(nèi)運行。其他內(nèi)存空間可以是控制臺、窗口應(yīng)用程序或 Web 應(yīng)用程序,它們應(yīng)有自己的內(nèi)存空間。
例如,可以從控制臺應(yīng)用程序調(diào)用 DLL。我們有一個名為 MyConsoleApp 的控制臺, 讓我們看看如何從這個控制臺應(yīng)用程序調(diào)用 MyClassLibrary. dll 。
為了在 MyConsoleApp 中使用 MyclassLibrary. dll, 首先, 您需要引用該Dll。添加對 MyClassLibrary DLL 的引用后,請修改控制臺應(yīng)用程序的程序類,如下所示。

現(xiàn)在,運行應(yīng)用程序,您應(yīng)該會看到以下輸出。在這里,MyClassLibrary DLL 在 MyConsoleApp 地址空間內(nèi)運行。

因此,簡言之,它們之間的區(qū)別在于EXE是一個可執(zhí)行文件,可以作為應(yīng)用程序本身運行,
而DLL通常由EXE或其他DLL使用,我們無法直接運行或執(zhí)行 DLL。
現(xiàn)在,這個問題應(yīng)該想到為什么我們需要DLL,因為它不是自己調(diào)用的。DLL 背后的原因是可再使用性。
假設(shè)您在許多應(yīng)用程序中需要一些類、邏輯或其他內(nèi)容,然后只需將這些類、邏輯放入DLL中,并在需要的地方引用該DLL。
到此這篇關(guān)于.NET應(yīng)用程序集DLL與EXE工作機制的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
ASP.NET 2.0中的數(shù)據(jù)操作之七:使用DropDownList過濾的主/從報表
本文主要介紹在ASP.NET 2.0中如何給DropDownList控件綁定數(shù)據(jù)源,并通過DropDownList所選的不同的值,篩選出不同的數(shù)據(jù)信息。2016-05-05
在ASP.NET 2.0中操作數(shù)據(jù)之四十:自定義DataList編輯界面
先前的編輯界面清一色的都是TextBox控件,當然EditItemTemplate還可以包含很多其他的控件,比如DropDownLists, RadioButtonLists, Calendars等,這一節(jié)就讓我們看看如何實現(xiàn)添加其他的控件。2016-05-05
在ASP.NET 2.0中操作數(shù)據(jù)之五十九:使用SQL緩存依賴項SqlCacheDependency
當緩存數(shù)據(jù)庫數(shù)據(jù)時,最理想的狀態(tài)是數(shù)據(jù)一直駐留在內(nèi)存,直到數(shù)據(jù)庫發(fā)生了改動。在ASP.NET 2.0,可以通過編程或聲明代碼的方式使用SQL cache dependencies,配合SQL Server 2005來實現(xiàn)此功能。2016-05-05
在ASP.NET 2.0中操作數(shù)據(jù)之二十七:創(chuàng)建自定義排序用戶界面
本文主要講解ASP.NET 2.0中使用GridView創(chuàng)建自定義排序,主要演示在一組相同類別的數(shù)據(jù)前添加分界行,讓用戶更容易區(qū)分不同組的數(shù)據(jù)。2016-05-05
解讀ASP.NET 5 & MVC6系列教程(13):TagHelper
這篇文章主要介紹了新版MVC6中強大的TagHelper功能,需要的朋友可以參考下2016-06-06
在ASP.NET 2.0中操作數(shù)據(jù)之五:聲明參數(shù)
為了使用帶輸入?yún)?shù)的方法,我們需要在ObjectDataSource的SelectParameters集合里指定參數(shù)的值。本文主要介紹使用一個硬編碼參數(shù)值的方法,和使用設(shè)置Web控件的屬性作為參數(shù)源的方法。2016-04-04
解讀ASP.NET 5 & MVC6系列教程(5):Configuration配置信息管理
這篇文章主要介紹了ASP.NET 5中Configuration配置信息管理,需要的朋友可以參考下。2016-06-06
在ASP.NET 2.0中操作數(shù)據(jù)之二十九:用DataList和Repeater來顯示數(shù)據(jù)
本文主要講解ASP.NET 2.0中如何使用DataList 和 Repeater 來呈現(xiàn)數(shù)據(jù),DataList包含一個table標記,而Repeater不會添加任何額外的代碼,個人在實際開發(fā)中更推薦使用Repeater。2016-05-05

