在linux终端上运行C#代码

Hed*_*tas 18 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;
}
Run Code Online (Sandbox Code Playgroud)

当我运行shell bash时我会使用#!/bin/bash.如何用C#做同样的事情?

mic*_*ael 26

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
Run Code Online (Sandbox Code Playgroud)

假设您将上述脚本保存为/ 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");                                                                                                            
    }                                                                                                                                          
}                                                                                                                                            
Run Code Online (Sandbox Code Playgroud)

将上面的代码保存到诸如"hello.cs"之类的文件中,使其可执行,将第一行更改为指向先前保存的bash脚本,然后执行它,您应该看到以下输出以及一个对话框"Hello" GUI":

bash-4.2$ ./hello.cs foo bar baz
Hello Console
Arguments: foo, bar, baz
Run Code Online (Sandbox Code Playgroud)

请注意,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));                                                                              
    }                                                                                                                                          
}                                                                                                                                            
Run Code Online (Sandbox Code Playgroud)

请注意,命令行参数将传递给C#脚本,但shebang参数(在"-r:System.Windows.Forms.dll -r:System.Drawing.dll"上面的第一个C#脚本中)将传递给C#编译器.使用后一种功能,您可以在C#脚本的第一行指定所需的任何编译器参数.

如果您对bash脚本如何工作的详细信息感兴趣,那么shebang(#!)将在C#脚本的第一行传递给它的所有参数汇总在一起,然后是脚本名称,然后是传递给脚本的命令行参数本身.在上面的第一个C#示例中,以下5个参数将传递给bash脚本(由引号描绘):

"-r:System.Windows.Forms.dll -r:System.Drawing.dll" "hello.cs" "foo" "bar" "baz"
Run Code Online (Sandbox Code Playgroud)

该脚本确定第一个参数不是文件名,并假定它包含C#编译器的参数.然后使用'tail'剥离C#脚本的第一行,并将结果保存到临时文件中(因为C#编译器不从stdin读取).最后,编译器的输出将保存到另一个临时文件中,并以单声道执行,并将原始参数传递给脚本.'shift'运算符用于消除编译器参数和脚本名称,只留下脚本参数.

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


Sur*_*raj 23

当然可以完成并且过程非常简单.

在这里,我将解释Ubuntu Linux的步骤.

开放终端:

Ctrl+ Alt+T

类型

gedit hello.cs
Run Code Online (Sandbox Code Playgroud)

gedit打开的窗口中粘贴以下示例代码:

using System;
class HelloWorld {
  static void Main() {
    Console.WriteLine("Hello World!");
  }
}
Run Code Online (Sandbox Code Playgroud)

保存并关闭gedit.

返回终端类型:

sudo apt update
sudo apt install mono-complete
mcs -out:hello.exe hello.cs
mono hello.exe
Run Code Online (Sandbox Code Playgroud)

输出:

Hello World!
Run Code Online (Sandbox Code Playgroud)


Cor*_*rey 13

#!(hashbang)标签是用来告诉使用哪种解释让你的Perl,PHP,庆典,SH等脚本将运行正确的外壳.

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

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

  • 过去几年情况发生了变化.现在我们有cs-script:http://www.csscript.net/help/CS-Script_on_Mono.html (3认同)

ada*_*bru 6

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

#!/usr/bin/csharp
Console.WriteLine ("Hello, World");
Run Code Online (Sandbox Code Playgroud)

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

参考:man csharp