多数の異なるアプリケーションで構成される比較的大規模な .Net システムを使用しています。多数の異なる app.config ファイルを用意するのではなく、すべてのアプリ間で 1 つの構成ファイルを共有したいと考えています。
また、自分のマシンで開発する場合に 1 つのバージョン、自分のマシンで開発する他の誰かのために 1 つのバージョン、テスト システム用に 1 つのバージョン、ライブ システム用に 1 つのバージョンを用意したいと考えています。
これを行う簡単な方法はありますか?
多数の異なるアプリケーションで構成される比較的大規模な .Net システムを使用しています。多数の異なる app.config ファイルを用意するのではなく、すべてのアプリ間で 1 つの構成ファイルを共有したいと考えています。
また、自分のマシンで開発する場合に 1 つのバージョン、自分のマシンで開発する他の誰かのために 1 つのバージョン、テスト システム用に 1 つのバージョン、ライブ システム用に 1 つのバージョンを用意したいと考えています。
これを行う簡単な方法はありますか?
複数のアプリケーションで必要となる大量の構成の場合、この構成を中央リポジトリ、たとえばデータベース、共通の場所にあるファイルに配置します。
さまざまな環境でさまざまなバージョンの構成ファイルを使用するには、さまざまな環境ごとにビルド構成を作成し、環境にちなんで名付けられた構成ファイルを作成します。例:
本番本番.app.configテストtest.app.config
次に、ビルド前のイベントを使用して、プロジェクトのデフォルトのapp.configに正しい構成をコピーできます。これは通常どおり出力ディレクトリにコピーされます。
ビルド前のイベントは上記のようになります。$(Configuration)を使用して、必要な環境に適したファイルを取得します。
これを上記と組み合わせて、ビルド固有の構成ファイル全体を各プロジェクトにコピーできます。
構成ファイルのセクションに<add>
要素を追加する代わりに、要素に属性を追加して、別のファイルからそのデータをロードするように指示できます。その後、共通設定をその共通ファイルに保持できます。<appSettings>
file=
<appSettings>
MSDN ライブラリのappSettings 要素 (全般設定スキーマ)を参照してください。
次のように、「子」プロジェクトでビルド後のイベント (プロパティ -> ビルド イベント) を使用して、構成ファイルをマスター プロジェクトから他のプロジェクトにコピーできます。
copy /Y c:\path\to\master\project\app.config $(TargetPath).config
exit 0
(最後の行の「exit 0」はビルド エラーを防ぎます)。
ビルド ターゲット ("RELEASE"、"DEBUG" など) ごとに個別の構成ファイルを作成するには、NOTEPAD.EXE で .csproj ファイル (または .vbproj) を編集して、ターゲット グループごとに AppConfig タグを追加します。これ:
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>.\bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<AppConfig>debug.app.config</AppConfig>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>.\bin\Devel\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<AppConfig>release.app.config</AppConfig>
</PropertyGroup>
各グループに存在する新しい<AppConfig>タグに注意してください。
NTFS シンボリック リンクを使用して、.NET .config ファイルを共有できます。ASP.NET アプリケーション、コンソール アプリケーションなどで構成されるソリューションで、これがうまく使用されているのを見てきました。
構成設定を machine.config に入れて、複数のアプリケーション間で共有することもできます。ただし、これにより展開がより問題になります。