Запустить код С# на терминале linux

Как я могу выполнить код С# на терминале Linux в качестве сценария оболочки.

У меня есть этот пример кода:

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

Когда я запускаю оболочку bash, я использую #!/bin/bash. Есть как сделать то же самое с С#?

Ответ 1

Тег #! (hashbang) используется для указания оболочке, которую интерпретатор должен использовать, чтобы ваши скрипты perl, php, bash, sh и т.д. запускались правильно.

Но С# не является языком сценариев, он предназначен для компиляции в исполняемый формат. Вам необходимо установить хотя бы компилятор и среду выполнения, если вы хотите использовать С#, и желательно IDE (Integrated Development Environment), чтобы помочь вам разработать и отлаживайте свои приложения.

Установите Mono для компилятора и среды выполнения, затем MonoDevelop для IDE.

Ответ 2

Сценарии С# можно запускать из командной строки bash, как и скрипты Python и Perl, но для ее работы требуется немного магии bash. Как упоминалось выше Кори, вы должны сначала установить Mono на свой компьютер. Затем сохраните следующий код в исполняемом файле bash script на вашей машине 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 [email protected]                                                                          
rm -f $input_cs $output_exe

Предполагая, что вы сохранили вышеуказанный script как /usr/bin/csexec, следует пример С# "script":

#!/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(string[] args)                                                                                                     
    {                                                                                                                                          
        Console.WriteLine("Hello Console");                                                                                                      
        Console.WriteLine("Arguments: " + string.Join(", ", args));                                                                              
        MessageBox.Show("Hello GUI");                                                                                                            
    }                                                                                                                                          
}                                                                                                                                            

Сохраните приведенный выше код в файл, например "hello.cs", сделайте его выполнимым, измените первую строку, чтобы указать на ранее сохраненный bash script, а затем выполните его, вы увидите следующий вывод а также диалог "Привет GUI":

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

Обратите внимание, что для графического интерфейса требуется, чтобы вы были на уровне выполнения 5. Ниже приведен более простой С# script, который выполняется на чистой текстовой консоли:

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

Обратите внимание, что аргументы командной строки передаются на С# script, но аргументы shebang (в первом С# script выше "-r: System.Windows.Forms.dll -r: System.Drawing.dll" ) передаются компилятору С#. Используя последнюю функциональность, вы можете указать любые аргументы компилятора, которые вам нужны, в первой строке вашего С# script.

Если вам интересно узнать, как работает bash script, shebang (#!) объединяет все переданные ему аргументы в первой строке С# script, а затем script name, а затем аргументы командной строки, переданные самому script. В первом примере С#, приведенном выше, следующие 5 аргументов будут переданы в bash script (обозначены кавычками):

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

script определяет, что первый аргумент не является именем файла и предполагает, что он содержит аргументы для компилятора С#. Затем он удаляет первую строку С# script с помощью "хвоста" и сохраняет результат во временный файл (поскольку компилятор С# не читает из stdin). Наконец, вывод компилятора сохраняется в другом временном файле и выполняется в моно с исходными аргументами, переданными в script. Оператор 'shift' используется для устранения аргументов компилятора и имени script, оставляя только аргументы script.

Ошибки компиляции будут сбрасываться в командную строку при выполнении С# script.

Ответ 3

Конечно, это можно сделать, и процесс чрезвычайно прост.

Здесь я объясняю шаги для Ubuntu Linux.

Открытый терминал:

Ctrl + Alt + T

Введите

gedit hello.cs

В окне gedit, которое открывает вставку следующего примерного кода:

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

Сохранить и закрыть gedit.

Назад в тип терминала:

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

Вывод:

Hello World!

Ответ 4

Вы не можете выполнить С# как скрипт, вы должны сначала скомпилировать его. Для этого вы можете установить моно.

Затем вы можете скомпилировать вашу программу с помощью mcs и выполнить ее с помощью mono.

Ответ 5

После установки моно вы можете использовать csharp hello.cs. Начиная с Mono 2.10, вы также можете использовать шебанг так:

#!/usr/bin/csharp
Console.WriteLine ("Hello, World");

Если вам нужны сборки, вы можете загрузить их, например, с помощью строки LoadAssembly("System.IO.Compression") внутри вашего скрипта.

Ссылка: man csharp.