Seb*_*ank 12 c# mono gtk# monodevelop
我是一名长期的C#开发人员,但对Mono来说是新手,尤其是Gtk#.我用C#和Gtk#开发了一个小应用程序.我需要这个应用程序在Windows,Linux和Mac上运行所以我决定选择Mono,到目前为止,它似乎是一个很酷的框架.
我的简单应用程序所做的是基于用户选择的本地目录和端口启动XSP Web服务器.理想情况下,我希望我的应用程序无需首先安装Mono框架即可工作,但这不是必须开始的.我使用以下库:
using System;
using Gtk;
using System.Net;
using Mono.WebServer;
using System.Diagnostics;
Run Code Online (Sandbox Code Playgroud)
我在Mac上开发(Snow Leopard,10.6.7).我的可执行文件在我的Mac上完美运行 但是我遇到了Ubuntu和Windows的问题.我的应用程序部分在Ubuntu(11.04)上运行 - 它启动并且似乎正在工作但在我尝试启动XSP Web服务器时失败,这似乎可以预期,因为Mono.Webserver可能没有安装在我的Ubuntu机器上.在Windows(7,64位)上,当我双击它时,我的应用程序立即崩溃.崩溃报告告诉我发生了System.IO.FileNotFoundException错误.可能是由于同样缺少XSP库?
无论如何,我在互联网上环顾四周并了解了一下mkbundle.我按照各种论坛帖子的建议执行了以下设置:
export AS="as -arch i386"
Run Code Online (Sandbox Code Playgroud)
我已导航到项目的/ bin/Release目录,然后运行以下命令:
mkbundle MivandoLocalServer.exe -o MivandoLocalServer --deps
Run Code Online (Sandbox Code Playgroud)
但我得到以下输出,最终失败:
Compiling:
as -arch i386 -o temp.o temp.s
cc -g -o MivandoLocalServer -Wall temp.c `pkg-config --cflags --libs mono-2` temp.o
Package mono-2 was not found in the pkg-config search path.
Perhaps you should add the directory containing `mono-2.pc'
to the PKG_CONFIG_PATH environment variable
No package 'mono-2' found
temp.c:2:36: error: mono/metadata/assembly.h: No such file or directory
temp.c:5: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘assembly_bundle_MivandoLocalServer_exe’
temp.c:7: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
temp.c:18: error: ‘NULL’ undeclared here (not in a function)
temp.c: In function ‘mono_mkbundle_init’:
temp.c:22: warning: implicit declaration of function ‘mono_register_bundled_assemblies’
temp.c:22: error: ‘bundled’ undeclared (first use in this function)
temp.c:22: error: (Each undeclared identifier is reported only once
temp.c:22: error: for each function it appears in.)
temp.c: In function ‘main’:
temp.c:114: warning: implicit declaration of function ‘mono_set_dirs’
[Fail]
Run Code Online (Sandbox Code Playgroud)
我真的不知道该怎么做.我安装了MacPorts,并且我已经读过这可能会导致pkg-config目录出现一些问题.这是真的?如果是的话,我需要做些什么让它起作用?
我希望有人能够帮助我.谢谢!
此致,塞巴斯蒂安
PS.我也在Mono主页的论坛上发布了这个问题,但到目前为止还没有任何回复.
更新:我怀疑MacPorts干扰了我的pkg-config目录设置.当我在终端输入以下命令时,mkbundle允许我编译.但我仍然遇到一些问题.
export PKG_CONFIG_PATH="/Library/Frameworks/Mono.framework/Versions/Current/lib/pkgconfig/"
export AS="as -arch i386"
export CC="cc -arch i386"
Run Code Online (Sandbox Code Playgroud)
执行以下mkbundle命令会生成4.9 MB的Unix归档文件,其中包含所有必需的依赖项.当我在Mac上双击这个新文件时,会弹出一个终端窗口并启动我的应用程序.甜!但是这在Windows和Ubuntu中都不起作用.
mkbundle MivandoLocalServer.exe -o MivandoLocalServerBundle --deps -z
Run Code Online (Sandbox Code Playgroud)
我想收到的是一个捆绑的可执行文件,可以在Windows和Ubuntu中运行.到目前为止,我还没有遇到过让我这样做的解决方案.我试图在我的Windows 7机器上安装MonoDevelop,复制我的解决方案并在那里构建它.但由于我的应用依赖于Mono.WebServer2库,我无法在Windows上构建它.我无法Mono.WebServer2.dll在互联网上的任何地方找到Windows下载.
首先,这种情况涉及两个不同的问题,我将分别解决:
1. 架构
首先,并非所有 Windows 和 Linux 计算机都运行在 i386 架构上,因此请确保您使用的是 i386 架构。它们更有可能是 i386,但 Linux 可以轻松地在许多架构上运行,而 Windows 最近也通过新的平板电脑 cpu 类型涉足这条道路(它们过去支持它,但很快就失去了支持)。
2. 构建和打包
当针对任何操作系统时,打包路径必然会有所不同,因此您应该使用该目标操作系统为每个目标操作系统进行构建。如果您希望 mkbundle 在 Windows 上工作,则需要在其中安装整个工具链,并且 Windows 需要特殊的脚本才能正确使用,但由于 mkbundle 是为类 Unix 操作系统制作的,因此它应该在 Linux 上工作而无需特殊考虑:
在 Windows 上使用 mkbundle 创建 C# 可执行文件
http://linux.die.net/man/1/mkbundle