Webアプリを開発するときは、Development、UAT、Prodの3つの異なる環境を切り替える必要があります。すべての3について、構成ファイルに異なるデータベース接続があります。これらの設定の切り替えは、すべての参照を変更してからソリューションを再構築することによって手動で行われ、プリプロセッサディレクティブを使用して行われるのを見てきました。新しい環境にデプロイするたびに構成を変更する必要がないように、いくつかの変数に基づいてこれを行う簡単な方法はありますか?
5 に答える
私には、 Visual Studio2005Web展開プロジェクトの恩恵を受けることができるようです。
これにより、ビルド構成に応じてweb.configファイルのセクションを更新/変更するように指示できます。
簡単な概要/サンプルについては、ScottGuのこのブログエントリをご覧ください。
私はMSBuild、特にMSBuild Community Tasks(http://msbuildtasks.tigris.org/)を使用するのが大好きで、適切な接続文字列設定などでweb.configを変換するXSLTタスクがあります。
私はこれらのタスクを手元に置いています:
<Target Name="Configs">
<Xslt RootTag="" Inputs="web.config" Output="Web.$(COMPUTERNAME).config" Xsl="web.config.$(COMPUTERNAME).xslt" Condition="Exists('web.config.$(COMPUTERNAME).xslt')" />
明らかに、これはあなたが求めているものの100%ではありません。それは、各開発者が独自のweb.configを持つことができるようにするためです。
ただし、上記の原則を使用して、適切なXSLTを適用する複数のビルド構成を作成できない理由はありません。
私のXSLTは次のようになります。
<?xml version="1.0" encoding="utf-8"?>
<!-- Dev -->
<xsl:template match="/configuration/connectionStrings/add[@name='MyConnectionString']/@connectionString">
<xsl:attribute name="connectionString">Data Source=MyServer;Initial Catalog=MyBD;User ID=user;password=pwd</xsl:attribute>
</xsl:template>
<xsl:template match="node()">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
スコットハンゼルマンはこれを行う1つの方法を提案しました:
http://www.hanselman.com/blog/ManagingMultipleConfigurationFileEnvironmentsWithPreBuildEvents.aspx
ビルド中にいつでも NAnt + NAnt.Contrib を使用して web.config を変更できます。NAnt には、xml ファイルを更新できる xmlpeek および xmlpoke タスクがあります。
例えば
<xmlpoke file="${dist.dir}/Web.config" xpath="/configuration/applicationSettings/MyProj.Web.Properties.Settings/setting[@name = 'MyProj_Web_Service']/value" value="http:/ /${AppServer}/Service.asmx" />
構成を変更するJeanPaulBoodhooメソッドを採用しました。一般的な考え方は、構成ファイル自体ではなく、1つ以上のトークン化された構成TEMPLATEファイルを使用することです。次に、トークンをSINGLEローカルプロパティファイルの値に置き換えるビルドスクリプトタスクがあります。このプロパティファイルには、構成のすべての違いが含まれており、作業コピーごとに一意です。
このシステムは私にとって非常にうまく機能しており、最初のセットアップは環境の変化を管理するのに簡単です。