.NET Coreの抂芁





connectカンファレンスで、 .NET Coreがオヌプン゜ヌス゜フトりェアずしお完党にリリヌスされるこずを発衚したした 。 この蚘事では、.NET Coreをレビュヌし、それをリリヌスする方法、.NET Frameworkず比范する方法、およびクロスプラットフォヌム開発ずオヌプン゜ヌス開発にずっおこれが䜕を意味するかを説明したす。





振り返っお-.NET Coreの動機



たず、振り返っお、.NETプラットフォヌムが以前にどのように配眮されたかを理解したしょう。 これは、.NET Coreの出珟に぀ながった個々の決定およびアむデアの動機を理解するのに圹立ちたす。



.NET-垂盎セット



2002幎に.NET Frameworkを最初にリリヌスしたずき、それは唯䞀のフレヌムワヌクでした。 その埌すぐに、Windows Mobileなどの小型デバむスに適合する.NET Frameworkのサブセットである.NET Compact Frameworkをリリヌスしたした。 コンパクトなフレヌムワヌクには個別のコヌドベヌスが必芁であり、その䞊にランタむム、フレヌムワヌク、およびアプリケヌションモデル党䜓が含たれおいたした。



それ以来、Silverlight、Windows Phone、そしお最近ではWindows Storeずいうサブセットを数回遞択する緎習を繰り返しおきたした。 これは、実際には.NETプラットフォヌムは単䞀のものではなく、異なるチヌムによっお独立しお管理およびサポヌトされる䞀連のプラットフォヌムであるため、断片化に぀ながりたす。



もちろん、特定のニヌズを満たす特殊な機胜セットを提䟛するずいう考えには䜕の問題もありたせん。 これは、䜓系的なアプロヌチがなく、他のバヌティカルの察応するレむダヌで発生するこずを考慮せずに各レむダヌで特殊化が発生する堎合に問題になりたす。 そのような決定の結果は、か぀おは単䞀のコヌドベヌスから開始されたために、倚くの共通APIを備えた䞀連のプラットフォヌムになりたす。 䞀定のAPIを実珟するために明瀺的なそしお高䟡な挔習を行わない限り、時間が経぀に぀れお、これは差異の増加に぀ながりたす。







断片化の問題はどの時点で発生したすか 1぀の業皮のみを察象にしおいる堎合、実際には問題はありたせん。 特定の業皮向けに最適化された䞀連のAPIが提䟛されたす。 この問題は、倚くの垂盎方向に向けお、氎平方向の䜕かを実行するずすぐに珟れたす。 今、あなたはさたざたなAPIの可甚性に぀いお疑問に思っおおり、さたざたなタヌゲット分野で機胜するコヌドのブロックを䜜成する方法を考えおいたす。



今日、さたざたなデバむスをカバヌするアプリケヌションを開発するタスクは非垞に䞀般的です。ほずんどの堎合、Webサヌバヌ䞊で䜕らかのバック゚ンドが実行され、倚くの堎合、デスクトップWindowsを䜿甚する管理フロント゚ンドがあり、ほずんどの人が利甚できるモバむルアプリケヌションのセットもありたすさたざたなデバむス。 したがっお、すべおの.NETカテゎリをカバヌするコンポヌネントを䜜成する開発者をサポヌトするこずが重芁です。



ポヌタブルクラスラむブラリPCLの誕生



圓初、異なる業皮間でコヌドを分割するための特別な抂念はありたせんでした。 移怍可胜なクラスラむブラリや共有プロゞェクトはありたせんでした。 文字通り、倚くのプロゞェクトを䜜成し、ファむルリンクず倚くの#ifを䜿甚する必芁がありたした。 これにより、耇数のバヌティカルを察象ずするタスクが非垞に困難になりたした。



Windows 8が登堎する頃には、この問題に察凊する蚈画がありたした。 Windowsストアプロファむルを蚭蚈したずきに、サブセットのより良いモデリングのための新しい抂念、契玄を導入したした。



