Eto: Mac - Mono 6.4 运行所有应用程序,更高版本的 Mono 不运行

创建于 2020-03-28  ·  21评论  ·  资料来源: picoe/Eto

到目前为止,我开发的所有 Mac 应用程序在将 Mono 升级到 6.6 后都停止工作(与 6.8 的问题相同)。

恢复到以前安装的 Mono 6.4 可以解决此问题。

我的应用程序针对TargetFramework net461 (Mac 入口点)和netstandard2.0 (共享 dll)进行编译,以防万一。

与往常一样,错误很可能是我的。

感谢您的耐心等待。

所有21条评论

@LaraSQP ,感谢您的报告,但如果您包含实际异常(检查 Console.app)和您尝试过的内容等详细信息,那真的会有所帮助。

另外,需要注意的一件事是,在为 _release_ 编译时,在您的开发箱上安装单声道时,它将在您的应用程序中捆绑单声道,因此不需要将单声道安装到 _run_ 您的应用程序。 这将使您拥有一个已知的运行时。 或者,改用 .NET Core 并将其捆绑在您的应用程序中(不需要安装 mono 来执行此操作)。

感谢你能这么快回复。

不知道 Console.app 并将报告异常。

也不知道在 Windows 上安装 Mono。 该死的东西。 哪个安装程序适用? 64 位(无 GTK#)还是我也需要 GTK#?

不需要 GTK#,它只使用 mkbundle 来捆绑单声道,它使用 csproj 中的<MacBundleTarget>属性。 如果未指定,则默认为mono-6.4.0-osx-10.9-x64 ,并且可以是mkbundle -list-targets列出的任何值

关于 Console.app,我只有两个信息不足的错误(至少对我而言):

Mar 29 06:19:01 my-MacBook-Air com.apple.xpc.launchd[1] (com.apple.xpc.launchd.oneshot.0x1000015e.MyApp1[10705]):服务以异常代码退出:78

Mar 29 06:40:29 my-MacBook-Air com.apple.xpc.launchd[1] (com.example.MyApp1.4212[11362]):服务退出异常代码:1

现在尝试在安装 Mono 的情况下重新编译。

@LaraSQP查看“崩溃报告”部分。 它应该有您的应用程序崩溃时的条目。 其副本有助于诊断问题。

“崩溃报告”为空。

顺便说一句,我安装了单声道 6.8 并且没有看到同样的问题..

Screen Shot 2020-03-28 at 3 30 34 PM

需要考虑的一件事是,如果您确实以某种方式(从您的其他问题之一)修改了 Info.plist,则它_需要_仅是 LF,UTF-8 _没有 BOM_,而不是 CRLF。 否则它将假定它已损坏。

Info.plist已被 npp 更改。

我已经在我的开发机器上安装了 Mono,但重新编译并没有将 Mono 添加到包中。 我错过了什么?

在 Release 模式下,它默认执行。 否则,在 csproj 中将<MacBundleMono>为 true。

查看BundleMono.targetsMac.targets以了解您可以设置的各种属性。

我希望将这些选项添加到 VS 项目属性中,以便将来更容易地发现它们,但可惜(空闲)时间太少了。

<MacBundleMono>True</MacBundleMono>到 csproj 不会这样做。

除非它以一种对我来说并不明显的方式来做,那就是。

好的。

事实证明,仅当MacBundleMono设置为False时,应用程序中才会包含 MonoBundle 文件夹。

此外, Info.plist由构建过程更改为包括UTF-8 BOMCRLF ,因此必须在之后手动修复它们。

此外,Info.plist 被构建过程更改为包含 UTF-8 BOM 和 CRLF,因此必须在之后手动修复它们。

这不应该是这种情况......你能附上你正在使用的 Info.plist 文件(不是编译的文件)。

事实证明,仅当 MacBundleMono 设置为 False 时,应用程序中才会包含 MonoBundle 文件夹。

是的,MonoBundle 文件夹并不意味着捆绑了单声道。

MacBundleMono是一个半身像。 无论如何都不包括单声道。

任何高于 6.4.0.137 的 Mono 版本都会继续使我的应用程序崩溃。

稍后我将研究构建目标。

感谢您的耐心等待。

您在构建时是否仍然收到此警告?

Couldn't find mkbundle, so app bundle will require mono to be installed! Install mono from https://mono-project.com to bundle it with your app or set MonoPath to where it is installed.

如果是这样,您可能需要重新启动或使用<MonoPath>专门指向安装单声道的位置。

你也可以把你的应用程序的 dmg 发给我(假设你愿意这样做?)。 我可以尝试进一步诊断。

我没有收到关于mkbundle的警告,所以我接下来会尝试MonoPath

附件是我用来测试这个和那个的一个简单项目。 在 Mac 中它甚至没有在 Mono 6.4 以上启动,并且 Console.app 中没有崩溃报告

Mac文件测试.zip

我已将 Mono 添加到environment variables ,因此mkbundle可以访问没有问题。 MonoPath不是这里的问题。

事实上,我能够通过...手动运行mkbundle

mkbundle --simple --cross mono-6.4.0-osx-10.9-x64 MacFileTest.exe -o MacFileTest

...这似乎成功了,只是它不能在 Mac 上运行。

由于在我的项目(上图)中没有提到mkbundle ,很明显我遗漏了很多。

我的上一个帖子似乎没有成功,或者我找不到它,或者它以某种方式被删除了。

首先,使用netcoreapp3.1确实解决了这个问题。 非常感谢。

我卸载了Mono并且所有应用程序现在都在net core 。 我有点惊讶,因为dotnet中的命令Terminal打嗝:

zsh:找不到命令:dotnet

猜一件事与另一件事无关(?)。

您可能还想了解两个小问题:

  1. 构建过程始终在包的MacOS文件夹中包含一个.pdb文件。

  2. 构建过程总是修改Info.plist以包含一个CFBundleExecutable键,复制现有的键(如果存在)。 这会导致BOMCRLF都被包含在内,尽管它们不存在于项目的原始Info.plist中。

这两个问题的解决方法是删除 1 并替换 2 的简单批处理文件,不幸的是必须手动运行,因为它无法添加到post-build events因为尽管post-build它仍然运行得太早,据我所知。

再次感谢您的无限耐心。

此页面是否有帮助?
0 / 5 - 0 等级