Как это возможно, чтобы не включать stdlib (mscorlib.dll) в мое приложение C # при его компиляции? Насколько мне известно, все классы наследуют класс System.Object, который определен в mscorlib.dll. Более того, такие типы, как int, являются просто псевдонимами, например. для System.Int32, которые также определены в mscorlib. Этот вариант когда-либо использовался?
Компилятор С#: параметр /nostdlib
Ответы (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...
Согласно документам
http://msdn.microsoft.com/en-us/library/fa13yay7(VS.80).aspx
Вы используете его, если пытаетесь заменить классы System.
/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.
Из MSDN — «Используйте этот параметр, если вы хотите определить или создать собственное пространство имен и объекты System.». Достаточно справедливо - я не буду делать это в ближайшее время, хотя. :)