如何在 VS 2010 按下 F5 也有「組態轉換」 - XDT Transformation Tool
本來這篇一個月前就已經準備好了,只是想說講完 TechDay 後就要發的
發了前面三篇就整個歪去別的文章了 ( 汗 )
在 初次將現有的 MVC2 專案上傳至 Azure 和 問題排除 這一篇中有提到組態轉換的機制
可以讓我們佈署的時候可以切換成不同的 Config 檔
大家都知道 Azure 的專案佈署時間並不短,所以在本機中測試就非常重要
在本機測試中希望能用 本地的 SQL Server ,而佈署後是用 SQL Azure 。 ( 測試資料、環境 比較好控制 )
也因為如此 組態轉換 的功能非常重要
而且出貨的時候你一定不會想要把 測試用的 config 佈署出去
也許會說,我們的 Config 都是另外再去讀 XML 檔後再怎麼樣、怎麼樣的。
但無論如此一定要修改 設定檔才行
要人工改?那就會增加人為修改錯誤的機率。
尤其是別人幫你修改的時候,就是有人會改錯 Orz 屢試不爽呀 ~~~
由於當初設計的原意是在佈署時可以自動切換
所以在開發環境中,預設都還是只會用 Web.Config
還好現在可以用 ConfigTransformation Tool 達到在 IDE 中就可以隨意切換
這對於 ASP.NET 的開發人員來說是非常有幫助的
因為這樣子就可以在「自已的電腦上」、「測試區」、「遠端資料庫」等等各種不同的環境有不同的 Config
這個組態轉換的功能必須要用 ASP.NET 4.0 ,當然也必須是用 Web 專案。
怎麼做?
============= 0 ======================
安裝 NuGet 套件
暗黑大的「還在揮汗徒手安裝程式庫? 試試NuGet吧」
http://blog.darkthread.net/post-2011-03-12-nuget.aspx
============= 1 ======================
首先你的組態必須是要有多組可以做切換 ( 預設是 Debug , Release )
新增組態
選擇最相信的組態設定來源後,再自已修改會是比較簡單的
接下來就由工具幫你新增組態轉換。 千萬要記住 若是沒有修改過組態的話,這裡是無法點選的
============= 2 ======================
記得一定要先選擇「Web 專案」後再點選「工具」—> Library Package Manager –> Manage NuGet Packages
記得要先選好「專案」後再開啟 NuGet
在右上角輸入 「XDT Transformation Tool」就會找到套件,按下安裝就可以了!
安裝完後就會看到在 Installed packages 中會有 ConfigTransformationTool 的項目
在版控中也會自動幫你把 packages 統統都加入
這樣子就完成了,接下來只要切換組態時直接按下 「F5」
CTT 會自動幫您把 組態組合起來! ROCK!
由於這個套件基本上只會在「開發環境」中使用,所以別忘記在將「複製到本機」改成 False
不然若該 Server 沒有安裝 SQL Server 則會出現以下的錯誤
無法載入檔案或組件 'Microsoft.SqlServer.BatchParser' 或其相依性的其中之一。 試圖載入格式錯誤的程式。
描述: 在執行目前 Web 要求的過程中發生未處理的例外情形。請檢閱堆疊追蹤以取得錯誤的詳細資訊,以及在程式碼中產生的位置。例外詳細資訊: System.BadImageFormatException: 無法載入檔案或組件 'Microsoft.SqlServer.BatchParser' 或其相依性的其中之一。 試圖載入格式錯誤的程式。
=== 繫結前狀態資訊 === 記錄: 使用者 = DEMO\franma 記錄: DisplayName = Microsoft.SqlServer.BatchParser (Partial) 警告: 提供了組件的部分繫結資訊: 警告: 組件名稱: Microsoft.SqlServer.BatchParser | 網域 ID: 2 警告: 如果只提供部分的組件顯示名稱,就會發生部分繫結。 警告: 這可能會使繫結器載入不正確的組件。 警告: 建議為組件提供完全指定的文字識別, 警告: 該識別是由簡單名稱、版本、文化特性和公開金鑰語彙基元組成。 警告: 如需詳細資訊和這個問題的一般解決方法,請參閱白皮書 http://go.microsoft.com/fwlink/?LinkId=109270。 記錄: Appbase = file:///C:/WorkSpace/Franma/TailspinToys/Dev/Src/Tailspin.Web/ 記錄: 初始 PrivatePath = C:\WorkSpace\Franma\TailspinToys\Dev\Src\Tailspin.Web\bin 正在呼叫組件 : (Unknown)。 === 記錄: 此繫結在 default 載入內容中開始。 記錄: 正在使用應用程式組態檔: C:\WorkSpace\Franma\TailspinToys\Dev\Src\Tailspin.Web\web.config 記錄: 使用主機組態檔: 記錄: 從 C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config 使用電腦組態檔。 記錄: 目前不會套用原則至參考 (私用、自訂、部分或以位置為主的組件繫結)。 記錄: 正在嘗試從新的 URL file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files/root/c9e82cff/44032f9b/Microsoft.SqlServer.BatchParser.DLL 下載。 記錄: 正在嘗試從新的 URL file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files/root/c9e82cff/44032f9b/Microsoft.SqlServer.BatchParser/Microsoft.SqlServer.BatchParser.DLL 下載。 記錄: 正在嘗試從新的 URL file:///C:/WorkSpace/Franma/TailspinToys/Dev/Src/Tailspin.Web/bin/Microsoft.SqlServer.BatchParser.DLL 下載。 錯誤: 無法完成組件的安裝 (hr = 0x8007000b)。已終止探查。
參考資料
XDT Transformation Tool
http://vishaljoshi.blogspot.com/2009/03/web-deployment-webconfig-transformation_23.html
ASP.NET 4.0, Part 4: Config Transformation Files
Web 應用程式專案部署的 Web.config 轉換語法