TeamCity vs MSBuild命令行

TeamCity vs MSBuild命令行,msbuild,teamcity,Msbuild,Teamcity,我有一个.csproj文件,当我在TeamCity中构建它时,它的行为与通过msbuild.exe可执行文件构建它时不同。如果我知道原因,我可以尝试修复它,但我已经没有主意了 命令行:(格式化为可读性) TeamCity构建步骤:(正如metarunner中显示的那样,尽管我将其视为常规构建步骤时会得到相同的行为,并且我已删除了dotNetCoverage参数) 它们之间有什么区别? 我看到的行为是,MyProject.csproj所依赖的程序集(但没有“Dev”构建配置)在使用msbuil

我有一个
.csproj
文件,当我在TeamCity中构建它时,它的行为与通过
msbuild.exe
可执行文件构建它时不同。如果我知道原因,我可以尝试修复它,但我已经没有主意了

命令行:(格式化为可读性)

TeamCity构建步骤:(正如metarunner中显示的那样,尽管我将其视为常规构建步骤时会得到相同的行为,并且我已删除了
dotNetCoverage
参数)


它们之间有什么区别?

我看到的行为是,MyProject.csproj所依赖的程序集(但没有“Dev”构建配置)在使用msbuild时可以正常构建,但在使用TeamCity(版本9.1.1)时会失败

具体来说,这两种方法都将从任务
ValidateGlobalPackageSetting
开始,但TeamCity随后将继续执行
ResolveProjectReferences
,而msbuild将继续执行
CollectFilesFromIntermediateAssembly


在从msbuild为这两种方法创建了诊断日志之后,我发现了问题,但不确定如何修复它

teamcity日志具有
\u DeployOnBuild=False
,但我的msbuild日志具有
\u DeployOnBuild=true
。这肯定可以解释我看到的行为差异,但我不知道TeamCity为什么会忽略msbuild.prop.DeployOnBuild属性。

我在官方Jetbrains跟踪系统上找到了答案

显然,TeamCity不支持我所期望的任意
msbuild.prop.*
参数。它只支持
配置
平台
。对于其余部分,我需要添加以下行:

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

这可能不是问题,但有可能。。。您的toolsVersion在TeamCity设置中被显式指定为12,但在msbuild行中根本没有指定,在这种情况下,我认为它将只使用项目文件中指定的内容。@Nanhydrin-好主意。实际上,在我发表这篇文章之后,我确实尝试过显式地指定它,并且得到了相同的行为。不过谢谢你。
  <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>
<param name="runnerArgs" value="/p:DeployOnBuild=true;PublishProfile=%Configuration%.pubxml;OutputPath=&quot;bin\\&quot; />