2010-08-01 13 views
6

Come è possibile non includere stdlib (mscorlib.dll) nella mia applicazione C# durante la sua compilazione? Per quanto ne so, tutte le classi ereditano la classe System.Object, che è definita in mscorlib.dll. Inoltre, tipi come int sono solo alias, ad es. per System.Int32, che sono anche definiti in mscorlib. Questa opzione è mai stata utilizzata?Compilatore C#: opzione/nostdlib

risposta

9

Sì, viene utilizzato da chiunque compili un programma che non viene eseguito con la versione desktop del CLR. Come Silverlight, si rivolge a .NETCore o al Micro Framework. Hanno il loro mscorlib.dll, ovviamente con System.Object definito.

Ecco la linea di comando del compilatore di un progetto di esempio 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

Secondo la documentazione

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

lo si utilizza, se si sta cercando di sostituire le classi di sistema.

+1

Non è ancora chiaro per me. La mia versione di System.Object è accettabile? Non credo che il CLR lo permetterebbe. Sia System.Object che System.ValueType sono classi speciali che indicano anche se la mia variabile è di tipo di riferimento o di valore. –

+0

@MarcAndreson: A quanto ho capito, lo switch del compilatore '/ nostdlib' non comporterà necessariamente un assembly che CLR (.NET Framework) può eseguire. Ma produce un assembly valido che potrebbe essere eseguibile su una diversa piattaforma compatibile con CLI (come Mono, Silverlight o la tua). Data questa funzione, puoi avere un compilatore C# per ognuna di queste piattaforme. Se il compilatore C# di ogni modello è sempre legato in modo incondizionato al codice specifico per il proprio 'mscorlib.dll', è necessario un compilatore per piattaforma. Quindi '/ nostdlib' (in teoria) rende il compilatore riutilizzabile attraverso le piattaforme. – stakx

0

Da MSDN - "Utilizzare questa opzione se si desidera definire o creare il proprio spazio dei nomi e oggetti System.". Giusto abbastanza - non lo farò presto, comunque! :)

+0

Lo farò) http://lightnet.codeplex.com/ –

1

Si consiglia inoltre di utilizzare se si vuole costruire a schierare contro una versione più vecchia quadro. Visual Studio (15, ad ogni modo) usa questa opzione quando costruisce un progetto che hai configurato per scegliere come target una versione di framework precedente. Invece di usare lo standard mscore, ne usa uno da Reference Assembly/Microsoft/Framework/vx.y