1

我正在寻找在多个开发团队(不在同一个办公室/存储库中)之间共享 .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.dllCore.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.dllLibrary.dll处于持续开发阶段,并且缓存会随着太多无用的并行发布而增长。

NB2:我已阅读此线程,但我对 NuGet 以及它是否适合此处了解不多。

4

1 回答 1

2

就我个人而言,我认为 NuGet 将在管理包、它的依赖项和版本控制方面帮助你很多。NuGet 与所有主要 CI 服务器和 Visual Studio 完美集成。可以在 NuGet 文档中找到更多信息:

http://docs.nuget.org/docs/Creating-Packages/Hosting-Your-Own-NuGet-Feeds

您可以在以下博客文章中阅读有关 NuGet 如何处理程序集版本控制的更多信息: http ://blog.davidebbo.com/2011/01/nuget-versioning-part-1-taking-on-dll.html

于 2012-11-23T18:05:38.877 回答