2010-12-06 7 views
0

私たちは本サイト用の実動サーバーと開発サーバーを持っています。私は、それぞれ異なる設定とライセンス情報を持っており、それは2つの異なるweb.configファイルで保持されています。1つのWebConfigsが複数ある

これらを1つのweb.configファイルに統合する方法はありますか?私がサイトを公開するとき、私は開発のものを上書きしない(またはその逆)ために。

答えて

1

VS 2010では、web.configの変換とビルドの設定でこれを行うことができます。スコット・ガスリーはこれについて書いた:

http://weblogs.asp.net/scottgu/archive/2010/07/29/vs-2010-web-deployment.aspx

私はあなたは自分のメインweb.configファイルにあなたの追加の設定ファイル(例えばWeb.Debug.configなど)とVS自動的に「リンク」、それらを作成することで、これは基本的にうまくいくと思いますIDEで、VSを持っていないので今使っているコンピュータで確認できません。

旧バージョンのVSでビルドイベントを実行するとかなり簡単に実行できますが、それほど素晴らしいものではありません。スコットは、実際には、あまりにもこれについて書いた:

http://weblogs.asp.net/scottgu/archive/2007/09/21/tip-trick-automating-dev-qa-staging-and-production-web-config-settings-with-vs-2005.aspx

を(スコットのブログ記事からの引用)あなたがこれを行うために取るここでハイレベルなステップを。彼らはVS 2005とVS 2008の両方で動作します。

  1. (のMSBuildプロジェクトファイルをベースとしている)を使用するASP.NET Webアプリケーションプロジェクト
  2. オープンVS Configuration Managerと、プロジェクトおよびソリューションのための構成を構築する「ステージング」、新「Dev」の、「QA」を作成
  3. プロジェクトに新しい "web.config.dev"、 "web.config.qa"、 "web.config.staging"ファイルを追加し、それらのファイルをカスタマイズして、アプリケーションのモード固有の設定を含むようにします。
  4. 新しいものを追加プロジェクトをビルドするたびに適切なモード固有のバージョンでプロジェクトのweb.configファイルを自動的にコピーできるプロジェクトファイルに "ビルド前イベント"コマンドoject(例えば、あなたのソリューションが "Dev"設定にあった場合、web.config.devの設定をメインweb.configファイルにコピーします)。
+0

私が探していたもの。ありがとう。 – Jim

0

特定のプロファイル用にビルドするときに、XMLノードを構成ファイルに置き換えたり、挿入したり、置換したりするXML MSBuildファイルであるWebデプロイメントプロジェクト(VS2008VS2010)を作成できます。あなたはたぶん1日半から1日を費やして正しく設定されますが、多くのデプロイメントの手間を省くことができます(ワンクリック展開に一歩近づきます)。

注:VS2008 Web配置プロジェクトでは、MSBuild Community Tasksを使用することをお勧めします。私はこれらのタスクでVS2010のステータスが何であるかはわかりません。それは我々がAに見えるファイルweb.Substitutions.configを持つ弊社のWebアプリケーションのディレクトリには少しのような...

<!-- ... --> 
<Target Name="AfterBuild"> 
    <XmlMassUpdate Condition="'$(Configuration)|$(Platform)' == 'Release - Dev|AnyCPU'" ContentFile="$(OutputPath)\web.config" SubstitutionsFile="$(OutputPath)\web.Substitutions.config" ContentRoot="/" SubstitutionsRoot="/configuration/substitutions/dev" /> 
</Target> 
<!-- ... --> 

を探します(私たちはVS2010の下で使用)MSBuildのコミュニティタスクを使用して、当社のVS2008のWeb展開タスクについては

私たちは、必要な追加の構成で、当社のWebデプロイメントプロジェクトを実行するためにTeam Cityを使用して、それが滞りなく動作することを言及する価値ビットのような...

<?xml version="1.0" encoding="utf-8" ?> 
<configuration xmlns:xmu="urn:msbuildcommunitytasks-xmlmassupdate"> 
    <substitutions> 

    <!-- dev settings--> 
    <dev> 
     <configuration> 
     <appSettings file=""> 
      <add xmu:key="key" key="some_setting" value="a_value_is_here"/> 
       </appSettings> 
     </configuration> 
    </dev> 
    <prod> <!-- you get the idea --></prod> 
    </substitutions> 
</configuration> 

Hudsonは同じ方法です(設定が簡単です)。

0

ただ1つの可能性がありますが、コンテキストに基づいて値に適切な名前を付けてマージし、コード内のコンパイル定数を使用して各要素に条件付きでアクセスします。たとえば、あなたのweb.configファイルであなたが持つかもしれない...そして、

<connectionStrings> 
    <add name="DevelopmentConnection" connectionString="DevelopmentConnectionString" /> 
    <add name="DeploymentConnection" connectionString="DeploymentConnectionString" /> 
</connectionStrings> 

、あなたが持つかもしれConfigurationクラス、のは言わせて、内...今

public static class Configuration 
{ 
    public string ConnectionString 
    { 
     get 
     { 
      #if DEBUG 
       return ConfigurationManager.ConnectionStrings["DevelopmentConnection"].ConnectionString; 
      #else 
       return ConfigurationManager.ConnectionStrings["DeploymentConnection"].ConnectionString; 
      #endif 
     } 
    } 
} 

、DEBUG定数を考慮環境が構築されるときに、このプロパティを使用すると、適切な設定が引き継がれます。

+0

この方法の大きな問題は、本番環境にアクセスするよりも多くの人が開発環境にアクセスできることです。これにより、プロダクションデプロイメント文字列のようなものにアクセスできるようになりますが、これは非常に悪いことです。 –

+0

私がちょうど入力したものの多くは、ネットが抜け落ちて失われてしまったので、私は最も鋭い点を進めることを選択します。このような環境での機密データは暗号化する必要があります。 –

+0

あなたはそのデータを解読して読み取ることができますが、それは通常、何かを開発したことを意味します。これは、開発コードにアクセスできる人なら誰でもそれを解読することができるということです。 –

関連する問題