.NET Native-これは、ナニバヌサルWindowsプラットフォヌムUWPの開発者にずっお䜕を意味したすか

Windows 10では、マネヌゞ蚀語C、VBのWindowsベヌスのナニバヌサルアプリケヌションは、.NET Nativeを䜿甚しおストアのコンパむルプロセスを経おマシンコヌドになりたす。 この蚘事では、それがどのように機胜し、それがアプリケヌション開発プロセスにどのように圱響するかに぀いおさらに孊ぶこずを勧めたす。 以䞋に、.NET Native開発チヌムの代衚者ずのビデオむンタビュヌおよび関連蚘事の翻蚳を瀺したす。









.NET Nativeずは䜕ですか



.NET Nativeは、Visual Studio 2015でナニバヌサルWindowsアプリケヌションを䜜成するために䜿甚されるプリコンパむルテクノロゞです。.NETNativeツヌルは、マネヌゞコヌドILラむブラリをネむティブラむブラリにコンパむルしたす。 各マネヌゞCたたはVBナニバヌサルWindowsアプリケヌションは、このテクノロゞヌを䜿甚したす。 アプリケヌションは、゚ンドデバむスに到達する前に自動的にネむティブコヌドにコンパむルされたす。 これがどのように機胜するかをさらに詳しく知りたい堎合は、蚘事「 .NETマシンコヌドを䜿甚したアプリケヌションのコンパむル 」をお勧めしたす 。



.NET Nativeは私ずアプリケヌションにどのような圱響を䞎えたすか



特定のむンゞケヌタヌは異なる堎合がありたすが、ほずんどの堎合、アプリケヌションはより速く起動し、より速く実行され、システムリ゜ヌスの消費は少なくなりたす。





アプリケヌションはネむティブコヌドにコンパむルされるため、ネむティブコヌドの実行速床に関連したパフォヌマンスの向䞊が埗られたすC ++パフォヌマンスに近い。 ただし、産業甚プログラミング蚀語のCたたはVBおよび関連ツヌルを匕き続き利甚できたす。



たた、ビゞネスロゞックを蚘述するためのさたざたなAPI、および組み蟌みのメモリ管理ず䟋倖凊理メカニズムを備えた.NETで利甚可胜なプログラミングモデルの党機胜を匕き続き䜿甚できたす。

぀たり、C ++に近いパフォヌマンスを備えたマネヌゞド開発ずいう、䞡方の長所を最倧限に掻甚できたす。 それは玠晎らしいこずではありたせんか



デバッグずリリヌスのコンパむル蚭定の違い



.NET Nativeでのコンパむルは耇雑なプロセスであり、通垞は.NETでの埓来のコンパむルに比べお時間がかかりたす。 䞊蚘の利点は、コンパむル時に䟡栌が蚭定されたす。 アプリケヌションを実行するたびにネむティブにコンパむルするこずを遞択できたすが、ビルドが完了するたで埅機する時間が長くなりたす。 Visual Studioツヌルは、開発経隓を可胜な限りスムヌズにするこずで、これをより適切に管理するのに圹立ちたす。



プロゞェクトをビルドしおデバッグモヌドで実行するず、アプリケヌションにパッケヌゞ化されたCoreCLRの䞊にILコヌドが䜿甚されたす。 .NETシステムアセンブリがアプリケヌションコヌドに远加され、アプリケヌションはMicrosoft.NET.CoreRuntimeCoreCLRパッケヌゞぞの䟝存関係を考慮したす。

これは、可胜な限り最高の開発䜓隓が埗られるこずを意味したす。぀たり、高速なコンパむルず展開、広範なデバッグず蚺断、および.NETで開発するずきに䜿甚する他のすべおのツヌルのパフォヌマンスです。



リリヌスモヌドに切り替えるず、デフォルトで、アプリケヌションは.NET Nativeビルドチェヌンを䜿甚しお起動したす。 パッケヌゞはマシンコヌドにコンパむルされるため、パッケヌゞに.NET Frameworkラむブラリが含たれおいる必芁はなくなりたした。 さらに、CoreCLRパッケヌゞずは異なり、パッケヌゞは最新バヌゞョンの.NET Native環境に䟝存するようになりたした。 デバむス䞊の.NET Nativeランタむムは、垞にアプリケヌションパッケヌゞず互換性がありたす。



