我有一个 C# 代码,需要使用终端进行编译、执行和反编译。
我怎样才能这样做?
答案1
您需要安装单完成如果您想运行未从 Debian 包安装的 Mono 或 Microsoft .NET 软件。
安装单完成. 在所有当前支持的 Ubuntu 版本中打开终端并输入:
sudo apt install mono-complete
将 C# 代码保存在名为 hello.cs 的文件中。示例 hello.cs 代码如下:
using System; namespace Project_1 { class MainClass { public static void Main (string[] args) { Console.WriteLine ("Hello World!"); Console.ReadKey (); } } }
使 hello.cs 可执行。右键单击 hello.cs 文件 -> 选择特性->权限tab -> 在左侧打勾允许作为程序执行文件。
使用
cd
命令将目录更改为包含 hello.cs 文件的目录。使用 mcs 编译器并创建一个名为你好来自源 hello.cs。
mcs -out:hello.exe hello.cs
使用 mono 运行 hello.exe 程序。
mono hello.exe
在步骤 6 中运行程序的结果应为:
Hello World!
按下Enter即可退出并返回默认终端提示。
反编译可执行文件。
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,它仍然在开发中并且易于安装。下载说明见随附链接