.NET ネイティブによるアプリのコンパイルCompiling Apps with .NET Native

.NET ネイティブは、Visual Studio 2015 以降のバージョンに付属している Windows アプリをビルドおよび配置するためのプリコンパイルテクノロジです。.NET Native is a precompilation technology for building and deploying Windows apps that is included with Visual Studio 2015 and later versions. マネージド コード (C# または Visual Basic) で記述された、.NET Framework および Windows 10 を対象とするアプリのリリース バージョンを自動的にネイティブ コードにコンパイルします。It automatically compiles the release version of apps that are written in managed code (C# or Visual Basic) and that target the .NET Framework and Windows 10 to native code.

通常、.NET Framework を対象とするアプリは中間言語 (IL) にコンパイルされます。Typically, apps that target the .NET Framework are compiled to intermediate language (IL). 実行時に、Just-In-Time (JIT) コンパイラによって IL がネイティブ コードに変換されます。At run time, the just-in-time (JIT) compiler translates the IL to native code. これに対し、.NET ネイティブは、Windows アプリを直接ネイティブコードにコンパイルします。In contrast, .NET Native compiles Windows apps directly to native code. 開発者にとって、これは次のことを意味します。For developers, this means:

  • アプリは、ネイティブコードのパフォーマンスを特徴としています。Your apps feature the performance of native code. 通常、パフォーマンスは、最初に IL にコンパイルされてから JIT コンパイラによってネイティブコードにコンパイルされるコードよりも優れています。Usually, performance will be superior to code that is first compiled to IL and then compiled to native code by the JIT compiler.

  • 引き続き C# または Visual Basic でプログラムを作成できます。You can continue to program in C# or Visual Basic.

  • クラス ライブラリ、自動メモリ管理とガベージ コレクション、例外処理など、.NET Framework で提供されるリソースを引き続き利用できます。You can continue to take advantage of the resources provided by the .NET Framework, including its class library, automatic memory management and garbage collection, and exception handling.

アプリのユーザーのために、.NET ネイティブには次のような利点があります。For users of your apps, .NET Native offers these advantages:

  • 大部分のアプリとシナリオの実行時間が短縮されます。Faster execution times for the majority of apps and scenarios.

  • ほとんどのアプリとシナリオで、起動時間が短縮されます。Faster startup times for the majority of apps and scenarios.

  • デプロイコストと更新コストが低くなります。Low deployment and update costs.

  • アプリのメモリ使用量が最適化されています。Optimized app memory usage.


アプリとシナリオの大部分では、IL または NGEN イメージにコンパイルされたアプリと比較した場合、起動時間が大幅に短縮され、パフォーマンスが向上します。 .NET ネイティブ。For the vast majority of apps and scenarios, .NET Native offers significantly faster startup times and superior performance when compared to an app compiled to IL or to an NGEN image. ただし、結果は異なる場合があります。However, your results may vary. .NET ネイティブのパフォーマンスの向上によってアプリのパフォーマンスを向上させるには、アプリの non-.NET ネイティブバージョンとのパフォーマンスを比較する必要があります。To ensure that your app has benefited from the performance enhancements of .NET Native, you should compare its performance with that of the non-.NET Native version of your app. 詳細については、「パフォーマンスセッションの概要」を参照してください。For more information, see Performance Session Overview.

ただし .NET ネイティブには、ネイティブコードへのコンパイル以外にも関係があります。But .NET Native involves more than a compilation to native code. .NET Framework アプリのビルド方法と実行方法が変更されます。It transforms the way that .NET Framework apps are built and executed. 特に次の点に注意してください。In particular:

  • プリコンパイル時に、.NET Framework の必要な部分がアプリに静的にリンクされます。During precompilation, required portions of the .NET Framework are statically linked into your app. これにより、アプリは .NET Framework のアプリ ローカルのライブラリを使用して実行でき、コンパイラはグローバル分析を実行してパフォーマンスを向上させることができます。This allows the app to run with app-local libraries of the .NET Framework, and the compiler to perform global analysis to deliver performance wins. その結果、.NET Framework の更新後であっても、アプリは常に高速に起動します。As a result, apps launch consistently faster even after .NET Framework updates.

  • .NET ネイティブランタイムは静的プリコンパイル用に最適化されており、ほとんどのケースでは優れたパフォーマンスを提供します。The .NET Native runtime is optimized for static precompilation and in the vast majority of cases offers superior performance. 同時に、開発者に役立つ主要なリフレクション機能もあります。At the same time, it retains the core reflection features that developers find so productive.

  • .NET ネイティブは、静的プリコンパイルシナリオ用C++に最適化された、コンパイラと同じバックエンドを使用します。.NET Native uses the same back end as the C++ compiler, which is optimized for static precompilation scenarios.

.NET ネイティブは、次の表に示すようC++に、内部のものとC++同じまたは類似のツールを使用するため、のパフォーマンス上の利点をマネージコードの開発者にもたらします。.NET Native is able to bring the performance benefits of C++ to managed code developers because it uses the same or similar tools as C++ under the hood, as shown in this table.

.NET Native.NET Native C++C++
ライブラリLibraries .NET Framework + Windows ランタイムThe .NET Framework + Windows Runtime Win32 + Windows ランタイムWin32 + Windows Runtime
コンパイラCompiler UTC 最適化コンパイラUTC optimizing compiler UTC 最適化コンパイラUTC optimizing compiler
配置Deployed 実行可能バイナリReady-to-run binaries 実行可能バイナリ (ASM)Ready-to-run binaries (ASM)
ランタイムRuntime MRT.dll (最小 CLR ランタイム)MRT.dll (Minimal CLR Runtime) CRT.dll (C ランタイム)CRT.dll (C Runtime)

Windows 10 用の Windows アプリの場合は、.NET ネイティブ コード コンパイル バイナリをアプリ パッケージ (.appx ファイル) に入れて Windows ストアにアップロードします。For Windows apps for Windows 10, you upload .NET Native Code Compilation binaries in app packages (.appx files) to the Windows Store.

このセクションの内容In This Section

.NET ネイティブ コード コンパイルを使用したアプリ開発の詳細については、次のトピックを参照してください。For more information about developing apps with .NET Native Code Compilation, see these topics: