9

ここで、これらの MS Build/VS Post ビルド指数の頭脳を選びたいと思いました。

ユーザー/マシン/環境ごとに web.config エントリをカスタマイズできるようにしたいと考えています。

構成可能/変更可能なエントリを web.config でマークすることができ、それらのエントリをそれぞれのユーザー/環境ファイルによってオーバーライドし、エントリが複数のファイルで見つかった場合にどのエントリを優先するかを決定する順序を設定したいと考えています。 .

例: web.config には $connectionstring エントリがあり、ユーザー/環境ごとのカスタマイズ ファイルには、ソリューションが構築されているコンテキスト/構成に応じて $connectionstring を置き換える潜在的な値がある可能性があります。

つまり、次のような一連のファイルを作成できます。

user_joe.config

       $connectionstring = db_where_joe_like_to_connect_to 

staging.config

       $connectionstring = db_where_staging_connect_to  

production.config

       $connectionstring = db_production

そのため、joe が開発ボックスからソリューションをコンパイルしている場合、web.config には $connectionstring の値「db_where_joe_like_to_connect_to」が必要です。

ナントが関与しない解決策があることを願っています。

誰かがポインターをスローできることを願っています。

4

4 に答える 4

7

Visual Studio 2010 の web.config 変換設定を使用できます。

http://weblogs.asp.net/gunnarpeipman/archive/2009/06/16/visual-studio-2010-web-config-transforms.aspx

これにより、各開発者は、ビルド設定にマージできる web.config の部分を持つことができます。

内部的には、ネット上のさまざまな場所から集められたイベントを使用します。通常、これは発行中に発生し、コンパイル時に発生するようにしたかったためです。

csproj ファイルから、BeforeBuild ターゲットを追加します。

<Target Name="BeforeBuild">
    <TransformXml Source="$(SolutionDir)Web.config" Transform="$(SolutionDir)Web.$(Configuration).config" Destination="$(SolutionDir)Web.$(Configuration).config.transformed" />
  </ターゲット>
  <プロパティ グループ>
    <PostBuildEvent>xcopy "$(SolutionDir)Web.$(Configuration).config.transformed" "$(SolutionDir)Web.config" /R /Y</PostBuildEvent>
  </プロパティ グループ>


于 2011-05-10T17:12:37.587 に答える
2

デバッグ ビルドの web.config エントリで configSource 属性を使用することをお勧めします。次に、テスト ビルドとリリース ビルドで、データ変換を使用してテスト エントリと運用エントリを挿入できます。

次のようにします。

<connectionStrings configSource="myLocalConnectionStrings.cfg" />

次に、ソース管理にチェックインしない myLocalConnectionStrings というローカル ファイルがあります。Web.config.Release では、connectionStrings セクションを変換してプロダクション文字列を含め、configSource 属性を削除するだけです。

于 2012-02-28T22:00:29.510 に答える
0

これがT4ソリューションです。これは、開発者のみが使用する内部ツールであり、「含まれる」ファイルをさらに処理する必要がないため、私の場合はうまくいきました。

ファイル名 App.tt.

<#@ template debug="false" hostspecific="true" language="C#" #>
<#@ import namespace="System" #>
<#@ import namespace="System.IO" #>
<#@ output extension=".config" #>
<#
string pathToConfigurations = Host.ResolvePath("Configurations");
string pathToMachine = Path.Combine(pathToConfigurations, Environment.MachineName + ".config");
if (File.Exists(pathToMachine))
{
    Write(File.ReadAllText(pathToMachine)); 
}
else
{
    Write(File.ReadAllText(Path.Combine(pathToConfigurations, "App.config")));  
}
#>
于 2016-04-08T20:44:29.497 に答える