# Programmation C sharp/Compilation
## Les fichiers sources

Un fichier source C# porte l'extension ".cs". Il s'agit d'un fichier texte.
Le programme compilé porte l'extension ".exe".
Une bibliothèque rassemble des classes et porte l'extension ".dll". Elle peut être utilisée par un programme ou une autre bibliothèque.

## La compilation

Un compilateur C# permet la traduction du programme source en instructions .Net.
Contrairement à d'autres compilateurs, ces instructions sont produites pour un processeur virtuel et ne sont donc pas directement interprétées par le processeur, mais interprétés par le moteur .Net.
Sous Windows, le compilateur produit un exécutable appelant l'interpréteur .Net.
Sous Linux, le programme produit n'est pas directement exécutable et doit être lancé en argument de l'interpréteur mono.

## Compilateurs

Plusieurs compilateurs C# existent selon la plateforme utilisée.
Il existe plusieurs versions des spécifications du framework. Ces versions successives ajoutent de nouvelles fonctionnalités au langage.
Il existe également différentes versions de la spécification du langage C# :
* C#1.0 : version initiale du langage,
* C#2.0 : ajoute de nouvelles classes à l'API (compression de données, collections génériques, ...), permet l'utilisation de types génériques, facilite la création d'énumération avec le mot clé yield,
* C#3.0 : ajoute de nouvelles facilités de syntaxe : types non spécifiés pour les variables locales (déduit d'après la valeur d'initialisation), intégration des requêtes SQL dans le langage (LINQ), ajout de nouvelles méthodes à une classe existante, expressions lambda pour les delegates anonymes, initialisation des membres d'un objet à la déclaration.
* C#4.0 : ajoute de nouvelles fonctionnalités : covariance et contrevariance, binding dynamique, paramètres nommés et optionnels, meilleure interopérabilité avec COM.

### Compilateur pour Windows

Le framework .NET est disponible gratuitement pour les utilisateurs de Windows.
Si le framework Microsoft .NET est installé, le compilateur nommé csc.exe doit se situer dans l'un des deux répertoires suivants (à ajouter à la variable d'environnement PATH) :
Le répertoire Framework64 contient la version 64 bits du Framework, disponible seulement sur les versions 64 bits de Windows. Afin de profiter de toute la puissance du matériel, il est préférable d'utiliser la version 64 bits si Windows est également 64 bits.
Il est également possible d'utiliser Visual Studio .NET pour développer, compiler et débogguer les applications C#. L'édition Express de Visual Studio est téléchargeable gratuitement sur le site de Microsoft, mais possède moins d'outils que la version complète.
Une autre possibilité est d'utiliser SharpDevelop qui a l'avantage d'être un logiciel libre.

### Compilateur pour Linux

Mono est une implémentation libre de la plate-forme de développement Microsoft .NET. Le compilateur est nommé msc. L'interpréteur est nommé mono.
gmcs est le nouveau compilateur C# 2.0. Il est recommandé d'utiliser ce dernier.

## Références

* ↑ http://msdn.microsoft.com/data/ref/linq/
* ↑ http://msdn.microsoft.com/vstudio/express/visualcsharp
* ↑ http://www.icsharpcode.net/OpenSource/SD/
* ↑ http://www.mono-project.com

## Compilation et exécution

La compilation et l'exécution peuvent se faire à l'aide d'un environnement graphique. Il est toutefois utile de connaître la ligne de commande à utiliser en cas d'absence d'environnement graphique ou si une option spéciale de compilation doit être utilisée, ...
Pour utiliser les lignes de commandes de compilation :
* Ouvrir une fenêtre console,
* Faire du répertoire du programme à compiler ou exécuter le répertoire courant,
* Vérifier que la variable d'environnement PATH contient le chemin vers le compilateur, en tapant le nom du compilateur (csc sous Windows, gmcs sous Linux (Mono)).
Si le compilateur ne se lance pas (programme non trouvé) :
* Vérifier qu'un compilateur C# est installé,
* Vérifier que le chemin complet du répertoire du compilateur est contenu dans la variable d'environnement PATH,
* Essayer de lancer le compilateur en donnant son chemin complet.
Le compilateur peut produire soit directement un exécutable, soit un module (une bibliothèque DLL) utilisable par d'autres programmes.
Si les sources d'un exécutable ou d'un module sont répartis entre différents fichiers (même répertoire ou non), il faut spécifier leur chemin au compilateur.
Exemple : Les sources de l'exécutable prog.cs sont répartis dans deux fichiers : C:\Prog\Exemple\main.cs et D:\Prog\Util\util.cs. Il faut donc utiliser la ligne de commande suivante :
| Windows | csc C:\Prog\Exemple\main.cs D:\Prog\Util\util.cs |
| Linux (Mono) | gmcs C:\Prog\Exemple\main.cs D:\Prog\Util\util.cs |
Il est également possible d'utiliser les caractères génériques * et ? pour spécifier plusieurs fichiers.
Les syntaxes des commandes à utiliser pour les différentes tâches du développement sont résumées dans le tableau suivant :
| Tâche | Windows | Linux |
| compiler un programme (.exe) avec fenêtre console | csc fichier.cs | gmcs fichier.cs |
| compiler un programme (.exe) sans fenêtre console | csc /t:winexe fichier.cs | gmcs -target:winexe fichier.cs |
| compiler une bibliothèque (.dll) | csc /t:library fichier.cs | gmcs -target:library fichier.cs |
| utiliser une bibliothèque (.dll) | csc /r:fichier.dll ... | gmcs -r:fichier.dll ... |
| exécuter un programme | programme arguments... | mono programme.exe arguments... |