如何编写依赖C#项目的MSBuild实用工具项目并支持并行构建?
问题根因
你遇到的多线程构建下依赖顺序失效问题,本质是默认ProjectReference的依赖识别逻辑依赖MSBuild内置的项目引用处理流程,你的自定义.proj项目没有关联对应的内置目标,导致MSBuild没有把你声明的项目引用识别为构建前置依赖。
极简配置方案
你不需要引入任何.NET SDK相关的导入,仅需在你的.proj文件中补充3处配置即可:
- 根Project节点声明默认目标,不需要关联任何SDK
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- 声明
ProjectReference时添加ReferenceOutputAssembly="False"元数据,明确仅需要构建顺序依赖,不需要引用目标项目的输出程序集
<ItemGroup> <ProjectReference Include="..\你的目标C#项目路径\项目名.csproj"> <ReferenceOutputAssembly>False</ReferenceOutputAssembly> </ProjectReference> </ItemGroup>
- 你的自定义构建目标显式依赖内置的
ResolveProjectReferences目标,该目标会自动触发所有引用项目的前置构建
<Target Name="Build" DependsOnTargets="ResolveProjectReferences"> <!-- 此处写入你的自定义构建逻辑 --> <Message Text="自定义逻辑执行,目标C#项目已完成构建" Importance="high" /> </Target> </Project>
效果验证
配置完成后,无论是单线程构建还是msbuild /m多线程并行构建,MSBuild都会优先完成你引用的C#项目构建,再执行你的自定义逻辑,同时你的逻辑不会嵌入到C#项目的构建流程中,也不会影响C#项目自身的其他依赖项并行执行。
内容的提问来源于stack exchange,提问作者mark
相关产品推荐
相关产品推荐

