C#命令行(CSC.EXE) 編譯器選項(Framework 1.1)

 Microsoft Visual Studio .NET 2003 IDE在給我們編程帶來方便的同時,也帶給了我們無知,在沒有vs2003的情況下怎麼編譯我們的C#文件呢?還是回到原始的命令行編譯吧。下面我將把Framework1.1中的編譯命令全部介紹一下。
 
第一部分:命令介紹。
選項                       用途
@                           指定響應文件。
/?                            列出編譯器選項到 stdout。
/addmodule             指定一個或多個模塊作爲此程序集的一部分。
/baseaddress           指定加載 DLL 的首選基址。
/bugreport               創建一個包含信息(該信息便於報告錯誤)的文件。
/checked                 指定溢出數據類型邊界的整數算法是否將在運行時導致異常。
/codepage               指定編譯中的所有源代碼文件所使用的代碼頁。
/debug                     發出調試信息。
/define                     定義預處理器符號。
/doc                        處理 XML 文件的文檔註釋。
/filealign           指定輸出文件中節的大小。
/fullpaths          指定編譯器輸出中的文件的絕對路徑。
/help                        列出編譯器選項到 stdout。
/incremental             啓用源代碼文件的增量編譯。
/lib                           指定通過 /reference 引用的程序集的位置。
/linkresource            創建指向託管資源的鏈接。
/main                       指定 Main 方法的位置。
/noconfig                 不要使用 csc.rsp 進行編譯。
/nologo                    取消顯示編譯器版權標誌信息。
/nostdlib          不導入標準庫 (mscorlib.dll)。
/nowarn                   禁用編譯器生成指定警告的能力。
/optimize          啓用/禁用優化。
/out                         指定輸出文件。
/recurse                   搜索子目錄中要編譯的源文件。
/reference                從包含程序集的文件中導入元數據。
/resource                 將 .NET Framework 資源嵌入到輸出文件中。
/target                      使用下面的四個選項之一指定輸出文件的格式:
                                                                                /target:exe
                                                                                /target:library
                                                                                /target:module
                                                                                /target:winexe
/unsafe                     編譯使用 unsafe 關鍵字的代碼。
/utf8output               使用 UTF-8 編碼顯示編譯器輸出。
/warn                       設置警告等級。
/warnaserror            將警告提升爲錯誤。
/win32icon               將 .ico 文件插入到輸出文件中。
/win32res                將 Win32 資源插入到輸出文件中。
 
第二部分:命令的具體說明。
一@:指定響應文件
@response_file
其中:
response_file
一個列出編譯器選項或要編譯的源代碼文件的文件。
備註
@ 選項使您可以指定包含編譯器選項和要編譯的源代碼文件的文件。編譯器將對這些編譯器選項和源代碼文件進行處理,就像已在命令行上指定了它們一樣。
若要在一次編譯中指定多個響應文件,請指定多個響應文件選項。例如:
@file1.rsp @file2.rsp
在響應文件中,多個編譯器選項和源代碼文件可以出現在同一行中。單個編譯器選項的指定必須出現在同一行中(不能跨行)。響應文件可以帶有以 # 符號開始的註釋。
示例
以下幾行來自一個示例響應文件:
# build the first output file
/target:exe /out:MyExe.exe source1.cs source2.cs
 
二 /? 列出編譯器選項到 stdout
備註
該選項將編譯器選項的列表和每個選項的簡短說明發送到 stdout。如果編譯中包含該選項,將不會創建輸出文件,也不會進行編譯。
 
三 /addmodule指定一個或多個模塊作爲此程序集的一部分
/addmodule:file[;file2]
其中:
file,file2
包含元數據的輸出文件。該文件不能包含程序集清單。若要導入多個文件,請用逗號或分號分隔文件名。
備註
運行時,所有用 /addmodule 添加的模塊必須與輸出文件在同一目錄中。也就是說,編譯時可以在任何目錄中指定模塊,但是在運行時模塊必須在應用程序目錄中。如果在運行時模塊不在應用程序目錄中,則將得到 System.TypeLoadException。
file 不能包含程序集。例如,如果輸出文件用 /target:module 創建,則其元數據可以用 /addmodule 導入。
如果輸出文件用 /target 選項而不是 /target:module 創建,則其元數據無法用 /addmodule 導入,但是可以用 /reference 導入。
示例
編譯源文件 input.cs 並從 metad1.netmodule 和 metad2.netmodule 中添加元數據來產生 out.exe:
csc /addmodule:metad1.netmodule;metad2.netmodule /out:out.exe input.cs
 
