NuGet的Cofing設定檔和Source Code轉換

Nov 5, 2012

4 mins read

前言

使用套件的時後,有時會需要指定設定檔,例如自訂的Section,或特定AppSetting的值 在打包的時後,只要在你想轉換的檔案後面加上.transform的副檔名就行了 以web.config為例,只要新增一個檔案名為web.config.transform在套件中,安裝套件的時後就會合併這個檔案的內容

web.config.transform

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
 <appSettings>
  <add key="aa" value="aa" />
  <add key="bb" value="bb" />
  <add key="cc" value="cc" />
  <add key="dd" value="dd" />
 </appSettings>
</configuration>

web.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
 <appSettings>
  <add key="aa" value="123" />
  <add key="bb" value="" />
  <add key="cc" />
 </appSettings>
</configuration>

合併後的結果會變成

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
 <appSettings>
    <!– 原來的值不變 –>
    <add key="aa" value="123" />
    <add key="bb" value="" />
    <!– 合併的資料 –>
    <add key="aa" value="aa" />
    <add key="bb" value="bb" />
    <add key="cc" value="cc" />
    <add key="dd" value="dd" />
 </appSettings>
</configuration>

程式碼轉換的方式,是用.pp的副檔名 以用來動態掛載Application_Start的WebActivator套件為例 慣例是在App_Start資料夾下面,新增一段程式碼

using System.Web;

[assembly: WebActivator.PostApplicationStartMethod(typeof(WebApplication2.App_Start.Hello), “HelloWorld”)]
namespace WebApplication2.App_Start
{
    public class Hello
    {
        public static void HelloWorld()
        {
            HttpContext.Current.Application.Add(hello, world);
        }
    }
}

要包進套件的話,就要把檔名改成hello.cs.pp,再把程式碼置換成

using System.Web;

[assembly: WebActivator.PostApplicationStartMethod(typeof($rootnamespace$.App_Start.Hello), “HelloWorld”)]
namespace $rootnamespace$.App_Start
{
    public class Hello
    {
        public static void HelloWorld()
        {
            HttpContext.Current.Application.Add(hello, world);
        }
    }
}

比較常用的應該是$rootnamespace$和$assemblyname$ 詳細可置換的符號可以參考ProjectProperties Properties

參考資料

Sharing is caring!