2

私は主に学ぶためにこの質問をしています。(50 lines of code Also I am using the System.Text.RegularExpresion namespace.).net Framework 4.0 で c# を書いている友人に、非常に小さなコンソール アプリケーションを送りたいとしましょう。アプリケーションを移植可能にしたいので、bin ディレクトリの出力を彼に送ります。

なぜ、かなり時間がかかる .net Framework 4.0 クライアントをインストールしなければならないのでしょうか。また、この場合に使用する予定の dll ライブラリのみを含めると便利です system.dll (そのライブラリには system.text.regularexpressions 名前空間が含まれています)。

言い換えると、system.dll をコンソール アプリケーションに含めて移植可能にし、.net フレームワークがインストールされていないコンピューターで動作させることができないのはなぜですか。

.net Framework 4.0 のインストールが非常に複雑なのはなぜですか? C:\Program Files\.net framework 4.0\すべての .net ライブラリを配置する場所のウィンドウとインストール時に、そのフレームワークがインストールされたパスのレジストリにキーを書き込み、プログラムが必要な dll を見つけられるようにするとどうなりますか。

一般的に、インストールが非常に複雑なのはなぜですか?

system.dll をリフレクターで逆コンパイルしてから、プロジェクトに含めようとしましたが、うまくいきませんでした

編集

私の質問は、なぜ .net Framework 4.0 のインストールに時間がかかるのかということだったと思います。プログラム ファイルに必要な dll を配置し、それらの dll が配置されているパスをレジストリに書き込む場合、.net Framework 4.0 を実行できないのはなぜですか。そのプロセスははるかに高速でした。なぜそのようにしないのですか?


だから結論として

CLRの重要性を理解してくれてありがとう。私が理解していない唯一の部分は、インストールに時間がかかる理由だと思います。何千ものdllがあることを理解しています。これらの dll をプログラム ファイルに解凍し、レジストリに 10000 個のキーを書き込むと、はるかに高速になります。

4

2 に答える 2

9

あなたの質問は、「必要な DLL だけを含めるのではなく、.NET Framework 全体をインストールする必要があるのはなぜですか?」に要約されるようです。

その答えは、.NET Framework が DLL だけで構成されているわけではないということです。フレームワークのもう 1 つの主要なコンポーネントは、.NET コードの実行と管理を担当する CLR です。.NET Framework は、コードを実行するために必要ではないが、フレームワークに含まれている他の多くの小さなもの (コンパイラなど) で構成されています。

CLR は、DLL 自体よりも .NET にとって重要です。これは、コンピューターの CPU に似ています。それがなければ何もできず、あなたが持っている実行可能プログラムはただのゴミデータです。CLR は、コードをネイティブ実行可能ファイルにコンパイルする JIT、メモリ管理などを処理します。概念は、Java アプリケーション用の JVM と非常によく似ています。

DLL でさえ、見た目よりも複雑です。理論的には (CLR を無視して) 依存関係の DLL だけをアプリケーションにデプロイすることもできますが、それらのすべての DLL (mscorlib を除く) には、さらに多くの DLL への依存関係があることを覚えておいてください。簡単なアプリケーション用。

于 2012-09-11T00:22:46.280 に答える
4

C# プログラミング言語では、ターゲット プログラムを実行する前に、まずターゲット コンピューターに .Net フレームワークをインストールする必要があります。VB.NET と F# の要件は同じです。.net フレームワークは、いくつかの .DLL ファイルだけでなく、システム レジストリへのアクセスも必要とする、非常に大きなライブラリ セットです。かなり深いレベルの統合があり、そのほとんどは COM を介して行われますが、Win32 (少なくとも WinForms の場合) に深く入り込んでいます。

現在、Microsoftは C# をネイティブ コードに直接コンパイルすることもできましたが、Microsoftはそうすることに決めませんでした。これらのプログラムでは、設計上、フレームワークをインストールする必要があります。現在のように、.Net フレームワークが必要です。C# と .Net が最初に導入された 2001 年には、誰もがインストールする必要があったため、これは大きな問題でした。現在、Windows 7 (および Vista) にはプリインストールされているため、ユーザーにとって使いやすくなっています。サーバー側 (Web アプリ) の場合も、多くのクライアント コンピューターにインストールする必要がないため、それほど大きな問題ではありません。

1 つの見方としては、各プログラムがすべてのライブラリを必要とし、すべてのプログラムが使用する .Net ライブラリの独自のコレクションを持っていると、バグ修正を維持することがより困難になるということです。コンピューターにフレームワークを 1 つインストールすることで、バグが見つかった場合、Microsoft はフレームワークの 1 つのバージョンにパッチを適用できます。各プログラムに独自のライブラリ ファイルのセットがある場合に、ファイルが複数の場所にある可能性があります。

移植性に関しては、Mono を使用して、これらの同じ .Net (C#) バイナリを Linux と Mac で実行できます。もちろん、これらの他のプラットフォームでは、Mono を機能させるためにインストールする必要があります。

于 2012-09-11T00:25:17.790 に答える