Чи можливо запустити .NET-код на Pi за допомогою моно?


41

Чи можливо (і можливо) запустити .NET-програми на Raspberry Pi з Mono ?

Якщо так, то як добре вони бігають? Чи є базовим графічним інтерфейсом користування, чи низька продуктивність реально обмежує його в програмах командного рядка?


Можливо, Portable.NET - це також варіант.
Der Hochstapler

Відповіді:


25

Є питання StackOverflow, досить схожий на це, Mono on Raspberry Pi . Однак за допомогою власних досліджень мені не вдалося знайти нічого конкретного для .NET, а скоріше просто C #.

Ви можете встановити час виконання за допомогою APT на дистрибутиві Debian, виконавши:

$ sudo apt-get install mono-runtime

Ви також можете (якщо у вас є такий графічний інтерфейс, як LXDE), встановити повільний Mono IDE за допомогою:

$ sudo apt-get install monodevelop

Для Arch Linux ARM вам потрібно встановити час виконання через Pacman , наприклад:

$ sudo pacman -S mono

Моно IDE можна встановити аналогічно:

$ sudo pacman -S monodevelop

1
Що ви маєте на увазі під "швидше просто C #"?
Джон Егертон

@JonEgerton C # - це мова, а .NET - це фреймворк. Ви можете розробити для .NET рамки з C #, але C # може стояти окремо як незалежна мова програмування. Більш довідковий приклад може бути: ви розробляєте для Android з Java, але можете написати програму для настільних ПК з Java. C # не залежить від .NET, але .NET залежить від C #.
Ендрю Ларссон

Привіт вибачте, це не те, що я мав на увазі (я .Net dev !!). Це більше ексклюзивність C #, а не інших мов сімейства .net (vb.net, J # F # тощо). Я ніколи не заглядав у Mono, і не зрозумів, що це тільки C #.
Джон Егертон

5
@ Андрій Це навпаки: .NET не залежить від C # - але C # не залежить від виконання таких як .NET (або Mono), це ніколи на практиці самостійна мова програмування. Крім того, моно - це цілком мова агностик (як це .NET), тому знову ж таки це не залежить від C #.
Конрад Рудольф

1
Не встановлюйте MonoDeveloper на пристрій. Thats waaaay повільно. Просто встановіть мережевий привід за допомогою CIFS та компілюйте на швидкому ПК / MAC, а потім пробний запуск через локальну мережу.
BerggreenDK

8

Всупереч поширеній думці, компільований код VB.NET спрацьовує на Raspberry Pi, принаймні під Debian. apt-get install mono-vbnc, а потім запустіть свій VB exe як аргумент до моно, наприклад, mono yourexe.exe

Я не робив жодних показників ефективності, оскільки не пишу додатків для інтенсивної роботи, але поки здається нормальним.


будь-яка мова .NET компілюється в один і той же IL / Bytecode, тому щойно ви запускаєте компілятор (mono-vbnc або будь-яку іншу мову), ваш VB відсутній, а IL - це те, що використовується в ядрі RUNTIME.
BerggreenDK

6

Код .NET, який використовує бібліотеки .NET Framework, не може працювати на Raspberry Pi, оскільки для запуску потрібна сумісна з ARM версія NETMF або CLR . На сьогодні Microsoft ще не випустила Windows на ARM (WoA). Див. Експеримент 19 для досліджень Microsoft CLR по роботі з ARM.

Однак запуск .NET-коду (без посилання або використання .NET Framework Libraries) можливо за допомогою Mono, оскільки Mono має CLR для пристроїв ARM.

Дивіться також Створення Windows для архітектури процесорів ARM для отримання інформації про Windows в ARM (WoA).


3
Я думаю, що ваше твердження тут неправильне. Можна скопіювати .EXE-файл, скомпільований на ПК, на який посилаються та використовуються .NET рамкові класи (наприклад, клас Socket або клас TcpListener), скопіювати його без змін у RPi та забезпечити його ідеальне виконання на RPi під Mono. Це відбувається тому, що Mono замінює більшість базових класів .NET Framework своєю власною версією, використовуючи абсолютно однакові простори імен, типи та інтерфейси.
dodgy_coder

4

У мене є командний рядок .NET-додаток для роботи з Mono. Додаток в основному робить щось подібне до переадресації портів, приймаючи дані, отримані через послідовний UART та пересилаючи їх через TCP / IP. Він використовує класи SerialPort, TcpListener, TcpClient і Socket .NET, лише незначні зміни, необхідні для коду обробки SerialPort. Я використовую ОС Debian soft float.

Щодо продуктивності, перше, на що я зіткнувся, - це значне уповільнення деякої налагодження / коду відстеження, яке форматувало масив байтів у рядок для цілей ведення журналу. Це було на 50 разів повільніше порівняно з запуском на ПК.

Тому я рекомендую написати деякі тести на продуктивність при перенесенні існуючого коду в RPi.

Для тестування одиниць, NUnit чудово працює на RPi ...

Щоб встановити NUnit:

sudo apt-get install nunit

Бігти:

nunit-console appUnderTest.exe

1
Швидкість - річ відносна. Але PI Raspberry працює на 1000 МГц (модель 2) працює приблизно як Pentium 300 МГц, так що це може пояснити, чому .NET / MONO відчуває себе досить повільно для початку.
BerggreenDK
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.