Запустить код С# на терминале 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
.