Alle Mac-Apps, die ich bisher entwickelt habe, funktionieren nach dem Upgrade von Mono auf 6.6 nicht mehr (gleiches Problem mit 6.8).
Das ZurĂŒcksetzen auf eine frĂŒhere Installation von Mono 6.4 behebt das Problem.
Meine Apps kompilieren gegen TargetFramework net461
(Mac-Einstiegspunkt) und netstandard2.0
(gemeinsame DLL), falls es darauf ankommt.
Der Fehler dĂŒrfte wie immer bei mir liegen.
Vielen Dank fĂŒr Ihre Geduld.
Hey @LaraSQP , danke fĂŒr die Berichte, aber es wĂ€re wirklich hilfreich, wenn Sie Details wie die tatsĂ€chliche Ausnahme (ĂŒberprĂŒfen Sie Console.app) und das, was Sie versucht haben,
Beachten Sie auch, dass beim Kompilieren fĂŒr _release_, wenn Mono auf Ihrer Entwicklerbox installiert ist, Mono in Ihrer App gebĂŒndelt wird, sodass Mono nicht installiert werden muss, um Ihre App _auszufĂŒhren_. Dadurch wird es so, dass Sie eine bekannte Laufzeit haben. Alternativ können Sie stattdessen .NET Core verwenden und es in Ihrer App bĂŒndeln (dafĂŒr muss mono nicht installiert sein).
Danke fĂŒr die schnelle Antwort.
Wusste nichts von Console.app und wird die Ausnahme melden.
Wusste auch nicht, wie man Mono unter Windows installiert. Verdammte Sache. Welches Installationsprogramm gilt? 64-Bit (kein GTK#) oder brauche ich auch GTK#?
GTK# wird nicht benötigt, es verwendet nur mkbundle zum BĂŒndeln von Mono, was es mit der Eigenschaft <MacBundleTarget>
in Ihrem csproj tut. Der Standardwert ist mono-6.4.0-osx-10.9-x64
wenn nicht angegeben, und kann ein beliebiger Wert sein, der in mkbundle -list-targets
In Bezug auf Console.app habe ich nur zwei Fehler, die (zumindest fĂŒr mich) ziemlich informativ sind:
29. MĂ€rz 06:19:01 my-MacBook-Air com.apple.xpc.launchd[1] (com.apple.xpc.launchd.oneshot.0x1000015e.MyApp1[10705]): Dienst mit abnormalem Code beendet: 78
29. MĂ€rz 06:40:29 my-MacBook-Air com.apple.xpc.launchd[1] (com.example.MyApp1.4212[11362]): Dienst mit abnormalem Code beendet: 1
Ich versuche jetzt, mit installiertem Mono neu zu kompilieren.
@LaraSQP Schauen Sie sich den Abschnitt "
"Absturzberichte" ist leer.
Ăbrigens, ich habe Mono 6.8 installiert und sehe nicht das gleiche Problem.
Eine Sache, die Sie beachten sollten, ist, dass, wenn Sie Info.plist in irgendeiner Weise modifiziert haben (von einem Ihrer anderen Probleme), dass es _nur LF, UTF-8 _ohne BOM_ und nicht CRLF sein muss. Es wird davon ausgegangen, dass es sonst beschÀdigt ist.
Info.plist
wurde von npp geÀndert.
Ich habe Mono auf meinem Entwicklungscomputer installiert, aber die Neukompilierung fĂŒgt Mono nicht zum Bundle hinzu. Was vermisse ich?
Im Release-Modus tut es dies standardmĂ€Ăig. Andernfalls setzen Sie <MacBundleMono>
in csproj auf true.
Sehen Sie sich Mac.targets fĂŒr die verschiedenen Eigenschaften an, die Sie festlegen können.
Ich hoffe, diese Optionen zu den VS-Projekteigenschaften hinzuzufĂŒgen, um sie in Zukunft leichter zu entdecken, aber leider so wenig (freie) Zeit dafĂŒr.
Das HinzufĂŒgen von <MacBundleMono>True</MacBundleMono>
zu csproj tut dies nicht.
Es sei denn, es tut es auf eine Weise, die fĂŒr mich nicht offensichtlich ist.
OK.
Es stellt sich heraus, dass ein MonoBundle-Ordner nur dann in der App enthalten ist, wenn MacBundleMono
auf False
.
AuĂerdem wird Info.plist
durch den Build-Prozess geÀndert, um sowohl UTF-8 BOM
als auch CRLF
, sodass sie anschlieĂend manuell korrigiert werden mĂŒssen.
AuĂerdem wird Info.plist durch den Build-Prozess so geĂ€ndert, dass sowohl UTF-8 BOM als auch CRLF enthalten sind, sodass sie anschlieĂend manuell korrigiert werden mĂŒssen.
Dies sollte nicht der Fall sein. Könnten Sie Ihre Info.plist-Datei anhÀngen, die Sie verwenden (nicht die kompilierte).
Es stellt sich heraus, dass ein MonoBundle-Ordner nur dann in der App enthalten ist, wenn MacBundleMono auf False gesetzt ist.
Ja, ein MonoBundle-Ordner bedeutet nicht, dass Mono gebĂŒndelt ist. Seltsamerweise bedeutet das Fehlen dieses Ordners, dass Mono "gebĂŒndelt" ist und alles in der nativen ausfĂŒhrbaren Datei enthalten ist.
MacBundleMono
ist eine BĂŒste. Mono ist auf keinen Fall enthalten.
Und jede Version von Mono ĂŒber 6.4.0.137 bringt meine Apps weiterhin zum Absturz.
Ich werde spÀter auf die Build-Ziele eingehen.
Vielen Dank fĂŒr Ihre Geduld.
Erhalten Sie diese Warnung immer noch beim Bauen?
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.
Wenn dies der Fall ist, mĂŒssen Sie möglicherweise einen Neustart durchfĂŒhren oder mit <MonoPath>
speziell auf den Ort verweisen, an dem mono installiert wurde.
Könnten Sie mir auch die dmg Ihrer App schicken (vorausgesetzt, Sie sind dazu bereit?). Ich könnte versuchen, es weiter zu diagnostizieren.
Ich erhalte keine Warnung zu mkbundle
also versuche ich es als nÀchstes mit MonoPath
.
Im Anhang ist ein einfaches Projekt, mit dem ich dies und das getestet habe. Es startet nicht einmal ĂŒber Mono 6.4 auf dem Mac und es gibt keinen Absturzbericht in Console.app
Ich hatte Mono zu environment variables
hinzugefĂŒgt, so dass mkbundle
problemlos zugÀnglich ist. MonoPath
ist hier nicht das Problem.
TatsÀchlich konnte ich mkbundle
manuell ĂŒber...
mkbundle --simple --cross mono-6.4.0-osx-10.9-x64 MacFileTest.exe -o MacFileTest
... was erfolgreich zu sein schien, auĂer dass es nicht auf dem Mac lĂ€uft.
Da es in meinem Projekt (oben) keinen Hinweis auf mkbundle
, ist es offensichtlich, dass ich eine ganze Menge ĂŒbersehe.
Mein letzter Beitrag scheint es nicht geschafft zu haben, oder ich kann ihn nicht finden oder er wurde irgendwie gelöscht.
Erstens hat die Verwendung von netcoreapp3.1
das Problem tatsÀchlich behoben. Ich danke dir sehr.
Ich habe Mono
deinstalliert und alle Apps laufen jetzt auf net core
. Ich bin etwas ĂŒberrascht, da der Befehl dotnet
in den Terminal
rĂŒlpst:
zsh: Befehl nicht gefunden: dotnet
Denke, das eine hat nichts mit dem anderen zu tun (?).
Es bleiben noch zwei kleine Probleme, ĂŒber die Sie vielleicht Bescheid wissen möchten:
Der Build-Prozess umfasst immer eine .pdb
Datei im MacOS
Ordner des Bundles.
Der Build-Prozess Àndert Info.plist
, um einen CFBundleExecutable
SchlĂŒssel einzuschlieĂen, wobei der vorhandene SchlĂŒssel, falls vorhanden, dupliziert wird. Dies fĂŒhrt dazu, dass sowohl BOM
als auch CRLF
eingeschlossen werden, obwohl sie im ursprĂŒnglichen Info.plist
im Projekt nicht vorhanden sind.
Der Workaround fĂŒr diese beiden Probleme ist eine einfache Batch-Datei zum Löschen von 1 und Ersetzen von 2, die leider manuell ausgefĂŒhrt werden muss, da sie nicht zu den post-build events
hinzugefĂŒgt werden kann, da sie trotz post-build
noch zu frĂŒh ausgefĂŒhrt wird , Soweit ich sagen kann.
Nochmals vielen Dank fĂŒr Ihre unendliche Geduld.