2010-08-01 5 views
6

Comment est-ce possible de ne pas inclure stdlib (mscorlib.dll) dans mon application C# lors de la compilation? Pour autant que je sache, toutes les classes héritent de la classe System.Object, qui est définie dans mscorlib.dll. Qui plus est, les types tels que int ne sont que des alias, par ex. pour System.Int32, qui sont également définis dans mscorlib. Cette option est-elle déjà utilisée?Compilateur C#:/nostdlib option

Répondre

9

Oui, il est utilisé par toute personne qui compile un programme qui ne fonctionne pas avec la version de bureau du CLR. Comme Silverlight, il cible .NETCore, ou le Micro Framework. Ils ont leur propre mscorlib.dll, bien sûr avec System.Object défini.

est ici la ligne de commande du compilateur d'un exemple de projet 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

Selon les docs

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

Vous utilisez si vous essayez de remplacer les classes de système.

+1

Ce n'est toujours pas clair pour moi. L'utilisation de ma propre version de System.Object est-elle acceptable? Je ne pense pas que CLR le permettrait. System.Object et System.ValueType sont des classes spéciales qui indiquent également si ma variable est de type référence ou type de valeur. –

+0

@MarcAndreson: Si je comprends bien, le commutateur du compilateur '/ nostdlib' ne donnera pas nécessairement un assembly que le CLR (.NET Framework) peut exécuter. Mais il produit un assembly valide qui pourrait bien être exécutable sur une plate-forme compatible CLI différente (telle que Mono, Silverlight ou la vôtre). Compte tenu de cette fonctionnalité, vous pouvez avoir un compilateur C# pour l'une de ces plates-formes. Si le compilateur C# de chaque plate-forme toujours, inconditionnellement lié votre code spécifiquement à son propre 'mscorlib.dll', vous auriez besoin d'un compilateur par plate-forme. Donc '/ nostdlib' (en théorie) rend le compilateur réutilisable sur toutes les plates-formes. – stakx

0

De MSDN - "Utilisez cette option si vous souhaitez définir ou créer votre propre espace de noms et objets système.". Assez juste - je ne le ferai pas bientôt, tho. :)

+0

Je vais) http://lightnet.codeplex.com/ –

1

Vous pouvez également l'utiliser si vous voulez construire à déployer contre une version plus ancienne cadre. Visual Studio (15, de toute façon) utilise cette option lors de la construction d'un projet que vous avez configuré pour cibler une ancienne version de la structure. Au lieu d'utiliser le mscore standard, il en utilise un de Reference Assemblies/Microsoft/Framework/vx.y