我们正在努力整合一次“构建”,“随处部署”和“#39;我们的构建部署系统中的模型。
MSDeploy为此创造奇迹,通过CRC校验和比较显着缩短构建时间,并且(大部分)在使用参数化根据环境更改应用程序web.configs时也能正常工作我们部署到。
我已将这些参数的大部分固定下来,但无论我在parameters.xml文件中调用多少种不同的方式,一些元素和属性从不似乎都会发生变化。我已经概述了三个这样的例子,这里是我试图改变的web.config文件:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings>
<add name="DbConnectionString" connectionString="Data Source=null;Initial Catalog=null;Trusted_Connection=no;User ID=user1;Password=pass*9;" providerName="System.Data.SqlClient" />
</connectionStrings>
<system.web>
<customErrors mode="On" defaultRedirect="/Library/Error/PageNotFound.aspx">
</customErrors>
</system.web>
<applicationSettings>
<settings>
<setting name="service_Address" serializeAs="String">
<value></value>
</setting>
<settings>
</applicationSettings>
</configuration>
这是parameters.xml文件:
<parameter name="DbConnectionString" defaultValue="">
<parameterEntry kind="XmlFile" scope="\\web.config$" match="/configuration/connectionStrings/add[@name='DbConnectionString']/@connectionString" />
</parameter>
<parameter name="customErrorsMode" defaultValue="">
<parameterEntry kind="XmlFile" scope="\\web.config$" match="configuration/system.web/customErrors/@mode" />
</parameter>
<parameter name="service_Address" defaultValue="">
<parameterEntry kind="XmlFile" scope="\\web.config$" match="/configuration/applicationSettings/aim.Web.Properties.Settings/setting[@name='service_Address']/value" />
</parameter>
这是相应的setParameters.xml文件:
<setParameter name="DbConnectionString" value="Data Source=dbserver;Initial Catalog=DB1;Trusted_Connection=no;User ID=user1;Password=pass*9;"/>
<setParameter name="customErrorsMode" value="Off"/>
<setParameter name="service_Address" value="https://myservice.asmx"/>
我已经测试了每个XPath表达式,结果与任何其他工作参数完全相同,但上面似乎永远不会改变。
有没有人看到我在这里找不到任何明显的东西?
答案 0 :(得分:18)
我在这里找到了这个问题的答案:
Replace web.config elements with MSDeploy
我失踪了&#39; text()&#39;在XPath表达式的末尾,正确的XPath是:
/configuration/applicationSettings/aim.Web.Properties.Settings/setting[@name='aim_Web_AddressService_Address']/value/text()
对于customErrorsMode问题,我错过了一个&#39; /&#39;在我的XPath表达式的开头。正确的表达方式是:
/configuration/system.web/customErrors/@mode
这个真的找到了我,这是我想到的最后一个。在做了一些挖掘之后,我发现MSDeploy会自动参数化某些元素,连接字符串就是其中之一,更多信息请点击这里:
Configuring Parameters for Web Package Deployment
我所讨论的连接字符串的参数声明应该是:
<parameter name="DbConnectionString-Web.config Connection String" defaultValue="">
<parameterEntry kind="XmlFile" scope="\\web.config$" match="/configuration/connectionStrings/add[@name='DbConnectionString']" />
</parameter>
我的setParameter定义应如下所示:
<setParameter name="DbConnectionString-Web.config Connection String" value="Data Source=dbserver;Initial Catalog=DB1;Trusted_Connection=no;User ID=user1;Password=pass*9;" />