以下msbuild Exec语句
<Exec Command="curl.exe -f -O --url "$(SourceURL)"">
如果 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)
答案 0 :(得分:5)
问题是:
%20
%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>