In this particular case I need to run .complicated NET application for Linux. By complicated i mean - that project was developed for 3 years and i don't want to write it again in java or something else and develop and support both, .NET and Java version later.
Application is generating mouse and keyboard events (by winapi/dll import) and uses serial port. I have also few timers for delays - for serial port communication (10-20ms, i dont need big precision here).
The rest is just a lot of simple code, nothing special, no weird controls, no directx etc.
What should i expect? Will this work?
If some part of code will fail - i can change it a little, make network connection between .net app and mini-application on linux that i can write for sending mouse and keyboard events, or RS232 communication.
Additionally i want to ask about Wine and .NET in general:
How to write .NET applications that should run on Linux/Wine/Mono?
- which version of framework? (1.x, 2.0 or can i use 3.5?)
- what should i avoid (imports from windows dll? timers?)
Edit/moved from comment:
I saw mono few years ago, but it was terrible. Now i see it growed up, supports LINQ, Threading and other complicated features. In addition now help looks really serious. Im not accepting answer yet, because i see that people still posting very useful links. If this question gets many +1 i will rewrite it and maybe this will help others.
I hope someone here have some practical experience with .NET on linux here...
Have you read about Mono.NET on http://www.mono-project.com?
It allows you to write .NET apps for Linux with minor differences over the Microsoft implementation.
I don't think wine will cope with any of the .NET components.
Just read the documentation before and you have a go.
PS: This also gives you the compatibility list between mono and .NET. http://www.mono-project.com/Compatibility and MoMA(mono migration analyzer) is a tool that will scan any .NET app already created to see if its compatible to deploy on linux.
In this post i shortened and combined all information i learned from others in this thread.
Open source impementation of .NET for Linux is called Mono.
Compatibility is well documented (see links below). Mono supports LINQ, threading and some other complicated features.
It even supports InteropServices. Its possible to use DllImport on linux library (!), like libc.so
for example.
Mono can supports Android and iOS (they are Linux based, right?)
There is a tool for Mono compatibility analysis called MoMA (Mono Migration Analyzer)
The Mono Migration Analyzer (MoMA) tool helps you identify issues you
may have when porting your .Net application to Mono. It helps pinpoint
platform specific calls (P/Invoke) and areas that are not yet
supported by the Mono project.
Useful links:
Mono - home page
Mono - page with documentation
Mono - compatibility page
MoMA - Mono Migration Analysis page
We have a couple of .net applications that run on Windows or Linux with Mono.
You can develop in VisualStudio if you want, it is not necessary to use the Mono development environment. Only the runtime mono libraries are required in order to run .net applications on Linux.
We use net 2.0 target to compile these apps in VisualStudio, because mono is nearly 100% compatible with .net 2.0. Mono also implements APIS from later .net versions, but not all and not as complete. If you use features of newer versions than 2.0, you should check if these are supported or use the Mono compatibility analysis tool. You can also use Mono develop instead of Visual Studio, my predecessor was doing that; the result is pretty much the same, and I prefer to use Visual Studio instead.
We didn't find any major trouble, and the apps are relatively complex, heavily multithreaded, async I/O, WinForms, sockets, serial ports, etc.
Some app used .net libraries that are not available in MS .net, but all these can be installed on Windows as well so that there is no problem to run these apps in Windows.
Hope that helps,
You can develop C# applications on linux with .NET Core: https://www.microsoft.com/net/core
After you install it, type dotnet new
in your terminal to get a list of application templates which can be generated for you to start.
As of .NET Core 2.0 today, this is the list:
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
The current latest version is 2.0.