Visual Studio の Web プロジェクトではないプロジェクトの App.Config 変換は? 質問する

Visual Studio の Web プロジェクトではないプロジェクトの App.Config 変換は? 質問する

Visual Studio 2010 Web ベース アプリケーションには、異なる環境用に複数の構成ファイルを維持できる構成変換機能があります。ただし、Windows サービス/WinForms またはコンソール アプリケーションの App.Config ファイルでは同じ機能は使用できません。

ここで提案されている回避策があります:XDT マジックを App.Config に適用する

ただし、これは簡単ではなく、いくつかの手順が必要です。app.config ファイルで同じことを実現するより簡単な方法はありますか?

ベストアンサー1

いくつかの解決策を試しましたが、個人的に見つけた最も簡単な解決策は次のとおりです。
ダンコメントで指摘された元の投稿属するオレグ・シクありがとう、オレグ!

手順は次のとおりです。

1. 各構成の XML ファイルをプロジェクトに追加します。

Debug通常、と の設定があるので、Releaseファイルに と という名前を付けますApp.Debug.configApp.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>

おすすめ記事