2016-12-16 16 views
1

У меня есть приложение ASP MVC, которое я развертываю на серверах интрасети через TeamCity, и мне нужно, чтобы некоторые параметры appSettings были параметризованы при развертывании, так что секреты клиента остаются скрытыми от разработчиков и т. Д.Web.config не параметризуется при развертывании

У меня есть файл Parameters.xml в корне моего проекта, SetParameters.xml, который построен с пакетом правильно, содержит все эти параметры и их значения по умолчанию. Однако изменение этих значений (даже передача их в MSDeploy с -setParam) не приводит к каким-либо изменениям в развернутом web.config.

Когда я изменяю значения в файле SetParameters.xml (который передается в MSDeploy правильно afaik), настройки в развернутом файле web.config не изменяются и в то время как есть «Verbose: Parameter entry» IIS Web Application Имя/1 'применимо "записи в журнале (имя веб-приложения IIS является другим, стандартным, параметром), нет никаких упоминаний о моих параметрах 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> 

Я пробовал другие варианты Scope ("web.config $", "web.config", "\\ web.config $", " \\ web \ .config $ "," Portal \ web.config $ "...), и это ничего не изменило. Выражения XPath, проверенные на мой web.config, работают нормально.

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 включен

Файл "parameters.xml", который сгенерировано внутри .zip пакета, содержит

<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> 

Согласно различным источникам по сети, общая причина этого заключается в том, что область действия неверна или что регулярное выражение соответствия неверно, но я пробовал все варианты без успеха.

Если у кого есть какие-либо идеи о том, что попробовать, или что может быть причиной, я буду рад изучить его или попробовать, но сейчас я потратил несколько дней на это и не могу придумать что еще попробовать. Благодаря!

EDIT: теперь я создал новый проект WebAPI с MVC, добавленный только параметры.xml, добавил эти параметры в web.config, и web.config по-прежнему не получает параметризацию при развертывании. Так это где-то в настройке IIS?

EDIT2: После экспериментов я обнаружил, что сгенерированный parameters.xml внутри упаковки почтового индекса действительно должен containt «матч» и «масштаб» атрибуты и их нет - так как, когда я переписать XML так, что он содержит parameterEntry с правильной совпадением и объемом и переупаковать его в zip, он начинает работать.

EDIT3: И проблема, кажется, с атрибутом имени «типа», когда он должен был назван «вид». Теперь я только удивляюсь, откуда я впервые получил тот пример, который я использовал ...

ответ

 Смежные вопросы

  • Нет связанных вопросов^_^