如何设置MSBuild来命名Project.dll而不是TeamCity中的Project.vcxproj.dll?

时间:2012-03-27 10:30:31

标签: msbuild teamcity

使用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文件中的链接器设置说: \发布\ $(项目名).dll文件 在LIB的情况下,根本没有这样的设置。

当我使用VS2010命令行构建它时,输出为。\ Release \ mp3.dll 。\ Release \ mp3.lib

但是当我使用TC时,我会输出。\ Release \ mp3.vcxproj.dll 。\ Release \ mp3.vcxproj.lib

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

任何回应都是。

2 个答案:

答案 0 :(得分:1)

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

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

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

我把它放在&lt; PropertyGroup Label =“UserMacros”/&gt; 行下面,并在&lt; TargetName&gt; 定义上面引用它。

我仍然不明白为什么TeamCity与众不同......我希望这可以帮助其他人解决同样的问题。

答案 1 :(得分:0)

以下是此问题的解决方法,不需要更改项目文件中的任何内容。在调用任何项目构建之前,将执行一个脚本,该脚本会将所有感兴趣的.vcxproj文件重命名为具有相同名称但没有.vcxproj扩展名的文件。这是一条命令行&#39;跑步者和脚本是

for /r directory\with_projects %%%%f in (*.vcxproj) do rename %%%%f %%%%~nf

然后&#39; Visual Studio&#39; runner将重命名的项目文件作为参数。在内部,跑步者使用.teamcity扩展名制作副本,然后由Visual Studio修剪,并提供正确的$(ProjectName)值。