到目前为止,我开发的所有 Mac 应用程序在将 Mono 升级到 6.6 后都停止工作(与 6.8 的问题相同)。
恢复到以前安装的 Mono 6.4 可以解决此问题。
我的应用程序针对TargetFramework net461
(Mac 入口点)和netstandard2.0
(共享 dll)进行编译,以防万一。
与往常一样,错误很可能是我的。
感谢您的耐心等待。
嘿@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 并且没有看到同样的问题..
需要考虑的一件事是,如果您确实以某种方式(从您的其他问题之一)修改了 Info.plist,则它_需要_仅是 LF,UTF-8 _没有 BOM_,而不是 CRLF。 否则它将假定它已损坏。
Info.plist
已被 npp 更改。
我已经在我的开发机器上安装了 Mono,但重新编译并没有将 Mono 添加到包中。 我错过了什么?
在 Release 模式下,它默认执行。 否则,在 csproj 中将<MacBundleMono>
为 true。
查看BundleMono.targets和Mac.targets以了解您可以设置的各种属性。
我希望将这些选项添加到 VS 项目属性中,以便将来更容易地发现它们,但可惜(空闲)时间太少了。
将<MacBundleMono>True</MacBundleMono>
到 csproj 不会这样做。
除非它以一种对我来说并不明显的方式来做,那就是。
好的。
事实证明,仅当MacBundleMono
设置为False
时,应用程序中才会包含 MonoBundle 文件夹。
此外, Info.plist
由构建过程更改为包括UTF-8 BOM
和CRLF
,因此必须在之后手动修复它们。
此外,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 中没有崩溃报告
我已将 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
猜一件事与另一件事无关(?)。
您可能还想了解两个小问题:
构建过程始终在包的MacOS
文件夹中包含一个.pdb
文件。
构建过程总是修改Info.plist
以包含一个CFBundleExecutable
键,复制现有的键(如果存在)。 这会导致BOM
和CRLF
都被包含在内,尽管它们不存在于项目的原始Info.plist
中。
这两个问题的解决方法是删除 1 并替换 2 的简单批处理文件,不幸的是必须手动运行,因为它无法添加到post-build events
因为尽管post-build
它仍然运行得太早,据我所知。
再次感谢您的无限耐心。