我想知道在创建要包含在与依赖项相关的其他项目中的库版本时的启发式方法是什么,以及是否应该包含它们。
我的问题如下:
我有一个 CommonUtilities 库,顾名思义,它提供了一组可以在多个地方使用的实用程序。CommonUtilities 的依赖项包括 log4net.dll(日志框架)和 Oracle.DataAccess.dll(数据库驱动程序)。
我有另一个名为 MyProject 的项目,我想在其中包含 CommonUtilities。MyProject 还依赖于 Oracle.DataAccess。
如果我使用 ILMerge 并将 CommonUtilities 合并到单个程序集 CommonUtilities.dll 中并从 MyProject 中引用它,那么一切都会编译,但我确信我应该从 MyProject 显式引用 Oracle.DataAccess,因为它是一个依赖项,而不是使用合并到 CU 中的程序集。添加对 Oracle.DataAccess 的引用也会导致使用语句不明确,因为引用了两个 Oracle.DataAccess 程序集。
在我的情况下使用 ILMerge /Internalize 会导致编译错误,因为来自内部化的 Oracle.DataAccess 程序集的类型正在从 CommonUtilities 返回,并且它们被标记为内部 MyProject 无法识别返回的类型。
完成这项工作的唯一方法就是不将此特定程序集 (Oracle.DataAccess) 合并到 CommonUtilities 中,而仅从 MyProject 中引用它。这反过来又产生了一个新问题:我应该引用哪个 Oracle.DataAccess.dll - 是否使用 CommonUtils 分发的依赖项?
还有其他方法可以解决这一切吗?