使用 Visual Studio 或 Visual Web Developer 部署具有 SQL Server Compact 的 ASP.NET Web 應用程式:Web.Config 檔案轉換 - 3/12
演講者:Tom Dykstra
本系列教學課程說明如何使用 Visual Studio 2012 RC 或 Visual Studio Express 2012 RC for Web 部署包含 SQL Server Compact 資料庫的 ASP.NET Web 應用程式專案。 如果您安裝 Web 發行更新,也可以使用 Visual Studio 2010。 如需系列簡介,請參閱 系列的第一個教學課程。
如需示範 Visual Studio 2012 RC 版本之後引進的部署功能的教學課程,示範如何部署 SQL Server Compact 以外的 SQL Server 版本,並示範如何部署至 Azure App 服務 Web Apps,請參閱使用 Visual Studio ASP.NET Web 部署。
概觀
本教學課程說明當您將 Web.config 檔案部署到不同的目的地環境時,如何自動化變更 Web.config 檔案的程式。 大部分的應用程式都有 Web.config 檔案中的設定,在部署應用程式時必須不同。 自動化進行這些變更的程式,讓您不必在每次部署時手動執行這些變更,這很繁瑣且容易出錯。
提醒:如果您在進行教學課程時遇到錯誤訊息或某些功能無法正常運作,請務必檢查疑難排解頁面。
Web.config 轉換與 Web Deploy 參數
有兩種方式可將變更 Web.config 檔案設定的程式自動化: Web.config 轉換 和 Web Deploy 參數。 Web.config 轉換檔案包含 XML 標記,指定如何在部署 Web.config 檔案時變更它。 您可以指定特定組建組態和特定發行配置檔的不同變更。 默認組建組態為 [偵錯] 和 [發行],您可以建立自定義組建組態。 發行配置檔通常對應至目的地環境。 (您將深入瞭解 中的 發佈設定檔部署至 IIS 作為測試環境 教學課程。
Web Deploy 參數可用來指定部署期間必須設定的許多不同類型的設定,包括Web.config 檔案中找到的設定。 當用來指定 Web.config 檔案變更時,Web Deploy 參數會比較複雜設定,但在您部署之前不知道要設定的值時會很有用。 例如,在企業環境中,您可以建立部署套件,並將它提供給IT部門中的人員,以在生產環境中安裝,而且該人員必須能夠輸入您不知道的 連接字串 或密碼。
針對本教學課程涵蓋的案例,您知道必須對 Web.config 檔案執行的所有作業,因此您不需要使用 Web Deploy 參數。 您將根據所使用的組建組態來設定一些不同的轉換,以及根據所使用的發行配置檔而有所不同的轉換。
建立發行配置檔的轉換檔案
在 方案總管 中,展開 [Web.config],以查看預設為兩個預設組建組態建立的Web.Debug.config 和 Web.Release.config 轉換檔案。
您可以在 Web.config 檔案上按下滑鼠右鍵,然後選擇操作選單中的 [新增組態轉換],以建立自定義組建組態的 轉換檔案,但在本教學課程中,您不需要這麼做。
您需要另外兩個轉換檔案,才能設定與部署目的地相關的變更,而不是組建組態。 這種設定的典型範例是測試與生產環境不同的WCF端點。 在稍後的教學課程中,您將建立名為 Test 和 Production 的發行配置檔,因此您需要 Web.Test.config 檔案和 Web.Production.config 檔案。
系結至發佈配置檔的轉換檔案必須手動建立。 在 方案總管 中,以滑鼠右鍵按兩下 ContosoUniversity 專案,然後選取 [在 Windows 檔案總管中開啟資料夾]。
在 Windows 檔案總管中 ,選取 Web.Release.config 檔案、複製檔案,然後貼上其中兩個複本。 重新命名這些複本 Web.Production.config 和 Web.Test.config,然後關閉 Windows 檔案總管。
在 方案總管 中,按兩下 [重新整理] 以查看新的檔案。
選取新的檔案,以滑鼠右鍵單擊,然後按下 操作功能表中的 [包含在專案中 ]。
若要防止部署這些檔案,請在 方案總管 中選取它們,然後在 [屬性] 視窗中,將 [建置動作] 屬性從 [內容] 變更為 [無]。 (根據組建組態的轉換檔案會自動防止部署。
您現在已準備好在 Web.config 轉換檔案中輸入 Web.config 轉換。
限制系統管理員的錯誤記錄檔存取
如果應用程式執行時發生錯誤,應用程式會顯示一般錯誤頁面來取代系統產生的錯誤頁面,並使用 Elmah NuGet 套件 進行錯誤記錄和報告。 customErrors
Web.config 檔案中的 元素會指定錯誤頁面:
<customErrors mode="RemoteOnly" defaultRedirect="~/GenericErrorPage.aspx">
<error statusCode="404" redirect="~/GenericErrorPage.aspx" />
</customErrors>
若要查看錯誤頁面,請暫時將元素的 customErrors
屬性從 “RemoteOnly” 變更mode
為 “On”,然後從 Visual Studio 執行應用程式。 要求無效的 URL,例如 Studentsxxx.aspx,造成錯誤。 您不會看到 IIS 產生的「找不到頁面」錯誤頁面,而是GenericErrorPage.aspx頁面。
若要查看錯誤記錄檔,請將埠號碼後面的 URL 中的所有內容取代為 elmah.axd (例如螢幕快照中的範例), http://localhost:51130/elmah.axd
然後按 Enter:
當您完成時,別忘了將元素設定 customErrors
回 “RemoteOnly” 模式。
在您的開發計算機上,允許免費存取錯誤記錄頁面,但在生產環境中,可能會有安全性風險。 針對生產網站,您可以藉由在 Web.Production.config 檔案中設定轉換,來新增授權規則,只限制對系統管理員的錯誤記錄檔存取。
開啟 Web.Production.config,並在開啟configuration
標記之後立即新增專案location
,如下所示。 (請確定您只 location
新增 元素,而不是此處顯示的周圍標記,只提供一些內容。
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<location path="elmah.axd" xdt:Transform="Insert">
<system.web>
<authorization>
<allow roles="Administrator" />
<deny users="*" />
</authorization>
</system.web>
</location>
</configuration>
Transform
“Insert” 的屬性值會使這個專案location
新增為 Web.config 檔案中任何現有location
元素的同層級。 (已經有一個location
元素指定更新點數頁面的授權規則。當您在部署後測試生產網站時,您將測試以確認此授權規則是否有效。
您不需要限制測試環境中的錯誤記錄檔存取,因此您不需要將此程式代碼新增至 Web.Test.config 檔案。
注意
安全性注意事項 永遠不要在生產應用程式中向公用顯示錯誤詳細數據,或將該資訊儲存在公用位置。 攻擊者可以使用錯誤資訊來探索網站中的弱點。 如果您在自己的應用程式中使用 ELMAH,請務必調查可設定 ELMAH 的方式,以將安全性風險降到最低。 本教學課程中的 ELMAH 範例不應被視為建議的設定。 這是為了說明如何處理應用程式必須能夠建立檔案的資料夾而選擇的範例。
設定環境指標
常見的案例是讓 Web.config 檔案設定在您部署的每個環境中都必須不同。 例如,呼叫 WCF 服務的應用程式在測試和生產環境中可能需要不同的端點。 Contoso University 應用程式也包含這種設定。 此設定可控制月檯頁面上可見的指標,告知您位於哪個環境,例如開發、測試或生產環境。 設定值會決定應用程式是否會將 “(Dev)” 或 “(Test)” 附加至 Site.Master 主版頁面的主標題:
當應用程式在生產環境中執行時,會省略環境指標。
Contoso University 網頁會讀取在 Web.config 檔案中appSettings
設定的值,以判斷應用程式正在執行的環境:
<appSettings>
<add key="Environment" value="Dev" />
</appSettings>
此值在測試環境中應該是 「Test」 ,而生產環境中的 「Prod」。
開啟 Web.Production.config ,並在 appSettings
您稍早新增元素的 location
開頭標記之前新增元素:
<appSettings>
<add key="Environment" value="Prod" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
</appSettings>
xdt:Transform
屬性值 「SetAttributes」 表示此轉換的目的是變更 Web.config 檔案中現有項目的屬性值。 xdt:Locator
屬性值 「Match(key)」 表示要修改的項目是屬性key
符合此處所指定屬性的專案key
。 元素的唯一其他屬性 add
是 value
,而這就是部署 的 Web.config 檔案中將會變更的內容。 此程式代碼會在部署至生產環境的 Web.config 檔案中,將 value
元素的 appSettings
Environment
屬性設定為 “Prod”。
接下來,將相同的變更套用至 Web.Test.config 檔案,但將 設定value
為 “Test” 而非 “Prod”。 當您完成時,appSettings
Web.Test.config 中的 區段看起來會像下列範例:
<appSettings>
<add key="Environment" value="Test" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
</appSettings>
停用偵錯模式
針對發行組建,不論您要部署的環境為何,您都不希望啟用偵錯。 根據預設,Web.Release.config 轉換檔案會自動使用程式代碼建立,以從 compilation
元素中移除 debug
屬性:
<system.web>
<compilation xdt:Transform="RemoveAttributes(debug)" />
</system.web>
屬性 Transform
會在 debug
您部署 Release 組建時,從已 部署的 Web.config 檔案中省略 屬性。
這個相同的轉換位於測試和生產轉換檔案中,因為您藉由複製發行轉換檔案來建立它們。 您不需要複製該檔案,因此請開啟每個檔案、移除 編譯 項目,然後儲存並關閉每個檔案。
設定連接字串
在大部分情況下,您不需要設定 連接字串 轉換,因為您可以在發行配置檔中指定 連接字串。 但是當您部署 SQL Server Compact 資料庫,並使用 Entity Framework Code First 移轉 更新目的地伺服器上的資料庫時,就會發生例外狀況。 在此案例中,您必須指定將在伺服器上用於更新資料庫架構的額外 連接字串。 若要設定此轉換,請在 Web.Test.config 和 Web.Production.config 轉換檔案中的開啟<組態>標記之後,立即新增< connectionStrings> 元素:
<connectionStrings>
<add name="SchoolContext_DatabasePublish" connectionString="Data Source=|DataDirectory|School-Prod.sdf" providerName="System.Data.SqlServerCe.4.0" xdt:Transform="Insert"/>
</connectionStrings>
屬性Transform
會指定此 連接字串 將會新增至已部署 Web.config 檔案中的 connectionStrings 元素。 (如果發行程式不存在,則會自動為您建立這個額外的 連接字串,但根據預設,providerName 屬性會設定為 System.Data.SqlClient
,這不適用於 SQL Server Compact。藉由手動新增 連接字串,您可以讓部署程式不建立具有錯誤提供者名稱的 連接字串 專案。
您現在已指定 部署 Contoso University 應用程式以測試和生產所需的所有 Web.config 轉換。 在下列教學課程中,您將負責需要設定專案屬性的部署設定工作。
相關資訊
如需本教學課程所涵蓋主題的詳細資訊,請參閱 ASP.NET 部署內容對應中的Web.config轉換案例。