Visual Studio 2010 Web ベース アプリケーションには、異なる環境用に複数の構成ファイルを維持できる構成変換機能があります。ただし、Windows サービス/WinForms またはコンソール アプリケーションの App.Config ファイルでは同じ機能は使用できません。
ここで提案されている回避策があります:XDT マジックを App.Config に適用する。
ただし、これは簡単ではなく、いくつかの手順が必要です。app.config ファイルで同じことを実現するより簡単な方法はありますか?
ベストアンサー1
いくつかの解決策を試しましたが、個人的に見つけた最も簡単な解決策は次のとおりです。
ダンコメントで指摘された元の投稿属するオレグ・シク—ありがとう、オレグ!
手順は次のとおりです。
1. 各構成の XML ファイルをプロジェクトに追加します。
Debug
通常、と の設定があるので、Release
ファイルに と という名前を付けますApp.Debug.config
。App.Release.config
私のプロジェクトでは、環境の種類ごとに設定を作成したので、それを試してみるとよいでしょう。
2. プロジェクトをアンロードし、.csproj ファイルを開いて編集します。
Visual Studio では、エディター内で直接.csprojファイルを編集できます。まずプロジェクトをアンロードするだけです。次に、プロジェクトを右クリックして[<ProjectName>.csproj の編集]を選択します。
3. App.*.config ファイルをメインの App.config にバインドする
App.config
すべての参照を含むプロジェクト ファイル セクションを見つけますApp.*.config
。ビルド アクションが に設定されていることがわかりますNone
が、問題ありません。
<None Include="App.config" />
<None Include="App.Debug.config" />
<None Include="App.Release.config" />
次に、すべての構成固有のファイルをメインに依存させApp.config
、Visual Studio がデザイナー ファイルやコード ビハインド ファイルと同様にそれらをグループ化できるようにします。
上記の XML を以下の XML に置き換えます。
<None Include="App.config" />
<None Include="App.Debug.config" >
<DependentUpon>App.config</DependentUpon>
</None>
<None Include="App.Release.config" >
<DependentUpon>App.config</DependentUpon>
</None>
4. 変換マジックをアクティブ化します( VS2019などのVisual Studioバージョンでも必要です)
ファイルの最後に
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
そして最終試験の前に
</Project>
次の XML を挿入します。適切な変換を行うには 2 つの手順があることに注意してください。
<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Web\Microsoft.Web.Publishing.Tasks.dll" />
<Target Name="BeforeBuild" Condition="Exists('App.$(Configuration).config')">
<!-- Generate transformed app config and replace it: will get the <runtime> node and assembly bindings properly populated -->
<TransformXml Source="App.config" Destination="App.config" Transform="App.$(Configuration).config" />
</Target>
<Target Name="AfterBuild" Condition="Exists('App.$(Configuration).config')">
<!-- Generate transformed app config in the intermediate directory: this will transform sections such as appSettings -->
<TransformXml Source="App.config" Destination="$(IntermediateOutputPath)$(TargetFileName).config" Transform="App.$(Configuration).config" />
<!-- Force build process to use the transformed configuration file from now on.-->
<ItemGroup>
<AppConfigWithTargetPath Remove="App.config" />
<AppConfigWithTargetPath Include="$(IntermediateOutputPath)$(TargetFileName).config">
<TargetPath>$(TargetFileName).config</TargetPath>
</AppConfigWithTargetPath>
</ItemGroup>
</Target>
これで、プロジェクトをリロードしてビルドし、App.config
変換を楽しむことができます。
ご参考までに
App.*.config
ファイルが次のように正しく設定されていることを確認してください。
<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<!--magic transformations here-->
</configuration>