为分发构建Xamarin.Mac控制台应用程序

3
我在mac.os的Xamarin Studio中创建了一个简单的控制台窗口应用程序。 我点击调试,然后就可以看到控制台应用程序。一切都正常工作。
但是,如果我打开一个bash shell并导航到bin / Debug位置尝试运行该程序,我会收到消息:“无法执行二进制文件”。
我怀疑有一些库没有被链接。也许当我在Xamarin内运行时,它会设置环境来运行/调试应用程序。但我没有在Xamarin Studio中看到任何构建选项以进行链接。
我是Xamarin的新手,我有一个“真正的”控制台应用程序需要链接和分发。任何建议都将很有帮助,谢谢。
谢谢, Bruce

你正在尝试直接执行一个 .net 可执行文件,如果你希望它作为一个独立的应用程序运行,你必须创建一个 Bundle,请参考 Xamarin 文档中关于如何操作的内容。 - Gusman
2个回答

3

输出的 .exe 文件是一个 .NET 可执行文件,当它通过调试器运行时,它会被 mono 可执行文件启动和执行。

您可以通过终端导航到该文件并运行以下命令来运行 .exe 文件:

mono MyConsoleApp.exe

这将使用mono虚拟机运行控制台应用程序 .exe。

如果您想捆绑 .exe,您需要使用 mkbundle

以下是我使用 mkbundle 生成OSX可执行文件的 shell 命令序列:

# Configure pkg config path.
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/lib/pkgconfig:/Library/Frameworks/Mono.framework/Versions/3.0.12/lib/pkgconfig

# Configure Mono.Framework path.
export PATH=/Library/Frameworks/Mono.framework/Commands:$PATH

# Setup the architecture and framework references
export AS="as -arch i386"
export CC="clang -framework CoreFoundation -lobjc -liconv -arch i386 -mmacosx-version-min=10.6"

# Bundle the app. --deps auto-magically includes all dependencies for the .net exe, -o specifies the output native executable filename.
mkbundle MyConsoleApp.exe --deps -o MyConsoleApp

这将生成一个名为MyConsoleApp的OSX可执行文件(本地可执行文件),以及一个名为MyConsoleApp.exe的.NET可执行文件,您可以双击运行。

谢谢回复。我按照建议构建了代码,并将输出发送给另一位开发人员进行测试/安装/执行。这个测试中有两个问题。1)他运行时出现“monoboehm.dylib未找到”的运行时错误。我进行了研究,显然必须在mkbundle命令上使用“--static”。2)由于使用了“mmacosx-version”标志,mkbundle现在抱怨“对象文件是为新的OSX版本(10.11)构建的,而不是被链接的版本”。我没有在Xamarin Studio中看到设置OSX版本的选项。这是否由CC env变量处理? - brewsky

0

请注意,参考mkbundle的其他答案仅适用于MonoMac。Xamarin.Mac应用程序现在生成本地启动器应用程序来为您处理此问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接