5

ビルドスクリプトには、次のようなヘルパーPowerShell関数があります。

function set-connectionstring {
  param($path, $name, $value)
  $settings = [xml](get-content $path)
  $setting = $settings.configuration.connectionStrings.add | where { $_.name -eq $name }
  $setting.connectionString = "$value"
  $setting.providerName = "System.Data.SqlClient"
  $resolvedPath = resolve-path($path) 
  $settings.save($resolvedPath)
}

値を設定しようとすると、アンパサンドが奇妙にエンコードされることを除けば、うまく機能します。ここに問題があります:

接続文字列の中に&quot値があります。これは完全に有効なはずです。"しかし、私の上記のコードはこれを完全に不合理なものに変換します。私がこの問題を解決できるアイデアはありますか?

4

2 に答える 2

6

最初に接続文字列を試してみましたdecodeか?サンプルは次のとおりです。

[System.Reflection.Assembly]::LoadWithPartialName("System.web")
[System.Web.HttpUtility]::HtmlDecode(""")
于 2012-07-23T12:02:16.400 に答える
1

文字列リテラルの途中に$valueを貼り付けているため、次のように入力したかのように動作します$setting.connectionString = ""something""。これはXML操作ではなく、.NET文字列の割り当てであるため、equalの右側にあるものは、エスケープされたXML属性表現ではなく、文字通り接続文字列に必要なものである必要があります。したがって、エスケープせずに渡すか、割り当ての前にエスケープ解除します。

于 2012-07-23T12:10:24.130 に答える