どちらを使用する場合の影響と推奨シナリオは何ですか?
3 に答える
Assembly.Load
実行時に外部DLLを動的にロードするため、は動的参照です。静的参照は、.NETプロジェクトへの参照を追加し、その参照を使用してプロジェクトを構築する場合のように考えることができます。
編集:
MSDN Docから:
コンパイラは、ビルド時にアセンブリマニフェストのメタデータに静的参照を記録します。
うーん、これについては自分でわからない。より多くの訂正コメントを得るか、より良い答えを見ることを期待して、私は今のところ私の答えをここに残しておきます。
を参考に:
どちらを使用する場合の影響と推奨シナリオは何ですか?
通常、私が使用する場合Assembly.Load()
、それは私がプラガブルシステムを開発しているためです。動的参照により、必ずしもビルドの一部ではないアセンブリを含めることが容易になります。
動的にロードされたアセンブリから型をインスタンス化するには、少なくともある程度のリフレクションが必要です。動的にロードされる型が(静的にロードされるアセンブリからの)既知のインターフェイスまたは基本クラスを実装するようにすることで、必要なリフレクションの量を減らすことができます。
つまり、動的にロードされたアセンブリを使用するのは大変な作業です。ただし、そうすることで、ユーザーがプラグインを開発できるようにすることで、アプリケーションをより柔軟にすることができます。動的参照の予想される柔軟性(要件ではない場合があります)と、静的参照のVisualStudioによる設計時のサポートのトレードオフを比較検討してください。
プラグインアーキテクチャを構築する場合は、独自のAppDomainにアセンブリをロードすることを検討する価値があります。そうすることで、完全には信頼できない可能性のあるアセンブリのセキュリティ権限をよりきめ細かく制御できるようになり、実行時にアセンブリをアンロードできるという追加の利点が得られます。個人的には、AppDomainsでの作業は手間がかかることがわかりました。ただし、メリットが必要な場合は、AppDomainsが存在することを知っておくとよいでしょう。
MSDN( http://msdn.microsoft.com/en-us/library/yx7xezcf (VS.71).aspx)に記載されている動的参照は、ランタイムが実行する必要のある十分な情報のみを含む参照をロードするものとして動的参照を参照します。ロードされているアセンブリを検索します。静的参照を使用すると、アセンブリの場所(GAC、アプリケーションディレクトリなど)がわかっており、Assembly.loadを使用して引き続き実行できます。