なぜC#がC ++スタイルの静的ライブラリを持っていませんか? [閉まっている]
-
11-09-2019 - |
質問
最近、私はいくつかの共通のコードを共有するいくつかの小さな.NETアプリケーションに取り組んできました。コードは、ユニットテストを要求する離れて抽象 I / Oに導入いくつかのインターフェースを有しています。
私は、アプリケーションが外部に依存しないスタンドアロンのEXEファイルになりたかったです。これは、静的ライブラリのための完全なユースケースのように思えます。サードパーティ製のコントロールベンダーはあまりにもこのモデルから利益を得ることができるそういえば。
私が見逃している静的ライブラリといくつかの隠された不快はありますか?
C#の設計者はそれらを残し、なぜ何らかの理由はありますか?
編集:私はILMergeの承知しているが、それは静的ライブラリと同じ利便性を提供していません。
。解決
.NET実際には静的の道徳的相当するものをサポートしています 図書館。 (ファイルの拡張子は、通常、それはnetmoduleと呼ばれています .netmodule)。このブログ記事の中でそれについての詳細をお読みください。 それはよくVisual Studioのではサポートされていないことに注意してください ツールチェーンを構築します。私はの拡張メソッドだと思います 問題にも。 ILMergeは、これを取得するより良いツールです。 行われます。
他のヒント
このは、直接C#に、しかし全体の.NET傘とは関係ありません。確かに、それは ILMergeするを使用してアセンブリをマージすることは可能ですが、残念ながらそれはまだ研究プロジェクトだが、少なくともそのライセンス許可は、市販の努力のために使用します。それ以外は、ランタイム(CLR)は、単一の実行可能ファイルに合体することができない、ターゲットプラットフォームは、まだ.NETがインストールされている必要があります。
編集ます:
あなたがILMergeとあなたのポストを編集した前に、私はこれを入力しました。私は間違っているかもしれないが、実行時に.NETスタイルのダイナミックリンクを避けることから、追加の利点がありません。実行ファイルと一緒にサテライトアセンブリを置くことには何の問題もありません。マイクロソフトは、GACにそれらを置くことはお勧めしません。
静的LIBSを使用することは、ランタイム・プロバイダ(MS)によってパッチ可能でないという欠点を有している。
あなたは、静的なMFCのLIBSを使用してsecurify問題やその他のバグがMFC静的LIBSに発見された場合は、たとえば、MSはそれにパッチを適用することはできません(コードが実行可能ファイルにすでにあります)。共有DLLを使用すると、あなたがその気にせずにOSレベルで簡単にパッチすることができます。
もちろんは、共有ライブラリを持つことは、小さな欠点があります。システムへの依存が成立し、それらをインストールする必要があります。