簡體   English   中英

使web.config動態化

[英]Make the web.config dynamic

我們有一個應用程序,它被部署在不同的管道中,專用於各種版本。

對於前 - 管道A - 專用於行軍釋放管道B - 6月發布等

在每個管道中我們有各種環境,如DEV,SIT等

現在,在發布時,在部署代碼時,我們需要在webcofig文件中進行更改,因為我們在配置中的url是管道和環境相關的。

例如,我們有一個Web服務器 - 用於開發環境的框1。 我們將管道A,管道B部署為網站。 管道A的web.config看起來像 -

<configMap hostnameList="box1" name="DevEnvironment">
      <include set="Dev" />
</configMap>
<configSet name="Dev">
<add key="someUrl" value="http://somapp-piplelineA-Dev.app.com"/>
</configSet>

管道B的web.config看起來像 -

<configMap hostnameList="box1" name="DevEnvironment">
      <include set="Dev" />
</configMap>
<configSet name="Dev">
<add key="someUrl" value="http://somapp-piplelineB-Dev.app.com"/>
</configSet>

如果您看到此配置,則在key someurl的值中,pipelineA已更改為pipelineB。 當有很多鑰匙時,這些變化很煩人。 因此,我們希望創建一個可供所有環境使用且不需要任何更改的web.config。

使用Octopus Deploy,您可以半自動或全自動部署Web應用程序。 但它也可以分別為每個環境執行Web.config轉換

你可以使用visual studio內置的配置轉換功能

如果您創建一個新的asp .net Web項目,您將在web.debug.configweb.release.config看到一個示例。

您也可以右鍵單擊web.config並單擊Add Config Transform,您將獲得每個構建配置的配置轉換文件。

你也可以使用SlowCheetah 這是一個非常方便的擴展。

這是我實現的,允許我們根據構建類型動態創建配置,利用構建事件。

這將允許你有1個配置來統治它們:)

https://xmlpreprocess.codeplex.com/

項目描述

XmlPreprocess是一個命令行實用程序,可以像代碼預處理器一樣修改帶注釋的XML文件。 將配置文件部署到不同的環境進行替換(例如連接字符串)非常有用。 它可以輕松集成到幾乎任何腳本,構建工具或部署包中,以簡化和集中部署策略。

我的構建活動

C:\XMLPreprocessor\XmlPreprocess.exe /i "C:\AppConfig\Core.config" /dbkind mssql /db "Server=localhost\SQLEXPRESS;Database=DB1;User Id=dbreader; Password=pass1;" /e $(ConfigurationName)

這是我的配置XML文件的示例{} params是從包含發布類型(1 = Debug,2 = Test,3 = Release)的SQL配置數據庫中檢索的,並且相應地填充了值。

<Nini>
     <Section Name="AppSettings">
      <!-- ifdef _xml_preprocess -->
      <!--
     <Key Name="RSAKeyStrength" Value="${RSAKeyStrength}"/>
        <Key Name="EventLog_Name" Value="{EventLog_Name}"/>
        <Key Name="DomainAddress" Value="${DomainAddress}"/>
        <Key Name="AuthIssuer" Value="${AuthIssuer}"/>
    -->
    <!-- else -->
    <Key Name="RSAKeyStrength" Value="2048"/>
        <Key Name="EventLog_Name" Value="MyApp"/>
        <Key Name="DomainAddress" Value="mydomain.com"/>
        <Key Name="AuthIssuer" Value="auth.domain.com"/>
    <!-- endif -->
  </Section>

  <Section Name="ConnectionStrings">
    <!-- ifdef _xml_preprocess -->
    <!--
    <Key Name="IdentityUserModelEntities" Value="data source=${DB1ConnectionString};MultipleActiveResultSets=True"/>
        <Key Name="DB1ModelEntities" Value="data source=${DB1ConnectionString};MultipleActiveResultSets=True"/>
        <Key Name="LoggingDB1Entities" Value="data source=${LoggingDB1ConnectionString};MultipleActiveResultSets=True"/>
    -->
    <!-- else -->
    <Key Name="IdentityUserModelEntities" Value="data source=localhost\SQLEXPRESS;initial catalog=DB1;user id=admin;password=pass1;MultipleActiveResultSets=True"/>
        <Key Name="DB1ModelEntities" Value="data source=localhost\SQLEXPRESS;initial catalog=DB1;user id=admin;password=pass1;MultipleActiveResultSets=True"/>
        <Key Name="LoggingDB1Entities" Value="data    source=localhost\SQLEXPRESS;Initial Catalog=LoggingDB1;user id=logging_admin;Password=pass1;MultipleActiveResultSets=True"/>
    <!-- endif -->
     </Section>
    </Nini>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM