---
tags: 工具使用
---
# Visual Studio App.config, Nlog.config 編編時根據環境參數自動轉換
當我們想要在編編的時候, Visual Studio 能跟自動據環境參數 Debug, Release 等等, 去自動Build 不同設定內容的 App.config, NLog.config 或者其他的設定檔都可以。
Project 一開始的時候可能只有 App.config, Nlog.config, 自己複製出 Release, Debug 等 Config 版本, 然後修改Project檔案(.csproj),
修改成這段內容
```xml=
<ItemGroup>
<None Include="App.config" />
<None Include="App.Release.config">
<DependentUpon>App.config</DependentUpon>
</None>
<None Include="NLog.config" />
<None Include="NLog.Release.config">
<DependentUpon>NLog.config</DependentUpon>
</None>
<None Include="NLog.Debug.config">
<DependentUpon>NLog.config</DependentUpon>
</None>
</ItemGroup>
```
新增這段在最後
```xml=
<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Web\Microsoft.Web.Publishing.Tasks.dll" />
<Target Name="AfterCompile" Condition="Exists('App.$(Configuration).config')">
<TransformXml Source="App.config" Destination="$(IntermediateOutputPath)$(TargetFileName).config" Transform="App.$(Configuration).config" />
<ItemGroup>
<AppConfigWithTargetPath Remove="@(AppConfigWithTargetPath)" />
<AppConfigWithTargetPath Include="$(IntermediateOutputPath)$(TargetFileName).config">
<TargetPath>$(TargetFileName).config</TargetPath>
</AppConfigWithTargetPath>
</ItemGroup>
</Target>
<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Web\Microsoft.Web.Publishing.Tasks.dll" />
<Target Name="AfterCompile">
<TransformXml Source="NLog.config" Destination="$(OutputPath)\NLog.config" Transform="NLog.$(Configuration).config" />
</Target>
```
[設定1參考](https://dotblogs.com.tw/supershowwei/2022/12/19/manually-add-configuration-transform-for-windows-form-application)
[設定2參考](https://stackoverflow.com/questions/53504590/invalid-value-for-the-configfile-paramter-of-the-generationapplication-manifest)
[MS Build 設定參考](https://johan.driessen.se/posts/Applying-MSBuild-Config-Transformations-to-any-config-file-without-using-any-Visual-Studio-extensions/)
[設定檔內容轉換參考](https://learn.microsoft.com/en-us/previous-versions/aspnet/dd465326(v=vs.110))
也可以用 [Configuration Transform](https://marketplace.visualstudio.com/items?itemName=GolanAvraham.ConfigurationTransform)擴展