[解決済み] .NET Core、.NET Framework、Xamarinの違いとは?
質問
マイクロソフトは現在、.NET Core、.NET Framework、Xamarin(Mono)をファミリーとして持っています。
ここは重なる部分が多いようですね。これらの.NET Platformは何が違うのでしょうか?自分のプロジェクトで、.NET FrameworkやXamarinではなく、.NET Coreを使うことを選択するのはどのような場合でしょうか。
どのように解決するのですか?
ドキュメントによると、次の6つの典型的なシナリオでは、.NET FrameworkやXamarinではなく、.NET Coreを使用する必要があります。 こちら .
1. クロスプラットフォームへのニーズ
Windows、Linux、MacOSといった複数のプラットフォームで動作するアプリケーション(Web/サービス)が目的であれば、ランタイム(CoreCLR)とライブラリがクロスプラットフォームである.NET Coreを使用するのが.NETエコシステムにおける最良の選択であることは明らかであろう。もう1つの選択肢は、Monoプロジェクトを使用することです。
どちらの選択肢もオープンソースですが、.NET Coreはマイクロソフトが直接、公式にサポートしており、今後、大きな投資が行われるでしょう。
Visual Studio IDEは、プロジェクト管理、デバッグ、ソース管理、リファクタリング、Intellisenseを含む豊富な編集機能、テストなど、多くの生産性機能をサポートしています。しかし、Mac、Linux、Windows上のVisual Studio Codeを使用しても、インテリセンスやデバッグを含む豊富な開発機能がサポートされています。Sublime、Emacs、VIなどのサードパーティエディタもうまく機能し、オープンソースのOmnisharpプロジェクトを使ってエディタのインテリセンスを取得することができます。
2. マイクロサービス
複数の独立した、動的に拡張可能な、ステートフルまたはステートレスのマイクロサービスで構成されるマイクロサービス指向のシステムを構築する場合、ここで得られる大きな利点は、マイクロサービスレベルで異なる技術/フレームワーク/言語を使用できることです。そのため、システム内のマイクロ領域ごとに最適なアプローチや技術を使用することができ、非常にパフォーマンスとスケーラビリティの高いマイクロサービスを構築したい場合は、.NET Coreを使用する必要があります。最終的には、.NET Coreと互換性のない.NET Frameworkライブラリを使用する必要がある場合でも問題はなく、そのマイクロサービスを.NET Frameworkで構築し、将来的には.NET Coreで代用できるようになるかもしれません。
使用できるインフラプラットフォームは多岐にわたります。理想を言えば、大規模で複雑なマイクロサービスシステムには、Azure Service Fabricを使うべきでしょう。しかし、ステートレスマイクロサービスの場合は、Azure App ServiceやAzure Functionsのような他の製品も使用することができます。
なお、2016年6月時点では、Azure内のすべてのテクノロジーが.NET Coreに対応しているわけではありませんが、.NET CoreがRTMリリースされた今、Azureの.NET Core対応は飛躍的に増加することでしょう。
3. 最高のパフォーマンスとスケーラブルなシステム
システムが最高のパフォーマンスとスケーラビリティを必要とし、ユーザーの数に関係なく最高の応答性を得ることができる場合、.NET CoreとASP.NET Coreが本当に輝く場所です。同じ量のインフラストラクチャ/ハードウェアでより多くのことができれば、エンドユーザーにとってより豊かな体験が、より低いコストで得られます。
ムーアの法則によるシングルCPUの性能向上はもう通用しません。しかし、システムが成長し、指数関数的に増加する日々の厳しいユーザーのために、より高いスケーラビリティとパフォーマンスが必要になってきています。より効率的に、あらゆる場所を最適化し、マシン、VM、CPUコアのクラスタ全体でより良いスケーリングをする必要があるのです。これはユーザーの満足度の問題だけでなく、コスト/TCOにも大きな違いをもたらす可能性があります。だからこそ、パフォーマンスとスケーラビリティを追求することが重要なのです。
前述のように、システムの小さな部分をマイクロサービスやその他の疎結合のアプローチとして分離することができれば、それぞれの小さな部分/マイクロサービスを独立して進化させることができ、長期的な俊敏性と保守性が向上するだけでなく、必要なことが .NET Core と互換性がない場合は、マイクロサービスレベルで他のテクノロジーを使用できるため、より良いものとなるでしょう。そして最終的にはリファクタリングして、可能な限り.NET Coreに寄せることができるようになるのです。
4. Mac、Linux、Windowsに対応したコマンドラインスタイルの開発。
この方法は、.NET Coreを使用する場合、オプションとなります。もちろん、Visual Studio IDEをフルに使うことも可能です。しかし、軽量なエディタとコマンドラインの多用で開発したい開発者であれば、.NET CoreはCLI向けに設計されています。サポートされているすべてのプラットフォームで利用できるシンプルなコマンドラインツールを提供し、開発者は開発機、ラボ機、実機への最小限のインストールでアプリケーションの構築とテストができます。Visual Studio Codeのようなエディタは、開発体験に同じコマンドラインツールを使用します。また、Visual StudioのようなIDEは、同じCLIツールを使用しますが、リッチなIDEエクスペリエンスの背後にそれらを隠します。開発者は、CLIからエディタ、IDEまで、ツールチェーンと対話したいレベルを選択できるようになりました。
5. アプリケーションレベルごとの.NETバージョンのサイドバイサイドが必要。
.NETの異なるバージョンのフレームワークに依存するアプリケーションをインストールできるようにするには、このドキュメントで以前に説明したように、100%サイドバイサイドを提供する.NET Coreを使用する必要があります。
6. Windows 10 UWP .NETアプリ。
合わせて、こちらもご覧ください。
関連
-
[解決済み】警告。同じ依存アセンブリの異なるバージョン間で競合が見つかりました。
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] .NETでのdecimal, float, doubleの違い?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] C#のconstとreadonlyの違いは何ですか?
-
[解決済み] .NET Coreと.NET Standard Class Libraryのプロジェクトタイプの違いは何ですか?
-
[解決済み] Entity FrameworkとLINQ to SQLの比較
-
[解決済み] .NETにおけるstructとclassの違いは何ですか?
-
[解決済み] Microsoft .NET 4.0 full FrameworkとClient Profileの違いについて
-
[解決済み】.NET Standardと.NET Coreの比較
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] [Solved] ファイル *.mdf をデータベースとしてアタッチできない
-
[解決済み] ServicePointManagerは、*スキームのプロキシをサポートしていません[closed]。
-
[解決済み] データテーブルの並べ替え
-
[解決済み] フレームワークとアーキテクチャの違いは何ですか?[クローズド]
-
[解決済み] asp.netでWebサービスのタイムアウト時間を長くする方法は?
-
[解決済み] VB.NETで線を引く方法
-
[解決済み] LINQ: フィルタリング基準で SingleOrDefault と FirstOrDefault() を使用する場合
-
[解決済み] "SSL/TLSセキュアチャネルの信頼関係を当局と確立できませんでした "の解決方法
-
[解決済み] terminationGracePeriodSeconds not
-
[解決済み] Visual Studioの「Any CPU」ターゲットはどういう意味ですか?