日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Visual Studio编译选项简介

發(fā)布時(shí)間:2023/12/19 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Visual Studio编译选项简介 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?

一.概念介紹

????? 一般來(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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。