代码之家  ›  专栏  ›  技术社区  ›  Simon P

如何将多个Visual Studio解决方案链接在一起?

  •  39
  • Simon P  · 技术社区  · 16 年前

    我有3个解决方案,解决方案A需要解决方案B和C中构建的DLL版本才能编译。无法将其合并到一个解决方案…

    到目前为止,Visual Studio似乎不支持解决方案引用,并且如果我这样做的话,msbuild足够聪明,可以知道您正在从另一个解决方案等构建一个解决方案。总的目标是使多个解决方案看起来几乎就像只有一个解决方案A。

    我认为这是一个常见的问题,但你如何将其很好地联系起来呢?

    8 回复  |  直到 8 年前
        1
  •  29
  •   Community CDub    8 年前

    这个问题突然出现在 different 但是 related 形式。实际上有一个 MSDN page that covers this .

    您要寻找的是一种类似于 大系统的分区单解模型 . 拥有一个“一切”解决方案,可以构建一切并维护组件间的依赖关系。这是您在需要构建解决方案A时构建的解决方案。然后,您将拥有单独的解决方案,只包含组件B或C。本质上,您仍将拥有3个解决方案,但您将把解决方案B和C中的项目添加到解决方案A中。

        2
  •  4
  •   Paul Redman    16 年前

    我最近发现,在Visual Studio 2008中,可以在多个解决方案中包含现有项目。到目前为止唯一的缺点似乎是,如果您对共享项目进行了更改,并且打开了多个使用该共享项目的解决方案,那么您将被要求“重新加载”其他解决方案。

    所以,只需“添加现有项目”到所有需要该项目的解决方案中。我正在我当前的站点上使用TFS,并且似乎没有源代码管理乙醚的问题。

        3
  •  3
  •   Dean    16 年前

    我相信这应该是你所关注的项目级别。构建解决方案B和C中包含的项目,然后在解决方案A中的相关项目中添加对DLL的引用。

    在msbuild中,如果有属性组

    <PropertyGroup>
    
    <SolutionsToBuild>SolutionB</SolutionsToBuild>
    <SolutionsToBuild>SolutionC</SolutionsToBuild>
    <SolutionsToBuild>SolutionA</SolutionsToBuild>
    </PropertyGroup>
    

    然后执行msbuild任务

    <MSBuild Projects="@(SolutionsToBuild)"/>
    

    希望这有帮助

        4
  •  1
  •   bushed    14 年前

    您可以尝试自动执行合并过程以节省一些时间: http://code.google.com/p/merge-solutions/

    尽管我们的问题略有不同:大约有15个解决方案(总共150个项目)使用一个公共库。问题是,如果我们试图将所有代码合并为一个,以便从公共库中重构/消除冗余代码。 1。合并15个解决方案需要大量的点击和等待 2。结果的解决方案从来都不是最新的-没有人因为它的大小而费心更新它。

        5
  •  0
  •   Brann    16 年前

    您可以尝试为您在项目的预生成事件(在解决方案A中)所依赖的dll(在解决方案B和C中)添加命令行生成命令。

        6
  •  0
  •   user16324    16 年前

    如果不能将项目B和C与项目A放在同一个解决方案中,那么在构建项目A时,就无法确保为B和C提供包含最新源代码的二进制文件。

    我看到的最简单的解决方案是在源代码存储库中有一个公共文件夹,在该文件夹中,如果需要共享二进制文件,每个项目都会复制它们。然后,只要本地文件夹与存储库相同,所有其他项目都可以引用该文件夹中的二进制文件。

    不是一个完美的解决方案,但很容易使用。

        7
  •  0
  •   Juozas Kontvainis    16 年前

    可以将生成文件项目添加到解决方案A中,该解决方案将生成解决方案B和C(例如使用msbuild),并使该生成文件项目中的所有项目都依赖于该生成文件项目。通过这种方式,您将无法向B和C中的项目添加项目引用,但您可以使用dll引用,并且它们将始终从最新的源构建。

        8
  •  0
  •   Community CDub    8 年前

    根据 this answer ,我建议你 创建自己的批处理文件 这将为您构建相关的解决方案。

    这非常方便使用,因为生成过程会将生成进度(类似于Visual Studio中的输出窗口)输出到针对每个生成执行的命令升级。

    此外,在需要先构建一个解决方案再构建另一个解决方案的情况下,可以编写自己的构建顺序,例如:

    1. 构建解决方案B
    2. 构建解决方案C
    3. 构建解决方案A(内部使用“解决方案B”和“解决方案C”构建文件)

    我很快就写了 script to clarify the build order mentioned above 并支持大多数现代Visual Studio版本。

    当做。