四 /baseaddress     指定加載 DLL 的首選基址
/baseaddress:address
其中:
address
DLL 的基址。可以將該地址指定爲十進制、十六進制或八進制數。
備註
/baseaddress 選項使您可以指定加載 DLL 的首選基址。DLL 的默認基址由 .NET Framework 公共語言運行庫設置。
請注意:該地址中低位的數將會被舍入。例如,如果指定 0x11110001,它將被舍入爲 0x11110000。
若要完成 DLL 的簽名進程,請使用 SN.EXE 的 -R 選項。
 
五 /bugreport         創建一個包含信息(該信息便於報告錯誤)的文件
/bugreport:file
其中:
file
要包含錯誤報告的文件的名稱。
備註
/bugreport 選項將使下列信息放在 file 中:
編譯中所有源代碼文件的副本。
編譯中使用的編譯器選項列表。
有關編譯器、運行庫和操作系統的版本信息。
引用的程序集和模塊(保存爲十六進制數),.NET Framework SDK 附帶的程序集除外。
編譯器輸出(如果有)。
將會提示給您的問題的說明。
關於考慮問題應如何解決(就此將會向您提示)的說明。
示例
編譯 t2.cs,並將所有錯誤報告信息放置在文件 problem.txt 中:
csc /bugreport:problem.txt t2.cs
 
六 /checked  指定溢出數據類型邊界的整數算法是否將在運行時導致異常
/checked[+ | -]
備註
/checked 選項指定不在 checked 或 unchecked 關鍵字範圍內的整數算法語句,以及產生的值超出數據類型範圍的整數算法語句是否導致運行時異常。
checked 或 unchecked 關鍵字範圍內的整數算法語句不受 /checked 選項的影響。
如果不在 checked 或 unchecked 關鍵字範圍內的整數算法語句產生的值超出數據類型範圍,並且編譯中使用了 /checked+ (/checked),則該語句將在運行時導致異常。如果編譯中使用的是 /checked-,則該語句不在運行時導致異常。
示例
編譯 t2.cs,並指定不在 checked 或 unchecked 關鍵字範圍內並且產生的值超出數據類型範圍的整數算法語句將在運行時導致異常。
csc t2.cs /checked
 
七 /codepage 指定編譯中的所有源代碼文件所使用的代碼頁
/codepage:id
其中:
id
編譯中用於所有源代碼文件的代碼頁的 ID。
備註
如果編譯的一個或多個源代碼文件沒有被創建爲使用計算機上的默認代碼頁,則可以使用 /codepage 選項指定應使用的代碼頁。/codepage 適用於編譯中的所有源代碼文件。
如果源代碼文件是用計算機中的同一有效代碼頁創建的,或者是用 UNICODE 或 UTF-8 創建的,則不需要使用 /codepage。
 
八 /debug 發出調試信息
/debug[+ | -]
/debug:{full | pdbonly}
其中:
+ | -
指定“+”或只指定 /debug 將使編譯器生成調試信息,並將這些信息放置在一個程序數據庫(.pdb 文件)中。指定“-”(在不指定 /debug 時有效)則導致不創建調試信息。
full | pdbonly
指定編譯器生成的調試信息類型。full 參數在沒有指定 /debug:pdbonly 時有效,它允許將調試器附加到正在運行的程序。指定 pdbonly 允許在調試器中啓動程序時進行源代碼調試,但僅在正在運行的程序附加到調試器時才顯示彙編程序。
備註
/debug 選項使編譯器生成調試信息並將其放置在輸出文件中。使用該選項創建調試版本。如果未指定 /debug、/debug+ 或 /debug:full,則不能調試程序的輸出文件。
示例
將調試信息放置在輸出文件 app.exe 中:
csc /debug /out:app.exe test.cs
 
