我有一个ASP MVC应用程序,我正在通过TeamCity部署到Intranet服务器,我需要一些appSettings在部署时进行参数化,这样客户机密就会对开发人员等隐藏起来。
我在项目的根目录中有Parameters.xml文件,使用包构建的SetParameters.xml正确包含所有这些参数及其默认值。但是,更改这些值(甚至使用-setParam将它们传递给MSDeploy)不会导致部署的web.config中的任何更改。
当我更改SetParameters.xml文件中的值(通过afaik正确传递给MSDeploy)时,部署的web.config中的设置不会更改,并且有“详细:参数条目”IIS Web应用程序名称/ 1'适用于日志中的条目(IIS Web应用程序名称是另一个,标准,参数),没有提及我的appSettings参数。
此外,当我使用IIS管理器导入应用程序时,它会询问我这些参数的值,但是我没有在详细日志中看到它们,并且web.config根本没有更新,除非那里确实是一些变化,在这种情况下,参数不会被替换。
我的parameters.xml如下所示:
<?xml version="1.0" encoding="utf-8" ?>
<parameters>
<parameter name="PiwikToken" defaultValue="__PIWIKTOKEN__">
<parameterEntry type="XMLFile" scope="\\web\.config$" match="/configuration/appSettings/add[@key='PiwikToken']/@value"/>
</parameter>
<parameter name="LoginClientSecret" defaultValue="__LOGINSECRET__">
<parameterEntry type="XMLFile" scope="\\web\.config$" match="/configuration/appSettings/add[@key='LoginClientSecret']/@value"/>
</parameter>
<parameter name="SecondClientSecret" defaultValue="__SECONDSECRET__">
<parameterEntry type="XMLFile" scope="\\web\.config$" match="/configuration/appSettings/add[@key='SecondClientSecret']/@value"/>
</parameter>
</parameters>
我尝试了其他范围变体(“web.config $”,“web.config”,“\\ web.config $”,“\\ web \ .config $”,“Portal \ web.config $ “......)并没有改变一件事。 针对我的web.config测试的XPath表达式工作正常。
的web.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="webpages:Version" value="3.0.0.0" />
<add key="webpages:Enabled" value="false" />
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
<add key="LoginClientId" value="portalLocal" />
<add key="RedirectAfterAuthUrl" value="https://localhost:44321/" />
<add key="PiwikSiteId" value="12" />
<add key="PiwikToken" value="__PIWIKTOKEN__" />
<add key="LoginClientSecret" value="__LOGINSECRET__" />
<add key="SecondClientSecret" value="__SECONDSECRET__" />
</appSettings>
<connectionStrings>
<add name="appDB" connectionString="..." />
</connectionStrings>
...
我检查过的其他事情:
在.zip包中生成的文件“parameters.xml”包含
<parameters>
<parameter name="IIS Web Application Name" defaultValue="Portal" tags="IisApp">
<parameterEntry kind="ProviderPath" scope="IisApp" match="^D:\\BuildAgent\\work\\fec2f9c37ed1ec8e\\Portal\\obj\\DEV\\Package\\PackageTmp$" />
<parameterEntry kind="ProviderPath" scope="setAcl" match="^D:\\BuildAgent\\work\\fec2f9c37ed1ec8e\\Portal\\obj\\DEV\\Package\\PackageTmp$" />
</parameter>
<parameter name="Add write permission to App_Data Folder" description="Add write permission to App_Data folder" defaultValue="{IIS Web Application Name}/App_Data" tags="Hidden">
<parameterEntry kind="ProviderPath" scope="setAcl" match="^D:\\BuildAgent\\work\\fec2f9c37ed1ec8e\\Portal\\obj\\DEV\\Package\\PackageTmp\\App_Data$" />
</parameter>
<parameter name="PiwikToken" defaultValue="__PIWIKTOKEN__" />
<parameter name="LoginClientSecret" defaultValue="__LOGINSECRET__" />
<parameter name="SecondClientSecret" defaultValue="__SECONDSECRET__" />
</parameters>
根据网络上的各种消息来源,其常见原因是范围错误或匹配正则表达式错误,但我尝试了各种变体而没有成功。
如果有人对尝试什么有什么想法,或者可能是什么原因,我会很乐意进一步探索或尝试一下,但是现在我已经花了几天时间而且想不出什么别的尝试。谢谢!
编辑:现在我已经用MVC创建了一个新的WebAPI项目,只添加了parameters.xml,将这些参数添加到web.config,并且web.config仍然没有在部署时进行参数化。那么在某个地方设置一些IIS吗?EDIT2:经过实验,我发现zip包中生成的 parameters.xml 确实应该包含“匹配”和“范围”属性而它们没有 - 因为当我重写xml时所以它包含带有正确匹配和范围的parameterEntry,并将其重新打包到zip中,它开始工作。
EDIT3:问题似乎是具有名为“type”的属性,当它应该被命名为“kind”时。现在我只想知道,我在哪里得到了我用过的那个例子......
答案 0 :(得分:1)
问题是我在parameters.xml中有一个名为“type”的属性,当它应该被命名为“kind”时。