你有点问错问题了,不要担心如何转换回 web.config。相反,只需在文件中应该为连接字符串创建参数即可。我刚刚在http://sedodream.com/2012/05/13/VSWebPublishHowToParameterizeConnectionStringsOutsideOfWebconfig.aspx上写了这篇博客。我还为您粘贴了下面的内容。
如果您在 VS 2010 或 VS 11 中使用 Visual Studio Web 发布来创建 Web Deploy 包,那么您可能知道我们在 web.config 中自动参数化连接字符串。如果您不熟悉 Web 部署参数,它们是一种声明您希望在以后发布包时能够轻松更新某些值的方式。连接字符串是在发布期间通常需要更新的一些很好的例子。
正如我之前所说,如果您在 Visual Studio 中创建 Web 部署包,我们将自动为 web.config 中的所有连接字符串创建 Web 部署参数。今天早些时候,我在 StackOverflow 上看到一个问题,询问如何在非 web.config 文件中参数化连接字符串(问题实际上问了其他问题,但我认为这是他真正想要的)。我创建了一个示例来展示如何做到这一点。下面是 web.config 中 connectionStrings 元素的样子。
<connectionStrings configSource="connectionStrings.config" />
这是connectionStrings.config
<connectionStrings>
<clear/>
<add name="ApplicationServices"
connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnetdb.mdf;User Instance=true"
providerName="System.Data.SqlClient" />
<add name="OtherConnectionString"
connectionString="data source=.\SQLExpress;Integrated Security=SSPI;Initial Catalog=foo"
providerName="System.Data.SqlClient"/>
</connectionStrings>
为了参数化这些连接字符串,您必须扩展 Web 发布管道。为此,在您正在工作的项目的根目录中创建一个名为 {project-name}.wpp.targets 的文件(对于 VS 11 项目,您可以将所有这些直接放在 .pubxml 文件中)。这将是一个 MSBuild 文件,它将被导入到构建/发布过程中。下面是需要创建的文件。
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<!-- Here we need to declare MSDeploy parameters for connection strings in connectionStrings.config -->
<MsDeployDeclareParameters Include="ApplicationServices-ConnectionString" >
<Kind>XmlFile</Kind>
<Scope>connectionStrings.config$</Scope>
<Match>/connectionStrings/add[@name='ApplicationServices']/@connectionString</Match>
<Description>Connection string for ApplicationServices</Description>
<DefaultValue>data source=(localhost);Initial Catalog=AppServices</DefaultValue>
<Tags>SqlConnectionString</Tags>
</MsDeployDeclareParameters>
<MsDeployDeclareParameters Include="OtherConnectionString-ConnectionString" >
<Kind>XmlFile</Kind>
<Scope>connectionStrings.config$</Scope>
<Match>/connectionStrings/add[@name='OtherConnectionString']/@connectionString</Match>
<Description>Connection string for OtherConnectionString</Description>
<DefaultValue>data source=(localhost);Initial Catalog=OtherDb</DefaultValue>
<Tags>SqlConnectionString</Tags>
</MsDeployDeclareParameters>
</ItemGroup>
</Project>
在这里您可以看到我正在为 MSDeployDeclareParameters 创建值。打包/发布时,此项目列表用于创建 MSDeploy 参数。下面是每个包含的元数据值的解释。
- Kind = 对于这种情况,它将始终是 Xmlfile,了解更多
- Scope = 需要修改的文件的正则表达式
- Match = 要更新的属性/元素的 XPath 表达式
- 描述 = 可选描述(如果导入了 pkg,这将显示在 IIS 管理器中)
- DefaultValue = optional 参数的默认值Tags = optional,对于连接字符串使用SqlConnectionString
创建此文件后,您需要关闭/重新打开 VS(它会缓存导入的 .targets 文件)。然后您可以创建一个 Web 部署包。当您这样做时,将声明这些新参数。就我而言,然后我将其导入 IIS 管理器,这是显示参数的对话框。
如您所见,此处显示了应用程序路径参数以及我的自定义连接字符串值。当我更新文本框中的值并在我的 Web 服务器上打开 connectionStrings.config 时,它们就是我在对话框中输入的值。
仅供参考,我已在ParameterizeConStringConfig将此示例上传到我的 github 帐户。