Msbuild exec and curl:引用噩梦

时间:2012-02-01 08:39:31

标签: curl msbuild cmd

以下msbuild Exec语句

<Exec Command="curl.exe -f -O --url &quot;$(SourceURL)&quot;">
如果 SourceURL 包含空格,则

失败。即使我尝试

<PropertyGroup>
    <SourceURL>http://www.example.com/url%20with%20spaces</SourceURL>
</PropertyGroup>

甚至

<PropertyGroup>
    <SourceURL>http://www.example.com/url&37;20with&37;20spaces</SourceURL>
</PropertyGroup>

msbuild会自动将其中任何一个转换为空格(你能相信吗?)并且curl尝试获取http://www.example.com/url,这会产生404错误。

我不明白为什么。我没有正确引用URL参数吗?

[更新]在命令提示符下,以下内容有效:

curl.exe -f -O --url "http://www.example.com/url%20with%20spaces"

虽然没有:

curl.exe -f -O --url "http://www.example.com/url with spaces"

所以我的问题可以归结为:如何阻止msbuild用空格替换%20

欢呼声
亨德里克

(在Windows 7上使用curl 7.21.7 (i386-pc-win32) libcurl/7.21.7 OpenSSL/0.9.8r zlib/1.2.5和msbuild 3.5.30729.1)

2 个答案:

答案 0 :(得分:5)

问题是:

  1. Msbuild用空格替换%20
  2. 即使您使用%2520&37;20转义百分号,cmd.exe也会将%2替换为空字符串,这样命令行上仍会保留0。< / LI>

    所以解决方案是:

    <PropertyGroup>
        <SourceURL>http://www.example.com/url%25%2520with%25%2520spaces</SourceURL>
    </PropertyGroup>
    

    Aaaargh。任何人都不会因为如此复杂的逃脱序列而感到头疼?

答案 1 :(得分:1)

您还需要转义&符号:

<SourceURL>http://www.example.com/url%2520with%2520spaces</SourceURL>