在linux终端上运行C#代码

时间:2013-12-05 05:34:07

标签: c# linux shell

如何在Linux终端上执行C#代码作为shell脚本。

我有这个示例代码:

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#做同样的事情?

5 个答案:

答案 0 :(得分:25)

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#脚本,但是shebang参数(在上面的第一个C#脚本中" -r:System.Windows.Forms.dll -r:System.Drawing.dll&# 34;)被传递给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读取)。最后,编译器的输出将保存到另一个临时文件中,并以单声道执行,并将原始参数传递给脚本。转移' operator用于消除编译器参数和脚本名称,只留下脚本参数。

执行C#脚本时,编译错误将被转储到命令行。

答案 1 :(得分:21)

当然可以做到,而且过程非常简单。

我在这里解释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!

答案 2 :(得分:12)

#!(hashbang)标记用于告诉shell使用哪个解释器,以便你的perl,php,bash,sh等脚本运行正确。

但是C#不是脚本语言,它旨在编译成可执行格式。如果要使用C#,则需要至少安装编译器和运行时,最好是IDE(Integrated Development Environment)来帮助您开发和调试应用程序。

为编译器和运行时安装Mono,然后为IDE安装MonoDevelop

答案 3 :(得分:4)

你不能像脚本那样执行C#,你必须先编译它。为此,您可以安装mono

然后,您可以使用mcs编译您的程序,并使用mono执行该程序。

答案 4 :(得分:0)

安装Mono后,您可以使用csharp hello.cs。从Mono 2.10开始,您还可以像下面这样使用shebang:

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

如果需要程序集,则可以加载它们,例如在脚本中的LoadAssembly("System.IO.Compression")行。

参考:man csharp