如何在 Ubuntu 终端中编译、运行和反编译 C# 代码?

如何在 Ubuntu 终端中编译、运行和反编译 C# 代码?

我有一个 C# 代码,需要使用终端进行编译、执行和反编译。

我怎样才能这样做?

答案1

您需要安装单完成如果您想运行未从 Debian 包安装的 Mono 或 Microsoft .NET 软件。


  1. 安装单完成. 在所有当前支持的 Ubuntu 版本中打开终端并输入:

    sudo apt install mono-complete
    
  2. 将 C# 代码保存在名为 hello.cs 的文件中。示例 hello.cs 代码如下:

    using System;
    
    namespace Project_1 {
        class MainClass {
            public static void Main (string[] args) {
                Console.WriteLine ("Hello World!");
                Console.ReadKey ();
            }
        }
    }
    
  3. 使 hello.cs 可执行。右键单击 hello.cs 文件 -> 选择特性->权限tab -> 在左侧打勾允许作为程序执行文件

  4. 使用cd命令将目录更改为包含 hello.cs 文件的目录。

  5. 使用 mcs 编译器并创建一个名为你好来自源 hello.cs。

    mcs -out:hello.exe hello.cs
    
  6. 使用 mono 运行 hello.exe 程序。

    mono hello.exe
    
  7. 在步骤 6 中运行程序的结果应为:

    Hello World!  
    
  8. 按下Enter即可退出并返回默认终端提示。

  9. 反编译可执行文件。

    monodis --output=decompiled-hello.txt hello.exe
    

答案2

您可以使用mono具有C#跨平台支持并且开源的实现。

打开终端并安装 mono:

对于 Ubuntu 20.04(稳定的)

sudo apt install gnupg ca-certificates
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
echo "deb https://download.mono-project.com/repo/ubuntu stable-focal main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list
sudo apt update

对于 Ubuntu 18.04

sudo apt install apt-transport-https dirmngr
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
echo "deb https://download.mono-project.com/repo/ubuntu vs-bionic main" | sudo tee /etc/apt/sources.list.d/mono-official-vs.list
sudo apt update

对于 Ubuntu 16.04

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
sudo apt install apt-transport-https
echo "deb https://download.mono-project.com/repo/ubuntu vs-xenial main" | sudo tee /etc/apt/sources.list.d/mono-official-vs.list
sudo apt update

对于 Ubuntu 14.04

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
sudo apt install apt-transport-https
echo "deb https://download.mono-project.com/repo/ubuntu vs-trusty main" | sudo tee /etc/apt/sources.list.d/mono-official-vs.list
sudo apt update

然后输入

sudo apt install mono-complete

C#在当前目录中创建示例文件

例如,您可以使用以下代码:

class GoodDay
{
    public static void Main()
    {
        System.Console.WriteLine("Good Day!");
    }
}

使用任何文本编辑器(例如 gedit),键入以下代码并将文件另存为GoodDay.cs

编译代码的命令-

mcs -out:GoodDay.exe GoodDay.cs

GoodDay.exe 生成可执行文件。

执行文件的命令.exe-

mono GoodDay.exe

输出将是 -

Good Day!

反编译可执行文件的命令 -

monodis --output=GoodDay.txt GoodDay.exe

反编译后的代码信息保存在新生成的文件中GoodDay.txt

答案3

官方.NET 核心微软自 2016 年起就已推出。开源软件并支持许多平台。甚至 Mono 现在也与 .NET Core 共享一些代码,因此在 2018 年几乎没有理由使用 Mono

只需前往官方网站下载并安装。如果您想从命令行安装,请访问在 Linux 上安装 .NET, 具体来说在 Ubuntu 上安装 .NET SDK 或 .NET 运行时. 使用 apt 安装 SDK 和运行时

sudo apt-get update; \
  sudo apt-get install -y apt-transport-https && \
  sudo apt-get update && \
  sudo apt-get install -y dotnet-sdk-5.0

你也可以使用 snap 安装

sudo snap install dotnet-sdk --classic --channel=5.0

答案4

截至 2021 年,真正的开源解决方案仍然是 Mono,可在其网站上获取https://www.mono-project.com/微软的实现在 Linux 上效果不佳(速度慢、响应迟钝),这并不令人意外。这是意料之中的,因为微软长期以来一直是 Linux 及其免费、开源性质的对手。坚持使用 Mono,它仍然在开发中并且易于安装。下载说明见随附链接

相关内容