私は nant スクリプトを持っています... 1. ディスク ファイルのコンテンツを取得します 2. そのコンテンツを nant プロパティに割り当てます 3. 次に、ディスク ファイルのコンテンツを含むそのプロパティに -v を渡して sqlcmd を呼び出します 4. SQL スクリプト内では、ファイルの内容をストアド プロシージャで使用する必要があります。
問題は、ファイルの内容にスペースが含まれている場合、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>
これらすべての使用は、db スキーマのバージョン ビルド履歴を記録するテーブルに xml ビルド コメントを渡すことです。
誰かが別の方法を知っているか、これを通る方法を知っていますか?
Phillip Keeley が最初の部分 (スペース問題) を解決した後に追加された次の部分は、質問を単純化するために元のタスクを単純化しました。
引用属性の問題もあります。xml で引用された属性により、nant ビルドが「無効な引数」で失敗します。
たとえば、これにより nant がチョークしますが、dt 属性を削除すると、nant ビルドが成功するようになります ...
<BuildNotes>
<Note>
<buildVer>1.4</buildVer>
<dateStarted>09/24/2009 11:25:42</dateStarted>
<Item dt="20091008" >SpacesAndNoQuotedAttribute</Item>
</Note>
</BuildNotes>
何か案は ... ?