Компилятор С#: параметр /nostdlib

Как это возможно, чтобы не включать stdlib (mscorlib.dll) в мое приложение C # при его компиляции? Насколько мне известно, все классы наследуют класс System.Object, который определен в mscorlib.dll. Более того, такие типы, как int, являются просто псевдонимами, например. для System.Int32, которые также определены в mscorlib. Этот вариант когда-либо использовался?


person Marc Andreson    schedule 01.08.2010    source источник


Ответы (4)


Да, его используют все, кто компилирует программу, которая не работает с настольной версией 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...
person Hans Passant    schedule 01.08.2010

Согласно документам

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

Вы используете его, если пытаетесь заменить классы System.

person Lou Franco    schedule 01.08.2010
comment
Мне до сих пор непонятно. Допустимо ли использование моей собственной версии System.Object? Я не думаю, что CLR позволит это. И System.Object, и System.ValueType являются специальными классами, которые также указывают, относится ли моя переменная к ссылочному типу или типу значения. - person Marc Andreson; 01.08.2010
comment
@MarcAndreson: насколько я понимаю, переключатель компилятора /nostdlib не обязательно приведет к сборке, которую может выполнить CLR (.NET Framework). Но он создает допустимую сборку, которая вполне может выполняться на другой CLI-совместимой платформе (такой как Mono, Silverlight или на вашей собственной). Учитывая эту особенность, вы можете иметь один компилятор C# для любой из этих платформ. Если бы компилятор С# каждой платформы всегда безоговорочно привязывал ваш код конкретно к своему собственному mscorlib.dll, вам потребовался бы один компилятор для каждой платформы. Таким образом, /nostdlib (теоретически) позволяет повторно использовать компилятор на разных платформах. - person stakx - no longer contributing; 24.04.2017

Вы также можете использовать его, если хотите выполнить сборку для развертывания на более старой версии фреймворка. Visual Studio (во всяком случае, 15) использует этот параметр при создании проекта, который вы настроили для более старой версии фреймворка. Вместо стандартного mscore используется один из Reference Assemblies/Microsoft/Framework/vx.y.

person Elroy Flynn    schedule 19.01.2016

Из MSDN — «Используйте этот параметр, если вы хотите определить или создать собственное пространство имен и объекты System.». Достаточно справедливо - я не буду делать это в ближайшее время, хотя. :)

person Will A    schedule 01.08.2010