gpt4 book ai didi

msbuild - 如何在转换时将 configSource 转换为 web.config 中的内联元素

转载 作者:行者123 更新时间:2023-12-02 20:53:11 25 4
gpt4 key购买 nike

目前我的 web.config 看起来像这样:

<configuration>
<connectionStrings configSource="connectionstrings.config"/>
</configuration>

生成部署包(Msbuild.exe + target=Package)时,它不会“神奇地”将我的连接字符串参数化为parameters.xml 文件以在部署时进行替换。

当我内联连接字符串时,一切都很好,并且为我的连接字符串生成了参数..

所以:

如何通过 web.config 转换复制 connectionstrings.config 的内容来替换部署中的 <... configsource="xxx"/>?

编辑:我已经接受了 Sayed Ibrahim 的答案,因为“默认”行为非常好(web.config 中连接字符串的自动参数化)但最终最好准确指定需要参数化的内容(通过 {projectname }.wpp.targetsparameters.xml 文件)。

最佳答案

你问了一个错误的问题,不用担心如何转换回 web.config。相反,只需在文件中应在的位置为连接字符串创建参数即可。我刚刚在 http://sedodream.com/2012/05/13/VSWebPublishHowToParameterizeConnectionStringsOutsideOfWebconfig.aspx 上写了这篇博客。我还为您粘贴了以下内容。

如果您在 VS 2010 或 VS 11 中使用 Visual Studio Web 发布来创建 Web 部署包,那么您可能知道我们会自动在 web.config 中参数化连接字符串。如果您不熟悉 Web 部署参数,它们是一种声明您希望在稍后发布包时能够轻松更新某些内容的值的方法。连接字符串是发布期间通常需要更新的内容的很好示例。

正如我之前所说,如果您在 Visual Studio 中创建 Web 部署包,我们将自动为 web.config 中的所有连接字符串创建 Web 部署参数。今天早些时候我看到了一个question on StackOverflow asking how to parameterize connection strings in non-web.config files (问题实际上问了别的东西,但我认为这才是他真正想要的)。我创建了一个示例来展示如何执行此操作。下面是 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,learn more
  • 范围=需要修改的文件的正则表达式
  • Match = 要更新的属性/元素的 XPath 表达式
  • 描述 = 可选描述(如果导入了 pkg,这将显示在 IIS 管理器中)
  • DefaultValue = 参数的可选默认值 Tags = 可选,对于连接字符串,请使用 SqlConnectionString

创建此文件后,您需要关闭/重新打开 VS(它会缓存导入的 .targets 文件)。然后您可以创建一个 Web 部署包。当您这样做时,将声明这些新参数。就我而言,然后我将其导入到 IIS 管理器中,下面是显示参数的对话框。 enter image description here

正如您所看到的,应用程序路径参数以及我的自定义连接字符串值都显示在那里。当我更新文本框中的值并在网络服务器上打开 connectionStrings.config 时,它们就是我在对话框中输入的值。

仅供引用,我已将此示例上传到我的 github 帐户 ParameterizeConStringConfig .

关于msbuild - 如何在转换时将 configSource 转换为 web.config 中的内联元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10411326/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com