Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 如何为多个Xamarin应用程序构建项目_Visual Studio_Xamarin_Shared Libraries_Solution_Ms Project - Fatal编程技术网

Visual studio 如何为多个Xamarin应用程序构建项目

Visual studio 如何为多个Xamarin应用程序构建项目,visual-studio,xamarin,shared-libraries,solution,ms-project,Visual Studio,Xamarin,Shared Libraries,Solution,Ms Project,我的团队正在致力于将一些传统的移动应用程序转换为Xamarin表单应用程序。目前,每个应用程序都有自己的解决方案,当它们都使用一组通用的后端软件库时,这并不理想。我们计划将所有较小的解决方案整合到一个包含应用程序和公共库的单一解决方案中 然而,我的一位队友提出了一个合理的担忧,即如何使用一个Xamarin Forms应用程序生成多个项目,如core、Android、iOS等,最终产生一个普遍笨拙的解决方案。我同意他的观点,当前的设置可能不会扩展得太好,因为我们会添加更多的应用程序-即使我们将项目

我的团队正在致力于将一些传统的移动应用程序转换为Xamarin表单应用程序。目前,每个应用程序都有自己的解决方案,当它们都使用一组通用的后端软件库时,这并不理想。我们计划将所有较小的解决方案整合到一个包含应用程序和公共库的单一解决方案中

然而,我的一位队友提出了一个合理的担忧,即如何使用一个Xamarin Forms应用程序生成多个项目,如core、Android、iOS等,最终产生一个普遍笨拙的解决方案。我同意他的观点,当前的设置可能不会扩展得太好,因为我们会添加更多的应用程序-即使我们将项目分组到解决方案文件夹中,在解决方案中存在一定数量的项目后,Visual Studio最终也会慢到爬行


因此,我们正在考虑将每个应用程序放在自己的解决方案中,每个解决方案都包含该应用程序的几个Xamarin表单项目,如上所述。但这让我们回到了如何合理管理共享库代码的问题。我目前的想法是只为库使用共享项目,或者将它们组装成应用程序解决方案将使用的NuGet软件包。我在这方面做得对吗,或者有人知道更好的方法吗?

有几种不同的方法可以使用子树、子模块、NuGet包等来管理共享代码项目。每种方法都有优点和缺点,因此最好根据该项目的预期用例来决定

子树实质上获取远程回购的副本,并将其拉入父回购。这使得从远程回购中引入变更变得容易,但如果预计变更将被推回,则可能会更加困难,因为它不知道远程回购。尽管有可能将变化推后,但根据回购历史记录的数量,这可能需要相当长的时间

子模块与子树类似,不同之处在于它不复制副本,而是根据指向的特定提交跟踪远程repo。这本质上可以被认为是父级内部的另一个repo,它使得将更改推回到远程repo更加容易,但代价是使从远程repo中提取/更新变得更加困难

NuGet软件包的安装、更新和发布非常方便,无需公开源代码,但这需要更多的初始设置来生成每个软件包版本,并且代价是调试比实际源代码更困难。如果将共享代码库分发给其他人,这是一个特别好的选择


对于大多数项目,如果预期可能会从一个消费项目更改该共享项目,我会为每个项目推荐一个回购协议,并将共享项目设置为每个项目中的子模块。要适应签出和更新子模块的不同过程确实需要一些学习,但实际上并不那么困难,也不值得学习所需的几个git命令。提供了一个关于如何开始使用子模块的好例子。

我没有真正考虑子树,但这是一个有用的总结。我们可能会在界面的两侧做一些工作,所以可能不是我们最好的选择。我考虑过子模块。我认为这是一个不错的选择,但我的团队刚刚开始接触git,我不认为现在使用更高级的功能是一个好主意。我已经做了一些初步的可行性演示,它似乎可以与我们的设置工作。显然,实际上可以将调试符号放进去,这样会有所帮助。我可能会从一个添加现有项目到解决方案路线开始,该路线具有大致相同的解决方案/项目布局,然后切换到NuGet。是的,如果您的团队开始学习git,我可能会从NuGet软件包开始,然后可能先学习如何使用子模块,以便能够教给您的团队。“一个sln”方法并不是最糟糕的选择,但它肯定会变得相当麻烦。他们最近推出了帮助调试NuGet软件包的产品,我还没有尝试过,但如果它运行良好,可能会使调试软件包变得非常简单,因此可能不值得切换到子模块。您好,有兴趣了解您在这方面的体验。可能面临相同的场景,其中多个应用程序可能使用相同的代码、视图、视图模型,并考虑是否可以在同一解决方案中容纳这些内容。