TeamCity与MSBuild命令行的比较

3

我有一个 .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 属性。


可能不是问题,但以防万一...在TeamCity设置中,您的toolsVersion明确指定为12,但在msbuild行中根本没有指定,在这种情况下,我认为它将只使用项目文件中指定的内容。 - Nanhydrin
@Nanhydrin - 很好的想法。实际上,在我发完这篇帖子后,我确实尝试了明确指定它,并得到了相同的行为。不过还是谢谢你。 - Bobson
1个回答

0

我在Jetbrains官方跟踪系统上提出了这个问题,并得到了答案。

显然,TeamCity不支持我预期的任意msbuild.prop.*参数。 它仅支持ConfigurationPlatform这两个参数。 对于其余的参数,我需要添加这一行:

<param name="runnerArgs" value="/p:DeployOnBuild=true;PublishProfile=%Configuration%.pubxml;OutputPath=&quot;bin\\&quot; />

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接