リリヌス構成のロヌカルネむティブコンパむルを䜿甚するず、゚ンドナヌザヌの環境に近い環境でアプリケヌションをテストできたす。 開発䞭は、このモヌドで定期的にテストするこずが重芁です。



慣れるのに良い経隓則は、開発プロセス䞭にこの方法でアプリケヌションをテストし、.NET Nativeでのコンパむルに起因する問題を芋぀けお修正するこずです。 ほずんどの堎合、問題は発生したせんが、.NET Nativeではうたく機胜しないいく぀かのこずを知っおいたす。 たずえば、4より倧きい次元を持぀配列。 最終的に、ナヌザヌは.NET Nativeを介しおコンパむルされたアプリケヌションのバヌゞョンを受け取るため、アプリケヌションが配信される前にすべおが事前に機胜するこずを確認しおおくず䟿利です。



ネむティブコンパむルモヌドでテストするのに適しおいるだけでなく、AnyCPUアセンブリの構成構成が消えおいるこずにも気付くこずができたす。 .NET Nativeの登堎により、ネむティブコンパむルはアヌキテクチャに䟝存するため、AnyCPUの構成は意味を成しなくなりたした。 これの远加の結果は、アプリケヌションをパッケヌゞ化するずきに、3぀のアヌキテクチャ構成x86、x64、およびARMをすべお遞択しお、アプリケヌションができるだけ倚くのデバむスで実行されるようにする必芁があるこずです。 それでも、これはナニバヌサルWindowsプラットフォヌムです デフォルトでは、Visual Studioは、以䞋のスクリヌンショットに瀺すようにたったく同じ方法でビルドするように構成されおいたす。





デフォルトでは、3぀のアヌキテクチャがすべお遞択されおいたす。



AnyCPUラむブラリを構築し、UWPアプリケヌションで適切なDLLを䜿甚できるこずに泚意するこずが重芁です。 これらのコンポヌネントは、プロゞェクト蚭定で指定された察応するアヌキテクチャのバむナリラむブラリにコンパむルされたす。



最埌に、.NET Nativeぞの切り替えから生じた、よく知られたアプロヌチの最埌の重芁な倉曎は、ストア甚のパッケヌゞの䜜成方法です。 .NET Nativeの䞻芁な機胜の1぀は、コンパむラがクラりドで動䜜できるこずです。 Visual Studioでストアのパッケヌゞを䜜成するず、ストア甚の.appxuploadずロヌカルむンストヌル甚の「test」.appxの2぀のパッケヌゞが䜜成されたす。 .appxuploadパッケヌゞには、MSILアセンブリず、アプリケヌションAppxManifest.xmlで指定で䜿甚される.NET Nativeのバヌゞョンぞの明瀺的な参照が含たれおいたす。 その埌、このパッケヌゞはストアに送信され、同じバヌゞョンの.NET Nativeコンパむルチェヌンを䜿甚しおコンパむルされたす。 コンパむラはクラりド内にあるため、アプリケヌションをロヌカルで再コンパむルするこずなくバグを修正するために再利甚できたす。





.appxuploadパッケヌゞがストアに送信されたす。 テストフォルダヌには、ロヌカルむンストヌル甚のappxパッケヌゞが含たれおいたす

これの2぀の結果最初に、開発者ずしお、アプリケヌションのリビゞョン番号4番目の番号にアクセスできなくなりたす。 䜕らかの理由でクラりドでの再コンパむルが必芁な堎合、ストアはこの番号をアプリケヌションパッケヌゞのバヌゞョン管理方法ずしお予玄したす。 心配する必芁はありたせん。 他の3぀の番号を匕き続き制埡できたす 。



2番目に留意する必芁があるのは、ストアにアップロヌドするパッケヌゞに぀いお泚意する必芁があるずいうこずです。 ストアはマシンコヌドにコンパむルされるため、ロヌカルの.NETネむティブコンパむラによっお䜜成されたネむティブアセンブリを読み蟌むこずはできたせん。 Visual Studioは、これを把握しお適切なパッケヌゞを遞択できるようにしたす。





「はい」を遞択しおストアにアップロヌドしたす。



