web-dev-qa-db-ja.com

.NETプラットフォーム標準のプラットフォームは何ですか?

現在、.NET Platform Standardについて学習しようとしていますが、「さまざまなプラットフォーム」の概念についてかなり混乱しています。

私の主張を明確にしようと思います。私が現在.NET Frameworkについて述べていることは、.NETはCLR、BCL、およびCLRを起動して仮想マシンと基盤となるOS間のインターフェースを提供するサポートソフトウェアで大まかに構成されているということです。

したがって、.NET Frameworkを使用してコーディングする場合、BCLから使用しているタイプはフレームワークに付属しており、特定のバージョンに依存するため、実際にはフレームワークの一部のバージョンを対象としています。

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

とにかく、Windows 7、Windows 8、またはWindows 10にフレームワークをインストールしても、フレームワークに対してをコーディングします。

現在、.NETプラットフォーム標準仕様では、次の定義が表示されています。

プラットフォーム-例: .NET Framework 4.5、.NET Framework 4.6、Windows Phone 8.1、MonoTouch、UWPなど。

また、その後、プラットフォームのリストが表示されます。

  • .NET Framework 2.0-4.6
  • ウィンドウズ8
  • Windows Phone 8.1
  • Silverlight 4、5
  • .NET Framework4.5.1のDNX-4.6
  • .NET Core5.0上のDNX

今、これは私を完全に混乱させます。私はいつもそうです:私たちは.NET Frameworkに対してコーディングし、フレームワークは何があってもフレームワークです。

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

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

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

27
user1620696

フレームワークに対してコーディングします。

まあ、確かに。コード内の文字列を操作するときは、常にSystem.Stringを使用します。そして、それは(ほとんど)常にまったく同じ方法とプロパティでまったく同じように動作します。

しかしdisplaying文字列には、実際には無視できない実装の詳細が含まれています。

  • LinuxまたはOSX上のUnixターミナルで表示する場合は、そのようなオペレーティングシステムで実行できるフレームワーク実装であるMonoまたはCoreCLRをターゲットにする必要があります。
  • Windowsストアアプリ(別名WinRT、別名Windows 8、別名UWP)で表示したい場合、それは実際には内部のHSTRINGであり、心配する必要のない非常によく隠された詳細です。ただし、Windows.UI.Xaml.Controls.TextBlockなどのUIガジェットが必要です。これは、WinRTに非常に固有のクラスです。
  • ブラウザで表示する場合は、ASP.NETまたはSilverlightをターゲットにする必要があります。これらは、Webサーバー上で実行するように、またはブラウザのアドインとして実行するように最適化されたフレームワークホストです。
  • スマートフォンのような小さなリチウムイオンバッテリーを搭載したデバイスでそれを表示したい場合、必然的に、できるだけ少ない電力を使用するように最適化されたフレームワークバージョンを処理する必要があります。それdoesあなたが書かなければならないコードに影響を与えます、100ワットを燃やすコードと8時間小さなバッテリーを生き続けるコードの間には大きな違いがあります。 async/awaitを使用する必要性を除いて、直接見ることのできるものは何もありませんが、ランタイムに非常に大きな影響を与えたものは確かです。 XamarinまたはWinRTをターゲットにする必要があります。
  • anyオペレーティングシステムで表示する場合は、EXEでCLR仮想マシンを起動するために.NETがWindowsで使用するようなトリックを使用しないフレームワークバージョンをターゲットにする必要があります。 JavaまたはPythonで記述されたプログラムにJava.exeまたはpython.exeを使用するのと同じように、dnx.exeが必要です。

これらの実装の詳細が問題にならないのであれば、すばらしいでしょう。しかし、実際の動作方法ではありません。NETが急増し、ますます多くのデバイスやオペレーティングシステムで利用できるようになると、必然的に複雑になります。目的のターゲットを早期に選択することが重要です。

7
Hans Passant

今、これは私を完全に混乱させます。私はいつもそうです:私たちは.NET Frameworkに対してコーディングし、フレームワークは何があってもフレームワークです。

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

これらのフレームワークは、実際には非常に小さな共通のライブラリセットを実装していますが、対象のプラットフォームを処理するための特定のライブラリも実装しています。 I.E.完全な.NETフレームワークでIIS)でホストされているWebサーバーを管理するためのライブラリ、またはWindows Phone8.1フレームワークで携帯電話を処理するための関数。

。NET標準がPCLになる前

「ポータブルクラスライブラリ」の略であるPCLと呼ばれる回避策がありました。 2つ以上の.NETフレームワークでメソッド/アセンブリの小さな共通サブセットのみを使用することにより、異なるフレームワークを対象とするプロジェクトに含めることができるライブラリを開発できます。たとえば、PCLプロファイル37は、ライブラリを.NET Framework 4、Silverlight 5、およびWindows 8プロジェクトで使用できるようにすることを意味します。

PCLプロファイルとその互換性のリストについては、こちらをご覧ください(網羅的かどうかはわかりません): http://danrigby.com/2014/05/14/supported-pcl-profiles- xamarin-for-visual-studio-2 /

。NET標準についてはどうですか?

.NET Standardの目標は、これを簡素化してPCLを取り除くことです。大まかに言って、.NET標準はすべての.NETフレームワークによって実装されるコントラクト(クラスとメソッドのセット)を定義しています。 .NET Standardを対象とするライブラリを開発する場合は、すべての.NETFrameworkで実行できることを確認してください。それはその背後にある基本的な考え方/目標です(少し微妙ですが)。

正確な互換性については、これをご覧ください: https://blogs.msdn.Microsoft.com/dotnet/2016/09/26/introducing-net-standard/#user-content-whats-new-in -net-standard-2

互換性の表を見ると、.NET Framework4.6.3および.NETCore 1.0アプリケーションで、.NET Standard 1.6を対象とするライブラリをそのまま使用できる(再コンパイルする必要がない)ことがわかります。

言い換えると、。NET Framework4.6.3と.NETCore 1.0はどちらも.NETStandard 1.6コントラクトを実装していると言えます:そのクラスとメソッド。

DLLをWindows Phone 8.1プロジェクトで使用できるようにしたい場合は、.NET Standard 1.6よりも少ない機能を提供する.NET Standard 1.2(System.Netなし)をターゲットにする必要があります。 。たとえばソケット)。

.NET Standardの各バージョンで使用可能な名前空間のリストについては、ここを参照してください 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

5
Pierre Murasso

.NET Frameworkだけでなく、多くのフレームワーク(.NET Framework、WinRT、UWP、Silverlight、.NET Core、Windows Phone、Mono、Micro Framework、および古いCompact Framework)があります。

新しい方法は、このフレームワークの1つ以上をサポートするプラットフォーム標準に対してプログラミングすることです。プラットフォーム標準は、1つ以上のフレームワークに一致するAPIを定義します。これは、アプリケーションがプラットフォーム標準1.1をサポートしている場合、ほぼすべてのフレームワークをサポートすることを意味します。プラットフォーム標準1.4は、.NET Framework4.6.xおよび.NETCoreのみをサポートします。

このドキュメントをご覧ください: https://github.com/dotnet/corefx/blob/master/Documentation/architecture/net-platform-standard.md

5
Juergen Gutsch