33

私は最近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)」値があり、パッケージがデプロイされている場合にのみ適用されるアプリ設定変換が既に適用されています。

どうしてこれなの?それは接続文字列(または逆に、アプリの設定)に固有のものですか?このアプローチの理論的根拠に感謝します。なぜそれが一部の設定に適用され、他の設定には適用されないのかはっきりしていません。

誰かがこれに光を当てることができますか?

4

2 に答える 2

37

これは実際には構成変換とは何の関係もありません。非常に詳細なブログをhttp://sedodream.com/2010/11/11/ASPNETWebApplicationPublishPackageTokenizingParameters.aspxに投稿しました。しかし、ここにいくつかの情報があります。

Web Publishing Pipeline(WPP)では、接続文字列を特別なアーティファクトとして処理します。すべての接続文字列のパラメータが自動的に作成されます。これは、多くの場合、アプリをデプロイするときに接続文字列を変更する必要があるためです。appSettting値のパラメーターは自動的に作成されません。さて、あなたの質問に戻って、なぜ接続文字列をトークン化するのですか?値の設定を見逃して、誤ってアプリケーションに間違ったDBを更新させないようにするために、これを実際に行っています。私たちはあなたのためにそれらのパラメータを作成することによってあなたを助けます。また、必要に応じてこの動作を無効にすることもできます。MSBuildプロパティAutoParameterizationWebConfigConnectionStringsをfalseに設定できます。

于 2010-11-11T06:13:08.920 に答える
1

展開に関しては、それらの間に1つの重要な違いがあります。WebパッケージをIISにインポートする場合:

  • さらにパラメータ化するために、接続文字列がウィザードダイアログに自動的に含まれます。
  • デフォルトでは、アプリの設定はありません。本当にそれを実行したい場合は、Webパッケージ展開用のパラメーターの構成の「カスタムパラメーター化-web.configファイルのアプリケーション設定」セクションの手順に従ってください。

差別化により、devとopsの間に責任の境界が作成されます。一方では、ターゲット環境のパラメーター(データベース、キャッシュ、AWSキー/シークレットなど)を、opsが処理する必要のある接続文字列に配置します。一方、アプリ設定セクションに無関係なオプションを配置すると、特定の製品やビジネスロジックに対する運用者の負担を軽減できます。

私の会社では、1人の運用担当者が複数の製品を担当することがよくあります。あなたは本当にあなたがするほど多くの製品知識を彼らに知るように要求することはできません。彼らが注意を払う必要が少ないほど、人生は幸せになります。

于 2014-06-26T08:20:44.773 に答える