Mar*_*ten 2 msbuild web-config msdeploy web-config-transform config-transformation
目前我的web.config看起来像这样:
<configuration>
<connectionStrings configSource="connectionstrings.config"/>
</configuration>
Run Code Online (Sandbox Code Playgroud)
在生成部署包(Msbuild.exe + target = Package)时,它不会"神奇地"将我的连接字符串参数化到parameters.xml文件以进行部署时的替换.
当我内联我的连接线时,一切都很好,并为我的连接线生成参数..
所以:
如何通过web.config转换复制connectionstrings.config的内容作为部署<... configsource ="xxx"/>的替换?
编辑: 我接受了Sayed Ibrahim的答案,因为'默认'行为非常好(web.config中连接字符串的自动参数化)但最后更好地指定需要参数化的确切内容(通过{projectname} .wpp.targets或parameters.xml文件).
你有点问错误的问题,不要担心如何转换回web.config.而只是为文件中的连接字符串创建参数.我刚刚在http://sedodream.com/2012/05/13/VSWebPublishHowToParameterizeConnectionStringsOutsideOfWebconfig.aspx上发布了此博文.我也贴了下面的内容给你.
如果您已在VS 2010或VS 11中使用Visual Studio Web发布来创建Web Deploy包,那么您可能知道我们会自动参数化web.config中的连接字符串.如果您不熟悉Web Deploy参数,它们是一种声明您希望在以后发布包时能够轻松更新某些值的方法.连接字符串是通常需要在发布期间更新的内容的良好示例.
正如我之前所说,如果您在Visual Studio中创建Web Deploy包,我们将自动为web.config中的所有连接字符串创建Web Deploy参数.今天早些时候我在StackOverflow上看到一个问题,询问如何在非web.config文件中参数化连接字符串(问题实际上是问别的,但我认为这是他真正想要的).我创建了一个示例,展示了如何执行此操作.下面是web.config中connectionStrings元素的样子.
<connectionStrings configSource="connectionStrings.config" />
Run Code Online (Sandbox Code Playgroud)
这是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>
Run Code Online (Sandbox Code Playgroud)
为了参数化这些连接字符串,您必须扩展Web Publish Pipeline.为此,在您正在使用的项目的根目录中创建名为{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>
Run Code Online (Sandbox Code Playgroud)
在这里,您可以看到我正在为MSDeployDeclareParameters创建值.打包/发布此项目列表用于创建MSDeploy参数.以下是每个包含的元数据值的说明.
创建此文件后,您需要关闭/重新打开VS(它会缓存导入的.targets文件).然后,您可以创建Web部署包.执行此操作时,将声明这些新参数.在我的情况下,我然后在IIS管理器中导入它,这是显示参数的对话框.

如您所见,此处显示了Application Path参数以及我的自定义连接字符串值.当我更新文本框中的值并在我的Web服务器上打开connectionStrings.config时,它们是我在对话框中输入的值.
仅供参考我已将此样本上传到我在ParameterizeConStringConfig的 github帐户.
| 归档时间: |
|
| 查看次数: |
1864 次 |
| 最近记录: |