私は最近VS2010で構成変換を使用していますが、一部の変換がパッケージ内のWeb.configに直接適用されるのに、他の変換はSetParameters.xmlのトークンに対して保存され、公開時に適用される理由について混乱しています。
たとえば、次の接続文字列とアプリ設定を使用してWeb.configを取得します。
<connectionStrings>
<add name="AutoDeployDb" connectionString="Data Source=(local);Initial Catalog=AutoDeploy;User ID=AutoDeployUser;Password=Passw0rd"/>
</connectionStrings>
<appSettings>
<add key="ChartImageHandler" value="storage=file;timeout=20;dir=c:\TempImageFiles\;" />
</appSettings>
次に、現在のビルド構成に対応する構成変換を示します。
<connectionStrings>
<add xdt:Transform="Replace" xdt:Locator="Match(name)" name="AutoDeployDb" connectionString="Data Source=MyDevServer;Initial Catalog=AutoDeploy;User ID=AutoDeployUser;Password=s*#@Kdsl" />
</connectionStrings>
<appSettings>
<add xdt:Transform="Replace" xdt:Locator="Match(key)" key="ChartImageHandler" value="storage=file;timeout=20;dir=d:\inetpub\AutoDeploy\TempImageFiles\"/>
</appSettings>
これらは両方とも「置換」変換であり、一方は「名前」に一致する接続文字列であり、もう一方は「キー」に一致するアプリ設定である以外は、私の目には同じです。
次に、結果のパッケージのSetParameters.xmlファイルの内部を調べます。接続文字列のみに、setParameterノードがあります。PackagTmpフォルダーのWeb.configでは、接続文字列に「$(ReplacableToken_AutoDeployDb-Web.config Connection String_0)」値があり、パッケージがデプロイされている場合にのみ適用されるアプリ設定変換が既に適用されています。
どうしてこれなの?それは接続文字列(または逆に、アプリの設定)に固有のものですか?このアプローチの理論的根拠に感謝します。なぜそれが一部の設定に適用され、他の設定には適用されないのかはっきりしていません。
誰かがこれに光を当てることができますか?