问题描述
是否有一种方法可以告诉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 中还是使用自动构建过程。