2010-08-01 29 views
6

¿Cómo es posible no incluir stdlib (mscorlib.dll) en mi aplicación C# al compilarlo? Hasta donde yo sé, todas las clases heredan la clase System.Object, que se define en mscorlib.dll. Además, los tipos como int son solo alias, p. para System.Int32, que también se definen en mscorlib. ¿Se usa esta opción alguna vez?compilador C#:/nostdlib opción

Respuesta

9

Sí, es utilizado por cualquier persona que compila un programa que no se ejecuta con la versión de escritorio del CLR. Al igual que Silverlight, apunta a .NETCore o Micro Framework. Tienen su propio mscorlib.dll, por supuesto con System.Object definido.

Aquí está la línea de comandos del compilador de un proyecto de ejemplo 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

De acuerdo con la documentación

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

que lo utilice si está tratando de reemplazar las clases del sistema.

+1

Todavía no está claro para mí. ¿Es aceptable mi propia versión de System.Object? No creo que CLR lo permita. Both System.Object y System.ValueType son clases especiales que también indican si mi variable es de tipo de referencia o de valor. –

+0

@MarcAndreson: Según entiendo, el compilador del compilador '/ nostdlib' no necesariamente dará como resultado un ensamblado que el CLR (.NET Framework) puede ejecutar. Pero produce un ensamblaje válido que bien podría ser ejecutable en una plataforma compatible con CLI diferente (como Mono, Silverlight o la suya). Dada esta característica, puede tener un compilador de C# para cualquiera de estas plataformas. Si el compilador de C# de cada platinm siempre atara incondicionalmente su código específicamente a su propio 'mscorlib.dll', necesitaría un compilador por plataforma. Entonces '/ nostdlib' (en teoría) hace que el compilador sea reutilizable en todas las plataformas. – stakx

0

De MSDN - "Utilice esta opción si quiere definir o crear su propio espacio de nombres y objetos del sistema.". De acuerdo, no lo haré en el corto plazo, aunque. :)

+0

Lo haré) http://lightnet.codeplex.com/ –

1

También puede utilizarlo si usted quiere construir para desplegar frente a una versión más antigua marco. Visual Studio (15, de todos modos) utiliza esta opción cuando crea un proyecto que configuró para dirigirse a una versión de marco anterior. En lugar de utilizar el mscore estándar, utiliza uno de los ensamblados de referencia/Microsoft/Framework/vx.y