サードパーティの dllとマージされる単一のdllを作成したいと考えています。これは、エンド コンシューマーが 2 つではなく 1 つの dll のみを処理する必要があることを意味します。
補強のために、サードパーティの dll は nLog であるとしましょう。マージされた dll のコンシューマーがプロジェクトで参照として NLog を既に持っている場合、どのように対処すればよいですか?
理想的には、プロジェクト内の NLog 名前空間を「XyzNLog」に変更することです。これは、ユーザーがエイリアシングを行う必要がないことを意味します...どうすればこれを行うことができるでしょうか?
これで、NLog のプロジェクトにエイリアスを追加して、それを XyzNLog として参照する必要があることがわかりましたが、競合が発生しないように、マージされた dll のコンシューマーにも同じエイリアスを適用したいと考えています。
更新 - 解決策
http://blog.mattbrailsford.com/2010/12/10/avoiding-dependency-conflicts-using-ilmerge/
ビンゴ!したがって、ILMerge を使用することで、サードパーティ ライブラリ DLL をプロバイダー独自の DLL とマージすることが可能になります。つまり、展開する DLL は 1 つだけになります。しかし、それだけではありません。実際にはさらに一歩進んで、ILMerge にすべての依存関係を内部化するように指示できます。これにより、すべてのサード パーティ クラスが内部として宣言されるように変換されます。つまり、これらのクラスは、最終的な DLL 内からのみ使用できます。ウーフー!問題は解決しました =)
これを考えると、私のdllの消費者もNLogを持つことができるという問題がなくなります...参照されているNLogがすべて内部に移行するためです! これはまさに私が欲しいものです。
誰かがこれについてフィードバックや考えを持っていますか?