【C#進階系列】02 生成、打包、部署和管理應用程式及類型——還是那個Hello world

来源:http://www.cnblogs.com/vvjiang/archive/2016/03/01/5229545.html
-Advertisement-
Play Games

好了,還是這張圖,還是一樣的Hello world。 因為本章其實很多都是講一些命令行編譯啊什麼鬼的配置類的東西,要用的時候直接百度或者回頭查書就可以了, 所以瞭解一下也就行了,也沒有記錄下來,接下來講得只是我認為很有用的東西。 關於引用 請看上圖,MyTest程式集下麵有個引用,引用裡面大家都知道


好了,還是這張圖,還是一樣的Hello world。

因為本章其實很多都是講一些命令行編譯啊什麼鬼的配置類的東西,要用的時候直接百度或者回頭查書就可以了,

所以瞭解一下也就行了,也沒有記錄下來,接下來講得只是我認為很有用的東西。

關於引用

請看上圖,MyTest程式集下麵有個引用,引用裡面大家都知道有很多dll,而我們的源代碼中只有那5個using引用某dll里的具體的命名空間。

(引用這些dll只會對編譯器造成一點影響,並不會影響最終生成的文件,更不會去影響最終的性能)

也就是說,無論你引用多少個dll,你的源代碼中只使用那5個using,那麼最終引用的實際上只有包含這5個using的那些dll文件。

再說PE文件,程式集,托管模塊,元數據

之前我們說了托管PE文件(也就是那些exe,dll)包括4個部分:PE頭、CLR頭、元數據和IL代碼。

其中PE頭是windows要求的標準信息,CLR頭是托管模塊特有的,包括CLR版本號,模塊的入口方法,數字簽名,模塊內部元數據表的大小和偏移。

 

 

元數據是由幾個表構成的二進位塊,有三種元數據表:定義表,引用表和清單表。

 

所謂定義表,主要就是對本模塊內部的一些屬性,方法什麼的一個描述。

 

所謂引用表,主要就是對引用的程式集內部的一些屬性,方法什麼的一個描述。

 

所謂清單表,主要就是對程式集組成的那部分文件的信息。

 

 

程式集是進行重用、版本控制和應用安全性設置的基本單元。允許有將類型和資源文件劃分到單獨的文件中。(程式需要載入的程式集數量越少,性能越好,因為這樣有助於減小工作集,緩解進程空間地址碎片化

CLR操作的就是程式集,先載入包含清單元數據表的文件,再根據清單來獲取程式集中其它文件的名稱。

 

好吧,我們主要還是來講上述四者的關係

結合上圖的Hello world程式,來看看我自己的理解:

源代碼都會生成托管PE文件,也叫托管模塊,就是那些dll和exe,而一個托管模塊包含:PE頭、CLR頭、元數據定義表、元數據引用表和IL代碼。

而這些托管模塊和一些圖片啊什麼的資源文件,再加上一個元數據清單表就組合成了程式集(程式集是一個邏輯上的概念)。

一個PE文件也可以僅僅只是一個托管模塊,也可以是一個程式集,而區分一個PE文件是托管模塊還是程式集的關鍵就是看它有沒有元數據清單表。

那麼最通俗的講,a.EXE引用了b.dll,那麼a.exe就是一個程式集,但是b.dll引用了c.dll那麼b.dll其實也是一個程式集。

同時a,b,c都是托管PE文件,都是托管模塊。

 

可能饒了點,上述理解中如有紕漏還望看到的大神指出,以免本人在錯誤的道路上越走越遠。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.調用統一下單介面驗簽失敗 https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=9_1 開始的時候是string Format格式填寫參數,錯。後來翻看其他博客和微信demo,才得知應該這樣寫: //將數據添加到字典中 SortedDict
  • 後臺創建了一個DntHub的集線器 前臺在調用的時候出現了問題(經檢查是代理對象創建失敗) 於是到StackOverflow上面找了下: http://stackoverflow.com/questions/14146913/signalr-cannot-read-property-client-o
  • 軟體開發中,有時迫不得已要用到第三方的軟體,這時就涉及到在C#應用程式需要對第三方軟體打開、顯示、隱藏以及關閉。 下麵列舉了幾個常用的方式 打開應用程式,下麵是2種簡單用法: 第一種: public enum ShowWindowCommands : int { SW_HIDE = 0, SW_SH
  • 自從在ASP.NET MVC中使用NuGet添加SignalR類庫之後,再次運行程式時,它出現了一個異常: Server Error in '/' Application. The following errors occurred while attempting to load the app.
  • 依雲成績查詢系統,一款學校學生成績查詢軟體,管理員只需錄入學生信息、添加成績模板、上傳學生成績,學生即可網上查詢成績。查詢成績更加方便,實現無紙化成績查詢,大大節省列印裁剪成績條時間。
  • ASP.NET網站部署到IIS中的關鍵點:1、Windows XP運行IIS的帳號為“電腦名\ASPNET”,Windows Vista、Windows Server 2003運行IIS的帳號為“NETWORK SERVICE”。如果網站下的某個文件夾供用戶上傳圖片、文件,則運行IIS的帳號必須擁
  • 最近做了個服務用來分解料單、計算可用庫存,日消耗一類的操作,以WebService的方式發佈並掛在IIS上,客戶端啟動任務後可能會關閉(等第二天過來看結果) 基本的做法都是在獨立的線程中運行任務併在運行過程中寫一些狀態/進度到全局變數中如(static類型的變數或Application等),客戶端每
  • 百度一下”asp.net身份認證“,你會得到很多相關的資料,這些資料通常上來就會介紹諸如”Form認證“”Windows認證“等內容,而沒有給出一個完整的流程。初學者對此往往一頭霧水,我也曾經被坑過很多回,於是寫下此文,算是複習。 現代的Windows Server系統都是基於嚴格的用戶機制的,當你
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...