gpt4 book ai didi

.net - 合并程序集的最佳实践?

转载 作者:行者123 更新时间:2023-12-04 03:55:37 26 4
gpt4 key购买 nike

我想知道在创建要包含在与依赖项相关的其他项目中的库版本时的启发式方法是什么,以及是否应该包含它们。

我的问题如下:

我有一个 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 分发的依赖项?

还有其他方法可以解决这一切吗?

最佳答案

简短易懂的版本:

Every reference within one process to a given Assembly should reference the same version.



如果你不这样做,你可能会陷入大麻烦,因为应用程序的一部分由于版本不匹配而无法与另一部分通信。

即使使用像 log4net 这样的“真正私有(private)”的东西,您也可能会错过共享配置空间的可能性,例如为应用程序的所有部分使用通用的根记录器。当然,在这种情况下,最后的电话是 - 一如既往 - 与负责的开发人员联系。

另请参阅有关 ILMerge and 3rd party assemblies 的其他问题.

关于.net - 合并程序集的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/250438/

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