なか日記

一度きりの人生、楽しく生きよう。

ASP.NET WebサイトをTeam Foundation ServiceからAzure Webサイトにデプロイしようとするとエラー

いつか解決したらいいなってことで書いておく。解決した。

Team Foundation Service(以下、TFS)からAzure Webサイトにデプロイってできるんかしら?と思ってググってみたら以下のサイトを発見した。

Continuous delivery with Team Foundation Service in Windows Azure

これを参考に、試しにVisualStudio2012でASP.NET MVC4プロジェクトを作成して試したところ、あっさり成功。

なら、具体的なサンプルを使ってやってみようと@の「daruyanagi/uhobbs · GitHub」をネタに試してみたところ、うまくいかなかった。

きっと、ASP.NET Web Pagesだからだと思う。

操作の手順

ざっと以下のような感じ。

  1. TFSでチームプロジェクトの作成
  2. Azure Webサイトの作成
  3. Azure WebサイトからTFSへ接続
  4. VS2012でWebサイトを開く
  5. ソリューションをソース管理に追加&チェックイン ※エラーその1発生
  6. エラーその1の処置実施&チェックイン ※エラーその2発生

環境

ファイル構成

  • ソリューションファイル
     D:\Users\nakaji\Documents\Visual Studio 2012\Projects\uhobbs
  • Webサイトソース
     D:\Visual Studio 2012\Projects\uhobbs

ソース管理エクスプローラ-

f:id:nakaji999:20130408012942p:plain

ビルド定義

f:id:nakaji999:20130408015627p:plain

エラーその1の内容と対処

エラー内容

ASPNETCOMPILER: The directory 'C:\Visual Studio 2012\Projects\uhobbs\' doesn't exist.

原因

ソリューションファイルのAspNetCompiler.PhysicalPathの指定に問題がある様子。

テキストエディタでソリューションファイルを開くとAspNetCompiler.PhysicalPathが以下のようになっていた。

ソリューションファイルから抜粋

Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "uhobbs", "..\..\..\..\..\..\Visual Studio 2012\Projects\uhobbs", "{2C5E2584-3272-47BB-9AFD-9E7E1BAD8D07}"
    ProjectSection(WebsiteProperties) = preProject
        SccProjectName = "SAK"
        SccAuxPath = "SAK"
        SccLocalPath = "SAK"
        SccProvider = "SAK"
        TargetFrameworkMoniker = ".NETFramework,Version%3Dv4.0"
        Debug.AspNetCompiler.VirtualPath = "/uhobbs"
        Debug.AspNetCompiler.PhysicalPath = "..\uhobbs_1\"
        Debug.AspNetCompiler.PhysicalPath = "..\..\..\..\..\..\Visual Studio 2012\Projects\uhobbs\"
        Debug.AspNetCompiler.TargetPath = "PrecompiledWeb\uhobbs\"
        Debug.AspNetCompiler.Updateable = "true"
        Debug.AspNetCompiler.ForceOverwrite = "true"
        Debug.AspNetCompiler.FixedNames = "false"
        Debug.AspNetCompiler.Debug = "True"
        Release.AspNetCompiler.VirtualPath = "/uhobbs"
        Release.AspNetCompiler.PhysicalPath = "..\..\..\..\..\..\Visual Studio 2012\Projects\uhobbs\"
        Release.AspNetCompiler.TargetPath = "PrecompiledWeb\uhobbs\"
        Release.AspNetCompiler.Updateable = "true"
        Release.AspNetCompiler.ForceOverwrite = "true"
        Release.AspNetCompiler.FixedNames = "false"
        Release.AspNetCompiler.Debug = "False"
        VWDPort = "58186"
    EndProjectSection
EndProject

対処

Debug.AspNetCompiler.PhysicalPathとRelease.AspNetCompiler.PhysicalPathを以下のように修正する

      Debug.AspNetCompiler.PhysicalPath = "..\uhobbs_1\"
        Release.AspNetCompiler.PhysicalPath = "..\uhobbs_1\"

エラーその2の内容と対処

エラー内容

Exception Message: The deployment package file (*.zip) was not found. Ensure that PackageAsSingleFile msbuild property is not set to False. (type FileNotFoundException)
Exception Stack Trace:    at System.Activities.Statements.Throw.Execute(CodeActivityContext context)
   at System.Activities.CodeActivity.InternalExecute(ActivityInstance instance, ActivityExecutor executor, BookmarkManager bookmarkManager)
   at System.Activities.Runtime.ActivityExecutor.ExecuteActivityWorkItem.ExecuteBody(ActivityExecutor executor, BookmarkManager bookmarkManager, Location resultLocation)

原因

わけがわからないよ。

ビルドの定義にて、「プロセス」→「詳細設定」にあるMSBuild引数に「p:PackageAsSingleFile=True」を追加してみたが状況変わらず。

f:id:nakaji999:20130408001705p:plain

どうしたらいいのか知ってる人がいたら教えてください。

解決すれば、ネタエントリを投稿できるんですけどねぇ。

解決方法

どうやって解決したかというと、WebサイトをWebアプリケーションに変えてしまうというとっても単純な話。

手順は以下の通り。

  1. ソリューションに新しいプロジェクト「ASP.NET 空の Web アプリケーション」を追加する
  2. Webサイトの内容を全てWebアプリケーションプロジェクトにコピーする
  3. Webサイトをばっさり削除
  4. TFSにチェックイン!

根本解決にはなっていないのかもしれないけど、自分の目的は果たせたのでヨシとしよう。