也许单个存储库会对您有所帮助。使用相对路径来包含来自不同应用程序的共享库。
每个应用程序仍然可以拥有自己的解决方案文件,并且您的 CI 设置也保持原样。不同的是,您在所有应用程序中拥有的共享项目将使用相对路径进行引用。例如:
Repository root\Core\Component1\Component1.csproj
Repository root\Core\Component2\Component2.csproj
Repository root\Applications\App1\App1.sln
Repository root\Applications\App1\Domain\Domain.csproj
Repository root\Applications\App1\Web\Web.csproj
Repository root\Applications\App2\App2.sln
Repository root\Applications\App2\Domain\Domain.csproj
Repository root\Applications\App2\Web\Web.csproj
现在,您的不同应用程序可以通过使用相对路径将现有项目添加到解决方案来包含他们需要的 Core\Components。
您的持续集成系统将使用 VCS 触发器监视应用程序和依赖项,因此只有相关的更改才会触发构建。因此,如果 App1 开发人员对 Component1 进行了更改,并且 Component1 也被 App2 使用,则构建服务器将触发对 App1 和 App2 的构建,发出任何重大更改的信号。但是,如果 App2 不依赖于 Component1,则只会构建 App1。这是通过为您的应用程序配置构建触发器来实现的。
与使用单个 .sln 相比,此策略的一个好处是您不必在每次构建解决方案时都构建所有内容(也不必在每次使用不同的应用程序时配置要构建的项目)
另请注意,您可以使用多个存储库来实现此目的。但这意味着您需要在正确的位置检查它们,以便您的相对路径有效。它也很模糊,因为如果您检查 App1 并尝试构建它。它根本行不通,您必须弄清楚要签出的其他存储库等。
您正在使用 Mercurial,但仅供参考,使用 Git 处理的方式(其中一种)是使用submodules。