.NETフレームワークが使用できないマシンで.NETアプリケーションを実行したい場合。アプリケーションをネイティブコードにコンパイルする方法はありますか?
回答:
Microsoftには、MSILをネイティブコードにコンパイルする方法を説明した記事があります。
Ngenを使用できます。
ネイティブイメージジェネレーター(Ngen.exe)は、管理対象アプリケーションのパフォーマンスを向上させるツールです。Ngen.exeは、ネイティブイメージ(コンパイルされたプロセッサ固有のマシンコードを含むファイル)を作成し、ローカルコンピューターのネイティブイメージキャッシュにインストールします。ランタイムは、元のアセンブリをコンパイルするためにジャストインタイム(JIT)コンパイラを使用する代わりに、キャッシュからのネイティブイメージを使用できます。
残念ながら、プログラムを実行するには、フレームワークのライブラリが必要です。必要なすべてのファイルを1つの実行可能ファイルにコンパイルできるMS .NetフレームワークSDKで私が知っている機能はありません。
RemoteSoftは、.NETアプリケーションを.NETがインストールされていなくても実行できるパッケージにコンパイルするツールを作成します。私はそれについての経験がありません:
ここでの他の回答のいくつかで述べたように、.NET Nativeツールを使用して、アプリをネイティブマシンコードにコンパイルできます。ただし、それらの回答とは異なり、その方法を説明します。
手順:
新しい.NET Coreツールチェーンの一部であるdotnet CLI(コマンドラインインターフェイス)ツールをインストールします。これを使用してアプリをコンパイルします。あなたはそれについてここで良い記事を見つけることができます。
シェルプロンプトを開きcd
、アプリのディレクトリに移動します。
これを入力してください:
dotnet compile --native
それでおしまい!完了すると、アプリは次のように1つのバイナリにコンパイルされます。
スタンドアロンの実行可能ファイルになります。PDB、アセンブリ、構成ファイルは含まれていません(フレイ!)。
または、さらに高速なプログラムが必要な場合は、次のコマンドを実行できます。
dotnet compile --native --cpp
これにより、(RyuJITではなく)C ++コードジェネレーターを使用してプログラムが最適化されるため、アプリはAOTシナリオ向けにさらに最適化されます。
これについて詳しくは、dotnet CLI GitHubリポジトリをご覧ください。
マイクロソフトは、フレームワークをインストールしなくても.NETアプリケーションを実行できる.NETネイティブプレビューを発表しました。
ご覧ください:http : //blogs.msdn.com/b/dotnet/archive/2014/04/02/announcing-net-native-preview.aspx
FAQ:http : //msdn.microsoft.com/en-US/vstudio/dn642499.aspx
ここからVS2013用のMicrosoft .NET Nativeをダウンロードできます。 http。
あなたはできる!ただし、.NET 1.1に制限されています(ジェネリックはありません): Mono Ahead-Of-Timeコンパイル(AOT)
ただし、これはコンパイルが実際にネイティブであることを意味するため、単一のバイトコードアセンブリを1つデプロイできなくなり、プラットフォームごとに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 NativeはJITを利用しませんが、さまざまな動的シナリオをサポートします。コード作成者は、ランタイムディレクティブを利用して、サポートする動的シナリオで.NETネイティブコンパイラにヒントを提供する必要があり ます。
2019回答:dotnet / corertを使用してください。.NET Coreプロジェクトをスタンドアロン.exe
ファイルにコンパイルできます。依存関係なし(のようなシステムライブラリを除くkernel32.dll
)。これはまさにOPに必要なものです。
GitHubホームページから:
CoreRTコンパイラは、マネージド.NET Coreアプリケーションを、展開が容易なネイティブ(アーキテクチャ固有)の単一ファイル実行可能ファイルにコンパイルできます。また、他のプログラミング言語で作成されたアプリケーションで使用できるスタンドアロンの動的または静的ライブラリを生成することもできます。
ネイティブにコンパイルする主な理由は、コードを保護することです。それ以外の場合、コンパイルされたMSILは、クライアントのマシンにソースコードをデプロイするようなものです。
NGENはネイティブにコンパイルされますが、ILコードを展開する必要もあります。この目的は、起動時間を短縮することだけですが、役に立たないこともあります。
CoreRtはアルファ版であり、単純なhelloworldタイプのアプリでのみ機能します。
.Net Coreは単一の実行可能ファイルにコンパイルされますが、ネイティブexeではありません。これはILコードの圧縮ファイルであり、実行中にコードを一時フォルダーに解凍します。
Microsoftからの私の単純な質問は、RyuJITがILをその場でネイティブにコンパイルできる場合、なぜ同じILを事前(AOT)にコンパイルできないのかということです。
これ(http://www.dotnetnative.online/)を試して、.netでコンパイルされたexeをネイティブexeにコンパイルしてみてください。