8

A次のアセンブリを生成するいくつかの c# プロジェクトで構成される複雑なライブラリがあります。

  • 中心
  • A.キャッシング
  • A.ロギング
  • A.MongoDb

このライブラリは私が作成したもので、そのソース コードに完全にアクセスできます。いくつかの NuGet パッケージに依存します。

  • mongocsharpdriver
  • EnterpriseLibrary.Caching
  • EnterpriseLibrary.Logging

これらのライブラリ (MongoDb ドライバーと EntLib) は、GAC にはインストールされません。

また、Web プロジェクトがBあり、ライブラリを DLL への参照として使用したいA(ソリューションにプロジェクトを含めないB)。Web プロジェクトは、いくつかの NuGet パッケージに依存しています。

  • mongocsharpdriver
  • EnterpriseLibrary.Logging

ソリューション内のこれらのパッケージのバージョンは、同期的に開発されていないため一致しませんABライブラリAは 1 年前に開発され、それ以来そのまま使用されています。

質問: 次のようにライブラリを配布する適切な方法は何ですかA:

  1. Alib依存関係が参照されていなくても、どのソリューションでもそれを使用できます。
  2. ソリューションに独自のバージョンの libA依存関係がある場合、それらは競合しません。

私の現在のアプローチ:

  1. 私のソリューションから、次の 4 つの dll を参照しますA.Core, A.Caching, A.Logging, A.MongoDb
  2. 次に、NuGet のすべての依存関係が存在しない場合は、ソリューションに追加します。
  3. ソリューションBがmongocsharpdriverバージョン1.5を使用し、libAがバージョン1.1を使用するため、時々壊れます(バージョンは互換性がありません)。

それで、私は何をしましょうか?「参照対参照の参照」の競合を処理する正しい方法は何ですか?

4

1 に答える 1

7

共有参照を管理する最良の方法は、ライブラリA用の独自のNuGetパッケージを作成することです。これは、特に、ライブラリAが依存する依存関係(バージョンを含む)を定義します。ライブラリAをパブリックNuGetフィードに公開したくない場合は、独自のフィードをホストできます

NuGetには、プロジェクトとその依存関係と互換性のある依存関係のバージョンを見つけようとする複雑な依存関係解決ルールがいくつかあります。残念ながら、これでも上記のポイント3の問題は解決されません。この場合、ソリューションとその依存ライブラリは、同じ外部依存関係の相互に互換性のないバージョンを使用します。この場合、同じバージョンのmongocsharpdriverを使用するように、ソリューションBまたはライブラリAのいずれかを作り直す必要があります。

于 2012-09-18T12:32:38.003 に答える