在做项目的过程中,一般都有好几套环境,如Dev环境,QA环境等,通常情况下,不同环境的某些配置文件值是不一样的,部署时手动修改的方式管理多套环境的配置文件是很累的,而且很容易出错,最好的方式是部署时根据选择的配置管理器自动生成不同的配置。
在新建的Web 应用程序中,我们会看到Web.config是下面这样的,而且发布时会自动选择Web.Release.config配置的值,具体可参考之前写的另一篇博客 《Web.config 自动替换值》

但是其它类型的项目,比如控制台应用程序,部署时如何实现自动替换呢?
新建App.Debug.config,App.Release.config配置文件
在文件资源管理器中找到项目文件,用记事本软件(如Notepad++)打开
添加PropertyGroup配置
- <PropertyGroup>
- <ProjectConfigFileName>App.config</ProjectConfigFileName></PropertyGroup>
在ItemGroup中找到App.Debug.config和App.Release.config,修改为如下
- <None Include="App.config" /><None Include="App.Debug.config">
- <DependentUpon>App.config</DependentUpon></None><None Include="App.Release.config">
- <DependentUpon>App.config</DependentUpon></None>
在最后一个Import标签后添加如下标签(如编译不通过,注意修改路径,我本机装的是VS2017)
- <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v15.0\Web\Microsoft.Web.Publishing.targets" />
在 Import 标签后面添加 Target 标签
- <Target Name="AfterBuild">
- <TransformXml Source="@(AppConfigWithTargetPath)" Transform="$(ProjectConfigTransformFileName)" Destination="@(AppConfigWithTargetPath->'$(OutDir)%(TargetPath)')" />
- </Target>
在Visual Studio 中打开项目,重新加载解决方案,会看到App.config和Web 应用程序的Web.config已经一样了

接下来的使用方式就和Web 应用程序里一样了,打开App.Release.config,修改为如下:
- <?xml version="1.0" encoding="utf-8" ?><configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
- <appSettings><add key="Environment" value="QA" xdt:Transform="Replace" xdt:Locator="Match(key)" />
- </appSettings></configuration>
部署时,当选择Release模式时,生成的配置如下:
- <add key="Environment" value="QA" />
当选择Debug模式时,生成的配置仍是App.config中的配置,如下:
- <add key="Environment" value="Dev" />
参考文章:1.在部署 C#项目时转换 App.config 配置文件
2.Web.config 自动替换值