2016-04-07 28 views
0

我已經看到一些問題,閱讀所有帖子,但仍無法完成此操作。要麼我失去了一些東西,或者它不能這樣做。如何在發佈時重寫ASP.NET部署參數

所以我有一個相當簡單的(ASP.NET MVC)項目。 在我的項目的根有一個與參數定義,如文件的parameters.xml:

<?xml version="1.0" encoding="utf-8" ?> 
<parameters> 
    <parameter 
    name="Realm" 
    description="Realm for ADFS authentication" 
    defaultValue="http://somewebsite"> 
    <parameterEntry 
     kind="XmlFile" 
     scope="Web.config" 
     match="/configuration/appSettings/add[@key='ida:Realm']/@value" /> 
    <parameterEntry 
     kind="XmlFile" 
     scope="Web.config" 
     match="/configuration/system.identityModel/identityConfiguration/audienceUris/add/@value" /> 
<parameterEntry 
     kind="XmlFile" 
     scope="Web.config" 
     match="/configuration/system.identityModel.services/federationConfiguration/wsFederation/@realm" /> 

到目前爲止好。這個結構非常好理解,你是一個默認值的部署參數(例如「Realm」)的名稱,以及一些可以在Web.config文件中找到它的XCLT選項。

現在,當我創建部署包,通過運行發佈,我得到一個包含目錄:

  1. 的自動生成CMD文件部署
  2. 自述文件
  3. 的清單XML文件
  4. 包含必須部署到我的服務器的所有文件的zip文件。
  5. 一個.SetParameters.xml文件

這最後文件包含了我在上面引述的parameters.xml文件中設置的參數值,這些值被設置爲分別定義有默認的。
例如如果域的默認值設定爲http://somewebsite,在生成的部署SetParameters.xml,我會得到這個紀錄:

<setParameter name="Realm" value="http://somewebsite" /> 

當包被部署,這些值將被從這個XML文件取和替換根據原始parameter.xml文件中定義的XPath,我的Web.Config中的值。

現在,我想要的是在構建部署包時覆蓋此參數(以及其他許多參數),因爲我需要不同的部署配置文件的不同值。

該鍵似乎是我的.pubxml文件,它負責發佈設置。我嘗試了很多選擇,包括Sayed Hashimi說的here,以前給出的答案是hereherehere too(以及其他人)......沒有任何東西似乎對這些該死的參數產生影響!

我錯過了什麼嗎?有一些魔法破解嗎?
我應該完全忽略這些參數,只依賴於匹配的web.config轉換嗎?任何其他建議?也許將自定義目標添加到.csproj文件? (甚至試過...)

謝謝! Alon。

回答

2

WebDeploy參數化發生在部署時不是構建時間(如配置轉換)。我們在工作中使用50多種產品的參數化,取得了巨大成功。對於每個產品,我們有4個SetParameters文件:

  • SetParameters.DEV。XML
  • SetParameters.QA.xml
  • SetParameters.UAT.xml
  • SetParameters.PROD.xml

每個人都有有效期爲它的環境參數值。我們使用PowerShell腳本,並使用Thoughtworks GO以相應的SetParameters文件在管道中執行MSDeploy程序包。

一個說明,確保不與您的應用程序部署SetParameters文件 - http://dotnetcatch.com/2016/04/02/webdeploy-parameterization-tip-dont-publish-your-parameterization-files/

另外,如果你想在預覽您的VS參數,這可能是有益的 - http://dotnetcatch.com/2014/09/08/parameterizationpreview-visual-studio-extension/

+0

感謝@ chief7!我正在嘗試使用現有工具減少工作量並自動化過程。 在我看來,沒有辦法將一組參數值綁定到發佈配置文件(除非我在msdeploy/build之外添加一些手動操作)。 到目前爲止唯一的解決方法是:創建一個與發佈配置文件名稱匹配的web.config轉換。這不會在構建期間更改web.config,而只會在生成的部署包中更改。它也更強大,因爲我可以根據部署環境對配置進行實際更改(例如,針對不同身份驗證模式的不同配置段)。 – alrotem

+1

如果你想通過構建過程進行部署,配置變換是最好的選擇。但是請注意,這將需要爲每個環境部署構建,這會增加人們檢查構建之間的新變化並將未經測試的代碼引入上層環境的風險。祝你好運! – chief7

+0

再次感謝@ chief7。 順便說一句,因爲你似乎比我更有經驗,假設我想用SetParameters.DEV.xml的內容覆蓋部署文件夾(位於deploy cmd文件旁)中的SetParameters.xml文件(所以那些值在部署期間得到應用),你提到一個PowerShell腳本,這是你如何複製/應用/運行的?部署軟件包生產時,是否可以通過.pubxml文件以某種方式實現自動化? 我只是覺得奇怪的是,在每個發佈配置文件的parameters.xml文件中覆蓋「默認值」必須以某種方式手動完成...... – alrotem

相關問題