web-dev-qa-db-ja.com

Linux / Wine / Monoで実行するために、C#.NETでプログラムを作成する方法は?

この特定のケースでは、Linux用に.complicated NETアプリケーションを実行する必要があります。複雑です。つまり、そのプロジェクトは3年間開発されたものであり、Javaまたは他の何か、.NETとJava以降のバージョン)の両方を開発およびサポートします。

アプリケーションが(winapi/dllインポートによって)マウスおよびキーボードイベントを生成し、シリアルポートを使用している。遅延用のタイマーもいくつかあります-シリアルポート通信用です(10-20ms、ここでは大きな精度は必要ありません)。

残りは、単純なコードがたくさんあり、特別なものはなく、奇妙なコントロールはなく、directxもありません。

私は何を期待すべきですか?これは機能しますか?

コードの一部が失敗する場合-少し変更できます。Linuxで.netアプリとミニアプリケーションをネットワーク接続して、マウスとキーボードのイベントを送信したり、RS232通信を作成したりできます。

さらに、Wineと.NET全般について質問したい:

Linux/Wine/Monoで実行する必要がある.NETアプリケーションを作成する方法は?

  • フレームワークのどのバージョンですか? (1.x、2.0または3.5を使用できますか?)
  • 何を避けるべきですか(Windows DLLからのインポート?タイマー?)

編集/コメントから移動:

私は数年前にモノを見ましたが、それはひどいものでした。今では成長しており、LINQ、スレッディング、その他の複雑な機能をサポートしています。さらに、ヘルプは本当に深刻に見えます。私はまだ答えを受け入れていません。私は人々がまだ非常に便利なリンクを投稿しているのを見ているからです。この質問に多くの+1が出た場合、私はそれを書き直し、多分これは他の人を助けるでしょう。

ここの誰かがここでLinux上の.NETの実用的な経験を持っていることを願っています...

21
Kamil

http://www.mono-project.com でMono.NETについて読みましたか?

これにより、Microsoftの実装とは少し異なるLinux向けの.NETアプリを作成できます。 wineが.NETコンポーネントのどれにも対応しないと思います。

前にドキュメントを読んでください。

PS:これは、monoと.NET間の互換性リストも提供します。 http://www.mono-project.com/Compatibility および MoMA(mono移行アナライザー) は、作成済みの.NETアプリをスキャンして、 Linuxでの展開に互換性があります。

19
Freeman

この投稿では、このスレッドで他の人から学んだすべての情報を短くしてまとめました。

  1. Linux用の.NETのオープンソース実装はMonoと呼ばれます。

  2. 互換性は十分に文書化されています(以下のリンクを参照)。 Monoは、LINQ、スレッディング、その他の複雑な機能をサポートしています。

  3. InteropServicesもサポートします。 LinuxライブラリでのDllImport(!)を使用することは可能です。たとえば、libc.soなどです。

  4. MonoはAndroidおよびiOSをサポートできます(これらはLinuxベースです)。

  5. Mono互換性分析用ツール MoMA(Mono Migration Analyzer)と呼ばれます

Mono Migration Analyzer(MoMA)ツールは、.NetアプリケーションをMonoに移植するときに発生する可能性のある問題を特定するのに役立ちます。プラットフォーム固有の呼び出し(P/Invoke)と、Monoプロジェクトでまだサポートされていない領域を特定するのに役立ちます。

役立つリンク:

モノ-ホームページ

Mono-ドキュメントのあるページ

Mono-互換性ページ

MoMA-Mono Migration Analysisページ

5
Kamil

WindowsやLinuxでMonoを実行する.netアプリケーションがいくつかあります。

必要に応じてVisualStudioで開発できます。Mono開発環境を使用する必要はありません。 Linuxで.netアプリケーションを実行するには、ランタイムモノライブラリのみが必要です。

モノは.net 2.0とほぼ100%互換性があるため、これらのアプリをVisualStudioでコンパイルするには、net 2.0ターゲットを使用します。 Monoは後の.netバージョンのAPISも実装しますが、すべてではなく、完全ではありません。 2.0より新しいバージョンの機能を使用する場合は、それらがサポートされているかどうかを確認するか、Mono互換性分析ツールを使用する必要があります。 Visual Studioの代わりにMono開発を使用することもできます。私の前任者はそれを行っていました。結果はほとんど同じで、代わりにVisual Studioを使用することを好みます。

大きな問題は見つかりませんでした。アプリは比較的複雑で、非常にマルチスレッド化されており、非同期I/O、WinForms、ソケット、シリアルポートなどです。

一部のアプリは、MS .netで利用できない.netライブラリを使用しましたが、これらすべてをWindowsにインストールすることもできるため、これらのアプリをWindowsで実行しても問題はありません。

それが役に立てば幸い

3
JM Catena

.NET Coreを使用してLinuxでC#アプリケーションを開発できます: https://www.Microsoft.com/net/core

インストールした後、dotnet newターミナルで、開始するために生成できるアプリケーションテンプレートのリストを取得します。

今日の.NET Core 2.0の時点で、これがリストです。

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        

現在の最新バージョンは2.0です。

2
Tadej