きよくらの備忘録

「三日坊主と呼ばせない!日記」改め。主にソフトウェア開発関連の話題。

MSBuildのコマンドラインでプロパティとして接続文字列的な文字列を渡す

MSBuildコマンドラインから実行する際、/p:スイッチにより任意のプロパティに値を設定することができます。 https://msdn.microsoft.com/ja-jp/library/ms164311.aspx

これを利用して、接続文字列的な文字列を渡そうと思い少し試行錯誤したのでメモ。

プロパティに渡したい文字列の例としてはこんな感じ:

Data Source=(localdb)\ProjectsV12;Initial Catalog=MyDataBase;Integrated Security=True;Connect Timeout=30;Encrypt=False;

空白やらイコールやら円マークやら入ってるのでそのまま渡して大丈夫か不安になりますね。 安心してください、大丈夫じゃありません。

 

cmd編

コマンドプロンプト(cmd)から実行する場合は特に悩むことはないと思います。接続文字列全体を"(ダブルクォート)でクォートしてやれば良いですね。

C:\ > msbuild /t:myTask /p:myProerty="Data Source=(localdb)\ProjectsV12;Initial Catalog=MyDataBase;Integrated Security=True;Connect Timeout=30;Encrypt=False;"

 

PowerShell

こちらは悩みましたが(PowerShell力が足りない)、以下でうまくいきました

  • 接続文字列を"(ダブルクォート)でくくる
  • さらにその外側を'(シングルクォート)でくくる
  • 半角スペースを%20に置換する
PS > msbuild /t:myTask /p:myProerty='"Data%20Source=(localdb)\ProjectsV12;Initial%20Catalog=MyDataBase;Integrated%20Security=True;Connect%20Timeout=30;Encrypt=False;"'

参考:

stackoverflow.com

How to escape space in property in msbuild while executing thorugh cmd prompt