Visual Studio编译选项简介
?
一.概念介紹
????? 一般來(lái)講,能影響VS編譯結(jié)果的參數(shù)有兩個(gè):編譯優(yōu)化和目標(biāo)平臺(tái)
????? 編譯優(yōu)化
????? 首先要明白一個(gè)概念,.Net是一個(gè)二次編譯模型,所以VS編譯的結(jié)果是IL代碼。而默認(rèn)情況下VS編譯出來(lái)的IL代碼,會(huì)包括很多NOP指令(空指令),還包括許多分支指令等。VS會(huì)利用這些指令對(duì)程序調(diào)試操作提供更好的支持。而所謂的編譯優(yōu)化,就是去掉這些額外的指令,讓程序集的體積和運(yùn)行時(shí)所占的內(nèi)存更小一點(diǎn)。
????? 其它平時(shí)更常用的說(shuō)法叫Debug版與Release版。Debug版就是關(guān)閉編譯優(yōu)化的版本,Release版就是打開(kāi)編譯優(yōu)化的版本。
????? 目標(biāo)平臺(tái)
????? 現(xiàn)代操作系統(tǒng)分為32位與64位。32位操作系統(tǒng)可以運(yùn)行32位程序,64位操作系統(tǒng)可同時(shí)運(yùn)行32位與64位程序。操作系統(tǒng)通過(guò)識(shí)別程序文件的頭來(lái)判定程序的類(lèi)別。如果包括一個(gè)PE32頭,則是32位程序,如果是PE32+頭,則是64位程序。VS的目標(biāo)平臺(tái)有3個(gè)選項(xiàng),X86,X64和AnyCpu。如果選擇X86,則會(huì)在程序集的前面加上一個(gè)PE32頭,如果選擇X64則加上一個(gè)PE32+頭。而AnyCpu則有點(diǎn)特殊,它將程序集加上一個(gè)PE32頭,但是CLR會(huì)跟據(jù)運(yùn)行環(huán)境自動(dòng)調(diào)整JIT編譯器編譯出的目標(biāo)機(jī)器碼。所以如果普通的靜態(tài)分析工具分析程序集文件會(huì)發(fā)現(xiàn)它是32位程序,但是運(yùn)行時(shí)卻是64位程序。
????? 通過(guò)Visual Studio command prompt下的corflags命令則可以確定程序集的實(shí)際類(lèi)別。如果是X86編譯,PE:PE32,32BIT:1,如果是X64編譯,PE:PE32+,32BIT:0,如果是AnyCpu編譯,PE:PE32,32BIT:0。
二.在解決方案中設(shè)置編譯選項(xiàng)
????? 可以在解決方案屬性頁(yè)中對(duì)所有項(xiàng)目提供基礎(chǔ)設(shè)定。
????? 可以看到,在最上面一行有兩個(gè)參數(shù)分別對(duì)應(yīng)上文所說(shuō)的概念:配置和平臺(tái)。這里的配置就是指是Debug模式還是Release模式,選項(xiàng)第一個(gè)活動(dòng)(XXX)表示當(dāng)前的選擇。平臺(tái)則是表示X86,X64,還是部份X86部分X64混合著用,同樣選項(xiàng)里第一個(gè)活動(dòng)(XXX)表示當(dāng)前的選擇。右面的主面板里可以對(duì)每個(gè)項(xiàng)目進(jìn)行單獨(dú)與詳細(xì)的設(shè)置。
????? 這里有幾個(gè)需要注意的地方,我是經(jīng)過(guò)多次探索才得出結(jié)論的。
????? 1.可以看到,在界面上最上面一行有配置與平臺(tái)選項(xiàng),在右面主面板里每個(gè)項(xiàng)目又有自己的配置與平臺(tái)選項(xiàng)。但它們所表達(dá)的意思是不同的。真正對(duì)項(xiàng)目編譯起作用的是主面板里的設(shè)置,而最上面的設(shè)置可以把它想像成主面板相對(duì)應(yīng)設(shè)置集的一種編譯策略的名字。就如上圖所示,配置里選的是Debug,但主面板里有配置成Release模式的項(xiàng)目。舉個(gè)例子,你可以建一個(gè)名叫M的配置,M顯示在最上面的配置下拉框里,其中前三個(gè)項(xiàng)目是Debug模式,后兩個(gè)是Release模式,然后再建一個(gè)名叫N的平臺(tái),N將顯示在最上面的平臺(tái)下拉框里,其中第一個(gè)是X86,后面四個(gè)是X64模式。
????? 可以通過(guò)配置管理器按鈕來(lái)維護(hù)配置集與平臺(tái)集。
????? 2.直接通過(guò)最上面的上拉框是無(wú)法改變項(xiàng)目設(shè)置的。比如將上面的配置下拉框由活動(dòng)(Debug)改成Release,當(dāng)然你可以看到主面板里各個(gè)項(xiàng)目的設(shè)置確實(shí)都已改了。但是如果你點(diǎn)確定,然后再進(jìn)入本窗口時(shí),卻發(fā)現(xiàn)最上面的選擇仍然是先前的活動(dòng)(Debug)。這里可以選讓你誤以為直接可以更改的原因,我猜是方便給你查看的。
????? 3.更改設(shè)定會(huì)影響生成dll與exe的目錄。
| 平臺(tái) | 模式 | 目錄 |
| AnyCpu,X86 | Debug | bin\Debug |
| Release | bin\Release | |
| X64 | Debug | bin\X64\Debug |
| Release | bin\X64\Release |
?
三.在項(xiàng)目中設(shè)置編譯選項(xiàng)
????? 項(xiàng)目屬性頁(yè)里也可以對(duì)具體項(xiàng)目做配置與平臺(tái)的設(shè)置。
????? 可以看到,在最上面一行也有配置與平臺(tái)的下拉框。如同上面所述一樣,這里也是只能看,不能改。
????? 勾選優(yōu)化代碼等同于選擇Release模式,也可在目錄平臺(tái)下拉框更改平臺(tái)選項(xiàng)。
????? 在頁(yè)面最下面有一個(gè)高級(jí)按鈕,點(diǎn)開(kāi)后會(huì)彈出如下框
????? 這里最重要的就是調(diào)試信息了,點(diǎn)開(kāi)下拉框后顯示如下:
????? 這里只有選中full或pdb-only時(shí)才會(huì)生成pdb文件。pdb全稱(chēng)Program Database,里面保存了IL代碼與源代碼的對(duì)應(yīng)關(guān)系。只有在編譯時(shí)生成了此文件,源代碼才可調(diào)試。
四.要注意的問(wèn)題
????? 由上文可知,程序集的生成目錄是被解決方案屬性頁(yè)里的設(shè)置影響的,但實(shí)際的編譯模式卻可以被項(xiàng)目屬性頁(yè)更改。這會(huì)帶來(lái)目錄名與實(shí)際程序集類(lèi)型不一致的問(wèn)題。比如你在解決方案里設(shè)定為X64平臺(tái),但是在項(xiàng)目屬性頁(yè)里卻將其目標(biāo)平臺(tái)改為X86,結(jié)果就是在X64的目錄里生成了X86的程序集。這一點(diǎn)一定要注意。
?
http://www.cnblogs.com/ljzforever/archive/2012/11/02/2751888.html
轉(zhuǎn)載于:https://www.cnblogs.com/vivianlou/p/3853600.html
總結(jié)
以上是生活随笔為你收集整理的Visual Studio编译选项简介的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 燃烧意志奥兹怎么过(《燃烧》在线观看)
- 下一篇: word英文生成音标的方法(推荐一款好用