31

DNX の説明は次のとおりです。

.NET 実行環境 (DNX) は、Windows、Mac、および Linux 用の .NET アプリケーションを構築して実行するために必要なすべてを備えたソフトウェア開発キット (SDK) およびランタイム環境です。ホスト プロセス、CLR ホスティング ロジック、マネージド エントリ ポイント検出を提供します。DNX は、クロスプラットフォームの ASP.NET Web アプリケーションを実行するために構築されましたが、クロスプラットフォームのコンソール アプリなど、他の種類の .NET アプリケーションも実行できます。

DNX は Mono の代替品ですか? そうでない場合、違いは何ですか?

4

3 に答える 3

31

はい、DNX は Mono の mono.exe とよく似ています。または、Java (java.exe) や Python (python.exe) などの他の VM 言語のランタイムについても同様です。それらはすべて同じニワトリが先か卵が先かという問題を解決し、VM に関する Bean を認識しないオペレーティング システムで実行されます。最初に初期化する必要があり、プログラムのエントリ ポイントを特定し、プログラムの実行を開始する前に Main() メソッドをジットする必要があります。

これらの他の VM との DNX の小さな違いの 1 つは、CLR とジッターが別のライブラリである coreclr.dll に保持されることです。他のものは、すべてのランタイム サポート コードが単一の exe にコンパイルされたモノリシックです。モノリシックに保つと、コールドスタートのパフォーマンスが向上します。CoreCLR が安定し、多数の異なるベータ版がリリースされなくなったら、おそらく dnx でも同様のことが起こるでしょう。

それ以外の場合、これは Windows 上の .NET のアーキテクチャに従います。CLR をブートストラップするのは c:\windows\system32\mscoree.dll です。また、CLR とジッターは、.NET 4.x の clr.dll と clrjit.dll という別個の DLL です。Mscoree は、1 つの EXE ファイルからマネージ プログラムを起動できるように見せるために、巧妙な策略と欺瞞を使用します。特に、32 ビット EXE ファイルから 64 ビット プロセスを作成するトリックは英雄的です。内部のオペレーティング システム ローダー構造にパッチを適用して、その偉業を達成します。これには、EXE にマネージ コードが含まれていることを Windows 自体が認識している必要があります。Linux や OSX などの他のオペレーティング システムにうまく変換できないトリッキーであるため、CoreCLR のより従来的な方法を採用することにしました。


更新: DNX は廃止され、DOTNET に置き換えられました。それ以外の場合は、この投稿のコンテンツを無効にすることなく、使いやすくなります。

于 2015-05-21T14:47:52.837 に答える
30

DNX は Mono の代替品ですか? そうでない場合、違いは何ですか?

Mono はオープンソースの開発プラットフォームです。その実装は、Microsoft が提供するプラットフォームなどの CLI 仕様に基づいています。これには、C# コンパイラ、ランタイム、BCL、および MCL (Mono Class Library、BCL の拡張機能) と呼ばれるものが含まれます。Mono 自体は、さまざまなアーキテクチャの Linux、OS X、BSD、および Windows で実行できます。

dnuDNX は、CLR (現在はCoreCLRでデプロイされます) を含む、アプリケーション (アプリのビルドとパッケージ化に使用される などのカスタム ユーティリティを含む) のビルドと実行に必要なすべてのビットを含む SDK です。この CoreCLR は、Mono で切り替えることもできます。つまり、Mono ランタイム、コンパイラなどのすべてのサービスを使用します。

DNX とは対照的に、Mono は完全なプラットフォーム (ランタイム、BCL、JIT など) を提供します。DNX は、CoreCLR を呼び出したネイティブ プロセスとして最下位レベルで使用されます。DNX は、セルフホストやコマンド ラインからのビルドおよび実行などのシナリオに使用されます。

@xanatos が指摘するように、DNX は、複数のランタイムが相互に干渉することなく共存できるアプリケーションと共にランタイムを出荷できることを目指しています。

おそらく、この画像は明確にすることができます:

DNX ダイアグラム

これは、DNX が一番上で実行できるリストです (x86 はデフォルトで 2 回表示されます)。

Active Version           Runtime Architecture Location                           Alias
------ -------           ------- ------------ --------                           -----
  *    1.0.0-beta2-10735 clr     x86          C:\Users\victorhu\.dnx\runtimes default
       1.0.0-dev         clr     x64          C:\Users\victorhu\.dnx\runtimes clr-x64-dev
       1.0.0-dev         clr     x86          C:\Users\victorhu\.dnx\runtimes clr-x86-dev
       1.0.0-dev         coreclr xd64         C:\Users\victorhu\.dnx\runtimes coreclr-x64-dev
       1.0.0-dev         coreclr x86          C:\Users\victorhu\.dnx\runtimes coreclr-x86-dev
       1.0.0-dev         mono                 C:\Users\victorhu\.dnx\runtimes mono-dev

詳細については、DNX 構造を説明する広範なwiki ページがあります。@Will は、 ASP.NET のドキュメント ページも指摘しています。

更新: 2016 年 2 月 25 日

DNX は廃止され、.NET CLI ツールが使用されるようになりました。

更新: 2020 年 8 月 6 日

.NET CLI ツールは廃止され、dotnet sdkが優先されます

于 2015-05-21T13:10:11.667 に答える
2

レポサイトで述べたように、DNXは廃止されました。.NET CLIと Monoを比較することをお勧めします。.NET CLI は新しいプロジェクトであり、すべての .NET ライブラリ ケースをサポートしているわけではありません。.NET フレームワークとは異なる独自のコア ライブラリがあります。

于 2016-02-02T07:13:32.670 に答える