2017-05-10 64 views
1

我想在使用Jenkins的Ant 1.9.7 exec任务的Windows Server 2012机器上运行msbuild。从Ant执行MSBuild

命令行,我试图重建是:

msbuild solution.sln /p:Platform="Any CPU" /p:Configuration:Release 

我在Exec任务最新尝试,看起来像:

<property name="platformParameter" value='/p:Platform="Any CPU"' /> 
<echo message="platformParameter = ${platformParameter}" /> 

<exec executable="msbuild" failonerror="true"> 
    <arg value="solution.sln" /> 
    <arg value="/p:Configuration=Release" /> 
    <arg value="${platformParameter}" /> 
</exec>   

环境是正确的那么MSBuild的是可用的。从上面我得到的输出是:

[echo] platformParameter = /p:Platform="Any CPU" 
[exec] Microsoft (R) Build Engine version 12.0.40629.0 
[exec] [Microsoft .NET Framework, version 4.0.30319.34014] 
[exec] Copyright (C) Microsoft Corporation. All rights reserved. 
[exec] 
[exec] MSBUILD : error MSB1008: Only one project can be specified. 
[exec] Switch: CPU 

回声输出显示platformParameter正确地包含了什么我想周围的任何CPU双语音标记所要求的MSBuild的。使用单个语音标记时,尝试构建解决方案时没有语音标记或AnyCPU不起作用。我相信,如果我正在构建一个项目而不是解决方案,我将能够使用AnyCPU而不是“任何CPU”作为该平台。

的错误似乎是的MSBuild没有看到形成正确的平台参数,因此可能认为我这样做:

msbuild solution.sln /p:Platform=Any CPU /p:Configuration:Release 

在认为CPU是第二个项目/解决方案。

我尝试了几个不同的尝试,并通过exec任务(例如使用&quote;代替双重语音标记)将含有双重语音标记的参数包含到msbuild中,通常具有与上面所示相同的结果。

任何人都可以提出正确/一个工作方法来获取平台参数到一个arg的exec任务运行到msbuild? 即如何将包含双语音标记分隔元素的arg定义为exec任务?

在此先感谢。

+0

您是否尝试过这样AnyCPU'平台说'删除的空间? –

+0

另外尝试指定目标参数,以及'/ t:Build' – Tuffwer

+0

@JamesReed - 是的,根据我的开篇文字,使用AnyCPU而没有空格仅在您针对项目文件而非解决方案构建时才有效 - 不一致微软已经表示他们无意寻址 –

回答

1

问题解决。

看来我试图抢先/解决一些不需要解决的问题。

从Windows命令提示符下,得到MSBuild的工作,我需要做的:

msbuild solution.sln /p:Platform="Any CPU" /p:Configuration:Release 

在我的问题的说明。

对于蚂蚁EXEC任务参数,参数平台似乎工作,如果我这样做完全没有问题:

<exec executable="msbuild" failonerror="true"> 
    <arg value="solution.sln" /> 
    <arg value="/p:Configuration=Release" /> 
    <arg value="/p:Platform=Any CPU" /> 
</exec>