La plus grande partie de l'API Arcane est accessible via la technologie .Net. Il est possible d'écrire des modules et service en C#.
Les pages suivantes sont disponibles :
En 2019, il existe deux environnments pour .Net:
.Net Core et .Net Framework partagent une grande parties des API communes et il n'y en général pas de difficultés pour utiliser l'un ou l'autre. Le framework historique .Net Framework n'évoluera plus (mais continuera à être maintenu) et toutes les nouveautés se feront dans le framework '.Net Core'. Pour simplifier la nomenclature, en 2020 il n'y aura plus qu'un seul nom qui sera .Net.
Arcane supporte les deux implémentations mono et coreclr. Les versions minimales sont 5.16 pour mono et 3.0 pour coreclr. Pour les deux implémentations, il est possible de lancer du code C# soit avec un main en C#, soit en mode embarqué avec un main en C++.
Le mode avec le main en C# permet de lancer le code comme n'importe quelle code C#:
Ce mode est surtout utile pour débugger, par exemple avec 'Visual Studio Code' (TODO: faire exemple).
Le mode embarquée lance le code comme un exécutable C++ et c'est l'appel à Arcane::ArcaneLauncher::run() qui va éventuellement charger le runtime '.Net' et charger les assembly nécessaires.
.Net est une technologie assez similaire à java dans son principe. Le code source peut être écrit en plusieurs langages (C#, F#, Visual Basic). Le code est compilé en un pseudo assembleur (bytecode) indépendant de la plateforme. Le produit de cette compilation s'appelle une assembly (équivalent aux bibliothèques dynamiques du C++). En '.Net', l'extension est .dll comme les bibliothèques dynamiques (Dynamic Loaded Library) sous Windows.
Comme java, le bytecode est lors de l'exécution convertit en code spécifique à l'architecture de la machine cible. Le code .Net nécessite la présence d'un runtime pour gérer cette partie ainsi que pour d'autres fonctionnalités comme le Ramasse Miette (Garbage Collector).
Par convention, les fichiers C# ont pour extension .cs. Le code en C# est très similaire au code C++:
.Net utilise un outil appelé msbuild pour compiler et il faut définir un projet au format XML contenant les informations nécessaires.
msbuild utilise un fichier projet pour définir les éléments de compilation. Dans le principe, ce fichier projet est comme le Makefile pour l'outil make ou le CMakeLists.txt pour l'outil CMake. En C#, pour msbuild, ce fichier a par convention l'extension .csproj. En général, un projet C# est créé dans un répertoire spécifique. La commande dotnet new permet de créer un répertoire avec un projet :
Cela va créer un répertoire MyTest avec à l'intérieur un fichier Program.cs et un fichier MyTest.csproj.
Le fichier MyTest.csproj sera comme suit :
et le fichier Program.cs comme suit :
Pour compiler ce fichier, il suffit de se placer dans le répertoire du projet et de lancer la commande dotnet build.
La commande dotnet build créé par défaut l'assembly dans le répertoire bin/${Config}/${framework} avec Config ayant pour valeur Debug ou Release et framework la valeur de la propriété msbuild TargetFramework. Dans notre exemple, le répertoire sera donc bin/Debug/netcoreapp3.1.
Pour exécuter le programme, il faut lancer la commande :
Si on ne souhaite pas avoir d'exécutable en C# mais qu'on souhaite utiliser de code C#, alors le fonctionnement est quasi identique mais au lieu de créer un exécutable, il faut créér une bibliothèque. Pour cela, il suffit de créer le projet C# avec l'option dotnet new classlib -n MyLib.
L'ajout des références aux DLL Arcane se fait via l'élément <PackageReference> dans msbuild, par exemple:
Les packages nuget suivants sont fournies par Arcane :
La page Extensions C# avec Swig décrit comment rendre accessible en C# les classes de Arcane et étendre d'autres classes.
Il faut tout d'abord avoir dotnet dans son chemin. Si Arcane est installé dans le répertoire ${ARCANE_PREFIX} alors il faut lancer les commandes suivantes :
Pour compiler le code et l'installer dans un répertoire, il faut exécuter la commande suivante :
Cela aura pour effet d'installer les fichiers générés dans le répertoire out. Si le projet s'appelle 'toto', on aura les fichiers suivants: