2016-02-16 13 views
28

現在、.NET Platform Standardについて学びたいと思っています。「さまざまなプラットフォーム」の考え方についてかなり混乱しています。.NET Platform Standardのプラットフォームは何ですか?

私は明確な点を明らかにするつもりです。私が現在.NET Frameworkについて知っていることは、.NETがCLR、BCL、およびCLRを起動し、仮想マシンと基礎となるOSの間のインターフェイスを提供するためのサポートソフトウェアで構成されていることです。

.NET Frameworkを使用してコードを作成すると、BCLから使用しているタイプにフレームワークが付属しているため、特定のバージョンに依存するため、実際にはフレームワークのいくつかのバージョンをターゲットにしています。

.NETコアは、私が理解したところとはかなり異なっています。それはすべてのように一緒に詰め込まれていません。私たちには、ILを実行する軽量VMであるCoreCLR、NuGetパッケージとして適切に編成されたライブラリであるCoreFX、CoreCLRを起動したり、CoreCLRとのインタフェースなど、サポートするものを提供していたDNX/DNVM/OS。

とにかく、Windows 7、Windows 8またはWindows 10にフレームワークをインストールしても、フレームに対してをコードします。 - 例えば

プラットフォーム:

は今、.NETプラットフォーム標準仕様上、私たちは以下の定義を参照してください4.6 - .NET Frameworkの4.5、.NET Frameworkの4.6、Windows Phoneの8.1などMonoTouchで、UWP、

はまた、我々は

  • の.NET Framework 2.0が含まれてプラットフォームのリスト、後に見ます
  • のWindows 8
  • のWindows Phone 8.1
  • のSilverlight 4、5
  • の.NET Framework 4.5.1のDNX - 4.6
  • DNX on .NETコア5.0

これで完全に私を混乱させます。私はいつも考えています:.NET Frameworkに対してコード化しています。フレームワークは何であれ、フレームワークです。

しかし、ここでは、.NETフレームワークを含むプラットフォームがあります。多くのプラットフォームのうちの1つです。たとえばWindows 8がありますが、Windows 8で.NETを実行しているのは他のOSで.NETを実行しているのと同じことではありません。なぜそれは.NET Framework 2.0 - 4.6プラットフォームとは別ですか?

特定のプラットフォームとしてDNXもあります。これは私には不思議に思う:プラットフォームは、仮想マシンを起動し、OSにインターフェイスを提供することに関連する「サポートするもの」ですか?または、プラットフォームに仮想マシンが含まれていますか?

とにかく、わかりましたが、私はかなり混乱しています。実際にこれらのプラットフォームは何ですか、そしてこれが.NET Frameworkの現在の理解とどのように関係していますか?また、なぜ.NET Framework 2.0 - 4.6が個別に記述されているのですか? すべてではありませんここに記載されている.NET Frameworkの一部のバージョン.Net Core?

+0

の各バージョンで利用可能な名前空間のリストについては、こちらを参照してくださいなし*「仮想マシン」*は、.NETではありません。 – IInspectable

+3

@IInspectable http://blogs.msdn.com/b/brada/archive/2005/01/12/351958.aspx "結論は、CLRとJVMが同じクラスにあるということです。ソフトウェア「仮想マシン」「実行エンジン」は、あなたの視点によって異なります。 – Rob

+2

私はいつもCLRを一種の仮想マシンと考えました。アプリケーションが動作するサンドボックスとして機能するソフトウェア。このVMにILのバイトコードを渡し、付属のJITコンパイラがネイティブコードを作成し、その特別なサンドボックスで実行します。私はCLRを詳細に研究したことはありませんが、GitHubのドキュメントでは、これを「さまざまなプログラミング言語をサポートするように設計された完全なハイレベル仮想マシン」と記述しています。これは私の大雑把な理解が合理的であったと信じさせました – user1620696

答えて

5

多くのフレームワーク(.NET Framework、WinRT、UWP、Silverlight、。.NET Core、Windows Phone、Mono、Micro Framework、旧Compact Framework)だけでなく、

新しい方法は、このフレームワークの1つ以上をサポートするプラットフォーム標準に対してプログラムすることです。プラットフォーム標準は、1つまたは複数のフレームワークに一致するAPIを定義します。つまり、アプリケーションがプラットフォーム標準1.1をサポートしている場合は、ほぼすべてのフレームワークをサポートするでしょう。フレームワークに対するhttps://github.com/dotnet/corefx/blob/master/Documentation/architecture/net-platform-standard.md

6

我々コード:プラットフォーム標準1.4のみ

この文書を見てください、.NET Frameworkの4.6.xおよびそれ.NETのコアをサポートします。

コード内の文字列を操作するときは、常にSystem.Stringを使用します。そして、(ほぼ)常に同じ方法と性質で正確に同じように動作します。

しかし文字列はあなたが本当に無視できないという実装の詳細持ってい表示:

  • をLinuxまたはOSX上のUnixのターミナルでそれを表示したい場合、あなたはモノラルまたはCoreCLRをターゲットにする必要があります、そのようなオペレーティングシステムで実行できるフレームワークの実装です。
  • Windowsストアアプリ(WinRT、別名Windows 8、別名UWP)に表示する場合は、実際にはフードの下にあるHSTRINGで、気にする必要のない非常に隠れたディテールです。しかし、Windows.UI.Xaml.Controls.TextBlockのようなUIガジェットが必要なのは、WinRTに非常に特有のクラスです。
  • ブラウザに表示する場合は、ASP.NETまたはSilverlightのフレームワークをターゲットにする必要がありますWebサーバー上で実行するように最適化されたホスト、またはブラウザーのアドインとして使用されます。
  • 携帯電話のような小型のリチウムイオン電池を搭載したデバイスに表示したい場合は、できるだけ電力を消費しないように最適化されたフレームワークバージョンに対処する必要があります。そのが書かなければならないコードに影響を及ぼしますが、100ワットを焼くコードと8時間小さな電池を保つコードとの間には大きな違いがあります。あなたが直接見ることはできませんが、asyncを使用する必要性を超えて/たくさん待っていますが、確かにランタイムに非常に重大な影響を与えるものです。ターゲティングXamarinまたはWinRTが必要です。
  • に表示する場合は、オペレーティングシステムの場合、.NETがWindowsで使用する種類のトリックを使用しないフレームワークバージョンをターゲットにして、EXEでCLR仮想マシンを起動させる必要があります。これには、JavaやPythonで書かれたプログラムにjava.exeやpython.exeを使うのと同じように、dnx.exeが必要です。

これらの実装の詳細が重要でない場合は美しいでしょう。 .NETはますます普及し、ますます多くのデバイスやオペレーティングシステムで利用できるようになっているため、実際には動作しません。必然的に複雑になります。あなたの意図する目標を早期に選択してください、それは重要です。

+0

@HansPassantのお返事ありがとうございます。だから、これらのプラットフォームは、.NETコアを導入したドキュメントに登場したものですか?各プラットフォームは、基本ライブラリセット(BCLなど)とランタイム環境を起動し、OSとのインタフェースをサポートするソフトウェアとともに、ランタイム環境(CLR、Mono、CoreCLR)で構成されていますか?その場合、.NET Framework 2.0 - 4.6以降には特定のプラットフォームがあります。しかし、例えば、ストアアプリを開発するためには、ライブラリの新しい基本セットと新しいサポートスタッフが追加された新しいランタイムが構築されました。 – user1620696

+0

私は意図的にその図を掲示することを避け、実際には役に立たない。最下層は最も重要ですが、.NETはその上を走らなければならず、それは見た目とそれができることに影響します。ストアアプリ(WinRT)をサポートするためのCLRの変更は、実際にはかなり控えめです。実際に変更されたのはOSインターフェイスで、OSXとiOSとは異なっています。マイクロソフトのマーケティング戦略は、プラットフォームを十分に理解していなければ、それを見ているうちに邪魔になりつつあります。 –

+0

その場合、プラットフォーム間の主な違いは、デフォルトで含まれているライブラリですか?したがって、.NET Frameworkには基本クラスライブラリがありますが、ストアアプリケーションにはデフォルトで別のライブラリセットが含まれていますか?それ以外にも、私が信じるCLRの違いもあります。そして、考えられるのは、フレームワークを実行するさまざまな環境(ブラウザ、電話、デスクトップなど)ごとにフレームワークを最適化することです。 – user1620696

5

これで完全に私を混乱させます。私はいつも考えています:.NET Frameworkに対してコード化しています。フレームワークは何であれ、フレームワークです。

いいえ、実際には複数の.NETフレームワークまたはプラットフォームが呼び出されます。 .NET Standard以前は、単一のフレームワーク(WebアプリケーションやWindowsサービスを開発する場合、現在はバージョン4.6.3で完全なもの)をターゲットにしていました。フレームワークをターゲットとするDLLは、別のDLLと互換性がありません。 I.完全な.NETフレームワーク用に開発されたDLLは、Windows Phone 8.1では実行できません。

これらのフレームワークは、実際には非常に小さなライブラリセットを実装していますが、それらが意図しているプラ​​ットフォームに対応するための特定のライブラリも実装しています。 I.フル.NETフレームワークでIIS上でホストされているWebサーバーを管理するためのライブラリ、またはWindows Phone 8.1フレームワーク内の携帯電話を処理するための関数などがあります。

.NET標準PCL

た前PCLと呼ばれる問題を回避するには、「ポータブルクラスライブラリ」の略がありました。 2つ以上の.NETフレームワークでメソッド/アセンブリの小さな共通部分集合のみを使用することによって、異なるフレームワークを対象とするプロジェクトに含めることができるライブラリを開発することができます。たとえば、PCLプロファイル37は、.NET Framework 4、Silverlight 5、およびWindows 8プロジェクトでライブラリを使用できるようにすることを意味します。 .NET標準については今何http://danrigby.com/2014/05/14/supported-pcl-profiles-xamarin-for-visual-studio-2/

は、PCLのプロファイルとその互換性のリスト(それは徹底的だ場合、私は知らない)のために、このを見てください?

.NET Standardの目標は、これを単純化してPCLを取り除くことです。概して、.NET Standardでは、すべての.NETフレームワークによって実装される契約(クラスとメソッドのセット)が定義されています。 .NET標準をターゲットとするライブラリを開発する場合、すべての.NETフレームワークで実行できることは確かです。それはその背後にある基本的なアイデア/目標です(ちょっと微妙ですが)。

は、正確な互換性のために、このを見てください:https://blogs.msdn.microsoft.com/dotnet/2016/09/26/introducing-net-standard/#user-content-whats-new-in-net-standard-20

あなたは適合表を見れば、あなたは(それを再コンパイルする必要は)ありませんよう.NET標準1.6をターゲットライブラリが使用可能であることがわかります.NET Framework 4.6.3および.NET Core 1.0アプリケーションで使用できます。

つまり、.NET Framework 4.6.3と.NET Core 1.0の両方とも.NET Standard 1.6コントラクト(そのクラスとメソッド)を実装していると言えます。

Windows Phone 8.1プロジェクトでもDLLを使用できるようにするには、.NET Standard 1.2よりも機能が少ない.NET Standard 1.2をターゲットにする必要があります(例:System.Net.Socketsなし) 。

は、.NET標準https://github.com/dotnet/corefx/blob/master/Documentation/architecture/net-platform-standard.md#user-content-list-of-net-corefx-apis-and-their-associated-net-platform-standard-version

関連する問題