.NET IL コードをマシンコードにコンパイルすることは可能ですか?
-
02-07-2019 - |
質問
.NET Framework を使用せずに .NET プログラムを配布したいと考えています。.NET プログラムをマシンコードにコンパイルすることは可能ですか?
解決
はい、Ngen.exe を使用してプリコンパイルできますが、CLR への依存は削除されません。
IL アセンブリも同様に出荷する必要があります。Ngen の唯一の利点は、JIT を呼び出さずにアプリケーションを起動できるため、起動時間が非常に高速になることです。
C# 経由の CLR によると:
また、JITコンパイラがターゲットマシン(32ビット?64ビット?特殊レジスタ?など)、NGENはベースラインコンパイルを作成するだけです。
編集:
C# 経由の CLR からの上記の情報については、いくつかの議論があり、インストール プロセスの一部としてのみターゲット マシン上で Ngen を実行する必要があると言う人もいます。
他のヒント
Remotesoftには次の1つがあります。 Salamander .NETリンカー
しかし、私は経験がありません。
これを行うサードパーティのツールがいくつかあります。例:
これを行うことができる別の(高価で所有権のあるライセンスは$ 1599から)製品は Xenocode Postbuild 。でも、自分で使ったことはありません。アフリカの小さな国とすべての国の国民総生産にかかる費用がかかります...
.NET ILコードをコンパイルすることは可能ですか マシンコードへ?
はい。ただし、.NET Frameworkは実行時(デフォルト)またはインストール時(ngen)に自動的に実行します。他の理由の中でも、このIL->>マシンコードはインストールマシンごとに個別に実行されるため、その特定のマシン用に最適化できます。
.NETを配布したい .NETフレームワークのないプログラム。 .NETをコンパイルすることは可能ですか? マシンコードへのプログラム?
いいえ、すべての意図と目的のためにこれを行うことはできません。サードパーティの回避策はいくつかのシナリオで機能する可能性がありますが、それまでに「マネージコード」とは考えていません。または「.NET」もう。
はい、できます!最近、Microsoftは .NET Native を発表しました。これは、アプリケーションを.NET Nativeランタイム(MRTと呼びます)で1つのバイナリ(実際には1つの実行可能ファイルと1つの動的ライブラリ)にコンパイルする技術です。
リンクを参照: http://blogs.msdn .com / b / dotnet / archive / 2014/04/02 / announcing-net-native-preview.aspx http://blogs.msdn.com/b /dotnet/archive/2014/04/24/dotnetnative-performance.aspx
コンパイル部分には IL2CPU があります。
可能だとは思わない。 prejittedアセンブリを作成できますが、フレームワークが必要です。
フレームワークの展開のサイズに関心がある場合は、 this 。
あなたはすべきではないと思います:それはJITコンパイラのタスクです。
ただし、ClickOnceまたはWindowsインストーラーを使用して展開することで、不足しているフレームワークがそれほど大きな問題にならないようにすることができます。インストーラーにフレームワークをダウンロードしてインストールするように指示できます。
MONOプロジェクトを見る:--aotオプションを指定したmonoコマンド。 http://www.mono-project.com/AOT
CLRに依存せずに直接c#をマシンコードにコンパイルするのはいいことだと常に思っていました。...