Visual Studio を使用した web 配置の ASP.NET: コード更新プログラムのデプロイ
このチュートリアル シリーズでは、Visual Studio 2012 または Visual Studio 2010 を使用して、ASP.NET Web アプリケーションをAzure App Service Web Appsまたはサード パーティのホスティング プロバイダーに展開 (発行) する方法について説明します。 シリーズの詳細については、シリーズ の最初のチュートリアルを参照してください。
概要
最初の展開後も、Web サイトの保守と開発の作業が続行され、長い間更新プログラムを展開する必要があります。 このチュートリアルでは、アプリケーション コードに更新プログラムをデプロイするプロセスについて説明します。 このチュートリアルで実装およびデプロイする更新プログラムには、データベースの変更は含まれません。次のチュートリアルでは、データベース変更のデプロイに関する違いを確認できます。
リマインダー: チュートリアルを進める際にエラー メッセージが表示されたり、何かが機能しない場合は、必ずトラブルシューティング ページをチェックしてください。
コードに変更を加える
アプリケーションの更新の簡単な例として、選択した講師が教えるコースの一覧を [Instructors ] ページに追加します。
Instructors ページを実行すると、グリッドに [リンクの選択] が表示されますが、行の背景を灰色にする以外の操作は行われません。
次に、[ 選択 ] リンクがクリックされたときに実行されるコードを追加し、選択した講師が教えるコースの一覧を表示します。
Instructors.aspx で、ErrorMessageLabel
Label
コントロールの直後に次のマークアップを追加します。<h3>Courses Taught</h3> <asp:ObjectDataSource ID="CoursesObjectDataSource" runat="server" TypeName="ContosoUniversity.BLL.SchoolBL" DataObjectTypeName="ContosoUniversity.DAL.Course" SelectMethod="GetCoursesByInstructor"> <SelectParameters> <asp:ControlParameter ControlID="InstructorsGridView" Name="PersonID" PropertyName="SelectedDataKey.Value" Type="Int32" /> </SelectParameters> </asp:ObjectDataSource> <asp:GridView ID="CoursesGridView" runat="server" DataSourceID="CoursesObjectDataSource" AllowSorting="True" AutoGenerateColumns="False" SelectedRowStyle-BackColor="LightGray" DataKeyNames="CourseID"> <EmptyDataTemplate> <p>No courses found.</p> </EmptyDataTemplate> <Columns> <asp:BoundField DataField="CourseID" HeaderText="ID" ReadOnly="True" SortExpression="CourseID" /> <asp:BoundField DataField="Title" HeaderText="Title" SortExpression="Title" /> <asp:TemplateField HeaderText="Department" SortExpression="DepartmentID"> <ItemTemplate> <asp:Label ID="GridViewDepartmentLabel" runat="server" Text='<%# Eval("Department.Name") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView>
ページを実行し、講師を選択します。 その講師が教えたコースの一覧が表示されます。
ブラウザーを閉じます。
コード更新プログラムをテスト環境にデプロイする
発行プロファイルを使用して、テスト、ステージング、運用にデプロイする前に、データベース発行オプションを変更する必要があります。 メンバーシップ データベースの許可スクリプトとデータ展開スクリプトを実行する必要がなくなりました。
- ContosoUniversity プロジェクトを右クリックし、[発行] をクリックして、 Webの発行ウィザードを開きます。
- [プロファイル] ドロップダウン リストで [ テストプロファイル ] をクリックします。
- [設定] タブをクリックします。
- [データベース] セクションの [DefaultConnection] で、[データベースチェックの更新] ボックスをオフにします。
- [ プロファイル ] タブをクリックし、[プロファイル] ドロップダウン リストで [ ステージングプロファイル ] をクリックします。
- テスト プロファイルに加えた変更を保存するかどうかを確認するメッセージが表示されたら、[はい] をクリックします。
- ステージング プロファイルで同じ変更を行います。
- プロセスを繰り返して、運用プロファイルで同じ変更を行います。
- [Web の発行] ウィザードを閉じます。
テスト環境へのデプロイは、ワンクリック発行をもう一度実行するだけで簡単になりました。 このプロセスをより迅速に行うには、[ Web One Click Publish]\(Web One Click Publish\ ) ツール バーを使用できます。
[ 表示 ] メニューの [ ツール バー ] を選択し、[ Web One Click Publish] を選択します。
ソリューション エクスプローラーで、ContosoUniversity プロジェクトを選択します。
[Web One Click Publish]\(Web One Click Publish\)\(Web One Click Publish\(Web One Click Publish\)
Visual Studio によって更新されたアプリケーションがデプロイされ、ブラウザーがホーム ページに自動的に開きます。
[Instructors] ページを実行し、講師を選択して、更新プログラムが正常にデプロイされたことを確認します。
通常は回帰テストも行います (つまり、サイトの残りの部分をテストして、新しい変更によって既存の機能が中断されなかったことを確認します)。 ただし、このチュートリアルでは、その手順をスキップし、ステージングと運用環境への更新プログラムのデプロイに進みます。
再デプロイすると、Web 配置によって変更されたファイルが自動的に決定され、変更されたファイルのみがサーバーにコピーされます。 既定では、Web 配置では、ファイルの最終変更日を使用して、変更された日付が決定されます。 一部のソース管理システムでは、ファイルの内容を変更しない場合でも、ファイルの日付が変更されます。 その場合は、ファイル チェックサムを使用して、変更されたファイルを特定するように Web 配置を構成できます。 詳細については、「ASP.NET 展開に関する FAQ」の「すべての ファイルを変更していないのに、すべてのファイルが再デプロイされる理由 」を参照してください。
デプロイ中にアプリケーションをオフラインにする
現在デプロイする変更は、1 つのページに対する単純な変更です。 ただし、大規模な変更を展開したり、コードとデータベースの両方の変更を展開したり、展開が完了する前にユーザーがページを要求した場合にサイトの動作が正しくない場合があります。 展開の進行中にユーザーがサイトにアクセスできないようにするには、 app_offline.htm ファイルを使用できます。 アプリケーションのルート フォルダー にapp_offline.htm という名前のファイルを配置すると、IIS によってアプリケーションが実行されるのではなく、そのファイルが自動的に表示されます。 そのため、デプロイ中にアクセスできないようにするには、 ルート フォルダーにapp_offline.htm を配置し、デプロイ プロセスを実行してから、デプロイが成功した後 にapp_offline.htm を削除します。
Web 配置を構成して、既定 のapp_offline.htm ファイルをデプロイの開始時にサーバーに自動的に配置し、終了時に削除することができます。 これを行うには、発行プロファイル (.pubxml) ファイルに次の XML 要素を追加します。
<EnableMSDeployAppOffline>true</EnableMSDeployAppOffline>
このチュートリアルでは、カスタム app_offline.htm ファイルを作成して使用する方法について説明します。
ユーザーがステージング サイトにアクセス していないため、ステージング サイトでapp_offline.htmを使用する必要はありません。 ただし、ステージングを使用して、運用環境でのデプロイを計画する方法をすべてテストすることをお勧めします。
app_offline.htmの作成
ソリューション エクスプローラーでソリューションを右クリックし、[追加] をクリックし、[新しい項目] をクリックします。
app_offline.htmという名前の HTML ページを作成します (Visual Studio によって既定で作成される.html拡張機能の最後の "l" を削除します)。
テンプレート マークアップを次のマークアップに置き換えます。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Contoso University - Under Construction</title> </head> <body> <h1>Contoso University</h1> <h2>Under Construction</h2> <p>The Contoso University site is temporarily unavailable while we upgrade it. Please try again later.</p> </body> </html>
ファイルを保存して閉じます。
app_offline.htmを Web サイトのルート フォルダーにコピーする
任意の FTP ツールを使用して、Web サイトにファイルをコピーできます。 FileZilla は一般的な FTP ツールであり、スクリーン ショットに表示されます。
FTP ツールを使用するには、FTP URL、ユーザー名、パスワードの 3 つが必要です。
URL は Azure 管理ポータルの Web サイトのダッシュボード ページに表示され、FTP のユーザー名とパスワードは、先ほどダウンロードした .publishsettings ファイルにあります。 次の手順では、これらの値を取得する方法を示します。
Azure 管理ポータルで、[ Web サイト ] タブをクリックし、ステージング Web サイトをクリックします。
[ ダッシュボード ] ページで下にスクロールして、[ クイック 概要 ] セクションで FTP ホスト名を見つけます。
ステージング .publishsettings ファイルを メモ帳または別のテキスト エディターで開きます。
FTP プロファイルの
publishProfile
要素を見つけます。と の値を
userPWD
コピーしますuserName
。FTP ツールを開き、FTP URL にログオンします。
ソリューション フォルダーからステージング サイトの /site/wwwroot フォルダーにapp_offline.htmをコピーします。
ステージング サイトの URL を参照します。 ホーム ページではなく 、app_offline.htm ページが表示されていることがわかります。
これで、ステージングにデプロイする準備ができました。
コード更新プログラムをステージングと運用環境にデプロイする
[ Web One Click Publish]\(Web One Click Publish \) ツール バーで、[ ステージング 発行プロファイル] を選択し、[ Web の発行] をクリックします。
Visual Studio によって更新されたアプリケーションが展開され、ブラウザーがサイトのホーム ページに開きます。 app_offline.htm ファイルが表示されます。 デプロイが成功したことをテストして確認するには、 app_offline.htm ファイルを削除する必要があります。
FTP ツールに戻り、ステージング サイトから app_offline.htm を削除します。
ブラウザーで、ステージング サイトの [Instructors] ページを開き、講師を選択して、更新プログラムが正常に展開されたことを確認します。
ステージングの場合と同じ手順に従って運用します。
変更の確認と特定のファイルの展開
Visual Studio 2012 では、個々のファイルをデプロイすることもできます。 選択したファイルの場合は、ローカル バージョンとデプロイされたバージョンの違いを表示したり、ファイルを移行先環境に展開したり、コピー先環境からローカル プロジェクトにファイルをコピーしたりできます。 チュートリアルのこのセクションでは、これらの機能を使用する方法について説明します。
デプロイを変更する
Content/Site.css を開き、 タグのブロックを
body
見つけます。の値を
background-color
から#fff
に変更しますdarkblue
。body { background-color: darkblue; border-top: solid 10px #000; color: #333; font-size: .85em; font-family: "Segoe UI", Verdana, Helvetica, Sans-Serif; margin: 0; padding: 0; }
[プレビューの発行] ウィンドウで変更を表示する
[Web の発行] ウィザードを使用してプロジェクトを発行すると、[プレビュー] ウィンドウでファイルをダブルクリックすると、発行される変更を確認できます。
ContosoUniversity プロジェクトを右クリックし、[ 発行] をクリックします。
[ プロファイル ] ドロップダウン リストから、[発行プロファイルの テスト ] を選択します。
[ プレビュー] をクリックし、[ プレビューの開始] をクリックします。
[プレビュー] ウィンドウで、[Site.css] をダブルクリックします。
[ 変更のプレビュー ] ダイアログには、デプロイされる変更のプレビューが表示されます。
Web.config ファイルをダブルクリックすると、[変更のプレビュー] ダイアログに、ビルド構成変換と発行プロファイル変換の効果が表示されます。 この時点で、サーバー上の Web.config ファイルが変更される原因となる処理を行っていないので、変更は表示されません。 ただし、[ 変更のプレビュー ] ウィンドウに 2 つの変更が正しく表示されません。 2 つの XML 要素が削除されるようです。 これらの要素は、Code First コンテキスト クラスのアプリケーション起動時に [Code First Migrationsの実行] を選択すると、発行プロセスによって追加されます。 比較は、発行プロセスがこれらの要素を追加する前に行われるので、削除は行われませんが、削除されているようです。 このエラーは、今後のリリースで修正される予定です。
[閉じる] をクリックします。
[発行] をクリックします。
ブラウザーがテスト サイトのホーム ページに表示されたら、CTRL キーを押しながら F5 キーを押して、CSS の変更の影響を確認するためにハード更新を行います。
ブラウザーを閉じます。
ソリューション エクスプローラーから特定のファイルを発行する
青い背景が気に入らないので、元の色に戻したいとします。 このセクションでは、特定のファイルをソリューション エクスプローラーから直接発行することで、元の設定を復元します。
Content/Site.css を開き、設定を に
#fff
復元しますbackground-color
。ソリューション エクスプローラーで、Content/Site.css ファイルを右クリックします。
コンテキスト メニューには、3 つの発行オプションが表示されます。
[ Site.css への変更のプレビュー] をクリックします。
ウィンドウが開き、ローカル ファイルとターゲット環境のバージョンの違いが表示されます。
ソリューション エクスプローラーで、Site.css をもう一度右クリックし、[ Site.css の発行] をクリックします。
[ Web 発行アクティビティ ] ウィンドウには、ファイルが発行されたことが表示されます。
ブラウザーを URL に
http://localhost/contosouniversity
開き、CTRL キーを押しながら F5 キーを押して、CSS の変更の影響を確認するためにハード更新を行います。ブラウザーを閉じます。
まとめ
データベースの変更を伴わないアプリケーション更新プログラムをデプロイする方法をいくつか見てきました。また、変更内容をプレビューして、更新内容が期待どおりであることを確認する方法を確認しました。 [講師] ページに [ コースの指導 ] セクションが表示されるようになりました。
次のチュートリアルでは、データベースの変更をデプロイする方法について説明します。生年月日フィールドをデータベースと Instructors ページに追加します。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示