九 /define 定義預處理器符號
/define:name[;name2]
其中:
name,name2
要定義的一個或多個符號的名稱。
備註
/define 選項將 name 定義爲程序中的符號。它與在源文件中使用 #define 預處理器指令的效果相同。符號一直保持定義到源文件中的 #undef 指令移除定義,或者編譯器執行到文件尾。
可以將用該選項創建的符號與 #if、#else、#elif 和 #endif 一起使用,以按條件編譯源文件。
/d 是 /define 的縮寫形式。
通過使用分號或逗號分隔符號名稱,可以使用 /define 定義多個符號。例如:
/define:DEBUG;TUESDAY
示例
// preprocessor_define.cs
// compile with: /define:xx
// or uncomment the next line
// #define xx
using System;
public class Test
{
   public static void Main()
   {
      #if (xx)
         Console.WriteLine("xx exists");
      #else
         Console.WriteLine("xx does not exist");
      #endif
   }
}
 
十 /doc 處理 XML 文件的文檔註釋
/doc:file
其中:
file
XML 的輸出文件,由編譯的源代碼文件中的註釋填充。
備註
/doc 選項允許將文檔註釋放置在 XML 文件中。
對於 Visual Studio .NET,只有 C# 編譯器提供此文檔註釋功能。
在源代碼文件中,可處理以下內容之前的文檔註釋,並將其添加到 XML 文件中:
用戶定義的類型,如 class、delegate 或 interface
成員,如字段、事件、屬性或方法
包含 Main 的源代碼文件首先輸出到 XML。
若要將生成的 .xml 文件用於智能感知功能,請使該 .xml 文件的文件名與要支持的程序集同名,然後確保該 .xml 文件放入與該程序集相同的目錄中。這樣,在 Visual Studio 項目中引用程序集時,也可找到該 .xml 文件。
在使用 /incremental 的編譯中將忽略 /doc;使用 /incremental- 以確保 file 是最新的。
除非用 /target:module 進行編譯,否則 file 將包含 <assembly></assembly> 標記,以指定包含編譯輸出文件的程序集清單的文件名。
 
十一 /filealign 指定輸出文件中節的大小
/filealign:number
其中:
number
指定輸出文件中節大小的值。有效值爲 512、1024、2048、4096 和 8192。這些值以字節爲單位。
備註
/filealign 選項使您可以指定輸出文件中的節大小。
每個節將在是 /filealign 值的倍數的邊界上對齊。沒有固定的默認值。如果未指定 /filealign,則公共語言運行庫在編譯時將選取一個默認值。
通過指定節的大小,可以影響輸出文件的大小。修改節的大小可能對將在較小設備上運行的程序有用。
 
十二 /fullpaths  指定編譯器輸出中的文件的絕對路徑
/fullpaths
備註
默認情況下,編譯所產生的錯誤和警告指定包含錯誤的文件名。/fullpaths 選項使編譯器指定文件的完整路徑。
 
十三 /help      列出編譯器選項到 stdout
/help
/?
備註
該選項將編譯器選項的列表和每個選項的簡短說明發送到 stdout。如果編譯中包含該選項,將不會創建輸出文件,也不會進行編譯。
 
十四 /incremental  啓用源代碼文件的增量編譯
/incremental[+ | -]
備註
/incremental 編譯器選項啓用增量編譯器,增量編譯器僅編譯自上次編譯後更改的那些方法。先前編譯的狀態信息存儲在由編譯器創建的下列文件中:
output_file_name.dbg
使用 /debug 進行編譯時,調試信息的狀態存儲在程序數據庫(.pdb 文件)中。
output_file_name.extension.incr
編譯狀態信息(調試信息除外)存儲在 .incr 文件中。
首次使用 /incremental 時,.incr 和 .pdb 文件將更新,並且後面的所有編譯都將是增量的。更改以前 /incremental 編譯的編譯器選項將導致完全重新生成 .incr 和 .pdb 文件。
如果編譯器檢測到自上次增量編譯後有許多更改,它可能執行完全生成,因爲完全生成至少與增量編譯一樣有效。如果編譯器無法找到項目的 .pdb 或 .incr 文件,則將發生完全重新生成。
在增量編譯中,將忽略 /doc。若要確保文檔文件是最新的,請用 /incremental- 生成。
默認情況下,/incremental- 有效。指定 /incremental 與指定 /incremental+ 相同。
用 /incremental 選項創建的輸出文件可能比禁用增量編譯時創建的輸出文件大。由於輸出文件會較大,在最後的輸出文件生成中應使用 /incremental-。
/incremental 可提高包含許多小文件的項目的編譯速度,而對包含有少量大文件的項目,在速度上只有很少或沒有提高。
示例
使用增量編譯器編譯 in.cs:
csc /incremental in.cs
 
