2013-12-05 9 views
10

Как я могу выполнить код C# на терминале linux, как сценарий оболочки.Запустить код C# на терминале 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; 
} 

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

+0

использовать что-то вроде кодоблок компилировать .... – User2012384

+1

Вы можете запустить C# сценарий без компиляции трюков. См. [http://stackoverflow.com/questions/8371560/mono-shell-scripting](http://stackoverflow.com/questions/8371560/mono-shell-scripting) – Massimo

ответ

7

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

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

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

+0

За последние несколько лет ситуация изменилась. Теперь у нас есть cs-script: http://www.csscript.net/help/CS-Script_on_Mono.html – Corey

5

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

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

+1

Ну, на самом деле сам C# не компилируется или не скомпилировать, а просто синтаксический набор правил, и все это сводится к внедрению интерпретатора под Linux .. –

21

Сценарии C# можно запускать из командной строки bash так же, как скрипты Python и Perl, но для ее работы требуется немного магии bash. Как упоминалось выше Кори, вы должны сначала установить Mono на свой компьютер. Затем сохраните следующий код в исполняемый Баш скрипт на вашей машине 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 

Предполагая, что вы сохранили выше сценарий в/USR/BIN/csexec, пример C# "сценарий" следует:

#!/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, а затем выполните его, вы увидите следующий вывод, а также диалог "Hello GUI":

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

Обратите внимание, что интерфейс требует, чтобы вы были на уровне выполнения 5. Вот простой C# скрипт, который работает на чистом текстовой консоли:

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

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

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

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

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

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

7

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

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

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

Ctrl + Alt + Т

Тип

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! 
Смежные вопросы