2012-10-27 19 views
19

W tym konkretnym przypadku muszę uruchomić .komplikowaną aplikację NET dla systemu Linux. Przez skomplikowane oznacza - ten projekt został opracowany przez 3 lata i nie chcę pisać go ponownie w java lub coś innego i rozwijać i wspierać zarówno wersję .NET i Java później.Jak pisać programy w C# .NET, aby uruchomić je w systemie Linux/Wine/Mono?

Aplikacja generuje zdarzenia myszy i klawiatury (przez import winapi/dll) i używa portu szeregowego. Mam też kilka minut na opóźnienia - do komunikacji z portem szeregowym (10-20ms, nie potrzebuję tu dużej precyzji).

Reszta jest po prostu dużo prostego kodu, nic specjalnego, bez żadnych dziwnych kontrole, directx itp

Czego mam się spodziewać? Czy to zadziała?

Jeśli jakaś część kodu się nie powiedzie - mogę ją nieco zmienić, nawiązać połączenie sieciowe między aplikacją .net i mini-aplikacją na Linuksie, którą mogę zapisać do wysyłania zdarzeń myszy i klawiatury lub komunikacji RS232.

Dodatkowo chcę zapytać o winie i .NET ogólnie:

Jak napisać aplikacji .NET, który powinien działać na Linux/wino/Mono?

  • której wersji framework? (1.x, 2.0 lub 3.5 można używać?)
  • co należy unikać

Edycja/przeniesiony z komentarzem (import z dll okien liczniki?):

widziałem mono kilka lat temu, ale było strasznie. Teraz widzę, jak wyrosło, obsługuje LINQ, wątki i inne skomplikowane funkcje. Poza tym teraz pomoc wygląda naprawdę poważnie. Nie akceptuję jeszcze odpowiedzi, ponieważ widzę, że ludzie nadal publikują bardzo przydatne linki. Jeśli to pytanie otrzyma wiele +1, przepisuję je i być może to pomoże innym.

Mam nadzieję, że ktoś tutaj ma jakieś praktyczne doświadczenia z .NET na linux tutaj ...

+1

