Azure 应用程序部署中的众多参数之一的参数化 Web.config 失败
Parameterizing Web.config fails for one of many parameters in Azure app deployment
我迷路了。我有一个带有配置文件和几个参数的 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 App Service Deploy 任务稍后在部署期间使用的参数规范。在这里,我指定了要替换的两个值。
parameters.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
保持不变。我什至没有设置默认值。它保持其最初在 Web.config.
中设置的值 DEFINE
我的直觉告诉我我的 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;...
我迷路了。我有一个带有配置文件和几个参数的 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 App Service Deploy 任务稍后在部署期间使用的参数规范。在这里,我指定了要替换的两个值。
parameters.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
保持不变。我什至没有设置默认值。它保持其最初在 Web.config.
DEFINE
我的直觉告诉我我的 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;...