十五 /lib 指定通過 /reference 引用的程序集的位置
/lib:dir1[, dir2]
其中:
dir1
在當前工作目錄(調用編譯器的目錄)或公共語言運行庫的系統目錄中未找到引用的程序集時,編譯器將在其中進行查找的目錄。
dir2
要在其中搜索程序集引用的一個或多個附加目錄。用分號分隔附加的目錄名。
備註
/lib 選項指定通過 /reference 選項引用的程序集的位置。
編譯器按以下順序搜索未完全限定的程序集引用:
當前工作目錄。該目錄爲從其調用編譯器的目錄。
公共語言運行庫系統目錄。
由 /lib 指定的目錄。
由 LIB 環境變量指定的目錄。
使用 /reference 指定程序集引用。
/lib 是累加的;多次指定它可將新的指定追加到任何先前指定的值上。
另一種使用 /lib 的方法是將任何所需的程序集複製到工作目錄;這使您得以僅將程序集名稱傳遞給 /reference。然後可以從工作目錄中刪除這些程序集。由於程序集清單中未指定依賴程序集的路徑,因此應用程序可以在目標計算機上啓動,然後查找並使用全局程序集緩存中的程序集。
示例
編譯 t2.cs 以創建 .exe 文件。編譯器將在工作目錄和驅動器 C 上根目錄中查找程序集引用。
csc /lib:c:/ /reference:t2.dll t2.cs
 
十六 /linkresource 創建指向託管資源的鏈接
/linkresource:filename[,identifier]
其中:
filename
要從程序集鏈接的 .NET Framework 資源文件。
identifier(可選)
資源的邏輯名稱;用於加載此資源的名稱。默認爲文件的名稱。
備註
/linkresource 選項在輸出文件中創建指向 .NET Framework 資源的鏈接;資源文件不放在輸出文件中。/resource 在輸出文件中嵌入資源文件。
當鏈接的資源是用 C# 編譯器創建的時,它在程序集中是公共的。
/linkresource 需要除 /target:module 選項之外的 /target 選項之一。
例如,如果 filename 是通過 Resgen.exe 或在開發環境中創建的 .NET Framework 資源文件,則可以用 System.Resources 命名空間中的成員訪問它(有關更多信息,請參見 System.Resources.ResourceManager)。對於所有其它資源,使用 System.Reflection.Assembly 類中的 GetManifestResource* 方法在運行時訪問資源。
在 filename 中指定的文件可以爲任何格式。例如,您可能會將本機 DLL 設置成程序集的一部分,這樣,它就可以安裝進全局程序集緩存,並可以由該程序集中的託管代碼訪問。
/linkres 是 /linkresource 的縮寫形式。
示例
編譯 in.cs 並鏈接到資源文件 rf.resource:
csc /linkresource:rf.resource in.cs
 
十七 /main     指定 Main 方法的位置
/main:class
其中:
class
包含 Main 方法的類型。
備註
如果編譯包括多個具有 Main 方法的類型,可以指定哪個類型包含要用作程序入口點的 Main 方法。
此選項用在編譯 .exe 文件時。
示例
編譯 t2.cs 和 t3.cs,並指定將在 Test2 中找到 Main 方法:
csc t2.cs t3.cs /main:Test2
 
十八 /noconfig 不要使用 csc.rsp 進行編譯
/noconfig
備註
/noconfig 選項通知編譯器不要使用 csc.rsp 文件進行編譯,該文件與 csc.exe 文件位於同一目錄中,並從該目錄中加載。csc.rsp 文件引用 .NET Framework 附帶的所有程序集。Visual Studio .NET 開發環境包括的實際引用具體取決於項目類型。
可以修改 csc.rsp 文件並指定其它編譯器選項,而這些選項是那些應該包括在使用 csc.exe 的來自命令行的每次編譯中的選項(/noconfig 選項除外)。
編譯器會保留上次傳遞給 csc 命令的選項。因此,命令行上的任何選項都會重寫 csc.rsp 文件中同一選項的設置。
如果不希望編譯器查找並使用 csc.rsp 文件中的設置,請指定 /noconfig。
 
