2010-08-01 125 views
6

編譯它時,如何不將stdlib(mscorlib.dll)包含到我的C#應用​​程序中?據我所知,所有的類都繼承了mscorlib.dll中定義的System.Object類。更重要的是,類型如int只是別名,例如爲System.Int32,這也是在mscorlib中定義的。這個選項曾經被使用過嗎?C#編譯器:/ nostdlib選項

回答

9

是的,它被任何編譯程序的人使用,該程序不與桌面版本的CLR一起運行。像Silverlight一樣,它的目標是.NETCore或Micro Framework。他們有自己的mscorlib.dll,當然是定義了System.Object。

下面是一個示例Silverlight項目的編譯器命令行:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Csc.exe /noconfig /nowarn:1701,1702 
/nostdlib+ /errorreport:prompt /warn:4 /define:DEBUG;TRACE;SILVERLIGHT 
/reference:"c:\Program Files\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0\mscorlib.dll" 
    etc... 
2

按照文檔

http://msdn.microsoft.com/en-us/library/fa13yay7(VS.80).aspx

您可以使用它,如果你想更換系統類。

+1

它仍然不清楚。是否可以使用我自己的System.Object版本?我不認爲CLR會允許這樣做。 System.Object和System.ValueType都是特殊的類,它們也指出我的變量是引用類型還是值類型。 – 2010-08-01 18:10:39

+0

@MarcAndreson:據我所知,'/ nostdlib'編譯器切換不一定會導致CLR(.NET Framework)可以執行的程序集。但是它產生了一個有效的程序集,可以在不同的CLI兼容平臺(如Mono,Silverlight或您自己的平臺)上執行。鑑於此功能,您可以爲任何這些平臺提供一個C#編譯器。如果每個Platorm的C#編譯器總是無條件地將你的代碼綁定到它自己的'mscorlib.dll'上,那麼你需要每個平臺上的一個編譯器。因此'/ nostdlib'(理論上)使得編譯器可以跨平臺重用。 – stakx 2017-04-24 20:03:27

0

MSDN - 「如果要定義或創建自己的系統名稱空間和對象,請使用此選項。」。公平 - 我不會很快這麼做,那麼'。 :)

+0

我會)http://lightnet.codeplex.com/ – 2010-09-15 10:14:17

1

你也可以,如果你想建立部署針對較舊版本的框架使用它。 Visual Studio(15,無論如何)在構建您配置爲定位較舊的框架版本的項目時使用此選項。它不使用標準的mscore,而是使用來自Reference Assemblies/Microsoft/Framework/vx.y的一個。