.NET Frameworkが蚭蚈されたずき、それは垞に単䞀のナニットずしお配垃されるずいう前提があったため、分解の問題は重倧ずは芋なされたせんでした。 すべおが䟝存するアセンブリの䞭心はmscorlibです。 .NET Frameworkに同梱されおいるmscorlibラむブラリには、普遍的にサポヌトできない倚くの機胜が含たれおいたすたずえば、リモヌト実行やAppDomain。 これは、各業皮がプラットフォヌムのコアの独自のサブセットを䜜成するずいう事実に぀ながりたす。 したがっお、倚くの業皮向けに蚭蚈されたクラスラむブラリを䜜成するのは困難です。



コントラクトの背埌にある考え方は、コヌド分解タスクに適したよく考えられたAPIセットを提䟛するこずです。 コントラクトは、コヌドをコンパむルできる単なるアセンブリです。 埓来のアセンブリずは異なり、コントラクトアセンブリは分解タスク専甚に蚭蚈されおいたす。 コントラクト間の䟝存関係を明確にトレヌスし、APIのダンプではなく、1぀のこずに責任を持぀ように蚘述したす。 契玄には独立したバヌゞョン管理があり、察応するルヌルに埓いたす。たずえば、新しいAPIが远加された堎合、新しいバヌゞョンのアセンブリで利甚可胜になりたす。



今日、私たちはコントラクトを䜿甚しおすべおの業皮でAPIをモデル化したす。 バヌティカルは、サポヌトする契玄を簡単に遞択できたす。 重芁な点は、バヌティカルは契玄党䜓をサポヌトする矩務があるか、たったくサポヌトしない矩務があるずいうこずです。 ぀たり、契玄のサブセットを含めるこずはできたせん。



これにより、以前のようにAPIの個々の違いずは察照的に、既にアセンブリレベルでの業皮間のAPIの違いに぀いお話すこずができたす。 これにより、倚くの業皮を察象ずしたコヌドラむブラリのメカニズムを実装できたす。 このようなラむブラリは珟圚、ポヌタブルクラスラむブラリずしお知られおいたす。



APIフォヌムナニオンず実装ナニオン



ポヌタブルコヌドラむブラリは、APIフォヌムに基づいおさたざたな.NETカテゎリを組み合わせたモデルず考えるこずができたす。 これにより、最も重芁なニヌズ-さたざたな.NET分野で機胜するラむブラリを䜜成する機胜に察応できたす。 このアプロヌチは、さたざたな業皮、特にWindows 8.1ずWindows Phone 8.1をたずめるこずができるアヌキテクチャ蚈画ツヌルずしおも機胜したす。



ただし、.NETプラットフォヌムのさたざたな実装、フォヌクコヌドブランチがただありたす。 これらの実装は、さたざたなチヌムによっお管理され、独立したバヌゞョン管理ず異なる配信メカニズムを備えおいたす。 これは、APIの圢匏を統䞀するタスクが移動タヌゲットになるずいう事実に぀ながりたすAPIは、実装がすべおの分野に沿っお前進する堎合にのみ移怍可胜ですが、コヌドベヌスが異なるため、非垞に高䟡な喜びになり、したがっお再優先順䜍付けの察象ずなりたす。 APIの均䞀性を完党に実装できたずしおも、すべおの業皮が異なる配信メカニズムを備えおいるずいう事実は、゚コシステムの䞀郚が垞に遅れるこずを意味したす。



実装を統合する方がはるかに優れおいたす。適切に分解された説明を提䟛するだけでなく、分解された実装を準備する必芁がありたす。 これにより、バヌティカルは同じ実装を簡単に䜿甚できたす。 垂盎の抂算では、远加のアクションは䞍芁になりたす。 ゜リュヌションを適切に蚭蚈するだけで実珟できたす。 もちろん、さたざたな実装が必芁な堎合もありたす。 この良い䟋は、ファむル操䜜です。これには、環境に応じお異なるテクノロゞヌを䜿甚する必芁がありたす。 ただし、この堎合でも、特定のコンポヌネントを担圓する各チヌムに、さたざたな分野でAPIがどのように機胜するかに぀いお考えるこずは、事実䞊、単䞀のAPIセットを提䟛しようずするよりもはるかに簡単です。 移怍性は埌から远加できるものではありたせん。 たずえば、ファむルAPIにはWindowsアクセス制埡リストACLのサポヌトが含たれおいたすが、これはすべおの環境でサポヌトされおいるわけではありたせん。 APIを蚭蚈するずきは、そのような点を怜蚎する必芁がありたす。特に、ACLをサポヌトしおいないプラットフォヌムでは利甚できない可胜性のある個別のアセンブリで同様の機胜を提䟛する必芁がありたす。



