亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

CLR via C#

2019-11-17 03:07:06
字體:
來源:轉載
供稿:網友

CLR via C# - CLR模型

博客園對markdown支持不佳,錯亂移步Github IO 博文

CLR 的執行模型

模塊/程序集

1.模塊

托管模塊組成部分

  • PE32/PE32+頭 : PE即Portable Executable表示可執行文件
  • CLR頭 : 包含所需的CLR版本,Main方法入口
  • 元數據 : 元數據是一組數據表.其中的一些數據表描述了模塊中定義的內容,比如類型或成員。還有一些描述了托管模塊引用的內容,比如導入的類型、成員。
  • IL代碼

元數據用途

  1. 用于編譯,消除了C/CPP時期對頭文件的依賴
  2. VS IntelliSense,VS讀取程序集的元數據,提供代碼提示
  3. 允許垃圾回收器追蹤對象的生存期,CLR GC采用的是Mark-Sweep形式,在mark階段,元數據可以提供某一對象的某一字段引用了哪個其他的對象,可以把引用的對象也mark一下,防止被GC回收

2.程序集

程序集是一個或多個模塊/資源 文件的邏輯分組。程序集是重用、安全性、以及版本控制的最小單元。一般認為一個dll/exe是一個程序集,但是還可以生成多文件程序集,使用AL.exe

如何判斷是否安裝了.NET Framework,只需檢查%SystemRoot%/System32/MSCorEE.dll文件即可如圖,文件說明寫出是 .NET Runtime Execution Engine

執行程序集中的代碼 JIT

當一個方法第一次執行時,CLR內部的某個表會為該方法所在類型的所有方法創建一個記錄項,對應著一個地址,在JIT編譯IL => Native code時查找IL代碼,JIT編譯好的Native Code存放在內存中,并更新表中的地址,也就是下一次調用該方法時,直接執行的是Native Code,不用再次經過JIT了。這個不用是在一個程序的執行時間內,要是將程序關閉了,再打開還得重來。.NET都是半解釋性性語言。

CTS : 通用類型系統CLS : 通用語言規范由于各個語言實現的不盡一致,MS定義了一個公共語言規范(Common Language Specification),它詳細定義了一個最小功能集.例如使用[assembly:CLSCompliant(tue)]指定此程序集是CLS兼容的

public UInt32 Abc()public int Xyz()public int xyz()

以上會得到警告,因為有的語言沒有unsigned int,而Xyz和xyz方法,是依靠大小寫來區分的,像VB 就不能區分這兩個方法.

在CLS中,類型的成員要么是一個字段,要么是一個方法,像是C#提供的屬性(PRoperty),事件(event)/委托(delegate)/運算符重載 都是C#編譯器提供的,到IL層,只有字段和方法.delegate會變成一個類,這個另說.

程序集生成/打包/部署

csc.exe csharp compiler

class Hello{public static void Main(){System.Console.WriteLine("Hello World ...");}}

csc /out:hello.exe /target:exe hello.cs

  • /out表示 輸出文件
  • /target 或者 /t 表示輸出類型

    1. exe 表示CUI,控制臺窗口
    2. winexe GUI應用程序
    3. library 生成dll
    4. module 生成.netmodule模塊,/addmodule:添加module引用
  • /reference: 或 /r 表示添加引用

csc hello.cs會生成hello.exe/out:hello.exe 和 /t:exe 是默認的

CSC編譯時默認引用MSCorLib.dll,可以指定/nostdlib使程序不默認引用這個

響應文件(.rsp)

在CSC編譯的時候,/r /t /out 命令可以保存在一個文件了,如MyProj.rsp

csc @MyProj.rsp hello.cs

還會在CSC.exe 相同目錄中查找一個全局的CSC.rsp文件,例如我的電腦上是C:/Windows/Microsoft.NET/Framework/v4.0.30319/csc.rsp里面Reference了一堆基本的dll,使用/noconfig指定編譯時忽略這個全局響應文件

使用/r:xxx.dll來引用一個dll時,查找路徑為

  1. 工作目錄,當前目錄
  2. CSC.exe所在目錄,MSCorLib.dll從這個文件獲取
  3. /lib編譯時指定 or LIB環境變量

將模塊合并成程序集

hello.cs

class Hello{public static void Main(){System.Console.WriteLine("Hello World ...");Method.AStaticMethod();}}

method.cs

public class Method{public static void AStaticMethod(){System.Console.WriteLine("Hello from another module ...");}}

執行

csc /t:module method.cscsc /addmodule:method.netmodule hello.cshello

結果生成的netmodule文件是一個不包含清單元數據表的PE文件,添加到一個程序集后,這個netmodule不能刪除,刪除會拋出FileNotFoundException

未經處理的異常:  System.IO.FileNotFoundException: 未能加載文件或程序集“method.netmodule”或它的某一個依賴項。系統找不到指定的文件。 ---> System.IO.FileNotFoundException: 系統找不到指定的文件。 (異常來自 HRESULT:0x80070002)   --- 內部異常堆棧跟蹤的結尾 ---   在 Hello.Main()

使用AL.exe 程序連接器

al.exe /t:library /out:example.dll a.netmodule b.netmodule

使用/link[resource]連接資源/resource 嵌入資源

程序集的私有部署

探測目錄

  1. AppDir/ABC.dll
  2. AppDir/ABC/ABC.dll
  3. AppDir/privatePath/ABC.dll
  4. AppDir/privatepath/ABC/ABC.dll

privatePath在app.config中配置

<configuration>    <runtime>        <assemblyBinding>            <probing privatePath="Private"...

強命名程序集

