使用 Visual Studio 或 Visual Web Developer 部署具有SQL Server Compact ASP.NET Web 應用程式:Web.Config檔案轉換 - 12 的 3

By Tom Dykstra

下載入門專案

本系列教學課程說明如何使用 Visual Studio 2012 RC 或 Visual Studio Express 2012 RC for Web,部署 (發佈) ASP.NET 包含 SQL Server Compact 資料庫的 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 部署參數

有兩種方式可將變更 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.configWeb.Release.config轉換檔案。

Web.config_transform_files

您可以用滑鼠右鍵按一下Web.config檔案,然後從操作功能表中選擇 [ 新增組態轉換 ],以建立自訂群組建組態的轉換檔案,但在本教學課程中,您不需要這麼做。

您需要兩個以上的轉換檔案,才能設定與部署目的地相關的變更,而不是組建組態。 這種設定的一般範例是測試與生產環境不同的 WCF 端點。 在稍後的教學課程中,您將建立名為 Test and Production 的發行設定檔,因此您需要 Web.Test.config 檔案和 Web.Production.config 檔案。

系結至發佈設定檔的轉換檔案必須手動建立。 在方案總管中,以滑鼠右鍵按一下 ContosoUniversity 專案,然後選取[在 Windows 檔案總管中開啟資料夾]。

Open_folder_in_Windows_Explorer

Windows 檔案總管中,選取 Web.Release.config 檔案、複製檔案,然後貼上兩份檔案。 將這些複本 重新命名Web.Production.config 並Web.Test.config,然後關閉 Windows 檔案總管。

方案總管中,按一下 [重新整理] 以查看新的檔案。

選取新的檔案,按一下滑鼠右鍵,然後按一下操作功能表中的 [ 包含在專案中 ]。

在專案中包括測試和生產組態檔

若要防止部署這些檔案,請在方案總管中選取這些檔案,然後在 [屬性] 視窗中,將 [建置動作] 屬性從[內容] 變更為 []。 (根據組建組態的轉換檔案會自動防止部署。)

您現在已準備好將 Web.config 轉換輸入 Web.config 轉換檔案。

限制系統管理員的錯誤記錄存取

如果應用程式執行時發生錯誤,應用程式會顯示一般錯誤頁面來取代系統產生的錯誤頁面,並使用 Elmah NuGet 套件 進行錯誤記錄和報告。 customErrorsWeb.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 頁面。

Error_page

若要查看錯誤記錄檔,請在埠號碼之後以 elmah.axd (取代 URL 中所有專案, http://localhost:51130/elmah.axd 以螢幕擷取畫面中的範例) ,然後按 Enter:

Elmah_log_page

當您完成時,別忘了將元素設定 customErrors 回 「RemoteOnly」 模式。

在您的開發電腦上,允許免費存取錯誤記錄頁面,但在生產環境中,這是安全性風險的便利性。 針對生產網站,您可以在 Web.Production.config 檔案中設定轉換,以新增授權規則,只限制系統管理員的錯誤記錄存取。

開啟Web.Production.config,並在開頭 configuration 標記之後立即新增專案 location ,如下所示。 (請確定您只 location 新增 元素,而不是此處顯示的周圍標記,只提供一些 coNtext.)

<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 主版頁面中的主要標題:

Environment_indicator

當應用程式在生產環境中執行時,會省略環境指標。

Contoso University 網頁會讀取在Web.config檔案中 appSettings 設定的值,以判斷應用程式執行所在的環境:

<appSettings>
    <add key="Environment" value="Dev" />
</appSettings>

此值應該是測試環境中的 「Test」,而生產環境中的 「Prod」。

開啟Web.Production.config,並在您稍早新增之 location 專案的開頭標記之前立即新增 appSettings 元素:

<appSettings>
    <add key="Environment" value="Prod" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
</appSettings>

xdt:Transform屬性值 「SetAttributes」 表示此轉換的目的是變更Web.config檔案中現有元素的屬性值。 xdt:Locator屬性值 「比對 (索引鍵) 」表示要修改的專案是 key 屬性符合 key 此處指定之屬性的專案。 元素的唯一另一個屬性 addvalue ,也就是部署 Web.config的檔案 中將會變更的內容。 此程式碼會在部署至生產環境的Web.config檔案中,將 value 元素的 EnvironmentappSettings 屬性設定為 「Prod」。

接下來,將相同的變更套用至 Web.Test.config 檔案,但將 設定 value 為 「Test」 而不是 「Prod」。 當您完成時, appSettingsWeb.Test.config 中的 區段看起來會像下列範例所示:

<appSettings>
    <add key="Environment" value="Test" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
</appSettings>

停用偵錯模式

針對發行組建,不論您要部署的環境為何,您都不想啟用偵錯。 根據預設 ,會自動建立轉換檔案Web.Release.config 程式碼,以移除 debug 元素中的 compilation 屬性:

<system.web>
  <compilation xdt:Transform="RemoveAttributes(debug)" />
</system.web>

每當部署發行組建時, debug 屬性 Transform 就會從已部署的Web.config檔案中省略 屬性。

這個相同的轉換位於測試和生產轉換檔案中,因為您藉由複製發行轉換檔案來建立它們。 您不需要複製該檔案,因此請開啟每個檔案、移除 編譯 元素,然後儲存並關閉每個檔案。

設定連接字串

在大部分情況下,您不需要設定連接字串轉換,因為您可以在發行設定檔中指定連接字串。 但是當您部署SQL Server Compact資料庫,並使用 Entity Framework Code First 移轉 更新目的地伺服器上的資料庫時,就會發生例外狀況。 在此案例中,您必須指定將在伺服器上用來更新資料庫架構的其他連接字串。 若要設定此轉換,請在Web.Test.configWeb.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轉換案例。