2009-11-09 3 views
1

У меня есть сценарий, который NANT ... 1. принимает содержимое диска-файла 2. назначает содержимое в собственность NANT 3 , а затем вызывает sqlcmd с передачей -v в этом свойстве, содержащем содержимое файла диска 4. внутри скрипта sql содержимое файла должно использоваться хранимым proc.Nant, Sqlcmd -v переключатель и пробелы в NANT собственности не удается построить с неверным аргументом

Проблема заключается в том, что, когда содержимое файла содержит пробел Nant сборки останавливается с «Недопустимый аргумент» вопрос

Anone знает способ обойти это?

Верхняя часть NAnt скрипт ...

<?xml version="1.0"?> 
<!-- the main name of this project --> 
<project name="Hops" default="all"> 
    <!-- BuildHistory --> 
    <property name="buildHistoryContents" value="" /> 
    <xmlpeek xpath="/" file="BuildNotes.xml" property="buildHistoryContents"></xmlpeek> 
    <!-- <echo message="${buildHistoryContents}" /> --> 

    <!-- ***************** --> 
    <target name="ExecSql"> 
    <echo message="running sql script : ${SqlBuildScriptsDir}${sqlBuildFileName}" /> 
    <exec program="${SqlCmd}" commandline="-S ${SqlServerInstanceName} -E -d HBus -i ${SqlBuildScriptsDir}${sqlBuildFileName} -v vSchemaVersion=${buildHistoryContents} " /> 
    </target> 

Сценарий SQL содержит строку ...

exec lsp_SchemaVersionUpsert '1.4', N'$(vSchemaVersion)' 

Содержание файла диск, который работает, ...

<BuildNotes> 
    <Note> 
    <buildVer>HasNotSpace</buildVer> 
    </Note> 
</BuildNotes> 

Содержимое файла с дисками, которое не работает, является ...

<BuildNotes> 
    <Note> 
    <buildVer>Has Space</buildVer> 
    </Note> 
</BuildNotes> 

Использование всего этого является передачей XML-комментариев для создания истории сборки журнала ведения журнала для схемы db.

Кто-нибудь знает альтернативный метод или знает путь через это?

В следующей части, после того, как добавил Филлип Кили correcty решил первую часть (пространственной задачи) Я упростил исходную задачу, чтобы упростить этот вопрос.

также есть Уточняемая атрибута Проблема; Атрибуты, присвоенные xml, приводят к сбою nant-сборки с помощью «Invalid Argument».

например, это может привести к Nant задыхаться, но удаление атрибута Dt позволит NANT построить для достижения успеха ...

<BuildNotes> 
    <Note> 
    <buildVer>1.4</buildVer> 
    <dateStarted>09/24/2009 11:25:42</dateStarted> 
    <Item dt="20091008" >SpacesAndNoQuotedAttribute</Item> 
    </Note> 
</BuildNotes> 

Любые идеи ...?

ответ

2

Ваша проблема (конечно) в строке

<exec program="${SqlCmd}" commandline="-S ${SqlServerInstanceName} -E -d HBus -i ${SqlBuildScriptsDir}${sqlBuildFileName} -v vSchemaVersion=${buildHistoryContents} " /> 

В частности, в

-v vSchemaVersion=${buildHistoryContents} 

Выражение NAnt заменяет свойство $ {buildHistoryContents} с сохраненным значением - которое будет включать в себя любые встроенные пространства. Проблема заключается в том, что при вызове SQLCMD (я предполагаю, что это то, что разрешает $ {SqlCmd}) из командного окна, значения для любых и всех параметров -v ограничены пространством - то есть синтаксический анализатор попадает в -v, читает следующие символы через «=» в качестве имени переменной, затем читает все символы после = и через следующее пространство (или конец строки) в качестве значения для назначения переменной, и это встроенное пространство испортит вам большое время.

В командной строке Обходной обернуть значение переменной в кавычки:

- v MyVariable=Hello World 

становится

- v MyVariable="Hello World" 

Что здесь не работает, потому что это XML и у вас есть для обертывания атрибута атрибута exec элемент с кавычками ... и вложенные кавычки еще раз испортят вам большое время.

Я считаю, что здесь нужно использовать замену макросов XML (возможно, у меня есть неправильные формальные названия этих понятий) для этих встроенных кавычек. Это значение должно быть

&quot; 

Это означает, что следующее должно работать:

<exec program="${SqlCmd}" commandline="-S ${SqlServerInstanceName} -E -d HBus -i ${SqlBuildScriptsDir}${sqlBuildFileName} -v vSchemaVersion=&quot;${buildHistoryContents}&quot; " /> 

Пожалуйста, попробуйте это увидеть - я, возможно, придется сделать что-то подобное себе когда-нибудь в ближайшее время.

 Смежные вопросы

  • Нет связанных вопросов^_^