【问题标题】:How do I force MSDeploy API to keep an existing Connectionstring?如何强制 MSDeploy API 保留现有的 Connectionstring?
【发布时间】:2016-01-26 09:16:48
【问题描述】:

我们正在通过 MSDeploy API 将 ASP.Net 应用程序部署到 IIS。我们只想更新现有网站。在我们的 ...pubxml 中,我们定义了以下内容:

<ItemGroup>
  <MSDeployParameterValue Include="$(DeployParameterPrefix)ConnectionstringA-Web.config Connection String">
    <UpdateDestWebConfig>False</UpdateDestWebConfig>
  </MSDeployParameterValue>
  <MSDeployParameterValue Include="$(DeployParameterPrefix)ConnectionstringB-Web.config Connection String">
    <UpdateDestWebConfig>False</UpdateDestWebConfig>
  </MSDeployParameterValue>
</ItemGroup>

默认情况下,发布时创建的 setParameters.xml 如下所示:

    <setParameter name="ConnectionstringA-Web.config Connection String" value="metadata=res://*/itrDTO.csdl|res://*/itrDTO.ssdl|res://*/itrDTO.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=devServer;initial catalog=devDB;User Id=devUser;Password=devPW;MultipleActiveResultSets=True;App=EntityFramework&quot;" />
    <setParameter name="ConnectionstringB-Web.config Connection String" value="data source=devServer;initial catalog=devDB;integrated security=True" />

我还尝试在我的项目中使用此配置创建一个“Projectname.wpp.targets”:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
  <PropertyGroup>
    <AutoParameterizationWebConfigConnectionStrings>false</AutoParameterizationWebConfigConnectionStrings>
  </PropertyGroup>
</Project>

结果是连接字符串没有在 setparameters.xml 中创建。

但是,这里的所有配置组合都在更改目标服务器上 web.config 中的连接字符串。如果我们通过 IIS-ManagementUI 导入包并且当我们通过 MSDeploy API 部署包时,就会发生这种情况。

我为“参数化”找到的所有示例 - 主题都是针对 IIS 管理过程的。据我了解参数化,这仅对手动安装更新有用,因此管理员有一个 UI 来配置东西。但是当我们更新客户的系统时,我们没有 UI。

更新: 当我使用 Visual Studio 发布时,这是一个有趣的结果: 我认为这意味着“嘿,WebDeploy,让你的手远离连接字符串!”

当我预览更改时,结果如下:

【问题讨论】:

    标签: connection-string msdeploy webdeploy web.config-transform


    【解决方案1】:

    参数化通过 IIS 安装 UI 和命令行都很有用。我们使用 WebDeploy/Parameterization 来部署我们所有的 40 多个应用程序。

    我刚刚用一个新的空白 ASP.NET 应用程序进行了测试,发现默认情况下 ConnectionString 是参数化的,但在将 AutoParameterizationWebConfigConnectionStrings MSBUILD 属性设置为 false 后,它没有参数化 ConnectionString。参数条目已从 parameters.xml 和 SetParameters 文件中删除。

    我建议您清除目标网站文件夹并使用此属性集重新发布。

    还要仔细检查您是否没有配置转换或其他可能会更改配置的东西。

    【讨论】:

    • 我已删除 IIS 上的网站文件夹并重新部署网站。当我更新网站时,我的连接字符串会改回我的项目的值 - web.config。我的 setParameters.xml 和 parameters.xml 没有连接字符串的条目。 config.transforms 位于哪里?文件 web.debug.config 和 web.release.config 仍然是默认的。
    • 配置转换是 web.[env].config 文件。
    • 是的,它们是空的或包含默认数据
    • 我也用一个空白的 ASP.Net 应用程序尝试过这个,但我得到了相同的结果。当我打开嵌套在发布包深处的 web.config 时,我可以在那里看到我的 Development-Connectionstrings。这样好吗?
    • WebDeploy 在压缩包中创建应用程序的本地副本,然后在部署期间将其从压缩包复制到目标 Web 服务器。如果您的目标是不更改目标上的配置,则需要参数化或转换您的配置以匹配目标。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-16
    • 2013-11-29
    • 2016-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多