ASP.NET MVC 4 ベータ リリース ノート

このドキュメントでは、ASP.NET MVC 4 Beta for Visual Studio 2010 のリリースについて説明します。

これは最新のリリースではありません。 ASP.NET MVC 4 RC リリース ノート については、こちらをご覧ください

インストールに関する注意事項

ASP.NET MVC 4 Beta for Visual Studio 2010 は、Web プラットフォーム インストーラーを使用して 、ASP.NET MVC 4 のホーム ページ からインストールできます。

ASP.NET MVC 4 Beta をインストールする前に、ASP.NET MVC 4 の以前にインストールしたプレビューをアンインストールする必要があります。

このリリースは、.NET Framework 4.5 Developer Preview と互換性がありません。 ASP.NET MVC 4 ベータ版をインストールする前に、.NET 4.5 Developer Preview をアンインストールする必要があります。

ASP.NET MVC 4 はインストールでき、ASP.NET MVC 3 と共存して実行できます。

ドキュメント

ASP.NET MVC のドキュメントは、MSDN Web サイトの次の URL で入手できます。

https://go.microsoft.com/fwlink/?LinkID=243043

ASP.NET MVC に関するチュートリアルとその他の情報は、ASP.NET Web サイト (https://www.asp.net/mvc/mvc4) の MVC 4 ページで入手できます。

サポート

これはプレビュー リリースであり、公式にはサポートされていません。 このリリースの使用に関する質問がある場合は、ASP.NET MVC フォーラム (https://forums.asp.net/1146.aspx) に投稿してください。ここで、ASP.NET コミュニティのメンバーは非公式のサポートを頻繁に提供できます。

ソフトウェア要件

Visual Studio 用の ASP.NET MVC 4 コンポーネントには、PowerShell 2.0 と、Service Pack 1 の Visual Studio 2010 または Visual Web Developer Express 2010 Service Pack 1 が必要です。

ASP.NET MVC 3 プロジェクトを ASP.NET MVC 4 にアップグレードする

ASP.NET MVC 4 は、同じコンピューター上で ASP.NET MVC 3 と並行してインストールできるため、ASP.NET MVC 3 アプリケーションを ASP.NET MVC 4 にアップグレードするタイミングを柔軟に選択することができます。

アップグレードする最も簡単な方法は、新しい ASP.NET MVC 4 プロジェクトを作成し、すべてのビュー、コントローラー、コード、およびコンテンツ ファイルを既存の MVC 3 プロジェクトから新しいプロジェクトにコピーしてから、新しいプロジェクトのアセンブリ参照を古いプロジェクトと一致するように更新することです。 MVC 3 プロジェクトの Web.config ファイルに変更を加えた場合は、それらの変更を MVC 4 プロジェクトの Web.config ファイルにマージする必要もあります。

既存の ASP.NET MVC 3 アプリケーションをバージョン 4 に手動でアップグレードするには、次の操作を行います。

  1. プロジェクト内のすべての Web.config ファイル (プロジェクトのルートに 1 つ、Views フォルダーに 1 つ、プロジェクト内の各領域の Views フォルダーに 1 つ) で、次のテキストのすべてのインスタンスを置き換えます。

    System.Web.Mvc, Version=3.0.0.0
    System.Web.WebPages, Version=1.0.0.0
    System.Web.Helpers, Version=1.0.0.0
    System.Web.WebPages.Razor, Version=1.0.0.0
    

    次の対応するテキストを使用します。

    System.Web.Mvc, Version=4.0.0.0
    System.Web.WebPages, Version=2.0.0.0
    System.Web.Helpers, Version=2.0.0.0,
     System.Web.WebPages.Razor, Version=2.0.0.0,
    
  2. ルート Web.config ファイルで、 webPages:Version 要素を "2.0.0.0" に更新し、値が "true" の新しい PreserveLoginUrl キーを追加します。

    <appSettings>
      <add key="webpages:Version" value="2.0.0.0" />
      <add key="PreserveLoginUrl" value="true" />
    </appSettings>
    
  3. ソリューション エクスプローラーで、 System.Web.Mvc (バージョン 3 DLL を指す) への参照を削除します。 次に、 System.Web.Mvc (v4.0.0.0) への参照を追加します。 特に、アセンブリ参照を更新するには、次の変更を行います。 これらについて詳しく説明します。

    1. ソリューション エクスプローラーで、次のアセンブリへの参照を削除します。

      • System.Web.Mvc(v3.0.0.0)
      • System.Web.WebPages(v1.0.0.0)
      • System.Web.Razor(v1.0.0.0)
      • System.Web.WebPages.Deployment(v1.0.0.0)
      • System.Web.WebPages.Razor(v1.0.0.0)
    2. 次のアセンブリへの参照を追加します。

      • System.Web.Mvc(v4.0.0.0)
      • System.Web.WebPages(v2.0.0.0)
      • System.Web.Razor(v2.0.0.0)
      • System.Web.WebPages.Deployment(v2.0.0.0)
      • System.Web.WebPages.Razor(v2.0.0.0)
  4. ソリューション エクスプローラーで、プロジェクト名を右クリックし、[プロジェクトのアンロード] を選択します。 名前をもう一度右クリックし、[ ProjectName.csproj の編集] を選択します。

  5. ProjectTypeGuids 要素を見つけて、{E53F8FEA-EAE0-44A6-8774-FFD645390401} を {E3E379DF-F4C6-4180-9B81-6769533ABE47} に置き換えます。

  6. 変更を保存し、編集していたプロジェクト (.csproj) ファイルを閉じ、プロジェクトを右クリックして、[プロジェクトの再読み込み] を選択します。

  7. プロジェクトが以前のバージョンの ASP.NET MVC を使用してコンパイルされたサード パーティ製ライブラリを参照する場合は、ルート Web.config ファイルを開き、構成セクションの下に次の 3 つの bindingRedirect 要素を追加します。

    <configuration>
      <!--... elements deleted for clarity ...-->
     
      <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
          <dependentAssembly>
            <assemblyIdentity name="System.Web.Helpers" 
                 publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0"/>
          </dependentAssembly>
          <dependentAssembly>
            <assemblyIdentity name="System.Web.Mvc" 
                 publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="4.0.0.0"/>
          </dependentAssembly>
          <dependentAssembly>
            <assemblyIdentity name="System.Web.WebPages" 
                 publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0"/>
          </dependentAssembly>
        </assemblyBinding>
      </runtime>
    </configuration>
    

ASP.NET MVC 4 ベータ版の新機能

このセクションでは、ASP.NET MVC 4 ベータ リリースで導入された機能について説明します。

ASP.NET Web API

ASP.NET MVC 4 には、ブラウザーやモバイル デバイスなど、幅広いクライアントにアクセスできる HTTP サービスを作成するための新しいフレームワークである ASP.NET Web API が含まれるようになりました。 ASP.NET Web API は、RESTful サービスを構築するための理想的なプラットフォームでもあります。

ASP.NET Web API には、次の機能のサポートが含まれています。

  • 最新の HTTP プログラミング モデル: 厳密に型指定された新しい HTTP オブジェクト モデルを使用して、Web API の HTTP 要求と応答に直接アクセスして操作します。 同じプログラミング モデルと HTTP パイプラインは、新しい HttpClient 型を介してクライアントで対称的に使用できます。
  • ルートの完全なサポート: Web API では、ルート パラメーターや制約など、常に Web スタックの一部であったルート機能の完全なセットがサポートされるようになりました。 さらに、アクションへのマッピングでは規則が完全にサポートされているため、[HttpPost] などの属性をクラスやメソッドに適用する必要がなくなりました。
  • コンテンツ ネゴシエーション: クライアントとサーバーは連携して、API から返されるデータの適切な形式を決定できます。 XML、JSON、およびフォーム URL エンコード形式の既定のサポートが提供されており、独自のフォーマッタを追加してこのサポートを拡張したり、既定のコンテンツ ネゴシエーション戦略を置き換えたりすることもできます。
  • モデルのバインドと検証: モデル バインダーを使用すると、HTTP 要求のさまざまな部分からデータを抽出し、それらのメッセージ 部分を Web API アクションで使用できる .NET オブジェクトに変換する簡単な方法が提供されます。
  • フィルター: Web API では、[Authorize] 属性などの既知のフィルターを含むフィルターがサポートされるようになりました。 アクション、承認、例外処理用の独自のフィルターを作成してプラグインできます。
  • クエリの構成: IQueryable<T> を返すだけで、Web API は OData URL 規則を使用したクエリをサポートします。
  • HTTP の詳細のテスト可能性が向上しました。 Web API アクションは、静的コンテキスト オブジェクトに HTTP の詳細を設定するのではなく、HttpRequestMessage と HttpResponseMessage のインスタンスで動作できるようになりました。 これらのオブジェクトのジェネリック バージョンも存在し、HTTP 型に加えてカスタム型を操作できます。
  • DependencyResolver を使用した制御の反転 (IoC) の改善: Web API では、MVC の依存関係リゾルバーによって実装されたサービス ロケーター パターンを使用して、さまざまな機能のインスタンスを取得できるようになりました。
  • コードベースの構成: Web API の構成は、コードによってのみ実行され、構成ファイルはクリーンなままです。
  • セルフホスト: Web API は、IIS に加えて独自のプロセスでホストできますが、Web API のルートやその他の機能を最大限に活用できます。

ASP.NET Web API の詳細については、 https://www.asp.net/web-apiを参照してください。

ASP.NET シングル ページ アプリケーション

ASP.NET MVC 4 には、JavaScript と Web API を使用してクライアント側で重要な対話を行うシングル ページ アプリケーションを構築するためのエクスペリエンスの早期プレビューが含まれるようになりました。 次のものがサポートされます。

  • キャッシュされたデータとより豊富なローカル対話のための JavaScript ライブラリのセット
  • 作業単位と DAL サポート用の追加の Web API コンポーネント
  • すぐに開始するためのスキャフォールディングを含む MVC プロジェクト テンプレート

ASP.NET MVC 4 でのシングル ページ アプリケーションのサポートの詳細については、 https://www.asp.net/single-page-applicationを参照してください。

既定のプロジェクト テンプレートの機能強化

MVC 4 プロジェクト ASP.NET 新しい作成に使用されるテンプレートが更新され、よりモダンな Web サイトが作成されました。

既定のプロジェクト テンプレートのブラウザー ビューのスクリーンショット。

化粧品の改善に加えて、新しいテンプレートの機能が改善されています。 このテンプレートでは、アダプティブ レンダリングと呼ばれる手法を使用して、カスタマイズなしでデスクトップ ブラウザーとモバイル ブラウザーの両方で見た目が良く表示されます。

既定のプロジェクト テンプレートのモバイル ブラウザー ビューのスクリーンショット。

アダプティブ レンダリングの動作を確認するには、モバイル エミュレーターを使用するか、デスクトップ ブラウザー ウィンドウのサイズを小さくしてみてください。 ブラウザー ウィンドウが十分に小さくなると、ページのレイアウトが変更されます。

既定のプロジェクト テンプレートに対するもう 1 つの機能強化は、JavaScript を使用して、より豊富な UI を提供することです。 テンプレートで使用されるログインおよび登録リンクは、jQuery UI ダイアログを使用してリッチ ログイン画面を表示する方法の例です。

既定のプロジェクト テンプレート のログオン画面のスクリーンショット。

モバイル プロジェクト テンプレート

新しいプロジェクトを開始していて、モバイル ブラウザーとタブレット ブラウザー専用のサイトを作成する場合は、新しいモバイル アプリケーション プロジェクト テンプレートを使用できます。 これは、タッチ最適化 UI を構築するためのオープンソース ライブラリである jQuery Mobile に基づいています。

既定のプロジェクト テンプレート ログオン画面のモバイル ブラウザー ビューのスクリーンショット。

このテンプレートには、インターネット アプリケーション テンプレートと同じアプリケーション構造 (およびコントローラー コードは実質的に同じです) が含まれていますが、jQuery Mobile を使用してスタイルを設定し、タッチベースのモバイル デバイスで見た目が良く、適切に動作します。 モバイル UI を構造化およびスタイル設定する方法の詳細については、 jQuery Mobile プロジェクトの Web サイトを参照してください。

モバイル最適化ビューを追加するデスクトップ指向サイトが既にある場合、または異なるスタイルのビューをデスクトップ ブラウザーとモバイル ブラウザーに提供する 1 つのサイトを作成する場合は、新しい表示モード機能を使用できます。 (次のセクションを参照してください)。

表示モード

新しい表示モード機能を使用すると、アプリケーションは要求を行っているブラウザーに応じてビューを選択できます。 たとえば、デスクトップ ブラウザーがホーム ページを要求した場合、アプリケーションでは Views\Home\Index.cshtml テンプレートを使用できます。 モバイル ブラウザーがホーム ページを要求した場合、アプリケーションは Views\Home\Index.mobile.cshtml テンプレートを返す可能性があります。

レイアウトや部分テンプレートは、特定のブラウザータイプに対してオーバーライドすることもできます。 例えば次が挙げられます。

  • Views\Shared フォルダーに _Layout.cshtml テンプレートと _Layout.mobile.cshtml テンプレートの両方が含まれている場合、既定では、アプリケーションはモバイル ブラウザーからの要求時に _Layout.mobile.cshtml を使用し、他の要求時には _Layout.cshtml を使用します。
  • フォルダーに _MyPartial.cshtml と _MyPartial.mobile.cshtml の両方が含まれている場合、命令 @Html.Partial("_MyPartial") は、モバイル ブラウザーからの要求中に _MyPartial.mobile.cshtml をレンダリングし、他の要求時に _MyPartial.cshtml をレンダリングします。

他のデバイスのより具体的なビュー、レイアウト、または部分ビューを作成する場合は、新しい DefaultDisplayMode インスタンスを登録して、要求が特定の条件を満たすときに検索する名前を指定できます。 たとえば、次のコードを Global.asax ファイルの Application_Start メソッドに追加して、Apple iPhone ブラウザーが要求を行ったときに適用される表示モードとして文字列 "iPhone" を登録できます。

DisplayModeProvider.Instance.Modes.Insert(0, new
DefaultDisplayMode("iPhone")
{
    ContextCondition = (context => context.GetOverriddenUserAgent().IndexOf
        ("iPhone", StringComparison.OrdinalIgnoreCase) >= 0)
 });

このコードの実行後、Apple iPhone ブラウザーが要求を行うと、アプリケーションは Views\Shared\_Layout.iPhone.cshtml レイアウト (存在する場合) を使用します。

jQuery Mobile、ビュー切り替え、およびブラウザーオーバーライド

jQuery Mobile は、タッチ最適化 Web UI を構築するためのオープン ソース ライブラリです。 ASP.NET MVC 4 アプリケーションで jQuery Mobile を使用する場合は、作業を開始するのに役立つ NuGet パッケージをダウンロードしてインストールできます。 Visual Studio パッケージ マネージャー コンソールからインストールするには、次のコマンドを入力します。

Install-Package jQuery.Mobile.MVC

これにより、jQuery Mobile と、次のようないくつかのヘルパー ファイルがインストールされます。

  • Views/Shared/_Layout.Mobile.cshtml。jQuery Mobile ベースのレイアウトです。
  • ビュー スイッチャー コンポーネント。Views/Shared/_ViewSwitcher.cshtml 部分ビューとViewSwitcherController.cs コントローラーで構成されます。

パッケージをインストールしたら、モバイル ブラウザー (または Firefox User Agent Switcher アドオンなど) を使用してアプリケーションを実行します。 jQuery Mobile はレイアウトとスタイルを処理するため、ページの外観が大きく異なることがわかります。 これを利用するには、次の操作を行います。

  • 前の 「表示モード 」で説明したように、モバイル固有のビューオーバーライドを作成します (たとえば、Views\Home\Index.mobile.cshtml を作成して、モバイル ブラウザーの Views\Home\Index.cshtml をオーバーライドします)。
  • モバイル ビューでタッチ最適化 UI 要素を追加する方法の詳細については、 jQuery Mobile のドキュメント を参照してください。

モバイル最適化 Web ページの規則は、ユーザーがデスクトップ バージョンのページに切り替えることができる、デスクトップ ビューやフル サイト モードなどのテキストを含むリンクを追加することです。 jQuery.Mobile.MVC パッケージには、この目的のためのサンプル ビュー スイッチャー コンポーネントが含まれています。 既定の Views\Shared\_Layout.Mobile.cshtml ビューで使用され、ページがレンダリングされると次のようになります。

モバイル ビューとデスクトップ ビューのリンクのスクリーンショット。

訪問者がリンクをクリックすると、同じページのデスクトップ バージョンに切り替わります。

デスクトップ レイアウトには既定でビュー スイッチャーが含まれていないため、訪問者はモバイル モードに移行する方法がありません。 これを有効にするには、_ViewSwitcherを次のようにデスクトップレイアウトの<body>要素内へ追加してください。

<body>
    @Html.Partial("_ViewSwitcher")
    ...

ビュー スイッチャーは、Browser Overriding という新しい機能を使用します。 この機能を使用すると、アプリケーションは、実際のブラウザー (ユーザー エージェント) とは異なるブラウザー (ユーザー エージェント) から送信されたかのように要求を処理できます。 次の表に、ブラウザーのオーバーライドで提供されるメソッドの一覧を示します。

HttpContext.SetOverriddenBrowser(userAgentString) 指定したユーザー エージェントを使用して、要求の実際のユーザー エージェント値をオーバーライドします。
HttpContext.GetOverriddenUserAgent() 要求のユーザー エージェントオーバーライド値、またはオーバーライドが指定されていない場合は実際のユーザー エージェント文字列を返します。
HttpContext.GetOverriddenBrowser() 要求に現在設定されているユーザー エージェント (実際またはオーバーライドされた) に対応する HttpBrowserCapabilitiesBase インスタンスを返します。 この値を使用して、IsMobileDevice などのプロパティを取得できます。
HttpContext.ClearOverriddenBrowser() 現在の要求に対してオーバーライドされたユーザー エージェントを削除します。

ブラウザーのオーバーライドは、ASP.NET MVC 4 のコア機能であり、jQuery.Mobile.MVC パッケージをインストールしない場合でも使用できます。 ただし、ビュー、レイアウト、部分ビューの選択にのみ影響します。 Request.Browser オブジェクトに依存する他の ASP.NET 機能には影響しません。

既定では、ユーザー エージェントのオーバーライドは Cookie を使用して格納されます。 オーバーライドを別の場所 (データベースなど) に格納する場合は、既定のプロバイダー (BrowserOverrideStores.Current) を置き換えることができます。 このプロバイダーのドキュメントは、ASP.NET MVC の今後のリリースに付属する予定です。

Visual Studio でのコード生成のレシピ

新しいレシピ機能を使用すると、Visual Studio は NuGet を使用してインストールできるパッケージに基づいてソリューション固有のコードを生成できます。 Recipes フレームワークを使用すると、開発者はコード生成プラグインを簡単に記述できます。これを使用して、Add Area、Add Controller、Add View の組み込みコード ジェネレーターを置き換えることもできます。 レシピは NuGet パッケージとしてデプロイされるため、ソース管理に簡単にチェックインし、プロジェクト上のすべての開発者と自動的に共有できます。 また、ソリューションごとに使用することもできます。

非同期コントローラーのタスク サポート

非同期アクション メソッドを、Task または Task<ActionResult> 型のオブジェクトを返す単一のメソッドとして記述できるようになりました。

たとえば、Visual C# 5 を使用している場合 (または 非同期 CTP を使用している場合)、次のような非同期アクション メソッドを作成できます。

public async Task<ActionResult> Index(string city) {
    var newsService = new NewsService();
    var sportsService = new SportsService();
    
    return View("Common",
        new PortalViewModel {
        NewsHeadlines = await newsService.GetHeadlinesAsync(),
        SportsScores = await sportsService.GetScoresAsync()
    });
}

前のアクション メソッドでは、 newsService.GetHeadlinesAsyncsportsService.GetScoresAsync の呼び出しは非同期的に呼び出され、スレッド プールからのスレッドはブロックされません。

タスク インスタンスを返す非同期アクション メソッドでも、タイムアウトをサポートできます。 アクション メソッドを取り消し可能にするには、 CancellationToken 型のパラメーターをアクション メソッドシグネチャに追加します。 次の例は、タイムアウトが 2500 ミリ秒で、タイムアウトが発生した場合に クライアントに TimedOut ビューを表示する非同期アクション メソッドを示しています。

[AsyncTimeout(2500)]
[HandleError(ExceptionType = typeof(TaskCanceledException), View = "TimedOut")]
public async Task<ActionResult> Index(string city,
    CancellationToken cancellationToken) {
    var newsService = new NewsService();
    var sportsService = new SportsService();
   
    return View("Common",
        new PortalViewModel {
        NewsHeadlines = await newsService.GetHeadlinesAsync(cancellationToken),
        SportsScores = await sportsService.GetScoresAsync(cancellationToken)
    });
}

Azure SDK

ASP.NET MVC 4 Beta では、Windows Azure SDK の 2011 年 9 月 1.5 リリースがサポートされます。

既知の問題と重大な変更

  • MVC 4 ベータ版 ASP.NET インストールした後、Visual Studio 2010 Service Pack 1 CSHTML/VBHTML エディターの CSHTML/VBHTML エディターは、cshtml または vbhtml ファイル内にスニペットまたは JavaScript を入力した後、長時間一時停止することがあります。 これは、作成され、まだコンパイルされていない MVC 4 アプリケーション ASP.NET でのみ発生します。

    回避策は、プロジェクトをコンパイルして bin フォルダー内のアセンブリを取得することです。 bin フォルダーからアセンブリを削除するプロジェクトをクリーンアップすると、エディターの問題が返されることに注意してください。

    これは、次のリリースで修正される予定です。

  • Visual Studio 11 Beta の C# プロジェクト テンプレートに、Global.asax.csに正しくない接続文字列が含まれています。 Visual Studio 11 Beta で作成されたプロジェクトの Application_Start メソッドで指定された既定の接続には、エスケープされていない円記号 () 文字を含む LocalDB 接続文字列が含まれています。 これにより、Entity Framework DbContext にアクセスしようとすると接続エラーが発生し、SqlException が生成されます。

    この問題を解決するには、Global.asax.cs の App_Start メソッドで円記号をエスケープして以下のようにします。

    Database.DefaultConnectionFactory = 
       new SqlConnectionFactory(
         "Data Source=(localdb)\\v11.0; Integrated Security=True; MultipleActiveResultSets=True");
    
  • .NET 4.5 をターゲットとする ASP.NET MVC 4 アプリケーションは、.NET 4.0 で実行した場合、System.Net.Http.dll アセンブリにアクセスしようとすると、FileLoadException がスローされます。 .NET 4.5 の下で作成された ASP.NET MVC 4 アプリケーションには、バインディングリダイレクトが含まれており、これにより .NET 4.0 がインストールされたシステムでアプリケーションを実行すると、"ファイルまたはアセンブリ 'System.Net.Http' またはその依存関係の 1 つを読み込めませんでした" という FileLoadException が発生します。 この問題を解決するには、web.configから次のバインド リダイレクトを削除します。

    <dependentAssembly>
     <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" 
        culture="neutral" />
     <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
    </dependentAssembly>
    

    変更された web.config のアセンブリ バインド要素は、次のように表示されます。

    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
     <dependentAssembly>
      <assemblyIdentity name="System.Web.Helpers" 
        publicKeyToken="31bf3856ad364e35" />
      <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
     </dependentAssembly>
     <dependentAssembly>
      <assemblyIdentity name="System.Web.Mvc" 
        publicKeyToken="31bf3856ad364e35" />
      <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
     </dependentAssembly>
     <dependentAssembly>
      <assemblyIdentity name="System.Web.WebPages" 
        publicKeyToken="31bf3856ad364e35" />
      <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
     </dependentAssembly>
    </assemblyBinding>
    
  • Visual Basic プロジェクトの "コントローラーの追加" 項目テンプレートでは、領域内から呼び出されると、不適切な名前空間が生成されますVisual Basic を使用する ASP.NET MVC プロジェクト内の領域にコントローラーを追加すると、項目テンプレートによって間違った名前空間がコントローラーに挿入されます。 コントローラー内のアクションに移動すると、"ファイルが見つかりません" というエラーが発生します。

    生成された名前空間は、ルート名前空間の後のすべてを省略します。 たとえば、生成される名前空間は RootNamespace ですが、 RootNamespace.Areas.AreaName.Controllers である必要があります。

  • Razor ビュー エンジンの破壊的変更。 Razor パーサーの書き換えの一環として、 System.Web.Mvc.Razor から次の型が削除されました。

    • ModelSpan
    • MvcVBRazorCodeGenerator
    • MvcCSharpRazorCodeGenerator
    • MvcVBRazorCodeParser

    次のメソッドも削除されました。

    • MvcCSharpRazorCodeParser.ParseInheritsStatement(System.Web.Razor.Parser.CodeBlockInfo)
    • MvcWebPageRazorHost.DecorateCodeGenerator(System.Web.Razor.Generator.RazorCodeGenerator)
    • MvcVBRazorCodeParser.ParseInheritsStatement(System.Web.Razor.Parser.CodeBlockInfo)
  • WebMatrix.WebData.dll が ASP.NET MVC 4 アプリの /bin ディレクトリに含まれている場合、フォーム認証の URL が引き継がれる。 WebMatrix.WebData.dll アセンブリをアプリケーションに追加すると(たとえば、[配置可能な依存関係の追加] ダイアログを使用して "ASP.NET Web Pages with Razor Syntax" を選択する場合)、既定の ASP.NET MVC アカウント コントローラーが想定する /account/login ではなく、/account/logon への認証ログインのリダイレクトが行われるようにオーバーライドされます。 この動作を防ぎ、web.configの認証セクションで既に指定されている URL を使用するには、PreserveLoginUrl という appSetting を追加し、true に設定します。

    <appSettings>
        <add key="PreserveLoginUrl" value="true"/>
    </appSettings>
    
  • Visual Studio 2010 と Visual Web Developer 2010 のサイド バイ サイド インストール ASP.NET MVC 4 をインストールしようとすると、NuGet パッケージ マネージャーのインストールが失敗します。 Visual Studio 2010 と Visual Web Developer 2010 を ASP.NET MVC 4 と並行して実行するには、両方のバージョンの Visual Studio が既にインストールされた後、MVC 4 ASP.NET インストールする必要があります。

  • 前提条件が既にアンインストールされている場合、MVC 4 ASP.NET アンインストールは失敗します。 MVC 4 ASP.NET クリーン アンインストールするには、Visual Studio をアンインストールする前 ASP.NET MVC 4 をアンインストールする必要があります。

  • 既定の Web API プロジェクトを実行すると、RegisterApis メソッドを使用してルートを追加するようにユーザーに誤って指示する指示が表示されます。これは存在しません。 ASP.NET ルート テーブルを使用して、RegisterRoutes メソッドにルートを追加する必要があります。

  • ASP.NET MVC 4 ベータ版をインストールすると、ASP.NET MVC 3 RTM アプリケーションが動作しなくなります。 (ASP.NET MVC 3 Tools Update リリースではなく) RTM リリースで作成された MVC 3 アプリケーション ASP.NET、ASP.NET MVC 4 ベータ版と並行して動作するには、次の変更が必要です。 これらの更新を行わずにプロジェクトをビルドすると、コンパイル エラーが発生します。

    必要な更新プログラム

    1. ルート Web.config ファイルに、キー < と値 > を含む新しい appSettings エントリを追加します。

      <appSettings>
          <add key="webpages:Version" value="1.0.0.0"/>
          <add key="ClientValidationEnabled" value="true"/>
          <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
      </appSettings>
      
    2. ソリューション エクスプローラーで、プロジェクト名を右クリックし、[プロジェクトのアンロード] を選択します。 名前をもう一度右クリックし、[ ProjectName.csproj の編集] を選択します。

    3. 次のアセンブリ参照を確認してください。

      <Reference Include="System.Web.WebPages"/> 
      <Reference Include="System.Web.Helpers" />
      

      これらを次のように置き換えます。

      <Reference Include="System.Web.WebPages, Version=1.0.0.0,
      Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL "/> 
      <Reference Include="System.Web.Helpers, Version=1.0.0.0,
      Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
      
    4. 変更を保存し、編集していたプロジェクト (.csproj) ファイルを閉じ、プロジェクトを右クリックして [再読み込み] を選択します。