2010-12-03 2 views
3

私は簡単に&を探しています。異なる環境に基づいてweb.configのappsettingsを変更するには、エレガントな方法があります。(dev/qa/test/stage/prod )そして私は手動でappsettingsを変更しています。その非常に面倒で時間がかかり、数十の設定があります。このような状況では、どのような方法が最適ですか?私はEnvironment variablesを使用して1つの解決策を知っていますが、ベストプラクティスを聞きたいですか?asp.netを使用して別のサーバーに基づいてweb.configを更新します。

答えて

0

私はウェブの外付けセクションを使用することをお勧めします。そのような設定、:

<appSettings configSource="appsettings.config" /> 

はその後appsettings.configはそうのようになります。

<appSettings> 
    <add key ...> 
</appSettings> 

まだ私がメインの編集を可能にしながらこれは、私は変更されません別のファイルにアプリの設定を保存することができます実際の構成部分についてはweb.conifigを参照してください。 接続文字列、system.net(電子メール設定用)などと同じことができます。

私は実際にはconfigを変更するだけで再構築が必要なので、実際にはVS2010はとても良いとは思いません。私のやり方では、VSなしでも使えるので、手作業ですべての環境を簡単に変更できます。

+0

um ..配備されたすべての設定ファイルを手で簡単に変更することもできます。 – NotMe

+0

インストール固有の設定をすべてのインストールに共通する設定から分離する – Artemiy

2

このバージョンでは、web.configファイルは、まさにこの問題を解決することを目的とする機能を変換しているasp.net 4.

にアプリをアップグレードすることができた場合:

+0

私はVS2010を使用していますが、私たちのprodサーバはまだ3.5ですので、私は3.5フレームワークを対象とする必要があります。 –

+0

ええとあなた自身のソリューションをロールバックする必要がある場合(これは長い間です)、web.configの変換機能をNuGetプロジェクトから引き出すことができるかもしれません:http://haacked.com/archive/2010/11 /19/nuget-transformation.aspx – rtpHarry

+2

@rtpHarry、@Chicagoland:.NET 3.5をターゲットにしながら、web.config変換を引き続き使用できます。 VS2010を使用している場合にのみ機能が必要です。 –

1

私は通常次のようにします:

  1. 各設定値のバージョン、各環境に1つずつ
  2. 私のアプリ設定を読むための小さなクラスを作る。このクラスでは、現在の環境を検出する関数を作成します。
  3. 各設定に対して、環境検出関数を使用して返す値を決定するスイッチを持つアクセサプロパティを作成します。

初期設定は少しですが、設定が完了すると設定値に簡単にアクセスできます。

+0

私はあなたのコンセプトを理解していますが、質問がありますので、私は 'web.config-dev'、' web.config-qa'、 'webを持っています。config-prod'、そして私には、環境iamを返す関数があり、 'qa box'にあると仮定しているので、どのように' web.config-qa'を読むのですか?すでに完了しました。 –

+0

ファイル名の.config部分を変更しないでください。潜在的に(.configファイルが保護されているので)ダウンロードできます... dev.configまたはprod.configをおそらく – davidsleeps

1

あなたはVS2010(NETツールのバージョン4)を使用する場合、あなたはWeb構成変換を行うと、ステージングに展開する展開パッケージを構築することができ、生産などasp.netのあなたのターゲットバージョンが何であるかは重要ではありません。その後、パッケージを展開し、ターゲットにカスタム構成ファイルをインストールしてください。実行時間を把握する必要はありません。 VS2010が使用するMSBuild 4を使用して、.NETのターゲットバージョンとして3.5を使用して、これを常に行います。私の開発環境は、私の本番環境やステージング環境とは異なるアプリケーション設定をしています。可能であれば

+0

にします実行する必要があるか、または例ですか? –

+0

プロジェクトファイルにターゲットが3.5,2.0などであることを覚えておいてください。$ MSBuildPath = "$($(gp -Path HKLM:\ Software \ Microsoft \ 'NET Frameworkセットアップ' \ NDP \ v4 \ full).InstallPath )MSBuild.exe " $ MSBuildPath $ ProjectFile/T:Package /ToolsVersion:4.0/p:Configuration = Release – piday

1

は最終的に、私は、Visual Studioの2010年のWeb.config変換機能を利用することをお勧めします。

VS2010はオプションではありませんか、私はしばらく前に思い付いたこのソリューションを見て、コンフィグ変換機能を使用しない場合。バッチファイルとNANTスクリプトの組み合わせを使用して、単一のテンプレートと1つ以上の置換ファイルから設定ファイルを生成します。これはWeb.config変換ツールほど強力ではありませんが、かなり効果的です。

http://blog.nathan-taylor.net/2009/10/webconfig-build-manager.html

1

前VS2010には、我々は実際に我々のものなどweb.prod.config、web.qa.config、名前の..私は推測する私たちはいくつかの素晴らしいforsightを持っていました。いずれにしても

は、VS2008の下で我々は、我々が構築した構成に基づいて、適切な設定ファイルをコピーするビルドステップの一環として実行されるコピーコマンドを持っていました。私たちの通常のweb.configはdevを指していて、TFSを使って他の環境に展開しました。

0

Nantを使用して、ビルドとデプロイをスクリプト化します。

Nantは、web.configテンプレートとapp.configテンプレートを、プロジェクトファイルが期待する場所にコピーします。同時に、NantはQA環境に適切な値でトークンを置き換えます。

0

私はあなたがすでに回答を受け入れていることは知っていますが、私は異なる環境に応じて異なる設定ファイルを持っているという方法を使っています。

たとえば、appsettings.config.debug、appsettings.config.deploy、web.config.debug、web.config.deployがあります。

次に、現在の構成設定に関連する構成ファイルを構成設定接尾部なしのファイルにコピーするバッチファイルを実行するビルド前スクリプトがあります。これは、FCを使用してファイルが異なる場合にのみ実行されます。

"$(ProjectDir)copyifnewer.bat" "$(ProjectDir)web.config.$(ConfigurationName)" "$(ProjectDir)web.config" 

"$(ProjectDir)copyifnewer.bat" "$(ProjectDir)appsettings.config.$(ConfigurationName)" "$(ProjectDir)appsettings.config" 

そして、私のcopyifnewer.batファイルは次のとおりです:

私のビルド前のイベントコマンドラインコードがある

echo Config Maintenance 
echo Today's date of %date:~-4,4%\%date:~-10,2%\%date:~-7,2% 
rem echo Comparing two files: %1 with %2 
echo . 
if not exist %1 goto File1NotFound 
if not exist %2 goto File2NotFound 

fc %1 %2 
if %ERRORLEVEL%==0 GOTO NoCopy 

echo These files are NOT the same. Copying %1 over %2 
copy %1 %2 /y & goto END 

:NoCopy 
echo These files are the same. Nothing copied. 
goto END 

:File1NotFound 
echo %1 not found. 
goto END 

:File2NotFound 
copy %1 %2 /y 
goto END 

:END 
echo Done. 
echo . 

これは私にとって素晴らしい作品。これが誰かを助けることを望みます。

おかげで、 スコット

関連する問題