.NET アプリケーションをネイティブ コードにコンパイルするにはどうすればよいですか?
-
09-06-2019 - |
質問
.NET フレームワークが利用できないマシンで .NET アプリケーションを実行したい場合。アプリケーションをネイティブ コードにコンパイルする方法はありますか?
解決
Microsoft には、その方法を説明する記事があります。 MSIL をネイティブ コードにコンパイルする
使用できます ンゲン.
ネイティブ画像ジェネレーター(NGEN.EXE)は、マネージドアプリケーションのパフォーマンスを向上させるツールです。ngen.exeは、コンパイルされたプロセッサ固有のマシンコードを含むファイルであるネイティブ画像を作成し、ローカルコンピューターのネイティブ画像キャッシュにインストールします。ランタイムは、ジャストインタイム(JIT)コンパイラを使用して、元のアセンブリをコンパイルする代わりに、キャッシュのネイティブ画像を使用できます。
残念ながら、プログラムを実行するにはフレームワークのライブラリが依然として必要です。私が知っている MS .Net フレームワーク SDK には、必要なすべてのファイルを 1 つの実行可能ファイルにコンパイルできる機能はありません。
他のヒント
RemoteSoft は、.NET アプリケーションを、.NET がインストールされていなくても実行できるパッケージにコンパイルするツールを作成しています。私にはそれに関する経験がありません:
マイクロソフトが発表したのは、 .NETネイティブプレビュー これにより、フレームワークをインストールしなくても .NET アプリケーションを実行できるようになります。
ご覧ください: http://blogs.msdn.com/b/dotnet/archive/2014/04/02/payment-net-native-preview.aspx
よくある質問: http://msdn.microsoft.com/en-US/vstudio/dn642499.aspx
ここから VS2013 用の Microsoft .NET Native をダウンロードできます。 http://msdn.microsoft.com/en-US/vstudio/dotnetnative
ここの他の回答の一部で述べたように、次を使用できます。 .NETネイティブ アプリをネイティブ マシン コードにコンパイルするツール。ただし、それらの答えとは異なり、説明します どうやって それをするために。
手順:
をインストールします ドットネット CLI (コマンド ライン インターフェイス) ツール。新しい .NET Core ツールチェーンの一部です。これを使ってアプリをコンパイルします。それに関する良い記事を見つけることができます ここ。
シェルプロンプトを開き、
cd
アプリのディレクトリにコピーします。次のように入力します:
dotnet compile --native
それでおしまい!完了すると、アプリは次のように 1 つのバイナリにコンパイルされます。
これはスタンドアロンの実行可能ファイルになります。PDB、アセンブリ、構成ファイルは含まれていません (万歳!)。
あるいは、さらに高速なプログラムが必要な場合は、これを実行できます。
dotnet compile --native --cpp
これにより、(RyuJIT ではなく) C++ コード ジェネレーターを使用してプログラムが最適化されるため、アプリは AOT シナリオ向けにさらに最適化されます。
詳細については、dotnet CLI を参照してください。 GitHub リポジトリ.
はい、使用しています ンゲン, 、ネイティブ画像ジェネレーター。ただし、次のような注意が必要な点があります。
- 実行可能ファイルを実行するには、CLR がまだ必要です。
- CLR は、実行される環境 (例:486 vs.586 vs.686など)
全体として、Ngen を使用する価値があるのは、アプリケーションの起動時間を短縮する必要がある場合のみです。
あなたはできる!ただし、.NET 1.1 に制限されます (ジェネリックは使用できません)。Mono Ahead-Of-Time コンピレーション (AOT)
ただし、これはコンパイルが実際にネイティブであることを意味するため、単一のバイトコード アセンブリをデプロイすることはできなくなり、プラットフォームごとに 1 つ必要になります。
これは元々、iPhone 用の .NET や Mono が存在しないために設計されたもので、そのようにして MonoTouch が作られました。
これは、.NET Native と呼ばれる新しいプリコンパイル テクノロジを使用して実行できます。ここで確認してください: http://msdn.microsoft.com/en-US/vstudio/dotnetnative
現在、Windows ストア アプリでのみ利用可能です。単一コンポーネントのリンクを実行します。したがって、.NET Framework ライブラリはアプリに静的にリンクされます。すべてがネイティブにコンパイルされ、IL アセンブリはデプロイされなくなります。アプリは CLR に対して実行されるのではなく、マネージド ランタイム (Mrt.dll) と呼ばれる、必要なものが削減され、最適化されたランタイムに対して実行されます。
前述したように、NGEN はミックス コンパイル モデルを使用し、動的なシナリオでは IL と JIT に依存しました。.NET ネイティブは JIT を利用しませんが、さまざまな動的シナリオをサポートします。コード作成者は次のことを利用する必要があります ランタイムディレクティブ サポートしたい動的シナリオに関するヒントを .NET ネイティブ コンパイラに提供します。
ngen.exe を使用してネイティブ イメージを生成できます しかし 元の非ネイティブ コードも配布する必要があり、ターゲット マシンにフレームワークがインストールされている必要があります。
本当に、それでは問題は解決しません。
.NET の性質は、MSIL にコンパイルされたアプリをインストールできることです。その後、JIT または Ngen によって、MSIL はネイティブ コードにコンパイルされ、ローカルのキャッシュに保存されます。これは、.NET Framework から独立して実行できる真のネイティブ .exe を生成することを目的としたものではありません。
おそらくこれを行うハッキングがあるかもしれませんが、それは私にとって安全ではないようです。次のようなフレームワークを必要とするダイナミクスが多すぎます。動的アセンブリの読み込み、MSIL コード生成など。
2019年の答え:使用 ドットネット/コアレット. 。.NET Core プロジェクトをスタンドアロンにコンパイルできます .exe
ファイル。依存関係はありません (次のようなシステム ライブラリを除く) kernel32.dll
)。これはまさにOPに必要なものだと思います。
GitHub ホームページから:
CoreRT コンパイラーは、マネージド .NET Core アプリケーションを、展開が簡単なネイティブ (アーキテクチャ固有) 単一ファイルの実行可能ファイルにコンパイルできます。また、他のプログラミング言語で書かれたアプリケーションで使用できるスタンドアロンの動的ライブラリまたは静的ライブラリを生成することもできます。
それは不可能だと思います。.NET FWも配布する必要があります。.NET アプリをネイティブ コードにコンパイルする場合は、NGen を使用します 道具