如何构建Visual Studio解决方案中没有的项目?

问题描述

是否有一种方法可以告诉Visual Studio构建不属于其解决方案的项目?我们一直在研究许多没有成功的选项,例如嵌套项目,共享项目和构建事件。

示例架构:

Project A
Project B
    ref Project i
    ref Project ii
Project C
--------------
Solution 1
    Project A
    Project B
    Project C
Solution 2
    Project i
    Project ii

现在,我无法构建解决方案1,因为无法构建项目B,因为尚未构建项目i和ii。我必须切换到解决方案2,进行构建,然后返回解决方案1,然后进行构建。这听起来似乎不是做事情的最佳方法,但是我不是一个要决定的人,而是在寻找一种无需在解决方案本身上添加Project i和ii即可简化流程的方法,即使添加了一些构建事件或解决方案什么都不会被允许。我该如何实现?

解决方法

我们提出的解决方案是在具有解决方案之外的项目依赖项的 C# 项目中添加预构建目标。即,项目 B 现在包含如下内容:

<ItemGroup>
    <ProjectDependency Include="..\Solution2\Project-i.csproj"/>
    <ProjectDependency Include="..\Solution2\Project-ii.csproj"/>
</ItemGroup>
<PropertyGroup>
    <BuildDependsOn>
        BuildProjectBDependencies;
        $(BuildDependsOn)
    </BuildDependsOn>
</PropertyGroup>
<Target Name="BuildProjectBDependencies">
    <MSBuild Projects="@(ProjectDependency)"
             Properties="OutDir=$(OutputPath);
                         Configuration=$(Configuration)"
             Targets="Build" />
</Target>

尝试构建项目 B 首先需要构建项目 i 和项目 ii,无论是在 Visual Studio 中还是使用自动构建过程。