从Ant执行MSBuild

时间:2017-05-10 14:47:18

标签: ant msbuild

我正在尝试使用Jenkins的Ant 1.9.7 exec任务在Windows Server 2012计算机上运行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

echo输出显示platformParameter正确包含我想要的任何CPU周围的双语音标记,如msbuild所要求的那样。使用单个语音标记,在尝试构建解决方案时,没有语音标记或AnyCPU不起作用。我相信,如果我正在构建项目而不是解决方案,我将能够使用AnyCPU而不是&#34;任何CPU&#34;对于平台。

错误似乎是msbuild没有看到正确形成的Platform参数,因此可能认为我正在做:

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

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

我尝试了一些不同的尝试,通过exec任务(例如使用&#34; e;代替双重语音标记),通过exec任务获得包含双重语音标记的参数(通常使用结果如上所示。

任何人都可以建议正确的/一种工作方法将Platform参数转换为一个arg,以便exec任务运行到msbuild吗? 即如何将包含双重语音标记分隔元素的arg定义为exec任务?

提前致谢。

1 个答案:

答案 0 :(得分:1)

问题解决了。

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

从Windows命令提示符中获取MSBuild,我需要这样做:

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

如我的问题所述。

对于ant exec任务参数,如果我这样做,则Platform参数似乎完全正常:

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