问题
部署项目时,常常需要根据不同的环境使用不同的配置文件。例如,在部署网站时可能希望禁用调试选项,并更改连接字符串以使其指向不同的数据库。在创建 Web 项目时,Visual Studio 自动生成了 Web.config
、Web.Debug.config
、Web.release.config
这3个不同的配置文件,并提供了转换工具,用于在部署项目时自动转换配置文件内容。具体可以参考这2篇文章:如何:在部署 Web 应用程序项目时转换 Web.config 和 用于 Web 应用程序项目部署的 Web.config 转换语法 。
然而在其他项目类型中(如控制台应用程序、Windows 服务),并没有现成的配置文件的转换功能。
-
我们在项目中添加
App.config
、App.Debug.config
、App.Release.config
这3个配置文件。 -
打开项目所在目录,用记事本或其他文本编辑器打开
.csproj
文件。 -
在
PropertyGroup
标签下添加如下内容:App.config
4.在 ItemGroup
标签中找到和 App.config
、App.Debug.config
、App.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
一样了。
现在就可以使用 用于 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 配置文件