TeamCity 与 MSBuild 命令行
TeamCity vs MSBuild command line
我有一个 .csproj
文件,当我在 TeamCity 中构建它时,它的行为与我通过 msbuild.exe
可执行文件构建它时的行为不同。如果我知道 为什么 ,我可以尝试修复它,但我 运行 没主意了。
命令行:(为了便于阅读而格式化)
"C:\Program Files (x86)\MSBuild.0\bin\msbuild.exe"
Web\MyProject\MyProject.csproj
/p:Configuration=Dev;PublishProfile=Dev.pubxml;OutputPath="bin\";DeployOnBuild=true
/t:Package
TeamCity 构建步骤:(因为它显示在元运行ner 中,尽管我将其视为常规构建步骤时得到相同的行为,并且我删除了 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
属性.
我在官方 Jetbrains 跟踪系统上 asked this 并得到了答案。
显然,TeamCity 并不像我预期的那样支持任意 msbuild.prop.*
参数。它唯一支持的两个是 Configuration
和 Platform
。对于其余部分,我需要添加这一行:
<param name="runnerArgs" value="/p:DeployOnBuild=true;PublishProfile=%Configuration%.pubxml;OutputPath="bin\" />
我有一个 .csproj
文件,当我在 TeamCity 中构建它时,它的行为与我通过 msbuild.exe
可执行文件构建它时的行为不同。如果我知道 为什么 ,我可以尝试修复它,但我 运行 没主意了。
命令行:(为了便于阅读而格式化)
"C:\Program Files (x86)\MSBuild.0\bin\msbuild.exe"
Web\MyProject\MyProject.csproj
/p:Configuration=Dev;PublishProfile=Dev.pubxml;OutputPath="bin\";DeployOnBuild=true
/t:Package
TeamCity 构建步骤:(因为它显示在元运行ner 中,尽管我将其视为常规构建步骤时得到相同的行为,并且我删除了 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
属性.
我在官方 Jetbrains 跟踪系统上 asked this 并得到了答案。
显然,TeamCity 并不像我预期的那样支持任意 msbuild.prop.*
参数。它唯一支持的两个是 Configuration
和 Platform
。对于其余部分,我需要添加这一行:
<param name="runnerArgs" value="/p:DeployOnBuild=true;PublishProfile=%Configuration%.pubxml;OutputPath="bin\" />