Msbuild exec и curl: цитирование кошмара - PullRequest
3 голосов
/ 01 февраля 2012

следующий оператор 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?

[ update ] В командной строке работает следующее:

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

, а это не так:

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

Итак, мой вопрос сводится к следующему: как я могу предотвратить замену * 1025 в msbuild пробелами?

ураHendrik

(с использованием curl 7.21.7 (i386-pc-win32) libcurl/7.21.7 OpenSSL/0.9.8r zlib/1.2.5 и msbuild 3.5.30729.1 в Windows 7)

Ответы [ 2 ]

5 голосов
/ 01 февраля 2012

Проблема:

  1. Msbuild заменяет %20 пробелом
  2. Даже если экранировать знак процента с помощью %2520 или &37;20, cmd.exe заменит %2 пустой строкой, так что в командной строке останется 0.

Итак, решение:

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

Aaaargh. Кто-нибудь, у кого не болит голова от такой сложной последовательности побега?

1 голос
/ 01 февраля 2012

Вам также нужно экранировать знак &:

<SourceURL>http://www.example.com/url%2520with%2520spaces</SourceURL>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...