C#編輯器csc.exe參數詳解
來源:互聯網
上載者:User
CSC.exe把Visual C#程式碼編譯成IL檔案時,有著很多參數和開關選項。正確的瞭解和運用這些參數和開關有時會解決一些看似很棘手的問題。下面就通過一張表來大致說明一下這些參數和開關的具體作用。這些參數和開關選項是按照字母順序來排列的。其中帶"*",是一些常用的參數或開關。
選項 用途
@ * 指定回應檔。
/?, /help 在控制台的電腦螢幕上顯示編譯器的選項
/addmodule 指定一個或多個模組為集會的一部分
/baseaddress指定裝入DLL的基礎地址
/bugreport 建立一個檔案,該檔案包含是報告錯誤更加容易的資訊
/checked 如果整數計算溢出資料類型的邊界,則在運行時產生一個例外的事件
/codepage 指定字碼頁以便在編譯中使用的所有原始碼檔案
/debug * 發送調試資訊
/define 定義預先處理的程式符號
/doc * 把處理的文檔注釋為XML檔案
/fullpaths 指定編譯輸出檔案的反正路徑
/incremental 對原始碼的檔案進行增量編譯
/linkresource 把.NET資源連結到集合中
/main 指定Main方法的位置
/nologo 禁止使用編譯器的標誌資訊
/nooutput 編譯檔案但不輸出檔案
/nostdlib 不匯出標準庫(即mscorlib.dll)
/nowarn 編譯但編譯器並不顯示警告功能
/optimize 開啟或者關閉最佳化
/out * 指定輸出檔案
/recurse 搜尋編譯源檔案的子目錄
/reference * 從包含集合的檔案中匯入中繼資料
/target * 指定輸出檔案的格式
/unsafe 編譯使用非安全關鍵字的代碼
/warn 設定警告層級
/warnaserror 提升警告為錯誤
/win32icon 插入一個.ico檔案導輸出檔案中去
/win32res 插入一個Win32資源導輸出檔案中
具體說明:
一.@
這個選項是用來指定回應檔。回應檔是一種包含了許多編譯選項的檔案。這些編譯選項將和原始碼檔案一起由編譯器進行處理。一般來說此種回應檔是以文字檔形式出現。他的副檔名是.rsp。在回應檔中是用#符號表示開始的注釋。
例:以下是一個回應檔resp1.rsp的內容:
# 這是一個簡單的回應檔,檔案名稱為resp1.rsp
#使用方法: csc @resp1.rsp
/target:exe /out:sample.exe sample.cs
此回應檔的作用就是把sample.cs檔案編譯成sample.exe檔案。如果在一次編譯中要指定多個回應檔,可以指定多個回應檔選項,如:
@file1.rsp @file2.rsp
二./?和/help
這個選項應該不必多說,那些用過DOS程式的人,大概都會用這個選項。
三./addmodule
本選項是使編譯器搜集從使用者正在編譯的工程到可用檔案中所以類型的資訊。所有添加了/addmodule的模組在運行時必須與輸出檔案在同一目錄中。這就是說,使用者可以在編譯時間指定任何目錄中的模組,但在運行時這個模組必須在應用程式目錄中。檔案中不能包含彙編名單。例如:如果輸出檔案用 /taarget:module建立,其中繼資料可以用/addmodule匯入。
例子:把二個模組加入myProject.cs中
csc /addmodule:module1.dll;module2.dll myProject.cs
四./baseaddress
本選項允許使用者指定載入DLL時的首選地址,這個首選地址可以是十進位、十六進位、八進位。DLL的預設首選地址在.Net運行時設定。如果目標檔案不是DLL檔案,這個選項將被忽略。
例子:把myLibrary.cs 編譯程DLL檔案,並且當此DLL在.Net運行環境被載入時的地址是0x1111000
csc /baseaddres:0x1111000 /target:library myLibrary.cs
五./bugreport
這個選項用來報告編譯時間的錯誤資訊。在報告中包含以下內容:
1).編譯中所有原始碼的一個拷貝
2).在編譯中所有的編譯選項
3).編譯資訊,包括編譯器、已耗用時間、作業系統的版本資訊
4).編譯器輸出
5).問題的描述
6).如何解決問題的描述
例子:產生一個bugs.txt檔案,並把錯誤報表放在檔案裡面
csc /bugreport:bugs.txt Hello.cs
六./checked
此選項指定不在檢驗或或者未檢驗關鍵字範圍內以及導致超出資料類型範圍的值的整數計算語句是否產生運行例外。具體的說就是,如果不在檢驗或者未檢驗關鍵字範圍內的整數計算語句產生的值在資料類型允許的範圍之外,並且在編譯中使用了/checked+(/checked),該語句就會在運行時產生例外,如果在編譯時間使用了/checked-,在運行時該語句就不會產生例外。
例子:編譯myMath.cs,並且指定一個不在檢驗或者未檢驗關鍵字範圍內的整數計算語句(且其產生的值超出資料類型的範圍),將在運行時引起例外。
csc /checked+ myMath.cs
七./codepage
如果使用者編譯的一個或者多個原始碼不使用電腦上的預設字碼頁,可以使用/codepage選項來指定希望使用的字碼頁。/codepage適用於編譯中所有的原始碼檔案。
如果原始碼檔案在電腦上的同一個字碼頁位置建立,或者原始碼檔案用UNICODE或者UTF-8來建立,使用者就不需要使用/codepage了。
八./debug
此選項是在調試時候使用的,當調試者啟用了這個選項來調試自己的程式,將會建立一個.pdb檔案,並把各種調試資訊寫到此檔案裡。有2中選項來指定調試的類型:
/debug [+/-] :當選用/debug +就會把建立.pdb檔案,並把調試資訊儲存到裡面;/debug -是一個預設設定,就是不產生任何調試資訊。
/debug:[full/pdbonly] :當使用/debug:full就是建立預設的調試資訊,有點類似/debug+選項。/debug: pdbonly選項是建立.pdb檔案,並且你只能使用原始碼調試在調試工具裡。
例子:編譯Hello.cs並且為Hello.cs建立調試資訊
csc /debug+ HelloWorld.cs
九./define
此選項在程式中定義了一個符號,他和在來源程式中使用#define預先處理程式指示功能相同,此符號保持已定義狀態,直到源檔案中的#undef指示符刪除定義或者編譯器已到達了檔案末尾。你可以用/d簡寫來代替。
例子:下面是my.cs的來源程式
using System;
public class myBuild{
public static void Main() {
#if (final)
Console.WriteLine("Final Build");
#else
Console.WriteLine("Trial Build");
#endif
}
}
如果用csc /define:final my.cs來編譯就會顯示"Final Build",如果沒有/define,編譯後執行就會顯示"Trial Build"。
十./doc
文檔在當今已經變得愈來愈重要了,一個好的程式應該配有相當的文檔。如果你在寫程式的文檔中用的是"///"標識符來注釋。當你使用/doc選項來編譯時間,你的所以注釋文檔將會自動的保留在一個XML檔案中。
例子:以下是my.cs 的來源程式
using System ;
///
/// This is a sample class that has some documentation
///
public class myDocument {
///
/// Main entry point of the class
///
public static void Main (string[] argv)
{
Console.WriteLine("A Sample Class") ;
}
}
用下列編譯語句會產生my.xml檔案,看看my.xml檔案到底儲存了什麼東西。
Csc /doc:my.xml my.cs
十一./fullpaths
在預設情況下,編譯產生的錯誤或者警告都只會指明發現錯誤的檔案名稱,加入此選項使得在編譯器產生錯誤或者警告的時候會顯示完整的路徑。你可以把上面的 my.cs程式文法搞錯,再用 csc /fullpaths my.cs 和 csc my.cs分別編譯,看看錯誤提示有什麼不同。
十二./incremental
本選項主要是啟用增量編譯器,這種編譯器只對上次編譯後發生改變的函數進行編譯。如果在編譯時間候選用了/debug選項,調試資訊的狀態儲存在相應的. pdb檔案中。除此編譯時間的資訊都儲存在.incr檔案中,此.incr檔案的名稱為output_file_name.extension.incr。即如果輸出檔案時out.exe,則此檔案對應的incr檔案是out.exe.incr檔案。
例子:利用增量編譯器來編譯檔案
csc /incremental /out:my.exe my.cs
如果編譯成功則會產生2個檔案,分別是:my.exe和my.exe.incr。
十三./linkresource
這個選項就是在輸出檔案中建立到.Net資源的連結。他的簡寫是/linkres。資源檔就是在那些在工程檔案中使用到的所有的資源,像圖片、聲音等。這個選項只是對於資源檔建立連結,這樣有助於管理使用同一資源的程式,而不需要多個副本。此選項的具體文法如下:
/linkresource:filename,identifier,mimetype
其中:
filename:是想建立連結的.Net的資源檔
identifier(可選):資源的邏輯名稱,該名稱用於載入資源,預設名稱是檔案名稱。
mimetype(可選):是一個代表資源的媒介類型的字串。預設為空白。
例子:在檔案中建立一個指向reso.resource的連結
csc /linkres:reso.resource myResource.cs
十四./main
當我們編譯二個或者多個擁有Main方法的Class,我們可以使用這個選項讓使用者指定最終的輸出檔案中的使用那個Main的方法。
例子:編譯二個檔案,但輸出檔案中的Main方法來自Main1 Class
csc myMain1.cs myMain2.cs /main:Main1
十五./nologo
這個選項禁止在編譯器啟動時顯示開始標誌和編譯過程中顯示報告資訊。
例子:
csc /nologo my.cs
十六./nooutput
編譯檔案,但不建立任何輸出檔案。使用者可以看到任何編譯錯誤和警告。
例子:
csc /nooutput my.cs
十七./nostdlib
這個選項禁止匯入mscorlib.dll。這個DLL包含了這個系統名稱空間。當使用者希望使用自己的系統名稱空間時,一般才會使用此選項。
例子:編譯檔案,但不匯入mscorlib.dl
csc /nooutput myOutput.cs
十八./nowarn
本選項是在編譯過程中禁止指定的警告類型。如果是禁止多個警告類型,用逗號分隔。
例子:在編譯過程中禁止警告類型CS0108和CS0109
csc /nowarn:108,109 Warn.cs
十九./optimize
本選項啟用或者禁用由編譯器執行最佳化。最佳化的結果是使得輸出檔案更小、更快、更有效率。預設是/optimize執行最佳化,如果你選用了/optimize-則禁止最佳化。/o是/optimize的簡寫。
例子:編譯檔案,並禁止最佳化
csc /optimise- my.cs
二十./out
在沒有指定輸出檔案的情況下,如果通過編譯器編譯後檔案是EXE檔案,則輸出檔案將從包含Main方法的原始碼的檔案中獲得名字;如果編譯後的檔案是DLL檔案,將從第一個原始碼檔案中獲得名字。如果使用者想要指定輸出檔案名稱,就可以使用此選項。
例子:編譯HelloWord.cs檔案,並把輸出檔案命名為Hello.exe
csc /out:Hello.exe helloworld.cs
二十一./recurse
此選項允許使用者編譯在指定目錄或者工程目錄的所以子目錄中的所有原始碼檔案。使用者可以使用萬用字元來編譯工程目錄下的所有匹配檔案。
例子:編譯/dir1/dir2目錄下及其下級目錄中的所有C#檔案,並產生dir2.dll
csc /target:library /out:dir2.dll /recurse: dir1\dir2\*.cs
二十二./refrence
此選項可使得當前編譯工程使用指定檔案中的公用類型資訊。這個選項對於初學者是很重要的。此選項的簡寫是/r。你必須引用在程式碼中使用"using"關鍵字匯入的所有檔案,如果在你的程式中,使用了自己編寫的類庫,在編譯時間也必須引用。
例子:編譯檔案,並引用在程式中使用的檔案
csc /r:system.dll;myExec.exe;myLibrary.dll myProject.cs
(註:其中那個myExec.exe和myLibrary.dll時自己建立的)
二十三./target
這個選項是告訴編譯器你所想得到什麼類型的輸出檔案。除非使用/target:module選項,其他選項建立的輸出檔案都包含著彙編名單。彙編名單儲存著編譯中所有檔案的資訊。在一個命令列中如果產生多個輸出檔案,但只建立一個彙編名單,並儲存在第一個輸出檔案中。
下面是/target的4種用法:
/target:exe 建立一個可執行(EXE)的控制台應用程式
/target:library 建立一個程式碼程式庫(DLL)
/target:winexe 建立一個windows程式(EXE)
/target:module 建立一個模組(DLL)
例子:
csc /target:exe myProj.cs // 建立一個EXE檔案
csc /target:winexe myProject.cs file://建立一個windows程式
csc /target:library myProject.cs file://建立一個程式碼程式庫
csc /target:module myProject.cs file://建立一個模組
二十四./resource
此選項和/linkresource正好相反。他的作用是把.Net資源檔嵌入到輸出檔案中,參數、用法都和/linkresource也相同,具體可參考前面/linkresource選項。
二十五./unsafe
此選項是告訴編譯器採用非安全模式編譯檔案
例子:用非安全模式編譯my.cs
csc /unsafe my.cs
二十六./warn
使用本選項是在編譯過程中採用什麼等級的警告層級
警告層級 含義
0 關閉所有警告
1 只顯示嚴重警告
2 層級為1的警告和某些不嚴重的警告
3 層級為2的警告和某些不算非常嚴重的警告
4 級 別為3的警告和資訊警告
例子:編譯檔案,不顯示任何錯誤
csc /warn:0 my.cs
二十七./warnaserror
告訴編譯器把在編譯中把所有的警告當成錯誤來處理。/warnaserror-是預設選項,在該選項下編譯中的警告不影響檔案的輸出。/warnaserror和/warnaserror+是一樣的。
例子:編譯檔案,並在編譯中把警告當成錯誤
csc /warnaserror myj.cs
二十八./win32icon
在輸出檔案中插入一個表徵圖檔案(.ico)。從而在Windows中的資源管理員中就看到以此表徵圖標識的檔案了。
例子:
csc /win32icon:myicon.ico my.cs
二十九./win32res
在輸出檔案中添加一個win32的資源檔。此資源檔包括使用者應用程式的版本資訊或者位元影像(表徵圖)資訊。如果使用者不指定/win32res,編譯器將根據彙編版本產生版本資訊。
例子:添加一個win32資源檔到輸出檔案中
csc /win32res:winrf.res mt.cs
以上就是Csc.exe在編譯C#檔案中的全部選項。瞭解並掌握這些選項有時對我們編程是大大有用的。