12

最近、いくつかの共通コードを共有するいくつかの小さな .NET アプリケーションに取り組んでいます。コードには、単体テスト用の I/O呼び出しを抽象化するために導入されたいくつかのインターフェイスがあります。

アプリケーションを、外部依存関係のないスタンドアロンの EXE にしたかったのです。これは、静的ライブラリの完璧な使用例のようです。考えてみれば、サードパーティのコントロール ベンダーもこのモデルから利益を得ることができます。

私が見逃した静的ライブラリの隠れた問題はありますか?

C# の設計者がそれらを除外した理由はありますか?

編集: ILMerge は知っていますが、静的ライブラリと同じ利便性は提供していません。

4

3 に答える 3

11

実際、.NET は静的ライブラリと同等の道徳的機能をサポートしています。これはネットモジュールと呼ばれます (ファイル拡張子は通常 .netmodule です)。詳細については、このブログ投稿を参照してください。Visual Studio のビルド ツール チェーンでは十分にサポートされていないことに注意してください。拡張メソッドも問題だと思います。ILMerge は、これを行うための優れたツールです。

于 2009-12-02T21:58:08.823 に答える
3

これは、C# とは直接関係ありませんが、.NET 全体に関係しています。確かに、ILMergeを使用してアセンブリをマージすることは可能ですが、残念ながらこれはまだ研究プロジェクトですが、少なくともそのライセンスでは商用目的での使用が許可されています。それ以外では、ランタイム (CLR) を 1 つの実行可能ファイルに結合することはできず、ターゲット プラットフォームに .NET をインストールする必要があります。

編集:

ILMerge で投稿を編集する前に、これを入力していました。私は間違っているかもしれませんが、実行時に .NET スタイルの動的リンクを回避することによる追加の利点はありません。サテライト アセンブリを実行可能ファイルと一緒に配置しても問題はありません。Microsoft は、それらを GAC に配置することをお勧めしません。

于 2009-12-02T21:04:54.340 に答える
1

静的ライブラリの使用には、ランタイム プロバイダー (MS) によるパッチ適用ができないという欠点があります。

たとえば、静的 MFC ライブラリを使用していて、セキュリティ保護の問題またはその他のバグが MFC 静的ライブラリで見つかった場合、MS はパッチを適用できません (コードは既に実行可能ファイルに含まれています)。共有 DLL を使用すると、OS レベルで簡単にパッチを適用できます。

もちろん、共有ライブラリには小さな欠点があります。依存関係が発生し、システムにインストールする必要があります。

于 2009-12-02T21:07:16.023 に答える