Eto: Mac - Mono 6.4 menjalankan semua aplikasi, versi Mono yang lebih tinggi tidak

Dibuat pada 28 Mar 2020  ·  21Komentar  ·  Sumber: picoe/Eto

Semua aplikasi Mac yang saya kembangkan sejauh ini telah berhenti berfungsi setelah memutakhirkan Mono ke 6.6 (masalah yang sama dengan 6.8).

Mengembalikan ke instalasi Mono 6.4 sebelumnya memperbaiki masalah.

Aplikasi saya dikompilasi terhadap TargetFramework net461 (titik masuk Mac) dan netstandard2.0 (dll bersama) jika itu penting.

Seperti biasa, kesalahannya mungkin milik saya.

Terima kasih atas kesabaran Anda.

Semua 21 komentar

Hai @LaraSQP , terima kasih atas laporannya, tetapi akan sangat membantu jika Anda menyertakan detail seperti pengecualian yang sebenarnya (periksa Console.app) dan apa yang telah Anda coba.

Juga, satu hal yang perlu diperhatikan adalah bahwa ketika mengkompilasi untuk _release_, dengan mono diinstal pada kotak dev Anda, itu akan menggabungkan mono dalam aplikasi Anda sehingga tidak memerlukan mono untuk diinstal ke _run_ aplikasi Anda. Ini akan membuat Anda memiliki runtime yang diketahui. Atau, gunakan .NET Core sebagai gantinya dan bundel di aplikasi Anda (tidak perlu menginstal mono untuk melakukannya).

Terima kasih atas balasan cepatnya.

Tidak tahu tentang Console.app dan akan melaporkan pengecualian.

