Exécuter le code C # sur le terminal Linux

Comment puis-je exécuter un code C # sur un terminal Linux en tant que script shell.

J’ai cet exemple de code:

public ssortingng Check(ssortingng _IPaddress,ssortingng _Port, int _SmsID) { ClassGlobal._client = new TcpClient(_IPaddress, Convert.ToInt32(_Port)); ClassGlobal.SMSID = _SmsID; ssortingng _result = SendToCAS(_IPaddress, _Port, _SmsID ); if (_result != "") return (_result); ssortingng _acoknoledgement = GetFromCAS(); return _acoknoledgement; } 

Lorsque je lance un shell bash, j’utilise #!/bin/bash . Il y a comment faire la même chose avec C #?

Le #! La balise (hashbang) est utilisée pour indiquer au shell quel interpréteur utiliser afin que vos scripts perl, php, bash, sh, etc.

Mais C # n’est pas un langage de script, il est destiné à être compilé dans un format exécutable. Vous devez installer au moins un compilateur et un runtime si vous souhaitez utiliser C #, et de préférence un environnement de développement intégré (IDE) pour vous aider à développer et à déboguer vos applications.

Installez Mono pour le compilateur et le runtime, puis MonoDevelop pour l’EDI.

Les scripts C # peuvent être exécutés à partir de la ligne de commande bash, tout comme les scripts Python et Perl, mais il faut un peu de magie bash pour le faire fonctionner. Comme Corey mentionné ci-dessus, vous devez d’abord installer Mono sur votre machine. Ensuite, enregistrez le code suivant dans un script exécutable bash sur votre machine Linux:

 if [ ! -f "$1" ]; then dmcs_args=$1 shift else dmcs_args="" fi script=$1 shift input_cs="$(mktemp)" output_exe="$(mktemp)" tail -n +2 $script > $input_cs dmcs $dmcs_args $input_cs -out:${output_exe} && mono $output_exe $@ rm -f $input_cs $output_exe 

En supposant que vous avez enregistré le script ci-dessus sous / usr / bin / csexec, un exemple de script C # suit:

 #!/usr/bin/csexec -r:System.Windows.Forms.dll -r:System.Drawing.dll using System; using System.Drawing; using System.Windows.Forms; public class Program { public static void Main(ssortingng[] args) { Console.WriteLine("Hello Console"); Console.WriteLine("Arguments: " + ssortingng.Join(", ", args)); MessageBox.Show("Hello GUI"); } } 

Enregistrez le code ci-dessus dans un fichier tel que “hello.cs”, rendez-le exécutable, modifiez la première ligne pour pointer vers le script bash précédemment enregistré, puis exécutez-le, vous devriez voir la sortie suivante avec une boîte de dialog disant “Bonjour GUI “:

 bash-4.2$ ./hello.cs foo bar baz Hello Console Arguments: foo, bar, baz 

Notez que l’interface graphique requirejs que vous soyez au niveau d’exécution 5. Voici un script C # plus simple qui s’exécute sur une console de texte pure:

 #!/usr/bin/csexec using System; public class Program { public static void Main(ssortingng[] args) { Console.WriteLine("Hello Console"); Console.WriteLine("Arguments: " + ssortingng.Join(", ", args)); } } 

Notez que les arguments de la ligne de commande sont transmis au script C #, mais les arguments shebang (dans le premier script C # ci-dessus “-r: System.Windows.Forms.dll -r: System.Drawing.dll”) sont transmis au C # compilateur. En utilisant cette dernière fonctionnalité, vous pouvez spécifier tous les arguments de compilation requirejs sur la première ligne de votre script C #.

Si vous êtes intéressé par les détails du fonctionnement du script bash, shebang (#!) Regroupe tous les arguments qui lui ont été transmis sur la première ligne du script C #, suivis du nom du script, suivi des arguments de ligne de commande transmis au script. lui-même Dans le premier exemple C # ci-dessus, les 5 arguments suivants seraient transmis au script bash (délimité par des guillemets):

 "-r:System.Windows.Forms.dll -r:System.Drawing.dll" "hello.cs" "foo" "bar" "baz" 

Le script détermine que le premier argument n’est pas un nom de fichier et suppose qu’il contient des arguments pour le compilateur C #. Il supprime ensuite la première ligne du script C # en utilisant «tail» et enregistre le résultat dans un fichier temporaire (car le compilateur C # ne lit pas à partir de stdin). Enfin, la sortie du compilateur est enregistrée dans un autre fichier temporaire et exécutée en mono avec les arguments originaux transmis au script. L’opérateur ‘shift’ est utilisé pour éliminer les arguments du compilateur et le nom du script, ne laissant que les arguments du script.

Les erreurs de compilation seront transférées sur la ligne de commande lorsque le script C # est exécuté.

Bien sûr, cela peut être fait et le processus est extrêmement simple.

Ici, j’explique les étapes pour Ubuntu Linux.

Terminal ouvert:

Ctrl + Alt + T

Type

 gedit hello.cs 

Dans la fenêtre gedit qui s’ouvre, collez l’exemple de code suivant:

 using System; class HelloWorld { static void Main() { Console.WriteLine("Hello World!"); } } 

Enregistrez et fermez gedit.

Retour dans le type de terminal:

 sudo apt update sudo apt install mono-complete mcs -out:hello.exe hello.cs mono hello.exe 

Sortie:

 Hello World! 

Vous ne pouvez pas exécuter C # comme un script, vous devez d’abord le comstackr. Pour cela, vous pouvez installer mono .

Vous pouvez ensuite comstackr votre programme avec mcs et l’exécuter avec mono .