【问题标题】:Build xamarin.mac console app for distribution构建 xamarin.mac 控制台应用程序以进行分发
【发布时间】:2016-02-19 22:34:59
【问题描述】:

我在 Xamarin Studio for mac.os 中创建了一个简单的控制台窗口应用程序。 我点击调试,我看到了控制台应用程序。一切正常。

但是,如果我打开 bash shell 并导航到 bin/Debug 位置并尝试运行程序,我会收到消息:“无法执行二进制文件”。

我怀疑有些库没有被链接。也许当我在 Xamarin 中运行时,它正在设置运行/调试应用程序的环境。我在 Xamarin Studio 中看不到任何用于链接的构建选项。

我是 Xamarin 的新手,我想链接和分发一个“真正的”控制台应用程序。任何指针都会有所帮助,谢谢。

谢谢, 布鲁斯

【问题讨论】:

  • 您正在尝试直接执行 .net 可执行文件,如果您希望它作为独立应用程序运行,您必须创建一个 Bundle,查看 Xamarin 文档以了解如何执行此操作。

标签: xamarin xamarin-studio xamarin.mac


【解决方案1】:

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

您可以通过终端导航到 .exe 并运行它来运行它:

mono MyConsoleApp.exe

这将使用单声道虚拟机运行控制台应用程序 .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

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

【讨论】:

  • 感谢您的回复。我按照建议构建并将输出发送给另一个开发人员进行测试/安装/执行。此测试有 2 个问题。 1) 当他运行时,他得到一个“monoboehm.dylib not found”运行时错误。我进行了研究,显然我必须在 mkbundle 命令上使用“--static”。 2) 由于使用了“mmacosx-version”标志,mkbundle 现在抱怨“目标文件是为新的 OSX 版本(10.11)构建的,然后被链接。我在 Xamarin Studio 中看不到设置 OSX 版本的选项。这是由 CC env var 处理的吗?
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2013-05-21
    • 1970-01-01
    • 1970-01-01
    • 2011-12-31
    • 2017-10-19
    • 2023-03-19
    • 2010-09-22
    • 2015-04-02
    • 1970-01-01
    相关资源
    最近更新 更多