網站首頁 編程語言 正文
.NET 中的程序集是什么?
根據 MSDN 的說法,程序集是 .NET Framework 應用程序的構建基塊;它們構成了部署的基本單位。簡單地說,我們可以說,程序集只不過是一個預編譯的 .NET 代碼,可以由 CLR(通用語言運行時)運行。
讓我們以一個示例來理解上述定義。為了理解這一點,讓我們創建一個名稱為 MyConsoleApp 的簡單控制臺應用程序。創建控制臺應用程序后,請修改程序類,如下所示。
現在,如果您右鍵單擊項目并單擊文件資源管理器中的"打開文件夾",您將發現許多內容(源代碼,即 Program.cs 類文件、配置文件(即應用程序、包含 AssemblyInfo.cs 類文件等的屬性文件夾),如下圖所示。
但是,當您構建應用程序時,它會將整個事情放入單個 EXE 中,如下圖所示。您可以在 bin => 調試文件夾下找到此文件。
您可以復制這個程序集,即 MyConsoleApp.exe,并把它放在計算機的任何地方,從那里你可以運行它。
因此,程序集只不過是一個部署單元,或者它是 CLR 可以執行的預編譯代碼塊。為了更好地了解,請看下圖。
.NET 框架中的程序集類型
在 .NET 框架中,有兩種類型的程序集。它們如下所示:
1.EXE(可執行)
2.DLL(動態鏈接庫)
在 .NET 框架中,當我們編譯控制臺應用程序或 Windows 應用程序時,它會生成 EXE,而當我們編譯類庫項目或 ASP.NET Web 應用程序時,它會生成 DLL。In.NET框架中,EXE 和 DLL 都稱為程序集。
在 .NET 框架中了解 DLL 和 EXE
上面已經創建了一個控制臺應用程序,并且我們已經看到它創建了一個 EXE。讓我們看看 DLL 的示例。
為了創建 DLL,讓我們將類庫項目添加到名稱為 MyClassLibrary 的同一解決方案中。
創建類庫項目后,默認情況下,它將創建一個名稱為 Class1 的類文件, 如下所示。
因此,現在我們的解決方案包含兩個項目。一個是控制臺應用程序,另一個是類庫項目,如下所示。
現在,生成解決方案,您應該在自己的 bin => Debug 文件夾中獲得預期中的程序集。現在,你想到的問題是DLL和EXE有什么區別?
.NET 框架中的DLL和EXE有什么區別?
EXE 在其自己的地址空間或自己的內存空間中運行。如果您雙擊 MyConsoleApp EXE,那么您將獲得以下輸出。現在,這個程序在它自己的內存空間中耗盡了。
如果不關閉此窗口,再次,如果您雙擊 MyConsoleApp EXE,它將再次運行,并顯示相同的輸出。
這是因為現在,兩個 EXE 都在自己的內存空間中運行。您需要記住的是 EXE 是一個可執行文件,可以作為應用程序本身運行。
那么來到 DLL,它不能像EXE那樣自行運行。這意味著MyClassLibrary. dll不能由自己調用或運行。它需要一個要調用它的消費者。
因此,DLL 在其他內存空間內運行。其他內存空間可以是控制臺、窗口應用程序或 Web 應用程序,它們應有自己的內存空間。
例如,可以從控制臺應用程序調用 DLL。我們有一個名為 MyConsoleApp 的控制臺, 讓我們看看如何從這個控制臺應用程序調用 MyClassLibrary. dll 。
為了在 MyConsoleApp 中使用 MyclassLibrary. dll, 首先, 您需要引用該Dll。添加對 MyClassLibrary DLL 的引用后,請修改控制臺應用程序的程序類,如下所示。
現在,運行應用程序,您應該會看到以下輸出。在這里,MyClassLibrary DLL 在 MyConsoleApp 地址空間內運行。
因此,簡言之,它們之間的區別在于EXE是一個可執行文件,可以作為應用程序本身運行,
而DLL通常由EXE或其他DLL使用,我們無法直接運行或執行 DLL。
現在,這個問題應該想到為什么我們需要DLL,因為它不是自己調用的。DLL 背后的原因是可再使用性。
假設您在許多應用程序中需要一些類、邏輯或其他內容,然后只需將這些類、邏輯放入DLL中,并在需要的地方引用該DLL。
原文鏈接:https://www.cnblogs.com/zh7791/p/13705058.html
相關推薦
- 2022-08-26 一文搞懂Go語言中文件的讀寫與創建_Golang
- 2022-06-01 kubernetes中的namespace、node、pod介紹_云和虛擬化
- 2022-03-25 Mybatis聯合查詢的實現方法(多表聯合查詢)
- 2022-09-06 C語言單鏈表遍歷與求和示例解讀_C 語言
- 2022-04-27 Django與DRF結合的全局異常處理方案詳解_python
- 2022-04-18 ASP.Net?Core?MVC基礎系列之獲取配置信息_基礎應用
- 2022-09-08 python筆記之使用fillna()填充缺失值_python
- 2022-10-17 Qt中TCP協議通信詳解_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支