如何从文件中 运行 使用 MonoDevelop、Gtk# 编码的程序,Ubuntu

How to run a program from Files, coded using MonoDevelop, Gtk#, Ubuntu

我使用 MonoDevelop 和 Gtk# 2.0 编写了 HelloWorld.cs。它 运行 在调试器中没问题,并且它构建 HelloWorld.exe。当我从终端 window "mono ./HelloWorld.exe" 运行 时,程序 运行 按预期运行,所以我知道它是按预期编码的。但是,当我尝试通过从文件(Windows Explorer 的 Linux 版本)双击它来 运行 它时,它会打开存档管理器并显示错误 "An error occurred while loading the archive"。

我正在使用 Ubuntu 18.04.02 LTS,如果这有区别的话。

我尝试创建一个 link "ln -s ./HelloWorld.exe ./meow",然后双击喵喵,但是这也打开了存档管理器并出现同样的错误。

我不希望我的最终产品要求用户打开终端 window 到 运行 我的程序,我该怎么做才能让用户双击我的程序文件到 运行?

编辑:[18FEB2019] 谢谢一些程序员老兄,我喜欢捆绑的想法,因为我可以将这个项目移植到 linux 的不同风格,我希望这能给我一个实现目标的途径。 但是,我得到了错误:

Failure to load i18n assemblies, the following directories were searched for the assemblies:
Path: .
In Custom mode, you need to provide the directory to lookup assemblies from using -L
ERROR: Couldn't load one or more of the i18n assemblies: Failed to load I18N.dll

我搜索并找到

 https://www.mono-project.com/docs/tools+libraries/tools/mkbundle/

我遵循了这些指示,但卡在了这一部分

 mkbundle -o CacheServer --cross mono-5.8.0-ubuntu-16.04-x64 CacheServer.exe --machine-config /etc/mono/4.5/machine.config

我的错误是

 ERROR: Unable to load assembly `gtk-sharp' referenced by `/home/amccombs/Projects/HelloWorld/HelloWorld/bin/Debug/HelloWorld.exe'

我试过了

mkbundle --fetch-target gtk-sharp

结果

Failure to download the specified runtime from https://download.mono-project.com/runtimes/raw/gtk-sharp

然后我尝试了

sudo apt-get install gtk-sharp

结果

E: Unable to locate package gtk-sharp

Files.exe 扩展名检测为存档,因此它使用 File Roller 或类似工具打开它。

只需右键单击文件 HelloWorld.exe 和 select "Open With Other Application",单击 "Find New Applications",然后键入 "mono" 并按 ENTER。该应用程序将打开。

另一种可能性是创建一个 .desktop 文件,并将其放在 ~/.local/share/applications 下,内容如下:

[Desktop Entry]
Exec=mono %F
MimeType=application/x-ms-dos-executable;
Name=mono
NoDisplay=true
Type=Application

MKBundle 从单声道应用程序创建本机应用程序。缺点是您必须同时编译应用程序及其所有依赖项,这可能很棘手。无论如何,您要找的包裹是 gtk-sharp2.

MKBundle 的替代方法是包含一个文本文件,例如 HelloWorld.sh,其内容为:

mono HelloWorld.exe

然后使其可执行:

chmod +x HelloWorld.sh

然后您可以将两个文件打包在一起(使用 .tar.gz 目标,它保留可执行文件等属性),并且可能与 README 文件一起解释双击 HelloWorld.sh.

或者您可以将 .exe.desktop 文件打包,并在 README 文件中说明必须放置的位置。

tons of possibilities.