2016-12-16 53 views
1

我有一個ASP MVC應用程序,我正在通過TeamCity部署到Intranet服務器,並且我需要一些appSettings在部署時進行參數化,以便客戶端祕密對開發人員等隱藏。Web.config未部署參數

我在我的項目的根目錄中有Parameters.xml文件,與包一起構建的SetParameters.xml正確包含所有這些參數及其默認值。但是,更改這些值(甚至使用-setParam將它們傳遞給MSDeploy)不會導致部署的web.config發生任何更改。

當我更改SetParameters.xml文件(將其正確傳遞給MSDeploy afaik)中的值時,部署的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上

文件 「的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> 

根據網上的各種消息來源,常見原因是範圍錯誤或匹配正則表達式錯誤,但我嘗試過所有類型的變體而沒有成功。

如果任何人有什麼想法,或者可能是什麼原因,我會很樂意進一步探索或嘗試,但現在我已經花了幾天的時間,並且想不起還有什麼可以嘗試的。謝謝!

編輯:現在我創建了一個新的WebAPI項目與MVC,只添加parameters.xml,將這些參數添加到web.config,並且web.config仍然不會部署參數化。那麼它是否在某處設置了一些IIS?

EDIT2:實驗後,我發現,所產生的的parameters.xml壓縮包裏面真的應該containt「匹配」和「範圍」屬性和他們不這樣做 - 因爲當我重寫XML,以便它包含parameterEntry與適當的匹配和範圍,並重新打包到zip,它開始工作。

EDIT3:而且這個問題似乎有屬性命名「類型」,當它應該已經被命名爲「厚道」。現在我只是想知道,我在哪裏第一次得到我使用的例子...

回答