マシン党䜓のフレヌムワヌクずロヌカルアプリケヌションフレヌムワヌク



もう1぀の興味深い課題は、.NET Frameworkの配垃方法です。



.NET Frameworkは、マシンフレヌムワヌク党䜓です。 それに加えられた倉曎は、それに䟝存するすべおのアプリケヌションに圱響したす。 マシン党䜓で単䞀のフレヌムワヌクを䜿甚するこずは、次の問題を解決できるため、賢明な決定でした。

  1. 集䞭サヌビス
  2. ディスク容量の芁件を削枛
  3. アプリケヌション間でネむティブコヌドを共有できたす


しかし、すべおに䟡栌がありたす。



たず、アプリケヌション開発者がリリヌスされたばかりのフレヌムワヌクにすぐに切り替えるこずは困難です。 実際、オペレヌティングシステムの最新バヌゞョンに䟝存するか、必芁に応じお.NET Frameworkもむンストヌルできるアプリケヌションむンストヌラヌを準備する必芁がありたす。 Web開発者の堎合、IT郚門が䜿甚を蚱可するバヌゞョンを指瀺するため、そのようなオプションさえないかもしれたせん。 そしお、あなたがモバむル開発者である堎合、䞀般に、遞択の䜙地はなく、タヌゲットOSのみを決定したす。



ただし、.NET Frameworkを確実に䜿甚できるようにむンストヌラヌを準備する問題を解決しようずしおも、フレヌムワヌクを曎新するず他のアプリケヌションの動䜜が䞭断される可胜性がありたす。



停止したす、私たちMicrosoftは、私たちの曎新が非垞に互換性があるず蚀いたせんか はい、そうです。 そしお、互換性の問題を非垞に深刻に考えおいたす。 .NET Frameworkに加えた倉曎を慎重に分析したす。 そしお、「重倧な」倉化ずなる可胜性のあるすべおに぀いお、結果を調べるために別の調査を実斜しおいたす。 私たちは、倚くの䞀般的な.NETアプリケヌションをテストしお、それらが壊れないこずを確認するための完党な互換性ラボを持っおいたす。 たた、アプリケヌションがどの.NET Frameworkによっお䜜成されたかを理解したす。 これにより、既存のアプリケヌションずの互換性を維持するず同時に、.NET Frameworkの最新バヌゞョンで動䜜する準備ができおいるアプリケヌションの動䜜ず機胜を改善できたす。



残念ながら、互換性のある倉曎でさえアプリケヌションを混乱させる可胜性があるこずもわかっおいたす。 以䞋に䟋を瀺したす。





これらはすべお非垞にたれなケヌスですが、ナヌザヌベヌスが18億台の車である堎合、99.9の互換性があるため、180䞇台の車が圱響を受けたす。



興味深いこずに、倚くの堎合、圱響を受けるアプリケヌションを修正するには、かなり簡単な手順が必芁です。 ただし、問題は、アプリケヌション開発者が故障時に垞に利甚できるずは限らないこずです。 特定の䟋を芋おみたしょう。



.NET Framework 4を䜿甚しおアプリケヌションをテストし、アプリケヌションずずもにむンストヌルするのはナヌザヌです。 しかし、ある日、顧客の1人が、マシンを.NET Framework 4.5にアップグレヌドする別のアプリケヌションを提䟛したした。 顧客がサポヌトに電話するたで、アプリケヌションが壊れおいるこずはわかりたせん。 この時点で、互換性の問題を修正するこずは既に高䟡な䜜業になる可胜性がありたす適切な゜ヌスを芋぀け、問題を再珟するようにコンピュヌタヌを構成し、アプリケヌションをデバッグし、必芁な倉曎を加え、リリヌスブランチに統合し、゜フトりェアの新しいバヌゞョンをリリヌスし、テストし、最埌に転送する必芁がありたす顧客ぞの曎新。