十九 /nologo  取消顯示編譯器版權標誌信息
/nologo
備註
/nologo 選項在編譯器啓動時取消顯示登錄版權標誌,並在編譯期間取消顯示信息性消息。
此選項在開發環境中不可用;它僅在從命令行編譯時纔可用。
 
二十 /nostdlib 不導入標準庫 (mscorlib.dll)
/nostdlib[+ | -]
備註
/nostdlib 選項禁止導入定義整個 System 命名空間的 mscorlib.dll。如果您希望定義或創建自己的 System 命名空間和對象,請使用該選項。
如果不指定 /nostdlib,mscorlib.dll 將導入程序(與指定 /nostdlib- 相同)。如果指定 /nostdlib,則與指定 /nostdlib+ 相同。
 
二十一 /nowarn     禁用編譯器生成指定警告的能力
/nowarn:number1[,number2[...]]
其中:
number1,number2
希望編譯器取消的警告編號。
備註
/nowarn 選項使您可以取消編譯器生成一個或多個警告的能力。用逗號分隔多個警告編號。
僅需要指定警告標識符的數值部分。例如,若要取消 CS0028,可以指定 /nowarn:28。
編譯器在無人蔘與的模式下忽略傳遞給 /nowarn 的警告編號,這些警告編號在先前版本中有效但已從編譯器中移除。例如,CS0679 在 Visual Studio .NET 2002 中有效但後來被刪除。
 
二十二 /optimize 啓用/禁用優化
/optimize[+ | -]
備註
/optimize 選項啓用或禁用由編譯器執行以使輸出文件更小、更快和更有效的優化。/optimize 選項還通知公共語言運行庫在運行時優化代碼。
默認情況下,/optimize- 有效。指定 /optimize+ 以啓用優化。
在生成要由程序集使用的模塊時,請使用與該程序集的設置相同的 /optimize 設置。
/o 是 /optimize 的縮寫形式。
可以組合 /optimize 和 /debug 選項。
示例
編譯 t2.cs 並啓用編譯器優化:
csc t2.cs /optimize
 
二十三 /out  指定輸出文件
/out:filename
其中:
filename
由編譯器創建的輸出文件的名稱。
備註
在命令行中,可以爲編譯指定多個輸出文件。/out 選項指定輸出文件的名稱。編譯器希望在 /out 選項之後找到一個或多個源代碼文件。這樣一來,所有的源代碼文件都將被編譯到 /out 選項所指定的那個輸出文件中。
如果不指定輸出文件的名稱:
.exe 文件將從包含 Main 方法的源代碼文件中獲取其名稱。
.dll 或 .netmodule 文件將從第一個源代碼文件中獲取其名稱。
用於編譯一個輸出文件的源代碼文件不能在相同的編譯中用作另一個輸出文件的編譯。
當在命令行編譯中產生多個輸出文件時,請記住其中只有一個輸出文件可以是程序集並且只有用 /out 隱式或顯式指定的第一個輸出文件纔是程序集。
作爲編譯的一部分產生的任何模塊都變成與編譯中產生的所有程序集相關的文件。使用 ildasm.exe 瀏覽程序集清單以查看相關的文件。
指定要創建的文件的完整名稱和擴展名
示例
編譯 t.cs 並創建輸出文件 t.exe,同時又生成 t2.cs 並創建模塊輸出文件 mymodule.netmodule:
csc t.cs /out:mymodule.netmodule /target:module t2.cs
 
