web-dev-qa-db-ja.com

LinuxターミナルでC#コードを実行する

Linux端末でC#コードをシェルスクリプトとして実行するにはどうすればよいですか。

私はこのサンプルコードを持っています:

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;
}

Shell bashを実行するときは、#!/bin/bashを使用します。 C#で同じことをする方法はありますか?

17
Hedron Dantas

#!(hashbang)タグは、Perl、php、bash、shなどのスクリプトが正しく実行されるように、使用するインタープリターをシェルに指示するために使用されます。

ただし、C#はスクリプト言語ではなく、実行可能形式にコンパイルすることを目的としています。 C#を使用する場合は、少なくともコンパイラーとランタイムをインストールする必要があり、できればIDE( Integrated Development Environment )を使用して、アプリケーションの開発とデバッグを支援してください。

Mono をコンパイラとランタイムにインストールしてから、 MonoDevelop をIDEにインストールします。

12
Corey

C#スクリプトは、bashコマンドラインからPythonおよびPerlスクリプトと同じように実行できますが、動作させるには少しbashマジックが必要です。上記のCoreyのように、最初にインストールする必要があります- Mono ご使用のマシンで、次のコードをLinuxマシンの実行可能なbashスクリプトに保存します。

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

上記のスクリプトを/ 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

GUIでは、実行レベル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#スクリプトに渡されますが、シバン引数(上記の最初のC#スクリプト「-r:System.Windows.Forms.dll -r:System.Drawing.dll」)はC#に渡されることに注意してください。コンパイラ。後者の機能を使用すると、C#スクリプトの最初の行で必要なコンパイラー引数を指定できます。

Bashスクリプトの動作方法の詳細に興味がある場合、Shebang(#!)は、C#スクリプトの最初の行で渡されたすべての引数をまとめ、スクリプト名、スクリプトに渡されたコマンドライン引数が続きます。自体。上記の最初のC#の例では、次の5つの引数がbashスクリプトに渡されます(引用符で囲まれています)。

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

スクリプトは、最初の引数がファイル名ではないと判断し、C#コンパイラの引数が含まれていると想定します。次に、「tail」を使用してC#スクリプトの最初の行を取り除き、結果を一時ファイルに保存します(C#コンパイラはstdinから読み取らないため)。最後に、コンパイラの出力は別の一時ファイルに保存され、スクリプトに渡された元の引数とともにモノラルで実行されます。 「shift」演算子は、コンパイラー引数とスクリプト名を削除し、スクリプト引数のみを残すために使用されます。

C#スクリプトが実行されると、コンパイルエラーがコマンドラインにダンプされます。

26
michael

もちろん、それを行うことができ、プロセスは非常に簡単です。

ここでは、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!
23
Suraj

スクリプトのようにC#を実行することはできません。最初にコンパイルする必要があります。そのために、 mono をインストールできます。

その後、mcsを使用してプログラムをコンパイルし、monoを使用して実行できます。

4
user703016

モノをインストールしたら、_csharp hello.cs_を使用できます。 Mono 2.10以降では、次のようにShebangを使用することもできます。

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

アセンブリが必要な場合は、ロードできます。スクリプト内にLoadAssembly("System.IO.Compression")という行があります。

参照:_man csharp_。

2
adabru