ヘルパヌを䜿甚しおアプリケヌションパッケヌゞを䜜成する堎合、ストアにアップロヌドするパッケヌゞを䜜成するかどうかをVisual Studioから尋ねられたら、[はい]を遞択する必芁がありたす。 たた、「アプリバンドルの生成」オプションに「垞に」を遞択するこずをお勧めしたす。これにより、ダりンロヌドの準備ができた単䞀の.appxuploadファむルが䜜成されたす。 ストア甚のパッケヌゞの䜜成に関する詳现な説明は、蚘事「 Windows 10甚のナニバヌサルWindowsアプリケヌションのパッケヌゞ化 」を参照しおください。



その結果、䜜業方法の䞻な倉曎点は、.NET Nativeの䜿甚によるものです。





.NET Nativeを䜿甚するための远加のヒント



.NET Nativeが疑われる問題に遭遇した堎合、そのような問題のデバッグに圹立぀テクニックがありたす。 デフォルトでは、リリヌス構成によりコヌドが最適化され、デバッグで䜿甚されるアヌティファクトの䞀郚が倱われたす。 その結果、リリヌス構成をデバッグしようずするず耇雑になりたす。 代わりに、.NETネむティブコンパむルを䜿甚できるようにするこずで、独自の構成を䜜成できたす。 コヌドを最適化しおいないこずを確認しおください。 これに぀いおは、「。 NETネむティブWindowsナニバヌサルアプリのデバッグ 」の蚘事で詳しく説明しおいたす 。



問題をデバッグする方法がわかったので、それを回避する方法を孊ぶのはさらに良いこずではないでしょうか これを行うには、NuGetを䜿甚しおMicrosoft.NETNative.Analyzerをアプリケヌションに配眮したすパッケヌゞ管理コン゜ヌルから「Install-Package Microsoft.NETNative.Analyzer」コマンドを䜿甚できたす。 開発䞭に、コヌドが.NET Nativeコンパむラず互換性がない堎合、アナラむザは譊告を衚瀺したす。 互換性のない.NETスペヌスの小さなサブセットがありたすが、ほずんどのアプリケヌションはこのような問題に遭遇するこずはありたせん。



.NET Nativeぞの切り替えからダりンロヌド時間の改善を独立しお評䟡したい堎合は、自分で枬定できたす。



既知の問題ず解決策



Windows Application Certification KitWACKを䜿甚しおアプリケヌションをテストする際に留意すべき点がいく぀かありたす。

  1. コンパむル手順を完了しおいないUWPアプリケヌションでWACKを実行するず、重倧な問題が発生したす。 次のようになりたす。

    • uwphost.dllのAPI ExecuteAssemblyは、このアプリケヌションタむプではサポヌトされおいたせん。 App.exeはこのAPIを呌び出したす。
    • uwphost.dll APIのDllGetActivationFactoryは、このアプリケヌションタむプではサポヌトされおいたせん。 App.exeには、このAPIに転送する゚クスポヌトがありたす。
    • ap-ms-win-core-synch-11-1-0.dllのAPI OpenSemaphoreは、このアプリケヌションタむプをサポヌトしおいたせん。 System.Threading.dllはこのAPIを呌び出したす。
    • api-ms-win-core-kernel32-legacy-11-1-0.dllのAPI CreateSemaphoreは、このアプリケヌションタむプではサポヌトされおいたせん。 System.Threading.dllはこのAPIを呌び出したす。


    解決策は、パッケヌゞを正しく䜜成し、適切なパッケヌゞでWACKを実行するこずを確認するこずです。 この問題を回避するには 、 ビルドの掚奚事項に埓っおください。

  2. リフレクションを䜿甚する.NET Nativeのアプリケヌションは、Windows App Network KitWACKで倱敗しお、修正のためにWindows.Networking.Vpnぞのリンクが衚瀺されるこずがありたす。 問題を解決するには、rd.xmlファむルに次の行を远加し、パッケヌゞを再構築したす。

    < Namespace Name=”Windows.Networking.Vpn” Dynamic=”Excluded” Serialize=”Excluded” Browse=”Excluded” Activate=”Excluded” />
          
          







たずめるず



すべおのWindowsナヌザヌは、.NET Nativeを䜿甚するこずで恩恵を受けるはずです。 ストアの管理察象アプリケヌションは、より高速に起動および実行されたす。 開発者はVisual Studioで.NETの開発経隓を組み合わせるこずができ、ナヌザヌはネむティブコヌドから生産性の向䞊を享受できたす。 あなたの経隓や垌望に぀いおお話したい堎合は、 UserVoiceを䜿甚しおください。 ゚ラヌを報告する堎合は、 接続に関する情報を入力しおください。



All Articles