gpt4 book ai didi

c# - 从也使用其中一些包的项目中引用使用 NuGet 包的程序集

转载 作者:太空狗 更新时间:2023-10-29 23:01:04 25 4
gpt4 key购买 nike

我有一个复杂的库 A,它由几个生成以下程序集的 c# 项目组成:

  • A.核心
  • A.缓存
  • A.日志记录
  • A.MongoDb

这个库是我写的,我可以完全访问它的源代码。它依赖于几个 NuGet 包,假设它们是:

  • mongocsharpdriver
  • EnterpriseLibrary.Caching
  • EnterpriseLibrary.Logging

这些库(MongoDb 驱动程序和 EntLib)未安装在 GAC 中。

我还有一个 Web 项目 B,我想在其中使用库 A 作为对 DLL 的引用(不包括解决方案 B< 中的项目)。Web 项目依赖于几个 NuGet 包,其中:

  • mongocsharpdriver
  • EnterpriseLibrary.Logging

解决方案 AB 中这些包的版本不匹配,因为它们不是同步开发的。库 A 是一年前开发的,从那时起就按原样使用。

问题分发库A的正确方法是什么:

  1. 即使未引用 lib A 依赖项,任何解决方案都可以使用它。
  2. 如果解决方案有自己的 lib A 依赖版本,它们不会冲突。

我目前的做法:

  1. 在我的解决方案中,我引用了四个 dll:A.Core、A.Caching、A.Logging、A.MongoDb
  2. 然后我将其所有 NuGet 依赖项添加到解决方案中(如果它们不存在的话)。
  3. 它有时会中断,因为解决方案 B 使用 mongocsharpdriver 版本 1.5 而库 A 使用版本 1.1(版本不兼容)。

那么,我该怎么办呢?处理“引用与引用的引用”冲突的正确方法是什么?

最佳答案

管理共享引用的最佳方法是 create your own NuGet package对于库 A,它定义了库 A 所依赖的任何依赖项(包括版本)。如果您不想将库 A 发布到公共(public) NuGet 提要,您可以 host your own feed .

NuGet 有一些 complex dependency resolution rules这将尝试找到与您的项目及其依赖项兼容的依赖项版本。不幸的是,这仍然不能解决上面第 3 点中的问题,您的解决方案及其依赖库使用相同外部依赖项的相互不兼容版本。在这种情况下,您只需重新设计解决方案 B 或库 A,以便它们使用相同版本的 mongocsharpdriver。

关于c# - 从也使用其中一些包的项目中引用使用 NuGet 包的程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12475179/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com