VSTS中配置相同的两个构建生成压缩文件数量不一致问题求助
遇到这种参数配置完全一致但构建输出却有差异的情况确实挺头疼的,不过通常都是一些容易被忽略的隐藏因素在作祟。结合你描述的场景,给你几个具体的排查方向,你可以逐一验证:
检查构建代理的环境差异:虽然构建定义里的参数完全相同,但两个构建说不定跑在不同的代理机器上?不同代理的MSBuild版本、.NET SDK版本可能存在差异,而这些版本差异会影响打包逻辑(比如某些旧版本的MSBuild不会生成额外的符号包或附属资源包)。你可以去两个构建的日志里搜索
MSBuild version或者.NET SDK相关的内容,对比两者的环境是否一致。排查项目文件的条件性配置:有时候项目文件(
.csproj/.vbproj)里会藏着基于构建变量的条件逻辑,比如针对特定构建定义名称触发额外打包步骤。举个例子,可能项目里有类似这样的配置:<PropertyGroup Condition="'$(Build.DefinitionName)' == 'BRAVO'"> <GenerateAdditionalPackage>true</GenerateAdditionalPackage> </PropertyGroup>建议对比两个构建对应的分支下的项目文件,重点看
<PropertyGroup>和<Target>节点,有没有这类针对构建名称、分支的条件配置。深挖构建日志的细节差异:这是最能找到根源的一步。下载两个构建的完整日志(不要只看摘要),搜索
Creating package、Publish target这类和打包相关的关键词,看看BRAVO构建里多出来的C.zip是在哪个步骤生成的——比如是不是NuGet包的自动打包?还是Web项目的附属语言包?另外,还要确认日志里实际传递给MSBuild的参数是否完全一致,有时候代理的环境变量可能会影响参数的实际值,比如$(build.artifactstagingdirectory)的路径是否有特殊字符(不过这个概率较低)。关联触发器差异与分支内容:你提到两个构建的导出XML里只有触发器不同,那这个触发器对应的分支会不会有差异?比如BRAVO构建触发的分支里,项目结构和ALPHA的分支不一样——比如多了一个需要单独打包的子项目,或者某个类库项目的
<GeneratePackageOnBuild>被设置为true,而ALPHA分支里这个配置是false?检查工作区清理设置:看看两个构建定义里的「工作区」配置,是否开启了「清理工作区」选项?如果ALPHA构建没有清理工作区,可能之前构建的残留文件覆盖了部分输出,导致少生成了一个zip;而BRAVO构建清理了工作区,所以生成了完整的输出包。
内容的提问来源于stack exchange,提问作者Yannick R.