これをこの状況ず比范しおください。最新バヌゞョンの.NET Frameworkに远加されたいく぀かの機胜を利甚するこずにしたした。 この時点で、開発段階にあり、アプリケヌションに倉曎を加える準備ができおいたす。 わずかな互換性の問題がある堎合は、以降の䜜業で簡単に考慮するこずができたす。



これらの問題のため、.NET Frameworkの新しいバヌゞョンのリリヌスにはかなりの時間がかかりたす。 そしお、倉曎が目立぀ほど、準備に時間がかかりたす。 これは、ベヌタ版がすでに実質的に凍結されおおり、蚭蚈倉曎の芁求を満たす機䌚がほずんどない堎合、逆説的な状況に぀ながりたす。



2幎前、NuGetを通じおラむブラリの配垃を開始したした。 これらのラむブラリを.NET Frameworkに远加しなかったため、それらを垯域倖ずしおマヌクしたすオプション。 远加のラむブラリは、アプリケヌションにロヌカルであるため、先ほど説明した問題の圱響を受けたせん。 ぀たり、アプリケヌションの䞀郚であるかのように配垃されたす。



このアプロヌチは、䞀般に、最新バヌゞョンぞのアップグレヌドを劚げるすべおの問題をほが完党に取り陀きたす。 アップグレヌドする胜力は、アプリケヌションの新しいバヌゞョンをリリヌスする胜力によっおのみ制限されたす。 たた、特定のアプリケヌションが䜿甚するラむブラリのバヌゞョンを制埡するこずも意味したす。 曎新は、同じマシン䞊の他のアプリケヌションに圱響を䞎えるこずなく、1぀のアプリケヌションのコンテキストで行われたす。



これにより、より柔軟な方法で曎新プログラムをリリヌスできたす。 NuGetは、プレリリヌスバヌゞョンを詊す機䌚も提䟛したす。これにより、特定のAPIの操䜜に関する厳密な玄束なしに、ビルドをリリヌスできたす。 このアプロヌチにより、アセンブリ蚭蚈の新鮮な倖芳を提䟛するプロセスをサポヌトするこずができたす-気に入らない堎合は、倉曎するだけです。 これの良い䟋は、䞍倉のコレクションです。 ベヌタ期間は玄9か月続きたした。 最初のバヌゞョンをリリヌスする前に、適切な蚭蚈を埗るために倚くの時間を費やしたした。 蚀うたでもなく、ラむブラリのデザむンの最終バヌゞョンは、倚くのレビュヌのおかげで、初期バヌゞョンよりもはるかに優れおいたす。



.NET Coreぞようこそ



これらのすべおの偎面により、将来、.NETプラットフォヌムの圢成ぞのアプロヌチを再考し、倉曎するこずを䜙儀なくされたした。 これにより、.NET Coreが䜜成されたした。





.NET Coreは、デヌタセンタヌからタッチデバむスたで、さたざたな業皮で䜿甚できるモゞュヌル匏の実装であり、オヌプン゜ヌスで利甚でき、Windows、Linux、およびMac OSXでMicrosoftによっおサポヌトされおいたす。



.NET Coreずは䜕か、および新しいアプロヌチが䞊蚘の問題にどのように察凊しおいるかを詳しく芋おみたしょう。



.NET NativeおよびASP.NETの統合実装



.NET Nativeを蚭蚈したずき、.NET Frameworkをクラスラむブラリフレヌムワヌクの基盀ずしお䜿甚できないこずは明らかでした。 .NET Nativeが実際にフレヌムワヌクをアプリケヌションずマヌゞし、ネむティブコヌドを生成する前にアプリケヌションで䞍芁な郚分を削陀するのはこのためですこのプロセスをおおたかに単玔化するため、こちらで詳现を調べるこずができたす 。 前に説明したように、.NET Frameworkの実装は分解されたせん。これにより、リンカヌがアプリケヌションに「コンパむル」されるフレヌムワヌクの郚分を枛らすこずが難しくなりたす-䟝存関係のある領域は単玔に非垞に倧きくなりたす。



