我有一个 .csproj
文件,当我通过TeamCity构建它时,与通过msbuild.exe
可执行文件构建时的行为不同。如果我知道原因,我可以尝试修复它,但是我已经失去了想法。
命令行:(为了可读性进行格式化)
"C:\Program Files (x86)\MSBuild\12.0\bin\msbuild.exe"
Web\MyProject\MyProject.csproj
/p:Configuration=Dev;PublishProfile=Dev.pubxml;OutputPath="bin\\";DeployOnBuild=true
/t:Package
TeamCity构建步骤:(如在元运行器中显示,尽管我将其视为常规构建步骤时,也会出现相同的行为,并已删除dotNetCoverage
参数)
<runner name="Package Service" type="MSBuild">
<parameters>
<param name="build-file-path" value="Web/MyProject/MyProject.csproj" />
<param name="msbuild_version" value="12.0" />
<param name="run-platform" value="x86" />
<param name="msbuild.prop.Configuration" value="Dev" />
<param name="msbuild.prop.DeployOnBuild" value="true" />
<param name="msbuild.prop.PublishProfile" value="Dev.pubxml" />
<param name="msbuild.prop.OutputPath" value="bin\\" />
<param name="msbuild.prop.Platform" value="AnyCPU" />
<param name="targets" value="Package" />
<param name="teamcity.step.mode" value="default" />
<param name="toolsVersion" value="12.0" />
</parameters>
</runner>
这两者有什么区别?
我遇到的问题是,在 MyProject.csproj 依赖的程序集(但没有 "Dev" 构建配置)在使用msbuild时可以成功构建,但在使用 TeamCity(版本 9.1.1)时则会失败。
具体来说,两种方法都会从任务 ValidateGlobalPackageSetting
开始,但 TeamCity 则继续执行 ResolveProjectReferences
,而 msbuild 则继续执行 CollectFilesFromIntermediateAssembly
。
通过从两种方法中创建的 msbuild 诊断日志,我找到了问题,但我不确定该如何解决它。
Teamcity 日志显示 _DeployOnBuild = False
,但是我的 msbuild 日志显示 _DeployOnBuild = true
。这肯定可以解释我发现的行为差异,但我不知道为什么 TeamCity 忽略了 msbuild.prop.DeployOnBuild
属性。