我正在寻找在多个开发团队(不在同一个办公室/存储库中)之间共享 .net 程序集(都处于持续开发阶段)的最合适的解决方案。
第一个团队已经开发并打包了许多有用的通用功能,称为core.dll
他们在许多应用程序和库中引用(作为 VS 项目)的程序集。该程序集又引用了非常标准的程序集,例如(system.dll
等)加上log4net.dll
(作为其存储库中的第三方):
- 核心.dll
- 系统.dll
- ...
- Log4Net.dll
在我这边,我开发了一个更高级别的程序集Library.dll
,我真的很想将开发的东西合并到其中Core.dll
而不是维护重复的代码:
- 库.dll
- 系统.dll
- ...
- Log4Net.dll <-- 我也在使用 Log4Net!
- Core.dll <--- 我想用它替换我的自制代码
最后,第一个团队反过来对我的代码感兴趣以开发他们自己的应用程序:
- 应用程序.exe
- 系统.dll
- ...
- Log4Net.dll
- 核心.dll
- 库.dll
在两个开发团队之间保持松散耦合看起来很糟糕:
首先,我可能不会使用与 in 相同的版本(
Log4Net.dll
至少我们可以同意使用相同的版本或不针对特定版本,因为这个第三方非常稳定)Library.dll
Core.dll
其次,当我重新整合我
Library.dll
时,Application.dll
我可能一直在使用不同的版本,Core.dll
因为他们将不断地让它进化。
目前我正在考虑保持我们团队之间的松散耦合是让他们为我提供隐藏的“log4net”参考,如下所示:
// Create a single assembly hiding for Log4Net
ILMerge /out:DCore.dll Core.dll Log4Net.dll /internalize
我自己也这样做:
// Create a single assembly hiding for Log4Net and Core
ILMerge /out:DLibrary.dll Library.dll DCore.dll Log4Net.dll /internalize
我不知道这个解决方案是否合适,任何其他保留我们两个团队相互联系的解决方案都受到热烈欢迎。
NB1:我不认为将库部署到 GAC 是一个好的解决方案,因为两者Core.dll
都Library.dll
处于持续开发阶段,并且缓存会随着太多无用的并行发布而增长。
NB2:我已阅读此线程,但我对 NuGet 以及它是否适合此处了解不多。