Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.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
C# 为多个应用拆分.NET解决方案/Git repo_C#_Visual Studio_Git_Project Management_Projects And Solutions - Fatal编程技术网

C# 为多个应用拆分.NET解决方案/Git repo

C# 为多个应用拆分.NET解决方案/Git repo,c#,visual-studio,git,project-management,projects-and-solutions,C#,Visual Studio,Git,Project Management,Projects And Solutions,我目前有一个单一的解决方案,其中既包含迄今为止开发的一个应用程序,也包含针对所有国产库的项目。整个解决方案也保存在一个Git回购中。我现在将要开发第二个应用程序,它将利用这些库。该应用程序的发布周期将不同于第一个版本和不同的版本。我面临的一个或多个问题是如何分割代码,无论是在解决方案设置方面还是在Git方面 在讨论答案之前,还有一些其他有用的细节: 应用程序部署到共享网络驱动器,而不是单个计算机,因此我可以完全控制何时部署应用程序以及使用它们部署什么 构建后,应用程序不会共享库DLL。每个应用程

我目前有一个单一的解决方案,其中既包含迄今为止开发的一个应用程序,也包含针对所有国产库的项目。整个解决方案也保存在一个Git回购中。我现在将要开发第二个应用程序,它将利用这些库。该应用程序的发布周期将不同于第一个版本和不同的版本。我面临的一个或多个问题是如何分割代码,无论是在解决方案设置方面还是在Git方面

在讨论答案之前,还有一些其他有用的细节:

  • 应用程序部署到共享网络驱动器,而不是单个计算机,因此我可以完全控制何时部署应用程序以及使用它们部署什么
  • 构建后,应用程序不会共享库DLL。每个应用程序的文件夹中都有所有DLL、PDB和配置文件的完整副本
  • 目前,我是唯一一个做发布的人,但另外一两个可能最终会做发布,所以我想记住这一点
  • 我脑子里一直在想一些想法,但没有一个是令人满意的。我考虑过将所有内容都保存在一个解决方案/一个Git回购中。我还考虑过使用子模块在多个Git回购协议中拆分解决方案,但是子模块很麻烦。我还考虑过让每个应用程序都有自己的解决方案,并在另一个应用程序中创建所有库。接下来的问题是,我是否可以在VisualStudio中打开多个解决方案。这些库经常需要随着应用程序的变化而变化,因此在单独的解决方案或Git repos中对它们进行过多的分离会使库和应用程序很难保持同步。我关心的另一个问题是分支。如果我将解决方案拆分为多个Git repo,我可以为每个应用程序提供分支,但是如果我保留一个Git repo,我只能为所有应用程序提供一组分支


    我甚至可能没有向自己提出正确的问题,也有可能我只是有一个思维障碍,使我无法解决一个简单的问题。不管怎样,我都会听从SO社区的意见。我希望一切都清楚,但如果不清楚,我很乐意澄清。

    我会将所有内容分成单独的解决方案,特别是将在多个应用程序中使用的库。正如您所提到的,不同的应用程序和库有不同的发布周期,最终可能会单独开发。由您将它们划分为逻辑单元,并确保库独立于它们将在其中使用的应用程序

    至于在Git中要做什么,对于每个逻辑工作单元(应用程序或库)有单独的存储库是有意义的,或者至少在同一存储库中有单独的分支


    祝你好运,不要泄气。从长远来看,这将对您有益。

    虽然子模块可能会很麻烦,但我认为子模块是进行此操作的方式。我猜你的目录结构是这样的:

    mainapp
     \mainappdir
       \somefiles
        ...
    |
    |
     \library1
    |
     \library2
    
    在这种情况下,您希望library1和library2成为子模块(这可能很明显)。它们真的没那么糟糕,只是在Git IMHO需要习惯的东西


    另一个需要考虑的问题是将Laby1和LabeReal2链接到两个应用程序的文件系统上。在这种情况下,每个库都可以是它自己的repo,但不能使用子模块进行管理(我认为您必须将它们添加到.gitignore文件中)。通过在每个应用程序中使用符号链接,repo/源代码管理将仅位于两个库目录上。在一个位置拉取/分支会对上两个应用程序产生影响,而不需要管理每个应用程序的库文件。

    我不知道是否有必要将库单独放置在repo中。我同意所有的图书馆都只有一份回购协议。不过,你的最后一句话让我有点困惑。他说,如果你使用指向库的符号链接,你可以将它们保存在单独的解决方案中,但也可以在两个应用程序解决方案中将库作为项目引用。由于符号链接都指向相同的文件,因此在开发任何一个应用程序期间所做的任何更改都将影响这两个应用程序。这将使您不需要子模块。听起来它只是一个穷人的子模块,对其他可能在项目中工作的开发人员不友好。我想我必须以这样或那样的方式使用子模块。是的,韦德·坦迪说得对。一次更新将自动影响两个应用程序,而无需git拉动每个子模块。我不一定把它称为“穷人的”解决方案。当然,这有点僵硬,但如果你必须在同一时刻更新两个应用程序,也没那么糟糕。您可以轻松地将app1 app2 library1 library2保留在相同的目录中,以减轻混淆。