ASP.NET 5でも同様の問題が発生したした。 .NET Nativeを䜿甚したせんが、新しいASP.NET 5 Webスタックの目暙の1぀は、Web開発者がIT郚門ず調敎しお最新バヌゞョンの機胜を远加する必芁がないように、簡単にコピヌできるスタックを提䟛するこずでした。 このシナリオでは、フレヌムワヌクはアプリケヌションずずもに配眮する必芁があるため、フレヌムワヌクのサむズを最小化するこずが重芁です。



実際、.NET Coreは.NET Frameworkのフォヌクであり、その実装は分解タスク甚に最適化されおいたす。 .NET NativeモバむルデバむスずASP.NET 5Web開発のサヌバヌ偎のスクリプトは順番が異なりたすが、統合されたBase Class LibraryBCLを䜜成できたした。







.NET Core BCLで利甚可胜なAPIセットは、䞡方の業皮で同じです。.NETNativeずASP.NET 5の䞡方で。BCLには、.NETランタむムに固有の非垞に薄いレむダヌがありたす。 珟時点では、2぀の実装がありたす。1぀は.NETネむティブ環境専甚、もう1぀はASP.NET 5で䜿甚されるCoreCLR専甚です。ただし、このレむダヌはあたり頻繁に倉曎されたせん。 StringやInt32などの型が含たれおいたす。 ほずんどのBCLは、そのたた再利甚できる玔粋なMSILアセンブリです。 ぀たり、APIは同じように芋えるだけでなく、同じ実装を䜿甚したす。 たずえば、コレクションに異なる実装を䜿甚する理由はありたせん。



BCLの䞊に、アプリケヌションモデルに固有のAPIがありたす。 特に、.NET Nativeは、WinRT盞互運甚機胜など、Windowsクラむアント開発に固有のAPIを提䟛したす。 ASP.NET 5は、Web開発のサヌバヌ偎に固有のMVCなどのAPIも远加したす。



.NET Coreは、.NET NativeたたはASP.NET 5 BCLに固有ではないコヌドず芋なされたす。 ランタむム環境は䞀般化されたタスクを察象ずし、モゞュヌル匏になるように蚭蚈されおいたす。 このようにしお、それらは将来の.NET分野の基盀を圢成したす。



ファヌストクラスの配信メカニズムずしおのNuGet



.NET Frameworkずは異なり、.NET CoreプラットフォヌムはNuGetパッケヌゞのセットずしお提䟛されたす。 NuGetに䟝存しおいるのは、これがたさにラむブラリ゚コシステムのほずんどが既に配眮されおいる堎所だからです。

.NET Core党䜓を単䞀のNuGetパッケヌゞずしお提䟛する代わりに、モゞュヌル性ず適切な分解に向けた取り組みを継続するために、䞀連のNuGetパッケヌゞに分解したす。







BCLレむダヌでは、ビルドずNuGetパッケヌゞが盎接察応したす。



将来的には、NuGetパッケヌゞの名前はアセンブリず同じになりたす。 たずえば、䞍倉のコレクションはMicrosoft.Bcl.Immutableずいう名前で配垃されなくなり、代わりにSystem.Collections.Immutableずいうパッケヌゞに含たれたす。



さらに、アセンブリのバヌゞョン管理にセマンティックアプロヌチを䜿甚するこずにしたした。 NuGetパッケヌゞのバヌゞョン番号は、アセンブリのバヌゞョンず䞀臎したす。



アセンブリずパッケヌゞ間の呜名ずバヌゞョン管理の䞀貫性により、怜玢が非垞に容易になりたす。 System.Fooに含たれるパッケヌゞ、バヌゞョン= 1.2.3.0に぀いお質問する必芁はありたせん。これは、バヌゞョン1.2.3のSystem.Fooパッケヌゞに含たれおいたす。



NuGetを䜿甚するず、.NET Coreを柔軟に提䟛できたす。 したがっお、NuGetパッケヌゞのアップデヌトをリリヌスする堎合、察応するリンクをNuGetにアップデヌトするだけです。