Tidak tahu juga tentang menginstal Mono di Windows. Hal sialan. Penginstal mana yang berlaku? 64-bit (tanpa GTK#) atau apakah saya memerlukan GTK# juga?

GTK# tidak diperlukan, ia hanya menggunakan mkbundle untuk bundling mono, yang menggunakan properti <MacBundleTarget> di csproj Anda. Defaultnya adalah mono-6.4.0-osx-10.9-x64 jika tidak ditentukan, dan dapat berupa nilai apa pun yang tercantum dalam mkbundle -list-targets

Mengenai Console.app saya hanya memiliki dua kesalahan yang cukup tidak informatif (setidaknya bagi saya):

29 Mar 06:19:01 my-MacBook-Air com.apple.xpc.launchd[1] (com.apple.xpc.launchd.oneshot.0x1000015e.MyApp1[10705]): Layanan keluar dengan kode abnormal: 78

29 Mar 06:40:29 my-MacBook-Air com.apple.xpc.launchd[1] (com.example.MyApp1.4212[11362]): Layanan ditutup dengan kode abnormal: 1

Mencoba sekarang untuk mengkompilasi ulang dengan Mono diinstal.

@LaraSQP Lihatlah bagian "Laporan

"Laporan Kerusakan" kosong.

BTW, saya sudah menginstal mono 6.8 dan saya tidak melihat masalah yang sama ..

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

Satu hal yang perlu dipertimbangkan, adalah jika Anda memodifikasi Info.plist dengan cara tertentu (dari salah satu masalah Anda yang lain), apakah itu _perlu_ hanya LF, UTF-8 _tanpa BOM_, dan bukan CRLF. Ini akan menganggap itu rusak sebaliknya.

Info.plist telah diubah oleh npp.

Saya telah menginstal Mono di mesin dev saya tetapi kompilasi ulang tidak menambahkan Mono ke bundel. Apa yang saya lewatkan?

Dalam mode Rilis ia melakukannya secara default. Jika tidak, setel <MacBundleMono> menjadi true di csproj.

Lihat BundleMono.targets dan Mac.targets untuk berbagai properti yang dapat Anda atur.

Saya berharap untuk menambahkan opsi-opsi ini ke properti proyek VS untuk membuatnya lebih mudah di masa depan untuk menemukannya, tetapi sayangnya begitu sedikit waktu (bebas) untuk melakukannya.

Menambahkan <MacBundleMono>True</MacBundleMono> ke csproj tidak melakukannya.

Kecuali ia melakukannya dengan cara yang tidak jelas bagi saya, yaitu.

OKE.

Ternyata folder MonoBundle disertakan dalam aplikasi hanya ketika MacBundleMono diatur ke False .

Juga, Info.plist diubah oleh proses build untuk menyertakan UTF-8 BOM dan CRLF , jadi mereka harus diperbaiki secara manual setelahnya.

Selain itu, Info.plist diubah oleh proses pembuatan untuk menyertakan UTF-8 BOM dan CRLF, jadi setelah itu harus diperbaiki secara manual.

Seharusnya tidak demikian.. bisakah Anda melampirkan file Info.plist yang Anda gunakan (bukan yang dikompilasi).

Ternyata folder MonoBundle disertakan dalam aplikasi hanya ketika MacBundleMono diatur ke False.

Ya, folder MonoBundle tidak berarti mono dibundel.. anehnya.. tidak adanya folder ini berarti mono 'dibundel' dan semuanya termasuk dalam executable asli.

MacBundleMono gagal. Mono tidak termasuk apa pun yang terjadi.

Dan versi Mono apa pun di atas 6.4.0.137 terus membuat aplikasi saya mogok.

Saya akan melihat target build nanti.

Terima kasih atas kesabaran Anda.

Apakah Anda masih mendapatkan peringatan ini saat membangun?

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.

Jika demikian, Anda mungkin perlu memulai ulang atau mengarahkan secara khusus ke tempat mono diinstal menggunakan <MonoPath> .

Bisakah Anda mengirimi saya dmg aplikasi Anda (dengan asumsi Anda bersedia melakukannya?). Saya bisa mencoba mendiagnosisnya lebih lanjut.

Saya tidak mendapatkan peringatan tentang mkbundle jadi saya akan mencoba MonoPath berikutnya.

Terlampir adalah proyek sederhana yang saya gunakan untuk menguji ini dan itu. Itu bahkan tidak dimulai di atas Mono 6.4 di Mac dan tidak ada laporan kerusakan di Console.app

MacFileTest.zip

Saya telah menambahkan Mono ke environment variables , jadi mkbundle dapat diakses tanpa masalah. MonoPath bukan masalah di sini.

Bahkan, saya dapat menjalankan mkbundle secara manual melalui...

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

... yang tampaknya berhasil kecuali bahwa itu tidak akan berjalan di Mac.

Karena tidak ada referensi ke mkbundle dalam proyek saya (di atas), jelas saya kehilangan banyak hal.

Sepertinya posting terakhir saya tidak berhasil, atau saya tidak dapat menemukannya, atau entah bagaimana dihapus.

Pertama, menggunakan netcoreapp3.1 memang memperbaiki masalah. Terima kasih banyak.

Saya menghapus Mono dan semua aplikasi sekarang berjalan di net core . Saya sedikit terkejut karena perintah dotnet di Terminal bersendawa:

zsh: perintah tidak ditemukan: dotnet

Kira satu hal tidak ada hubungannya dengan yang lain (?).

Masih ada dua masalah kecil yang mungkin ingin Anda ketahui:

  1. Proses pembuatan selalu menyertakan file .pdb di dalam folder MacOS dari bundel.

  2. Proses pembuatan selalu memodifikasi Info.plist untuk menyertakan kunci CFBundleExecutable , menduplikasi kunci yang sudah ada jika ada. Ini menghasilkan BOM dan CRLF untuk disertakan meskipun tidak ada dalam Info.plist dalam proyek.

Solusi kedua masalah ini adalah file batch sederhana untuk menghapus 1 dan mengganti 2, yang sayangnya harus dijalankan secara manual karena tidak dapat ditambahkan ke post-build events karena meskipun post-build masih berjalan terlalu dini , sejauh yang saya tahu.

Sekali lagi terima kasih atas kesabaran Anda yang tak terbatas.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat