質問: 質問の幅が広すぎるというご指摘を受けました。 また、その後の自身の調査により、少し整理ができましたため質問文を簡潔に書き直します。 LinuxでC#で.NET Frameworkを使ってコンソールアプリケーションを作りたいと思っています。 インストーラも作る予定です。 調べた結果、現在では以下の二択がありました。 monoを使う。 .NET Coreを使う。 どちらを選択するべきか悩んでいます。 それぞれのメリットデメリットを教えていただけると助かります。 .NET Coreを使う場合はWidowsで開発してビルドはLinuxで行うという便利な形が使えるため、.NET Coreが魅力的に感じています。 やりたいことは以下です。 ●XML設定ファイルの読み書き(System.configurationの処理) ●通信関係の処理 ソケットを開いたり、ウェブサーバーを使ったり とくにHTTPパケットを効率よく処理できるといい。 ●PKIの処理 ●テキスト処理、ファイル処理 以上、宜しくお願いします。 念のため、書き直す前の質問文を下に残しておきます。 ここから旧質問の内容 ---------- LinuxでC#で.NET Frameworkを使ってコンソールアプリケーションを作りたいと思っています。 インストーラも作る予定です。 色々調べたのですが、今現在では、 Visual Studio Code Mono(C#のランタイムとコンパイルを可能にする) この二つを入れて開発を行うのが良さそうです。 これ以外におすすめの方法はありますか? また、.NET Frameworkですが、Linuxではどこまでの機能が使えるのでしょうか? WindowsのAPIを呼び出していた機能は当然使えませんよね? いまいちLinuxでの.NET Frameworkが本当に実用的にプロダクト開発に使えるものなのかどうかが理解できていないです。 ●追記 すいません、もう一つお聞きしたいのですが、 開発環境はWindows機のVisual Studioも使えます。 この場合に、Windowsで開発してビルドだけLinuxでやるということは可能でしょうか? monoを入れればできるという回答になるかもしれませんが、 その際に注意する点、VisualStudioで設定するべきことはありますでしょうか? たとえば、Windows固有の関数は呼ばないモードで開発を行うなど。 普通に開発したら、Linux環境では「この関数はmonoにはない」などどエラーが出そうな気がしています。 ■コメントをうけて Linuxで.NETを使いたい理由。 ・WindowsとLinuxのクロスプラットフォームでアプリを作りたい。 ・HTTPサーバーのようなものを作るため、ライトウェイト言語ではなく選択肢はJAVAかC#がいい。 ・JAVAよりも.NETの有識者が多く、かつJAVAは脆弱性対応が頻繁にあるため.NETにしたい。 などがあります。 ですが、現在の状況以下のデメリットがあればJAVAを選択するつもりです。 ・手順が複雑かつ、OSSなどに大きく依存して安定しない。 ・動きが不安定だったり、決定的に使えるメソッドが足りない。 ・今後状況や方向性が大きく変わりそうで、今企業のプロダクトレベルで採用するにはリスクがある。
回答: C#および.NETはWindows / Visual Studioが前提?となっています。 つまり、Windows環境での前提知識、Visual Studio環境での前提知識、.NET Framework環境での前提知識がそれぞれあります。 もちろん質問のような他の環境でも開発・実行は可能で、Hello World程度であればすぐに動作させることもできるとは思います。ですが、インストーラーまで想定されているとのことで、その場合は環境に対する適度な理解が必要に思います。質問の環境の場合、上記に加えてLinuxでの差分、monoでの差分などが生じています。 アプリケーション開発を行っていて問題に当たった際、適切な知識がないと問題解決が困難になることが予想されます。(Linux的でなくWindows的なアプローチが必要だったり、monoコンパイラーのバグだったりと問題に対する原因の切り分けが困難という意味です。) ですので、C#および.NETを扱われるのであれば、まずはWindows / Visual Studio環境で経験を積まれることをお勧めします。