【发布时间】:2015-02-12 05:17:07
【问题描述】:
我在使用 TeamCity 自动化构建引擎时遇到了问题。 我需要构建许多 vcxprojects,其中一些是 LIB 或 DLL,其余是 EXE 文件,使用以前构建的 LIB。
在 TeamCity 中设置一个 LIB 项目的示例是:
<runner id="RUNNER_15" name="MP3" type="MSBuild">
<parameters>
<param name="build-file-path" value="Audio\mp3\mp3.vcxproj" />
<param name="dotNetCoverage.NCover.HTMLReport.File.Sort" value="0" />
<param name="dotNetCoverage.NCover.HTMLReport.File.Type" value="1" />
<param name="dotNetCoverage.NCover.Reg" value="selected" />
<param name="dotNetCoverage.NCover.platformBitness" value="x86" />
<param name="dotNetCoverage.NCover.platformVersion" value="v2.0" />
<param name="dotNetCoverage.NCover3.Reg" value="selected" />
<param name="dotNetCoverage.NCover3.args" value="//ias .*" />
<param name="dotNetCoverage.NCover3.platformBitness" value="x86" />
<param name="dotNetCoverage.NCover3.platformVersion" value="v2.0" />
<param name="dotNetCoverage.NCover3.reporter.executable.args" value="//or FullCoverageReport:Html:{teamcity.report.path}" />
<param name="dotNetCoverage.PartCover.Reg" value="selected" />
<param name="dotNetCoverage.PartCover.includes" value="[*]*" />
<param name="dotNetCoverage.PartCover.platformBitness" value="x86" />
<param name="dotNetCoverage.PartCover.platformVersion" value="v2.0" />
<param name="msbuild_version" value="4.0" />
<param name="run-platform" value="x86" />
<param name="toolsVersion" value="4.0" />
</parameters>
</runner>
如果是 DLL,vcxproj 文件中的链接器设置显示: .\Release\$(ProjectName).dll 如果是 LIB,则根本没有这样的设置。
当我使用 VS2010 命令行构建它时,输出是 .\Release\mp3.dll 或 .\Release\mp3.lib。
但是当我使用 TC 时,我会得到输出 .\Release\mp3.vcxproj.dll 或 .\Release\mp3.vcxproj.lib
为什么?如何避免这种奇怪的行为? (我不想替换 vcxproj 文件中的行,如 .\Release\mp3.dll,这是许多项目的问题,我想避免这种原始解决方案,如果是 LIB 项目,则根本没有这种可能性)
感谢任何回复。
【问题讨论】:
-
发生这种情况是因为 TeamCity 构建器重命名了项目文件,并为其添加了
.teamcity扩展名。 Visual Studio 通过修剪扩展名从项目文件名中推断出$(ProjectName)宏,因此您将$(ProjectName)设置为mp3.vcxproj而不仅仅是mp3。正如艾伦建议的那样,除了完全避免使用这个宏之外,我没有找到任何解决方法。