如何在TeamCity中将MSBuild设置为将Project.dll命名为odProject.vcxproj.dll



我在使用TeamCity自动化构建引擎时遇到问题。我需要构建许多vcxproject,其中一些是LIB或DLL,其余的是EXE文件,使用以前构建的LIB。

在TeamCity中设置一个LIB项目的示例是:

    <runner id="RUNNER_15" name="MP3" type="MSBuild">
      <parameters>
        <param name="build-file-path" value="Audiomp3mp3.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命令行构建它时,输出为。\发布\mp3.dll。\发布\mp3.lib.

但当我使用TC时,我会得到输出。\发布\mp3.vcxproj.dll。\发布\mp3.vcxproj.lib

为什么?如何避免这种奇怪的行为?(我不想替换vcxproj文件中的行,如.\Release\mp3.dll,这是许多项目的问题,我想避免这种原始解决方案,在LIB项目的情况下根本没有这种可能性)

Thx用于任何响应。

我遇到了同样的问题,.vcxproj出现在我的二进制文件的文件名中。我将其缩小到使用TeamCity构建时与在自己的机器上构建时不同的$(ProjectName)变量。

对我来说,解决方案是在每个受影响的项目文件中定义ProjectName变量(奇怪的是,它似乎没有发生在某些类型的项目中,例如静态库)。

<!-- Define project name to avoid TeamCity from generating incorrect one -->
<PropertyGroup>
    <ProjectName>NAME_OF_PROJECT</ProjectName>
</PropertyGroup>

我把它放在<PropertyGroup Label="UserMacros"/>线和<目标名称>引用它的定义。

我仍然不明白为什么TeamCity与众不同。。。我希望这能帮助其他有同样问题的人。

这里有一个解决此问题的方法,不需要更改项目文件中的任何内容。在调用任何项目构建之前,都会执行一个脚本,将所有感兴趣的.vcxproj文件重命名为同名但没有.vcxproj扩展名的文件。它是一个"命令行"运行程序,脚本是

for /r directorywith_projects %%%%f in (*.vcxproj) do rename %%%%f %%%%~nf

然后"Visual Studio"运行程序将重命名的项目文件作为参数。在内部,运行程序使用.teamcity扩展名制作一个副本,Visual Studio会对其进行修剪,从而提供正确的$(ProjectName)值。

相关内容

最新更新