在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下,加入的方法有:
- NuGet.exe (可參考NuGet系列-自動發佈)
- NuGet Package Explorer (可參考NuGet系列-使用NuGet Package Explorer建立nupkg檔)
如果組件可以用在Web或Windows Form,可以同時準備web.config.transform、app.config.transform,這二個檔案,當安裝Package時,會比對目錄下(放在Content下相對於專案根目錄)有沒有扣除.transform檔名的檔案,如果有才做轉換,如果沒有不做轉換也不會在專案中增加檔案。
安裝與移除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