Web.config未在部署

时间:2016-12-16 10:59:40

标签: iis msbuild web-config iis-8 msdeploy

我有一个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>
...

我检查过的其他事情:

  • MSDeploy中的参数化已打开

在.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”时。现在我只想知道,我在哪里得到了我用过的那个例子......

1 个答案:

答案 0 :(得分:1)

问题是我在parameters.xml中有一个名为“type”的属性,当它应该被命名为“kind”时。

感谢https://forums.iis.net/t/1177518.aspx