2

現在、私の web.config は次のようになっています。

<configuration>
  <connectionStrings configSource="connectionstrings.config"/>
</configuration>

配置パッケージ (Msbuild.exe + target=Package) を生成するときに、接続文字列を parameters.xml ファイルに「魔法のように」パラメータ化して、配置時に置換することはありません。

接続文字列をインライン化すると、すべて問題なく、接続文字列のパラメーターが生成されます..

そう:

<... configsource="xxx"/> の代わりに、connectionstrings.config の内容を、web.config 変換による展開でコピーするにはどうすればよいですか?

編集: 「デフォルト」の動作は本当に素晴らしいので、Sayed Ibrahimの回答を受け入れました( web.config の接続文字列の自動パラメータ化)しかし、最終的には、パラメータ化する必要があるものを正確に指定する方が良いです.wpp.targetsまたはparameters.xmlファイル)。

4

1 に答える 1

6

あなたは間違った質問をしているようなものです。web.config に戻す方法について心配する必要はありません。代わりに、ファイル内の接続文字列のパラメーターを作成するだけです。http://sedodream.com/2012/05/13/VSWebPublishHowToParameterizeConnectionStringsOutsideOfWebconfig.aspxでこれをブログにしました。以下のコンテンツも貼り付けました。

VS 2010 または VS 11 で Visual Studio Web パブリッシュを使用して Web 配置パッケージを作成したことがある場合は、web.config で接続文字列が自動的にパラメーター化されることをご存知でしょう。Web 配置パラメーターに慣れていない場合は、後でパッケージを公開するときに何かの値を簡単に更新できるようにすることを宣言する方法です。接続文字列は、通常、公開中に更新する必要があるものの良い例です。

前に述べたように、Visual Studio で Web 配置パッケージを作成すると、web.config 内のすべての接続文字列に対して Web 配置パラメーターが自動的に作成されます。今日の初めに、web.config 以外のファイルで接続文字列をパラメーター化する方法を尋ねる StackOverflow に関する質問を見ました(質問は実際には別のことを尋ねましたが、これが彼が本当に望んでいることだと思います)。これを行う方法を示すサンプルを作成しました。以下は、web.config での connectionStrings 要素の外観です。

<connectionStrings configSource="connectionStrings.config" />

そして、ここにconnectionStrings.configがあります

<connectionStrings>
  <clear/>
  <add name="ApplicationServices"
       connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnetdb.mdf;User Instance=true"
       providerName="System.Data.SqlClient" />
  <add name="OtherConnectionString"
       connectionString="data source=.\SQLExpress;Integrated Security=SSPI;Initial Catalog=foo"
       providerName="System.Data.SqlClient"/>
</connectionStrings>

これらの接続文字列をパラメーター化するには、Web 発行パイプラインを拡張する必要があります。これを行うには、作業中のプロジェクトのルートに {project-name}.wpp.targets という名前のファイルを作成します (VS 11 プロジェクトの場合、これらすべてを .pubxml ファイル内に直接配置できます)。これは、ビルド/公開プロセスにインポートされる MSBuild ファイルになります。以下は、作成する必要があるファイルです。

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <ItemGroup>
    <!-- Here we need to declare MSDeploy parameters for connection strings in connectionStrings.config -->
    <MsDeployDeclareParameters Include="ApplicationServices-ConnectionString" >
      <Kind>XmlFile</Kind>
      <Scope>connectionStrings.config$</Scope>
      <Match>/connectionStrings/add[@name='ApplicationServices']/@connectionString</Match>
      <Description>Connection string for ApplicationServices</Description>
      <DefaultValue>data source=(localhost);Initial Catalog=AppServices</DefaultValue>
      <Tags>SqlConnectionString</Tags>
    </MsDeployDeclareParameters>

    <MsDeployDeclareParameters Include="OtherConnectionString-ConnectionString" >
      <Kind>XmlFile</Kind>
      <Scope>connectionStrings.config$</Scope>
      <Match>/connectionStrings/add[@name='OtherConnectionString']/@connectionString</Match>
      <Description>Connection string for OtherConnectionString</Description>
      <DefaultValue>data source=(localhost);Initial Catalog=OtherDb</DefaultValue>
      <Tags>SqlConnectionString</Tags>
    </MsDeployDeclareParameters>
  </ItemGroup>

</Project>

ここで、MSDeployDeclareParameters の値を作成していることがわかります。パッケージ化/公開する場合、この項目リストを使用して MSDeploy パラメーターを作成します。以下は、それぞれに含まれるメタデータ値の説明です。

  • 種類 = この場合、常に Xmlfile になります。詳細については、こちらを参照してください。
  • スコープ = 変更が必要なファイルへの正規表現
  • Match = 更新する属性/要素への XPath 式
  • 説明 = オプションの説明 (パッケージがインポートされた場合、これは IIS マネージャーに表示されます)
  • DefaultValue = パラメータのオプションのデフォルト値 Tags = オプション、接続文字列には SqlConnectionString を使用

このファイルを作成したら、VS を閉じてから再度開く必要があります (インポートされた .targets ファイルがキャッシュされます)。次に、Web 配置パッケージを作成できます。これを行うと、これらの新しいパラメーターが宣言されます。私の場合、これを IIS マネージャーにインポートしました。ここに、パラメーターを示すダイアログが表示されます。 ここに画像の説明を入力

ご覧のとおり、Application Path パラメーターとカスタム接続文字列値が表示されています。テキスト ボックスの値を更新し、Web サーバーで connectionStrings.config を開くと、ダイアログ ボックスに入力した値でした。

参考までに、このサンプルを私の github アカウントのParameterizeConStringConfigにアップロードしました。

于 2012-05-13T21:24:54.630 に答える