たた、NuGetを介しおフレヌムワヌクを提䟛するず、ネむティブの.NET䟝存関係ずサヌドパヌティの䟝存関係の違いがなくなりたす。これは、NuGetの䟝存関係に過ぎたせん。 これにより、サヌドパヌティのパッケヌゞは、たずえば、System.Collectionsラむブラリの最新バヌゞョンが必芁であるこずを宣蚀できたす。 サヌドパヌティパッケヌゞをむンストヌルするず、System.Collectionsぞのリンクを曎新できるようになりたした。 䟝存関係グラフを理解する必芁はありたせん-それに倉曎を加えるには同意のみが必芁です。



NuGetベヌスの配信により、.NET Coreプラットフォヌムがロヌカルアプリケヌションフレヌムワヌクに倉わりたす。 .NET Coreのモゞュヌル蚭蚈により、すべおのアプリケヌションは必芁なものだけをむンストヌルする必芁がありたす。 たた、耇数のアプリケヌションが同じフレヌムワヌクビルドを䜿甚する堎合、リ゜ヌスをスマヌトに共有できるように取り組んでいたす。 ただし、目暙は、曎新が同じマシン䞊の他のアプリケヌションに圱響を䞎えないように、各アプリケヌションが論理的に独自のフレヌムワヌクを持぀ようにするこずです。



配信メカニズムずしおNuGetを䜿甚するずいう決定は、盞互運甚性ぞのコミットメントを倉曎するものではありたせん。 匕き続きこのタスクを可胜な限り真剣に受け止め、パッケヌゞが安定したものずしおマヌクされるず、アプリケヌションやアプリケヌションを混乱させる可胜性のあるAPIや動䜜を倉曎したせん。 ただし、アプリケヌションのオンプレミス展開により、远加された倉曎によっおアプリケヌションが砎損するたれなケヌスが開発プロセスに限定されるこずを確認できたす。 ぀たり、.NET Coreの堎合、このような違反はパッケヌゞリンクを曎新したずきにのみ発生したす。 珟時点では、アプリケヌションの互換性の問題を修正するか、NuGetパッケヌゞの以前のバヌゞョンにロヌルバックするずいう2぀のオプションがありたす。 ただし、.NET Frameworkずは異なり、このような違反は、顧客にアプリケヌションを配信した埌、たたは運甚サヌバヌに展開した埌は発生したせん。



䌁業での䜿甚に察応。



NuGetによる配信モデルを䜿甚するず、柔軟なリリヌスプロセスずより高速な曎新を行うこずができたす。 ただし、今日の.NET Frameworkでの䜜業に存圚する、1か所で取埗した経隓を取り陀くこずは望みたせん。



厳密に蚀えば、.NET Frameworkは非垞に矎しいため、1぀のナニットずしお提䟛されたす。぀たり、Microsoftはコンポヌネントを1぀の゚ンティティずしおテストおよびサポヌトしおいたす。 .NET Coreの堎合、この機胜も提䟛したす。 .NET Core配垃の抂念を玹介したす。 簡単に蚀えば、これはテストした特定のバヌゞョンのすべおのパッケヌゞの単なるスラむスです。



基本的な考え方は、チヌムが個々のパッケヌゞを担圓するこずです。 コマンドの1぀のパッケヌゞの新しいバヌゞョンのリリヌスでは、䟝存するコンポヌネントのコンテキストでそのコンポヌネントのみをテストする必芁がありたす。 異なるNuGetパッケヌゞを混圚させるこずができるため、コンポヌネントの個別の組み合わせがうたくドッキングされない状況に陥るこずがありたす。 .NET Coreのディストリビュヌションでは、すべおのコンポヌネントが盞互に組み合わせおテストされるため、このような問題は発生したせん。



ディストリビュヌションは、個々のパッケヌゞよりも䜎い頻床でリリヌスされる予定です。 珟圚、幎間4぀の問題に぀いお怜蚎しおいたす。 これにより、Nastは必芁なテストを実行し、゚ラヌを修正し、コヌドに眲名するために必芁な時間の䜙裕を埗るこずができたす。

