2012-03-27 51 views
3

我在使用TeamCity自动化构建引擎时遇到了问题。 我需要建立许多vcxprojects,其中一些是LIB或DLL,其余部分是使用先前构建的LIB的EXE文件。在TeamCity的设置一个LIB项目的如何在TeamCity中设置MSBuild来命名Project.dll,而不是Project.vcxproj.dll?

例子是:

<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命令行它建立,输出为。\发布\ mp3.dll。\发布\ mp3.lib

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

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

Thx任何响应。

+0

具有相同的问题。 – vidstige 2012-12-07 13:12:35

+0

发生这种情况是因为TeamCity构建器重命名项目文件并为其添加了“.teamcity”扩展名。 Visual Studio通过修剪一个扩展来从项目文件名中推断'$(ProjectName)'宏,因此''(ProjectName)'设置为'mp3.vcxproj'而不是'mp3'。正如艾伦所建议的那样,除了避免使用这个宏,我没有找到任何解决方法。 – 2015-02-10 20:40:32

回答

1

我有与.vcxproj出现在我的二进制文件的文件名相同的问题。我将它缩小到与TeamCity构建时不同的$(ProjectName)变量,而不是在我自己的机器上构建它时。

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

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

我把这个下面<的PropertyGroup标签= “UserMacros”/ >线和高于此引用它的<的TargetName >定义。

我还是不明白为什么TeamCity是不同的......我希望这可以帮助其他同样的问题。

0

这是一个解决此问题的方法,无需更改项目文件中的任何内容。在调用任何项目构建之前,将执行脚本,将所有.vcxproj文件重命名为相同名称的文件,但不包含.vcxproj扩展名。这是一个“命令行”亚军和脚本是

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

然后“Visual Studio的亚军有改名的项目文件作为参数。在内部,跑步者使用.teamcity扩展名进行复制,然后由Visual Studio对其进行修剪,直到获得正确的$(ProjectName)值。

相关问题