如何讓 VS 2010 按下 F5 也有「組態轉換」 - XDT Transformation Tool

如何在 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 套件

http://nuget.codeplex.com/

暗黑大的「還在揮汗徒手安裝程式庫? 試試NuGet吧」

http://blog.darkthread.net/post-2011-03-12-nuget.aspx

=============   1   ======================

 

首先你的組態必須是要有多組可以做切換  ( 預設是 Debug , Release )

 

image

image

新增組態

image

選擇最相信的組態設定來源後,再自已修改會是比較簡單的

 

image

接下來就由工具幫你新增組態轉換。  千萬要記住 若是沒有修改過組態的話,這裡是無法點選的

 

============= 2 ======================

 

記得一定要先選擇「Web 專案」後再點選「工具」—> Library Package Manager –> Manage NuGet Packages

  image
記得要先選好「專案」後再開啟 NuGet 

在右上角輸入 「XDT Transformation Tool」就會找到套件,按下安裝就可以了!

image

安裝完後就會看到在 Installed packages 中會有 ConfigTransformationTool 的項目

image
另外在 Web 專案中也會多一個 ctt 參考

 

 image

在版控中也會自動幫你把 packages 統統都加入

這樣子就完成了,接下來只要切換組態時直接按下 「F5」

 

CTT 會自動幫您把 組態組合起來!  ROCK!

 

由於這個套件基本上只會在「開發環境」中使用,所以別忘記在將「複製到本機」改成 False

不然若該 Server 沒有安裝 SQL Server  則會出現以下的錯誤

 

 image

無法載入檔案或組件 '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://ctt.codeplex.com/

http://vishaljoshi.blogspot.com/2009/03/web-deployment-webconfig-transformation_23.html

ASP.NET 4.0, Part 4: Config Transformation Files

Web 應用程式專案部署的 Web.config 轉換語法

http://msdn.microsoft.com/zh-tw/library/dd465326.aspx