NuGet系列-製作安裝Package時自動設定Config

在NuGet還沒有出來前要在專案中加入組件的相關Config是挺麻煩的,要看著文件或範例來一段一段複制貼上Config,說真的不是很方便,但是NuGet有提供Config轉換,會把需要設定的Config合併到專案的Config中,可以省下不少設定時間,這篇就來跟大家說在建立Package時如何加入Config轉換檔。

建立Config轉換檔

準備一個僅安裝時需要的Config檔,如下範列是我在製作Common.Logging.Elmah時的設定。

01
<configuration>

02
<configSections>  

03
<sectionGroup name="common">

04
<section name="logging"t ype="Common.Logging.ConfigurationSectionHandler, Common.Logging"/>

05
</sectionGroup>

06
</configSections>  

07
<common>

08
<logging>

09
<factoryAdapter type="Common.Logging.Elmah.ElmahLoggerFactoryAdapter, Common.Logging.Elmah">

10
<arg key="Level" value="all"/>

11
</factoryAdapter>

12
</logging>

13
</common>

14
</configuration>

NuGet的Config檔的轉化檔在設計上很簡單,就跟平常在設定Config一樣一樣,相對的它沒有辦法做太多事,只能以XML的DOM,一個一個比對element的階層與內容,沒有完全相同的element就新增,如果element相同,但有一個attribute相同會合併設定,完全相同就略過,以下面的例子為例:

App.Config內容

1
<configuration>

2
<appSettings>

3
<add key="SetA" />

4
<add key="SetB" value="App.Coinfg" />

5
<add key="SetC" value="Same" />  

6
</appSettings>

7
</configuration>

App.config.transform(transform為轉換檔的副檔名)內容

1
<configuration>

2
<appSettings>

3
<add key="SetA" vaule="Transformation" />

4
<add key="SetB" value="Transformation" />

5
<add key="SetC" value="Same" />

6
<add key="SetD" value="Transformation" />

7
</appSettings>

8
</configuration>

合併後的結果

1
<configuration>                               //完全一樣,不處理

2
<appsettings>                               //完全一樣,不處理

3
<add key="SetA" value="Transformation" /> //一個Attribute相同,合併

4
<add key="SetB" value="App.Coinfg"/>     //雖然有一個Attribute相同,但另一個Attribute不同,不處理

5
<add key="SetB" value="Transformation" /> //雖然有一個Attribute相同,但另一個Attribute不同,新增

6
<add key="SetC" value="Same" />           //完全一樣,不處理

7
<add key="SetD" value="Transformation" /> //沒有,新增

8
</appsettings>                            

9
</configuration>

如果要寫某種情境下才新增設定,那就不能用Config轉化檔,可能要在NuGet的PowerShell安裝檔中寫Code來處理。

加入Package中

轉換檔的副檔名是.transform,只要將準備好的config的檔名後方加上.transform即可,如果是要轉換web.config,就建立web.config.transform,如果是要轉換app.config,就建立app.config.transform,並加入Package中的Content下,加入的方法有:

如果組件可以用在Web或Windows Form,可以同時準備web.config.transform、app.config.transform,這二個檔案,當安裝Package時,會比對目錄下(放在Content下相對於專案根目錄)有沒有扣除.transform檔名的檔案,如果有才做轉換,如果沒有不做轉換也不會在專案中增加檔案。

image

安裝與移除Package

有Config專案的Package在安裝上沒有不一樣,使用平常的安裝方法及可,但在移除上可能要注意,因為NuGet Config轉換除了安裝時會合供,移除時會刪除合併,不過只有跟轉換檔相同的element才會刪除,因為安裝後通常會改設定值,應該有些比對不成功,會刪不乾清。

參考資料

Configuration File and Source Code Transformations

转自: http://www.dotblogs.com.tw/wadehuang36/archive/2011/10/16/nuget-config-transform.aspx