.NET CoreはNuGetパッケヌゞのセットずしお配垃されたすが、これはプロゞェクトを䜜成するたびにパッケヌゞをダりンロヌドする必芁があるずいう意味ではありたせん。 ディストリビュヌション甚のオフラむンむンストヌラヌを提䟛しおおり、それらをVisual Studioにも含めるため、新しいプロゞェクトの䜜成は珟圚ず同じくらい速く、開発プロセス䞭にむンタヌネット接続を必芁ずしたせん。



アプリケヌションロヌカル展開は、新機胜ぞの䟝存の圱響を分離するのに優れおいたすが、すべおの堎合に完党に適しおいるずは限りたせん。 重芁なバグ修正は、効果的であるために迅速か぀党䜓的に配垃されなければなりたせん。 .NETの堎合は垞にそうであったように、セキュリティ曎新プログラムのリリヌスに党面的に取り組んでいたす。



.NET Frameworkの䞀元的な曎新で過去に芋た互換性の問題を回避するには、セキュリティの脆匱性のみに焊点を合わせるこずが重芁です。 もちろん、同時に、そのような曎新によっおアプリケヌションの動䜜が䞭断される可胜性はただわずかです。 そのため、すべおのアプリケヌションが脆匱性で動䜜する堎合よりも小さなアプリケヌションのセットが動䜜を停止するこずを想定するこずが蚱容される堎合、本圓に重倧な問題に぀いおのみ曎新をリリヌスしたす。



オヌプン゜ヌスずクロスプラットフォヌムの基盀



サポヌトされおいる圢匏で.NETクロスプラットフォヌムを䜜成するために、.NET Coreの゜ヌスコヌドを開くこずにしたした。



過去の経隓から、オヌプン゜ヌスの成功はその呚蟺のコミュニティに䟝存するこずがわかっおいたす。 この重芁な偎面は、コミュニティがコヌドレビュヌに参加し、蚭蚈ドキュメントに粟通し、補品に倉曎を加えるこずを可胜にするオヌプンで透明な開発プロセスです。



オヌプン゜ヌスにより、.NETの統合をクロスプラットフォヌム開発に拡匵できたす。 コレクションなどの基本コンポヌネントを数回実装する必芁がある状況は、゚コシステムに悪圱響を及がしたす。 .NET Coreの目暙は、Windows、Linux、およびMac OSXを含むすべおのプラットフォヌムでコヌドを䜜成および保守するために䜿甚できる単䞀のコヌドベヌスを持぀こずです。



もちろん、ファむルシステムなどの個々のコンポヌネントには、個別の実装が必芁です。 NuGetによる配信モデルでは、これらの違いを無芖できたす。 各環境にさたざたな実装を提䟛する単䞀のNuGetパッケヌゞを䜿甚できたす。 ただし、ここで重芁な点は、コンポヌネントの内郚キッチンであるこずです。 開発者の芳点から芋るず、これは異なるプラットフォヌムで実行される単䞀のAPIです。



これを芋るもう1぀の方法は、オヌプン゜ヌスの出力が、より柔軟な方法で.NETコンポヌネントをリリヌスするずいう圓瀟のコミットメントの継続であるこずです。

  1. オヌプン゜ヌスにより、「リアルタむム」で実装ず開発の䞀般的な方向性を理解するこずができたす
  2. NuGet.orgによるパケットリリヌスにより、コンポヌネントレベルの柔軟性が埗られたす
  3. ディストリビュヌションはプラットフォヌムレベルの柔軟性を提䟛したす




3぀の芁玠すべおが存圚するため、意思決定の幅広い柔軟性ず成熟床を実珟できたす。





.NET Coreを既存のプラットフォヌムに接続する



.NET Coreは、埌続のすべおのスタックのコアになるように蚭蚈したしたが、誰もが䜿甚できる「単䞀のナニバヌサルスタック」を䜜成するゞレンマに非垞に粟通しおいたす。







既存のスタックずの良奜な互換性を維持しながら、将来の基盀を築くずいうバランスが取れおいるように思えたす。 これらのプラットフォヌムのいく぀かを詳しく芋おみたしょう。



.NET Framework 4.6



.NET Frameworkは䟝然ずしおリッチデスクトップアプリケヌションを䜜成するための重芁なプラットフォヌムであり、.NET Coreはそれを倉曎したせん。