二十四 /recurse  搜索子目錄中要編譯的源文件
/recurse:[dir/]file
其中:
dir(可選)
搜索開始的目錄。如果未指定此目錄,則搜索從項目目錄開始。
file
要搜索的文件。允許使用通配符字符。
備註
/recurse 選項使您可以編譯指定目錄 (dir) 或項目目錄的所有子目錄中的源代碼文件。
可以在文件名中使用通配符來編譯項目目錄中所有匹配的文件,而不需使用 /recurse。
示例
編譯當前目錄中的所有 C# 文件:
csc *.cs
編譯 dir1/dir2 目錄及其任何子目錄中的所有 C# 文件,並生成 dir2.dll:
csc /target:library /out:dir2.dll /recurse: dir1/dir2/*.cs
 
二十五 /reference 從包含程序集的文件中導入元數據
reference:file[;file2]
其中:
file,file2
一個或多個包含程序集清單的文件。若要導入多個文件,請用逗號或分號分隔文件名。
備註
/reference 選項導致編譯器使指定文件中的 public 類型信息可用於當前正在編譯的項目。
導入的文件必須包含清單;必須已使用 /target:module 以外的一個 /target 選項編譯了輸出文件。
使用 /addmodule 從不包含程序集清單的輸出文件導入元數據。
運行時,應只期望每個進程加載一個 .exe 程序集,即使在某些情況下可能會在同一進程中加載多個 .exe。因此,不要將用 /target:exe 或 /target:winexe 生成的程序集傳遞給 /reference。此條件可能會在公共語言運行庫的未來版本中得到修改。
如果引用一個程序集(程序集 A),而其本身引用另一個程序集(程序集 B),在下列情況下需要引用程序集 B:
使用來自程序集 A 的類型繼承自程序集 B 中的類型或實現程序集 B 中的接口。
如果調用程序集 B 中具有返回類型或參數類型的字段、屬性、事件或方法。
使用 /lib 指定一個或多個程序集引用所在的目錄。/lib 主題還討論編譯器在哪些目錄中搜索程序集。
爲了讓編譯器識別出程序集中的類型(而不是模塊),需要強制解析類型,例如可以通過定義此類型的實例來完成。也有其它方法來爲編譯器解析程序集中的類型名稱,例如,如果從一個程序集的類型繼承,編譯器就會知道此類型名稱。
默認情況下,使用 csc.rsp 響應文件,該文件會引用常用的 .NET Framework 程序集。如果不希望編譯器使用 csc.rsp,請使用 /noconfig。
/r 是 /reference 的縮寫形式。
示例
編譯源文件 input.cs 並從 metad1.dll 和 metad2.dll 導入元數據以生成 out.exe:
csc /reference:metad1.dll;metad2.dll /out:out.exe input.cs
 
二十六 /resource 將 .NET Framework 資源嵌入到輸出文件中
/resource:filename[,identifier]
其中:
filename
要在輸出文件中嵌入的 .NET Framework 資源文件。
identifier(可選)
資源的邏輯名稱;用於加載此資源的名稱。默認爲文件的名稱。
備註
使用 /linkresource 將資源鏈接到程序集,但不將資源文件放置在輸出文件中。
當資源是由 C# 編譯器創建的時,它在程序集中是公共的。
例如,如果 filename 是通過 Resgen.exe 或在開發環境中創建的 .NET Framework 資源文件,則可以用 System.Resources 命名空間中的成員訪問它(有關更多信息,請參見 System.Resources.ResourceManager)。對於所有其它資源,使用 System.Reflection.Assembly 類中的 GetManifestResource* 方法在運行時訪問資源。
/res 是 /resource 的縮寫形式。
示例
編譯 in.cs 並附加資源文件 rf.resource:
csc /resource:rf.resource in.cs
 
二十七 /target(指定輸出文件格式)
/target 編譯器選項可以指定爲以下四種形式之一:
/target:exe
創建一個 .exe 文件。
/target:library
創建一個代碼庫。
/target:module
創建一個模塊。
/target:winexe
創建一個 Windows 程序。
如果不指定 /target:module,/target 會將 .NET Framework 程序集清單放置在輸出文件中。有關如何指定程序集屬性的信息,請參見全局屬性。
程序集清單將放置在編譯中的第一個 .exe 輸出文件中,如果沒有 .exe 輸出文件,會放置在第一個 .dll 文件中。例如,在以下的命令行中,清單將放置在 1.exe 中:
csc /out:1.exe t1.cs /out:2.netmodule t2.cs
編譯器每次編譯只創建一個程序集清單。關於編譯中所有文件的信息全放在程序集清單中。除用 /target:module 創建的文件之外,所有輸出文件都可以包含程序集清單。在命令行生成多個輸出文件時,只能創建一個程序集清單,且必須放置在命令行上指定的第一個輸出文件中。如果第一個輸出文件是一個 exe(/target:exe 或 /target:winexe)或代碼庫 (/target:library),則在同一次編譯中生成的其它任何輸出文件必須是模塊 (/target:module)。
如果創建了一個程序集,則可以用 CLSCompliant 屬性指示全部或部分代碼是符合 CLS 的。
// target_clscompliant.cs
[assembly:System.CLSCompliant(true)]   // specify assembly compliance
[System.CLSCompliant(false)]   // specify compliance for an element
class TestClass
{  
   public static void Main()
   {
   }
}
 
二十八 /unsafe 編譯使用 unsafe 關鍵字的代碼
備註
/unsafe 選項允許編譯使用 unsafe 關鍵字的代碼。
示例
編譯不安全模式的 in.cs:
csc /unsafe in.cs
 
二十九 /utf8output 使用 UTF-8 編碼顯示編譯器輸出
/utf8output
備註
/utf8output 選項使用 UTF-8 編碼顯示編譯器輸出。
在某些國際配置中,編譯器輸出無法在控制檯上正確顯示。在這些配置中,請使用 /utf8output 並將編譯器輸出復位向到文件。
 
三十 /warn     設置警告等級
/warn:option
其中:
option
想要爲生成顯示的最小警告等級。有效值爲 0 到 4: 警告等級 意義
0 關閉所有警告消息的顯示。 
1 顯示嚴重的警告消息。
2 顯示等級 1 警告以及某些不太嚴重的警告,如關於隱藏類成員的警告。
3 顯示等級 2 警告以及某些不太嚴重的警告,如有關總是計算爲 true 或 false 的表達式的警告。
4 顯示所有等級 3 警告以及信息性警告。這是命令行中的默認警告等級。
 
備註
/warn 選項指定編譯器要顯示的警告等級。
生成錯誤文檔描述警告,指示每個警告的等級,並指示可能不能按預期編譯的語句的潛在問題(不是實際的編碼錯誤)。
使用 /warnaserror 將所有的警告都視爲錯誤。可以使用 /nowarn 禁用某些警告。
/w 是 /warn 的縮寫形式。
示例
編譯 in.cs 並讓編譯器僅顯示等級 1 警告:
csc /warn:1 in.cs
 
三十一 /warnaserror 將警告提升爲錯誤
/warnaserror[+ | -]
備註
/warnaserror+ 選項將所有警告視爲錯誤。將一般報告爲警告的任何消息都報告爲錯誤,並且暫停生成過程(不生成輸出文件)。
默認情況下 /warnaserror- 有效,它使警告無法阻止輸出文件的生成。/warnaserror 與 /warnaserror+ 相同,它使警告被視爲錯誤。
使用 /warn 指定希望編譯器顯示的警告等級。可以使用 /nowarn 禁用某些警告。
示例
編譯 in.cs 並且讓編譯器不顯示警告:
csc /warnaserror in.cs
 
三十二 /win32icon 將 .ico 文件插入到輸出文件中
/win32icon:filename
其中:
filename
要添加到輸出文件的 .ico 文件。
備註
/win32icon 選項在輸出文件中插入 .ico 文件,.ico 文件賦予輸出文件在 Windows 資源管理器中的所需外觀。.ico 文件可以用資源編譯器創建。編譯 Visual C++ 程序時將調用資源編譯器;.ico 文件是從 .rc 文件創建的。
示例
編譯 in.cs,並附加 .ico 文件 rf.ico 以生成 in.exe:
csc /win32icon:rf.ico in.cs
 
三十三 /win32res 將 Win32 資源插入到輸出文件中
/win32res:filename
其中:
filename
要添加到輸出文件的資源文件。
備註
/win32res 選項在輸出文件中插入 Win32 資源。Win32 資源文件可以用資源編譯器創建。編譯 Visual C++ 程序時將調用資源編譯器;.res 文件是從 .rc 文件創建的。
Win32 資源可以包含版本或位圖(圖標)信息,這些信息有助於在 Windows 資源管理器中標識您的應用程序。如果不指定 /win32res,編譯器將根據程序集版本生成版本信息。
示例
編譯 in.cs,並附加 Win32 資源文件 rf.res 以生成 in.exe:
csc /win32res:rf.res in.cs

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章