gpt4 book ai didi

azure - 对于 Azure 应用程序部署中的多个参数之一,参数化 Web.config 失败

转载 作者:行者123 更新时间:2023-12-02 06:48:54 24 4
gpt4 key购买 nike

我迷路了。我有一个 Web 项目,其中包含一个配置文件和几个需要根据目标环境进行不同设置的参数。我有一个应用程序设置和一个连接字符串。需要替换 DEFINE 值。

Web.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="HostUri" value="DEFINE"/>
...
</appSettings>
<connectionStrings>
<add name="DbConn" connectionString="DEFINE" providerName="System.Data.SqlClient"/>
</connectionStrings>
...
</configuration>

我有一个参数规范,Azure 应用服务部署任务稍后在部署期间使用。在这里,我指定了要替换的两个值。

参数.xml:

<parameters>
<parameter name="HostUri" defaultValue="Replace me!">
<parameterEntry kind="XmlFile" scope="Web.config"
match="/configuration/appSettings/add[@key='HostUri']/@value" />
</parameter>

<parameter name="DbConn" defaultValue="Replace me!">
<parameterEntry kind="XmlFile" scope="Web.config"
match="/configuration/connectionStrings/add[@name='DbConn']/@connectionString" />
</parameter>
</parameters>

虽然应用设置 HostUri 已正确替换,但连接字符串 DbConn 保持不变。我什至没有设置默认值。它保持其值 DEFINE 与 Web.config 中最初设置的一样。

我的直觉告诉我我的 XPath /configuration/connectionStrings/add[@name='DbConn']/@connectionString 不正确,但对我来说看起来没问题,并且遵循其他帖子的做法,如Cobus Bernard .

非常感谢任何帮助。

最佳答案

我研究了日志文件,发现 MSBuild 处理连接字符串的方式不同:

...
Adding declared parameter 'HostUri'.
Adding declared parameter 'DbConn'.
Adding declared parameter 'DbConn-Web.config Connection String'.
...

最后一行导致生成的文件 SetParameters.xml 中出现不需要的条目:

...
<setParameter name="HostUri" value="Replace me!" />
<setParameter name="DbConn" value="Replace me!" />
<setParameter name="DbConn-Web.config Connection String" value="DEFINE" />
...

所以我的 XPath 是正确的,但是这个特殊指令将 DEFINE 放入我的目标 Web.config 中。我找到了两个解决方案,主要基于这个SO问题:How to Publish Web with msbuild?

1) 调整您的项目文件

卸载您的 Web 项目,编辑项目文件并在所需的配置中添加以下行:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<!-- Add this line: --
<AutoParameterizationWebConfigConnectionStrings>False</AutoParameterizationWebConfigConnectionStrings>
...
</PropertyGroup>

构建过程将拾取此信息并停止特殊对待连接字符串。

我发现这个解决方案太隐藏了,人们会忘记,所以替代方案更明确一点:

2) 配置 MSBuild

构建发布包时将显式参数传递给 MSBuild:

msbuild /P:Configuration=Release;AutoParameterizationWebConfigConnectionStrings=false;...

关于azure - 对于 Azure 应用程序部署中的多个参数之一,参数化 Web.config 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41588781/

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