C#项目 App.config 配置文件不同使用环境配置

问题

部署项目时,常常需要根据不同的环境使用不同的配置文件。例如,在部署网站时可能希望禁用调试选项,并更改连接字符串以使其指向不同的数据库。在创建 Web 项目时,Visual Studio 自动生成了 Web.configWeb.Debug.configWeb.release.config这3个不同的配置文件,并提供了转换工具,用于在部署项目时自动转换配置文件内容。具体可以参考这2篇文章:如何:在部署 Web 应用程序项目时转换 Web.config 和 用于 Web 应用程序项目部署的 Web.config 转换语法 。

然而在其他项目类型中(如控制台应用程序、Windows 服务),并没有现成的配置文件的转换功能。

 

  1. 我们在项目中添加 App.configApp.Debug.configApp.Release.config 这3个配置文件。

  2. 打开项目所在目录,用记事本或其他文本编辑器打开 .csproj 文件。

  3. 在 PropertyGroup 标签下添加如下内容:

    
      App.config
    

4.在 ItemGroup 标签中找到和 App.configApp.Debug.configApp.Release.config 相关的项目,替换为

"App.config" />
"App.Debug.config">
    App.config

"App.Release.config">
    App.config

5.在最后一个 Import 标签后面添加:

"$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets" />

6.在 Import 标签后面添加 Target 标签:

"AfterBuild">
  "@(AppConfigWithTargetPath)" Transform="$(ProjectConfigTransformFileName)" Destination="@(AppConfigWithTargetPath->'$(OutDir)%(TargetPath)')" />

7.切换到 Visual Studio , 重新加载项目。

8.这时查看 Visual Studio 可以看到 App.config 的组织方式和 Web.config 一样了。

C#项目 App.config 配置文件不同使用环境配置_第1张图片

现在就可以使用 用于 Web 应用程序项目部署的 Web.config 转换语法 这篇文章中提到的转换语法了。

例如需要替换 connectionStrings , App.config 有如下配置:

"1.0" encoding="utf-8" ?>

    
        "connString" connectionString="Server=debug;Database=test;Uid=root;Pwd=123456;CharSet=utf8;"
             providerName="MySql.Data.MySqlClient" />
    

只需要修改 App.Release.config 为如下内容即可:

"1.0" encoding="utf-8"?>



"http://schemas.microsoft.com/XML-Document-Transform">
    
        "connString"
             connectionString="Server=release;Database=test;Uid=root;Pwd=654321;CharSet=utf8;"
             xdt:Transform="SetAttributes" xdt:Locator="Match(name)" />
    

这样在选择 Release 配置时,connectionStrings 会自动替换成 App.Release.config 中的值。查看 bin\Release 目录下的 config 文件可以进行验证。

完整代码

"1.0" encoding="utf-8"?>
"12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  "$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
  
    " '$(Configuration)' == '' ">Debug
    " '$(Platform)' == '' ">AnyCPU
    {8196CA4E-AD25-4F90-BB80-D27512BF4BD4}
    Exe
    Properties
    App.Config转换
    App.Config转换
    v4.0
    512
  
  " '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    AnyCPU
    true
    full
    false
    bin\Debug\
    DEBUG;TRACE
    prompt
    4
  
  " '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    AnyCPU
    pdbonly
    true
    bin\Release\
    TRACE
    prompt
    4
  
  
    App.config
  
  
    "System" />
    "System.configuration" />
    "System.Core" />
    "System.Xml.Linq" />
    "System.Data.DataSetExtensions" />
    "Microsoft.CSharp" />
    "System.Data" />
    "System.Xml" />
  
  
    "Program.cs" />
    "Properties\AssemblyInfo.cs" />
  
  
    "App.config" />
    "App.Debug.config">
      App.config
    
    "App.Release.config">
      App.config
      Designer
    
  
  "$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
  "$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets" />
  
  "AfterBuild">
    "@(AppConfigWithTargetPath)" Transform="$(ProjectConfigTransformFileName)" Destination="@(AppConfigWithTargetPath->'$(OutDir)%(TargetPath)')" />
  

转自:在部署 C#项目时转换 App.config 配置文件

你可能感兴趣的:(C#项目 App.config 配置文件不同使用环境配置)