如何让MSBuild按B→A顺序构建且可在VS中单独编译A项目
问题
现有包含项目A和项目B的解决方案,项目A依赖项目B的编译输出,但项目B编译速度较慢,而项目A需要在Visual Studio中频繁单独编译。需要同时满足两个需求:
- 使用MSBuild进行整体构建时,必须遵循B→A的构建顺序(确保B至少完成一次编译)
- 在Visual Studio中可以单独编译项目A,无需每次都触发项目B的编译
已尝试的方案
- 修改
.sln文件中的ProjectSection(ProjectDependencies)节点配置,但未达到预期效果 - 在项目A的
.csproj文件中添加项目引用,并设置:
但仍无法满足单独编译A的需求<ProjectReference Include="..\B.csproj"> <ReferenceOutputAssembly>false</ReferenceOutputAssembly> </ProjectReference>
补充说明:项目B属于代码仓库的一部分,偶尔会有代码变更,且bin目录已添加到.gitignore中,因此需要保证首次构建或B变更时能自动编译B,日常单独编译A时不触发B的编译。
最优解决方案
直接修改解决方案文件(.sln),将项目B的定义放在项目A的定义之前。这样就能同时满足两个需求:
- MSBuild执行整体构建时,会按照
.sln文件中项目的排列顺序依次编译,自然保证B先于A完成构建 - 在Visual Studio中右键单独编译项目A时,只会编译A本身,不会触发项目B的编译
内容的提问来源于stack exchange,提问作者TSDrake
相关产品推荐
相关产品推荐