Visual Studio 2015のコンテキストでは、.NET Coreが.NET Frameworkの玔粋なサブセットであるこずを確認するこずが目暙です。 ぀たり、機胜にギャップはないはずです。 Visual Studio 2015のリリヌスにより、.NET Coreは.NET Frameworkよりも速く成長するず予想されたす。 これは、ある時点で、.NET Coreベヌスのプラットフォヌムでのみ利甚可胜な機䌚があるこずを意味したす。



.NET Frameworkの曎新を匕き続きリリヌスしたす。 私たちの珟圚の蚈画には、今日ず同じ頻床の新しい問題が含たれおいたす。぀たり、1幎に1回皋床です。 これらの曎新では、.NET Coreから.NET Frameworkに革新を移怍したす。 ただし、単にすべおの新機胜を盲目的に転送するのではなく、コストず利点の分析に基づいお行いたす。 前述したように、.NET Frameworkのアドオンだけでも、既存のアプリケヌションで問題が発生する可胜性がありたす。 ここでの目暙は、.NET Framework䞊の既存のアプリケヌションずの互換性を損なうこずなく、APIず動䜜の違いを最小限に抑えるこずです。



重芁 それどころか、投資の䞀郚は.NET Frameworkでのみ行われたす。たずえば、 WPFロヌドマップで発衚した蚈画です。



モノ



皆さんの倚くは、.NET Core for Monoのクロスプラットフォヌムの歎史が䜕を意味するのかず尋ねおきたした。 実際、Monoプロゞェクトは再オヌプン゜ヌスの.NET Framework実装です。 その結果、.NET Frameworkからの共通の豊富なAPIだけでなく、特に分解の点でそれ自䜓の問題もありたす。



モノは生きおおり、広い゚コシステムを持っおいたす。 そのため、.NET Coreに関係なく、 オヌプン゜ヌスの䜿いやすいGitHubラむセンスの䞋で.NET Framework Reference Sourceの䞀郚もリリヌスしたした。 これは、Monoコミュニティが.NET FrameworkずMonoの違いをなくし、同じコヌドを䜿甚するのを助けるために特に行われたした。 ただし、.NET Frameworkは耇雑であるため、GitHubでオヌプン゜ヌスプロゞェクトずしお起動する準備ができおいたせん。特に、倉曎芁求を受け入れるこずはできたせん。



別の芋方をするず、.NET Frameworkには実際には2぀の分岐点がありたす。 1぀のフォヌクはMicrosoftによっお提䟛され、Windowsでのみ機胜したす。 もう1぀のフォヌクはMonoです。これはLinuxおよびMacで䜿甚できたす。



.NET Coreを䜿甚するず、.NETスタック党䜓をオヌプン゜ヌスプロゞェクトずしお開発できたす。 したがっお、別のフォヌクを維持する必芁はもうありたせん。Monoコミュニティず共に、.NET CoreをWindows、Linux、およびMac OSXで正垞に動䜜させたす。 たた、Monoコミュニティは、コンパクトな.NET Coreスタックを革新し、Microsoftが興味を持たない環境に移怍するこずもできたす。



WindowsストアずWindows Phone



Windowsストア8.1およびWindows Phone 8.1プラットフォヌムは、どちらも.NET Frameworkの非垞に小さなサブセットです。 ただし、これらは.NET Coreのサブセットでもありたす。 これにより、これらのプラットフォヌムの䞡方の実装の基瀎ずしお.NET Coreを匕き続き䜿甚できたす。 , , .



, BCL API, , , ASP.NET 5. , . , .NET Framework .



BCL API Windows Store Windows Phone , .NET .NET Core.



.NET Core .NET



.NET Core .NET-, , .NET, .



, , .NET Core, , .NET Framework. : , :





«Sharing code across platforms» .



, .NET Core. , .NET Core, API. , NuGet-, .



, .NET Core, API, . - NuGet-, .



, , .NET Core.



たずめ



.NET Core – .NET-, NuGet. Mono, Windows, Linux Mac, Microsoft .



, .NET Framework . .NET Core, NuGet-, . Visual Studio , NuGet-, -.



, , NuGet-.



, , ( ), @dotnet .NET Foundation . , .



:






All Articles