sn -k magicdawn.snk //創建一個snk,包含私鑰公鑰csc /keyfile:magicdawn.snk hello.cs

或者

sn -p magicdawn.snk magicdawn.PublicKey //創建兩個,publickey只包含公鑰sn -tp magicdawn.PublicKey //查看公鑰

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩av在线免费播放| www.久久撸.com| 中文字幕在线观看亚洲| 在线免费观看羞羞视频一区二区| 精品久久久久久久大神国产| 亚洲第一区第一页| 亚洲成在人线av| 亚洲一级免费视频| 欧美激情xxxx| 国产成人自拍视频在线观看| 中文字幕亚洲天堂| 国产主播喷水一区二区| 亚洲国产精品久久精品怡红院| 夜夜狂射影院欧美极品| 亚洲国产精品人人爽夜夜爽| 精品动漫一区二区| 久久久久久久影院| 精品国产31久久久久久| 日韩欧美在线观看视频| 日韩中文字幕在线| 国产亚洲美女精品久久久| 欧美大片免费看| 久久精品中文字幕免费mv| 欧美成人午夜激情| 97国产精品视频人人做人人爱| 中文字幕在线观看亚洲| 欧美有码在线观看| 亚洲四色影视在线观看| 少妇av一区二区三区| 欧美日韩国产一区二区| 亚洲成**性毛茸茸| 国产91色在线|免| 91产国在线观看动作片喷水| 色综合久久悠悠| 色婷婷综合成人| 久久精品欧美视频| 91精品在线看| 亚洲精品乱码久久久久久按摩观| 久久久久北条麻妃免费看| 成人av电影天堂| 日韩欧美国产中文字幕| 国产精品自拍视频| 91日韩在线视频| 中文字幕无线精品亚洲乱码一区| 亚洲三级免费看| 国产精品视频色| 亚洲人成网站999久久久综合| 自拍偷拍免费精品| 日韩精品一区二区视频| 国产福利精品av综合导导航| 欧美成人精品不卡视频在线观看| 国产精品视频不卡| 欧美日韩一二三四五区| 欧洲一区二区视频| 亚洲欧美在线一区| 久久视频在线直播| 亚洲精品久久久久中文字幕二区| 日韩亚洲国产中文字幕| 91精品国产综合久久香蕉最新版| 亚洲一区二区三区毛片| 91美女福利视频高清| 欧美中文在线字幕| 亚洲无av在线中文字幕| 亚洲第一综合天堂另类专| 国产一区玩具在线观看| 海角国产乱辈乱精品视频| 91精品国产成人www| 国产成人精品午夜| 97碰在线观看| 国产精品高潮在线| 91免费版网站入口| 国产成人精品亚洲精品| 国内精品视频久久| 欧美激情视频网址| 国产一区二区三区在线看| 欧美成人激情视频免费观看| 日韩欧美第一页| 日韩亚洲精品视频| 国产不卡一区二区在线播放| 国内精品久久久久久中文字幕| 国产成人综合精品在线| 中文字幕欧美视频在线| 精品日韩中文字幕| 国产精品久久久久影院日本| 精品av在线播放| 亚洲最大的免费| 欧美激情亚洲国产| 欧美日韩成人在线观看| 中文在线资源观看视频网站免费不卡| 日本在线观看天堂男亚洲| 久久久久国产精品免费| 免费av在线一区| 久久久久久久亚洲精品| 国产精品高潮呻吟久久av野狼| 国内偷自视频区视频综合| 91亚洲国产成人久久精品网站| 91精品视频网站| 91成人国产在线观看| 国产视频在线一区二区| 欧美日本国产在线| 日韩亚洲国产中文字幕| 国产精品久久综合av爱欲tv| 亚洲自拍欧美另类| 国产精品视频26uuu| 国产精品女主播| 亚洲一区二区国产| **欧美日韩vr在线| 日韩高清av在线| 久久精品视频导航| 91av在线免费观看视频| 高清欧美电影在线| www日韩欧美| 久久久这里只有精品视频| 亚洲人av在线影院| 欧美成aaa人片在线观看蜜臀| 国产一区二区精品丝袜| 亚洲欧洲国产精品| 日韩视频中文字幕| 日韩欧美中文字幕在线观看| 亚洲精品在线91| 中文字幕国产日韩| 国产美女久久精品香蕉69| 91影院在线免费观看视频| 国产ts人妖一区二区三区| 日韩精品免费观看| 2019中文字幕全在线观看| 78色国产精品| 欧美另类99xxxxx| 国产精品视频999| 2018中文字幕一区二区三区| 中文字幕亚洲情99在线| 久久香蕉精品香蕉| 久久久99免费视频| 国产精品久久久久久久久久99| 久久成人人人人精品欧| 亚洲自拍欧美另类| 97视频在线观看免费高清完整版在线观看| 91精品视频在线看| 97久久国产精品| xxav国产精品美女主播| 91国语精品自产拍在线观看性色| 亚洲成人久久一区| 国产xxx69麻豆国语对白| 欧美体内谢she精2性欧美| 亚洲91精品在线观看| 中文字幕视频在线免费欧美日韩综合在线看| 欧美成人h版在线观看| 国产精品久久久久7777婷婷| 欧美视频免费在线| 久久精品国产精品亚洲| 国产一区二区香蕉| 久久亚洲精品毛片| 91久久久久久久久久| 欧美日韩成人免费| 视频在线一区二区| 欧美天天综合色影久久精品| 亚洲美女又黄又爽在线观看| 精品久久久久久亚洲精品| 欧洲美女免费图片一区| 国产欧美精品日韩| 久久久成人精品视频| 久久久伊人日本| 欧美成人合集magnet| 亚洲国产精品电影在线观看|