C#编译器:/nostlib选项

C#编译器:/nostlib选项,c#,.net,mscorlib,C#,.net,Mscorlib,在编译C#应用程序时,怎么可能不将stdlib(mscorlib.dll)包含在其中?据我所知,所有类都继承System.Object类,该类在mscorlib.dll中定义。更重要的是,int等类型只是别名,例如System.Int32的别名,它们也在mscorlib中定义。是否使用过此选项?根据文档 如果您试图替换系统类,您可以使用它。From-“如果您想定义或创建自己的系统命名空间和对象,请使用此选项。”。很公平——我不会很快这么做的,tho.:) 是的,任何编译不使用桌面版CLR的程序

在编译C#应用程序时,怎么可能不将stdlib(mscorlib.dll)包含在其中?据我所知,所有类都继承System.Object类,该类在mscorlib.dll中定义。更重要的是,int等类型只是别名,例如System.Int32的别名,它们也在mscorlib中定义。是否使用过此选项?

根据文档


如果您试图替换系统类,您可以使用它。

From-“如果您想定义或创建自己的系统命名空间和对象,请使用此选项。”。很公平——我不会很快这么做的,tho.:)

是的,任何编译不使用桌面版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...

如果您希望构建以针对较旧的框架版本进行部署,您可能还希望使用它。Visual Studio(15,无论如何)在生成配置为针对较旧框架版本的项目时使用此选项。它没有使用标准的mscore,而是使用了引用Assemblies/Microsoft/Framework/vx.y中的mscore。我仍然不清楚。使用自己版本的System.Object是否可以接受?我不认为CLR会允许这样。System.Object和System.ValueType都是特殊的类,它们还指示我的变量是引用类型还是值类型。@Marcanderson:据我所知,
/nostlib
编译器开关不一定会产生CLR(.NET Framework)可以执行的程序集。但它会生成一个有效的程序集,该程序集很可能可以在不同的CLI兼容平台(如Mono、Silverlight或您自己的平台)上执行。考虑到这一特性,您可以为这些平台中的任何一个提供一个C#编译器。如果每个platorm的C#编译器总是无条件地将代码专门绑定到自己的
mscorlib.dll
,那么每个平台都需要一个编译器。因此,
/nostlib
(理论上)使编译器可以跨平台重用。