我的团队正在致力于将几个传统的移动应用程序转换为Xamarin Forms应用程序。目前,每个应用程序都有自己的解决方案,当涉及到它们都使用一组公共的后端软件库时,这并不理想。我们计划将所有较小的解决方案整合到一个解决方案中,包含应用程序以及通用库。
然而,我的一位队友提出了一个合理的担忧,即一个Xamarin Forms应用程序如何生成几个项目(核心、Android、iOS等),最终导致一个普遍笨拙的解决方案。我同意他的观点,当我们添加更多的应用程序时,当前的设置可能不会扩展得太好--即使我们在解决方案文件夹中对项目进行分组,在解决方案中存在一定数量的项目后,Visual Studio最终也会变得缓慢。
因此,我们正在考虑回到让每个应用程序都有自己的解决方案,每个解决方案包含该应用程序的几个Xamarin Forms项目,如上所述。但这让我们回到了如何合理管理共享库代码的问题上。我现在的想法是将共享项目用于库,或者将它们组装到应用程序解决方案将消耗的NuGet包中。我是不是走对了路,或者有没有人知道更好的方法?
发布于 2020-05-07 08:37:43
有几种不同的方法可以使用子树、子模块、NuGet包等来管理共享代码项目。每种方法都有优缺点,所以最好根据该项目的预期用例来决定。
子树本质上是获取远程存储库的副本,并将其拉入父存储库。这使得从远程存储库引入更改变得很容易,但是如果期望将更改推回,则会更加困难,因为它不了解远程存储库。虽然可以将更改推回,但根据repos的历史记录数量,可能需要大量的时间。
子模块类似于子树,不同之处在于,它不是复制一个副本,而是根据它所指向的特定提交来跟踪远程repo。这基本上可以被认为是父库中的另一个repo,它使得将更改推回远程repo变得更加容易,但代价是使从远程repo中提取/更新变得更加困难。
NuGet包非常便于安装、更新和发布给其他人,而不必公开源代码,但这需要更多的初始设置来生成每个包版本,并且代价是使调试比使用实际源代码更困难。如果共享代码库将分发给其他人,这是一个特别好的选择。
对于大多数项目,如果希望对共享项目进行潜在的更改,我会为每个项目推荐一个代码库,并将共享项目设置为每个项目中的子模块。这确实需要一些学习来适应签出和更新子模块的不同过程,但实际上并不是那么困难,并且值得学习所需的几个git命令。docs提供了一个很好示例,说明了如何开始使用子模块。
https://stackoverflow.com/questions/61643971
复制相似问题