[Mono] (http://www.mono-project.com/Main_Page) to open sourceowa implementacja platformy .NET Microsoftu, którą prawdopodobnie można do tego wykorzystać. –

+0

Dzięki. Widziałem to gdzieś, ale zapomniałem. W każdym razie nadal potrzebuję praktycznych informacji od kogoś, kto opracował coś, co działa w Mono. – Kamil

+1

W przypadku niepokojącej kompatybilności dostępny jest [Mono Migration Analyzer] (http://www.mono-project.com/MoMA), który może pokazywać potencjalne problemy. –

Odpowiedz

17

Czytał pan o Mono.NET na http://www.mono-project.com?

Umożliwia pisanie aplikacji .NET dla systemu Linux z niewielkimi różnicami w implementacji Microsoft. Nie sądzę, że wino poradzi sobie z którymkolwiek z komponentów .NET.

Wystarczy zapoznać się z dokumentacją przed rozpoczęciem pracy.

PS: To również daje listę kompatybilności między mono i .NET. http://www.mono-project.com/Compatibility i MoMA(mono migration analyzer) to narzędzie, które skanuje każdą już utworzoną aplikację .NET, aby sprawdzić, czy jest ona zgodna z wdrożeniem w systemie Linux.

+1

Dzięki. To chyba dość dla mnie, ale nie mogę się doczekać z akceptacją. Widzę, że ludzie wciąż publikują przydatne linki. – Kamil

+1

tak, najlepsze jest to, że jest jeszcze dalej przenoszony, więc możesz go użyć do napisania kodu dla Androida i ios. – Freeman

4

W tym poście skróciłem i połączono wszystkie informacje, których nauczyłem się od innych w tym wątku.

  1. Open source impementation .NET dla Linuksa nazywa Mono.

  2. Kompatybilność jest dobrze udokumentowana (patrz linki poniżej). Mono obsługuje LINQ, wątki i inne skomplikowane funkcje.

  3. Obsługuje nawet usługi InteropServices. Możliwe jest użycie na przykład DllImport na bibliotece linuxowej (!), Na przykład libc.so.

  4. Mono można obsługuje Android i iOS (są to oparty na Linuksie, prawda?)

  5. Jest narzędziem Mono analizy zgodności zwanego MoMA (Mono Migration Analyzer)

Narzędzie MoMA (Mono Migration Analyzer) pomaga zidentyfikować problemy, które możesz mieć podczas przenoszenia aplikacji .Net do trybu Mono. Pomaga to zidentyfikować połączenia specyficzne dla platformy (P/Invoke) i obszary, które nie są jeszcze obsługiwane obsługiwane przez projekt Mono.

Przydatne linki:

Mono - home page

Mono - page with documentation

Mono - compatibility page

MoMA - Mono Migration Analysis page

3

Mamy kilka .ne Aplikacje działające w systemie Windows lub Linux z Mono.

Możesz rozwijać się w VisualStudio, jeśli chcesz, nie jest konieczne korzystanie ze środowiska programistycznego Mono. Do uruchomienia aplikacji .net w systemie Linux wymagane są tylko biblioteki mono środowiska wykonawczego.

Używamy celu netto 2.0, aby skompilować te aplikacje w VisualStudio, ponieważ mono jest niemal w 100% kompatybilne z .net 2.0. Mono implementuje także APIS z późniejszych wersji .net, ale nie wszystkie i nie są kompletne. Jeśli korzystasz z funkcji nowszych wersji niż wersja 2.0, powinieneś sprawdzić, czy są one obsługiwane, lub użyć narzędzia do analizy zgodności Mono. Możesz także użyć Mono rozwijać zamiast Visual Studio, robił to mój poprzednik; wynik jest prawie taki sam i wolę zamiast tego używać Visual Studio.

Nie znaleźliśmy żadnych poważnych problemów, a aplikacje są stosunkowo złożone, mocno wielowątkowy, asynchroniczne I/O, WinForms, gniazda, porty szeregowe, itp

Niektóre aplikacja używana .net bibliotek, które nie są dostępne w MS .net, ale wszystkie te mogą być zainstalowane również na Windowsie, więc nie ma problemu z uruchomieniem tych aplikacji w systemie Windows.

nadzieję, że pomoże,

1

Można rozwijać C# aplikacji na Linux z .NET Rdzeń: https://www.microsoft.com/net/core

Po zakończeniu instalacji typu dotnet new w terminalu, aby uzyskać listę szablonów aplikacji, które mogą być generowane żebyś zaczął.

Począwszy od .NET 2.0 Rdzeń dzisiaj, to jest lista:

Templates           Short Name  Language   Tags    
-------------------------------------------------------------------------------------------------------- 
Console Application        console   [C#], F#, VB  Common/Console  
Class library          classlib   [C#], F#, VB  Common/Library  
Unit Test Project         mstest   [C#], F#, VB  Test/MSTest   
xUnit Test Project        xunit   [C#], F#, VB  Test/xUnit   
ASP.NET Core Empty        web    [C#], F#   Web/Empty   
ASP.NET Core Web App (Model-View-Controller)  mvc    [C#], F#   Web/MVC    
ASP.NET Core Web App        razor   [C#]    Web/MVC/Razor Pages 
ASP.NET Core with Angular       angular   [C#]    Web/MVC/SPA   
ASP.NET Core with React.js      react   [C#]    Web/MVC/SPA   
ASP.NET Core with React.js and Redux    reactredux  [C#]    Web/MVC/SPA   
ASP.NET Core Web API        webapi   [C#], F#   Web/WebAPI   
global.json file         globaljson       Config    
Nuget Config          nugetconfig      Config    
Web Config          webconfig       Config    
Solution File          sln        Solution   
Razor Page          page        Web/ASP.NET   
MVC ViewImports         viewimports      Web/ASP.NET   
MVC ViewStart          viewstart       Web/ASP.NET   

Obecna najnowsza wersja to 2.0.