次の方法で共有


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

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

Installation Notes (SAP サポート ノート #1984787 – SUSE Linux Enterprise Server 12: インストールに関する注意事項)

Visual Studio 2010 用の ASP.NET MVC 4 は、Web Platform Installer を使って ASP.NET MVC 4 のホーム ページからインストールできます。

ASP.NET MVC 4 をインストールする前に、以前にインストールした ASP.NET MVC 4 のプレビュー版をアンインストールすることをお勧めします。 ASP.NET MVC 4 のベータ版とリリース候補は、アンインストールしなくても ASP.NET MVC 4 にアップグレードできます。

このリリースは、.NET Framework 4.5 のどのプレビュー リリースとも互換性がありません。 ASP.NET MVC 4 をインストールする前に、インストールされている .NET Framework 4.5 のプレビュー リリースを最終バージョンに個別にアップグレードする必要があります。

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 4 は完全にサポートされています。 このリリースの使用について質問がある場合は、ASP.NET MVC のフォーラム (https://forums.asp.net/1146.aspx) に投稿することもできます。ここでは、ASP.NET コミュニティのメンバーによる非公式のサポートを得られることがよくあります。

ソフトウェア要件

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

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 の要求と応答に直接アクセスして操作します。 新しい HttpClient 型を介して、クライアントでも対称的に同じプログラミング モデルと HTTP パイプラインを使用できます。
  • ルートの完全なサポート: ASP.NET Web API では、ルート パラメーターや制約など、ASP.NET ルーティングのルート機能の完全なセットがサポートされています。 さらに、簡単な規則を使って、アクションを HTTP メソッドにマップします。
  • コンテンツ ネゴシエーション: クライアントとサーバーは連携して、Web API から返されるデータの適切な形式を決定できます。 ASP.NET Web API では、XML、JSON、フォームの URL エンコード形式が既定でサポートされており、独自のフォーマッタを追加してこのサポートを拡張したり、既定のコンテンツ ネゴシエーション戦略を置き換えたりすることもできます。
  • モデルのバインドと検証: モデル バインダーによって提供される簡単な方法を使って、HTTP 要求のさまざまな部分からデータを抽出し、それらのメッセージ部分を Web API アクションで使用できる .NET オブジェクトに変換できます。 データの注釈に基づいて、アクション パラメーターに対する検証も実行されます。
  • フィルター: ASP.NET Web API では、[Authorize] 属性などの既知のフィルターも含めて、フィルターがサポートされています。 アクション、認可、例外処理用の独自のフィルターを作成して組み込むことができます。
  • クエリの構成:IQueryable を返すアクションで [Queryable] フィルター属性を使って、OData クエリ規則による Web API のクエリのサポートを有効にします。
  • テスト容易性の向上: Web API のアクションは、静的なコンテキスト オブジェクトで HTTP の詳細を設定するのではなく、HttpRequestMessageHttpResponseMessage のインスタンスで動作します。 Web API 機能に関する単体テストをすぐに書き始めるには、Web API プロジェクトと共に単体テスト プロジェクトを作成します。
  • コードに基づく構成: ASP.NET Web API の構成は、コードを通じてのみ行うので、構成ファイルはクリーンなままになります。 提供されたサービス ロケーター パターンを使って、拡張ポイントを構成します。
  • 制御の反転 (IoC) コンテナーのサポートの強化: ASP.NET Web API は、強化された依存関係リゾルバー抽象化を通じて IoC コンテナーの優れたサポートを提供します
  • セルフホスト: Web API のルートや他の機能の最大限の活用はそのままで、IIS だけでなく独自のプロセスでも Web API をホストできます。
  • ヘルプとテストのカスタム ページの作成: 新しい IApiExplorer サービスを使って Web API の完全なランタイムの記述を取得し、Web API 用のヘルプとテストのカスタム ページを簡単に作成できます。
  • 監視と診断: ASP.NET Web API では、System.Diagnostics、ETW、サード パーティのログ記録フレームワークなどの既存のログ ソリューションと簡単に統合できる軽量のトレース インフラストラクチャが提供されるようになりました。 ITraceWriter の実装を提供し、それを Web API 構成に追加して、トレースを有効にできます。
  • リンクの生成: ASP.NET Web API の UrlHelper を使って、同じアプリケーション内の関連リソースへのリンクを生成します。
  • Web API プロジェクト テンプレート: 新しい MVC 4 プロジェクト ウィザードで新しい Web API プロジェクトを選んで、ASP.NET Web API をすぐに稼働させます。
  • スキャフォールディング:[コントローラーの追加] ダイアログを使い、Entity Framework ベースのモデルの種類に基づいて Web API コントローラーをすばやくスキャフォールディングします。

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

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

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

Screenshot of the browser view of the new project template page.

表面的な改善に加えて、新しいテンプレートでは機能面でも改善されています。 このテンプレートで採用されたアダプティブ レンダリングと呼ばれる手法により、カスタマイズしなくてもデスクトップ ブラウザーとモバイル ブラウザーの両方で適切に表示されます。

Screenshot of the mobile browser view of the desktop version of the new project template page.

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

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

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

Screenshot of the mobile browser view of the mobile application project template.

このテンプレートに含まれるアプリケーション構造はインターネット アプリケーション テンプレートと同じです (コントローラーのコードも実質的に同じです) が、タッチ主体のモバイル デバイスで表示と動作が適切になるように、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 レイアウト (ある場合) を使うようになります。 表示モードについて詳しくは、「ASP.NET MVC 4 モバイル機能」をご覧ください。 DisplayModeProvider を使うアプリケーションでは、Fixed DisplayModes NuGet パッケージをインストールする必要があります。 ASP.NET Fall 2012 Update の新しいプロジェクト テンプレートには、Fixed DisplayModes NuGet パッケージが含まれています。 修正について詳しくは、「ASP.NET MVC 4 でのモバイルに関するキャッシュのバグの修正」をご覧ください。

jQuery Mobile とモバイルの機能

jQuery Mobile を使って ASP.NET MVC 4 でモバイル アプリケーションを構築する方法については、チュートリアル「ASP.NET MVC 4 モバイル機能」をご覧ください。

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

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

詳しくは、「ASP.NET MVC 4 での非同期メソッドの使用」をご覧ください。

Azure SDK

ASP.NET MVC 4 では、Windows Azure SDK の 1.6 以降のリリースがサポートされています。

データベースの移行

ASP.NET MVC 4 プロジェクトに Entity Framework 5 が含まれるようになりました。 Entity Framework 5 の優れた機能の 1 つは、データベースの移行のサポートです。 この機能のコード重視の移行を使うと、データベース内のデータを維持しながら、データベース スキーマを簡単に発展させることができます。 データベースの移行について詳しくは、ASP.NET MVC 4 の概要チュートリアルの「Movie モデルとテーブルに新しいフィールドを追加する」をご覧ください。

空のプロジェクト テンプレート

MVC Empty プロジェクト テンプレートは、完全にクリーンなスレートから始められるように、本当に空になりました。 以前のバージョンの Empty プロジェクト テンプレートは、名前が Basic に変更されました。

プロジェクト フォルダーにコントローラーを追加する

MVC プロジェクトの任意のフォルダーから右クリックして [コントローラーの追加] を選択できるようになりました。 これにより、MVC と Web API のコントローラーを別々のフォルダーに保持するなど、必要に応じてコントローラーを柔軟に整理できます。

バンドルと縮小

バンドルと縮小フレームワークを使うと、スクリプトと CSS 用のバンドルされた 1 つのファイルに個々のファイルを結合し、Web ページで行う必要がある HTTP 要求の数を減らすことができます。 その後、バンドルの内容を縮小して、それらの要求の全体的なサイズを小さくできます。 縮小には、空白の削除による変数名の短縮や、セマンティクスに基づく CSS セレクターの折りたたみなどのアクティビティを含めることができます。 バンドルは、コードで宣言および構成され、ヘルパー メソッドを介してビューで簡単に参照できます。ヘルパー メソッドでは、バンドルへの単一のリンクを生成したり、デバッグ時にバンドルの個々のコンテンツへの複数のリンクを生成したりできます。 詳しくは、「バンドルと縮小」をご覧ください。

OAuth と OpenID を使用して Facebook やそれ以外のサイトからのログインを有効にする

ASP.NET MVC 4 Internet Project テンプレートの既定のテンプレートに、DotNetOpenAuth ライブラリを使用する OAuth と OpenID のログインのサポートが含まれるようになりました。 OAuth または OpenID プロバイダーの構成については、「WebForms、MVC、WebPages の OAuth/OpenID のサポート」と、ASP.NET Web ページでの OAuth と OpenID の機能に関するドキュメントをご覧ください。

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 以外のテンプレートに含まれるアセンブリと一致するように、新しいプロジェクトのアセンブリ参照を更新することです。 MVC 3 プロジェクトで Web.config ファイルを変更した場合は、MVC 4 プロジェクトの Web.config ファイルにそれらの変更をマージする必要もあります。

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

  1. プロジェクト内のすべての Web.config ファイルで (プロジェクトのルートに 1 つ、Views フォルダーに 1 つ、プロジェクト内の領域ごとの Views フォルダーに 1 つ)、次のテキストのすべての出現箇所を置き換えます (注: "System.Web.WebPages, Version=1.0.0.0" は、Visual Studio 2012 で作成されたプロジェクトでは見つかりません)。

    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. ソリューション エクスプローラーで [参照] を右クリックして、[NuGet パッケージの管理] を選びます。 左側のペインで、[オンライン] > [NuGet オフィシャル パッケージ ソース] を選んで、以下を更新します。

    • ASP.NET MVC 4
    • (省略可能) jQuery、jQuery Validation、jQuery UI
    • (省略可能) Entity Framework
    • (省略可能) Modernizr
  4. ソリューション エクスプローラーでプロジェクト名を右クリックして、[プロジェクトのアンロード] を選びます。 次に、名前をもう一度右クリックして、[<プロジェクト名>.csproj の編集] を選びます。

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

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

  7. 以前のバージョンの ASP.NET MVC を使ってコンパイルされたサード パーティのライブラリをプロジェクトで参照する場合は、ルートの Web.config ファイルを開き、configuration セクションに次の 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 MVC 4 リリース候補からの主な変更点を次にまとめます。

  • コントローラーごとの構成:IControllerConfiguration を実装して独自のフォーマッタ、アクション セレクター、パラメーター バインダーを設定するカスタム属性を使って、ASP.NET Web API コントローラーの属性を設定できます。 HttpControllerConfigurationAttribute が削除されました。
  • ルートごとのメッセージ ハンドラー: 特定のルートに対する要求チェーンで最後のメッセージ ハンドラーを指定できるようになりました。 これにより、独自の (非 IHttpController) エンドポイントへのディスパッチにルーティングを使用するライドアロング フレームワークをサポートできます。
  • 進行状況の通知:ProgressMessageHandler は、アップロードされる要求エンティティとダウンロードされる応答エンティティの両方に対して、進行状況の通知を生成します。 このハンドラーを使うと、要求本文のアップロードや応答本文のダウンロードがどこまで進んだかを追跡できます。
  • コンテンツのプッシュ:PushStreamContent クラスを使うと、データ プロデューサーがストリームを使って要求または応答に (同期的または非同期的に) 直接書き込むシナリオが可能になります。 PushStreamContent は、データを受け入れる準備ができると、出力ストリームを使ってアクション デリゲートを呼び出します。 開発者は、それから必要な限りストリームに書き込み、書き込みが完了したらストリームを閉じることができます。 PushStreamContent は、ストリームが閉じられたことを検出し、基になっているコンテンツ書き出し用の非同期 "タスク" を完了します。
  • エラー応答の作成:IncludeErrorDetailPolicy に従いながら、検証エラーや例外などからのエラー情報を一貫して表すには、HttpError 型を使います。 HttpError を内容としてエラー応答を簡単に作成するには、新しい CreateErrorResponse 拡張メソッドを使います。 HttpError の内容は完全にコンテンツ ネゴシエートされます。
  • MediaRangeMapping の削除: メディアの種類の範囲は、既定のコンテンツ ネゴシエーターによって処理されるようになりました。
  • 単純型パラメーターの既定のパラメーター バインドが [FromUri] になった: 以前のリリースの ASP.NET Web API では、単純型パラメーターの既定のパラメーター バインドはモデル バインドを使っていました。 単純型パラメーターの既定のパラメーター バインドが、[FromUri] になりました。
  • アクションの選択で必須パラメーターが尊重される: ASP.NET Web API でのアクションの選択では、URI で提供されるすべての必須パラメーターが指定されている場合にのみ、アクションが選択されるようになります。 アクション メソッドのシグネチャで引数に対して既定値を指定すると、パラメーターを省略可能として指定できます。
  • HTTP パラメーター バインドのカスタマイズ: 特定のアクション パラメーターのパラメーター バインドをカスタマイズするには ParameterBindingAttribute を使い、パラメーター バインドをより広範にカスタマイズするには HttpConfigurationParameterBindingRules を使います。
  • MediaTypeFormatter の機能強化: フォーマッタで完全な HttpContent インスタンスにアクセスできるようになりました。
  • ホスト バッファリング ポリシーの選択: バッファリングを使うべきときに関するポリシーをホストで決定できるようにするには、ASP.NET Web API で IHostBufferPolicySelector サービスを実装して構成します。
  • ホストに依存しない方法でクライアント証明書にアクセスする: 要求メッセージから提供されたクライアント証明書を取得するには、GetClientCertificate 拡張メソッドを使います。
  • コンテンツ ネゴシエーションの拡張性:DefaultContentNegotiator から派生させ、必要なコンテンツ ネゴシエーションの部分をオーバーライドして、コンテンツ ネゴシエーションをカスタマイズします。
  • 406 Not Acceptable 応答の返送のサポート:excludeMatchOnTypeOnly パラメーターを true に設定して DefaultContentNegotiator を作成することで適切なフォーマッタが見つからない場合に、ASP.NET Web API で 406 Not Acceptable 応答を返送できるようになりました。
  • NameValueCollection または JToken としてのフォーム データの読み取り: URI クエリ文字列または要求本文内のフォーム データを、それぞれ ParseQueryString および ReadAsFormDataAsync 拡張メソッドを使って、NameValueCollection として読み取ることができます。 同様に、URI クエリ文字列または要求本文内のフォーム データを、それぞれ TryReadQueryAsJson および ReadAsAsync<T> 拡張メソッドを使って、JToken として読み取ることができます。
  • マルチパートの機能強化: MIME マルチパート データの種類に合わせて完全に調整された、結果を読み取ってユーザーに最適な方法で提示できる MultipartStreamProvider を記述できるようになりました。 また、MIME マルチパート本文パーツで必要な事後処理を実装で実行できる後処理ステップを、MultipartStreamProvider でフックすることもできます。 たとえば、MultipartFormDataStreamProvider の実装は、HTML フォーム データ パーツを読み取り、呼び出し元から簡単に取得できるように NameValueCollection に追加します。
  • リンク生成の機能強化:UrlHelper は、HttpControllerContext に依存しなくなりました。 HttpRequestMessage を使用できる任意のコンテキストから、UrlHelper にアクセスできます。
  • メッセージ ハンドラーの実行順序の変更: メッセージ ハンドラーは、逆順ではなく、構成された順序で実行されるようになりました。
  • メッセージ ハンドラーを接続するヘルパー: DelegatingHandler を接続し、必要なパイプラインの準備ができた HttpClient を作成できる、新しい HttpClientFactory。 また、代替内部ハンドラー (既定では HttpClientHandler) と接続したり、先頭の呼び出し元として HttpClient ではなく HttpMessageInvoker または別の DelegatingHandler 使うときに接続を行う機能も提供します。
  • ASP.NET Web 最適化での CDN のサポート: ASP.NET Web 最適化で、CDN 代替パスがサポートされるようになりました。これにより、コンテンツ配信ネットワーク上の同じリソースを指す追加の URL をバンドルごとに指定できます。 CDN のサポートにより、スクリプトとスタイル バンドルを Web アプリケーションのエンド コンシューマーに地理的に近づけることができます。 運用アプリでは、CDN を使用できないときのフォールバックを実装する必要があります。 フォールバックをテストします。
  • ASP.NET Web API のルートと構成は、テスト コードで再利用できる WebApiConfig.Register 静的メソッドに移動されました。 これまで、ASP.NET Web API のルートは、標準の MVC ルートと共に RouteConfig.RegisterRoutes に追加されていました。 テストを容易にするため、既定の ASP.NET Web API のルートと構成が、別の WebApiConfig.Register メソッドで処理されるようになりました。

既知の問題と重大な変更

  • ASP.NET MVC 4 の RC および RTM バージョンは、モバイル ビューを返す必要があるときに、キャッシュされたデスクトップ ビューを誤って返しました。

  • 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 アセンブリをアプリケーションに追加すると (たとえば、[配置可能な依存関係の追加] ダイアログで [Razor 構文を含む ASP.NET Web ページ] を選んで)、既定の 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 をインストールした後で、ASP.NET MVC 4 をインストールする必要があります。

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

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

    必要な更新

    1. ルートの Web.config ファイルに、キー webPages:Version と値 1.0.0.0 で、新しい <appSettings> エントリを追加します。

      <appSettings>
          <add key="webpages:Version" value="1.0.0.0"/>
          <add key="ClientValidationEnabled" value="true"/>
          <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
      </appSettings>
      
    2. ソリューション エクスプローラーでプロジェクト名を右クリックして、[プロジェクトのアンロード] を選びます。 次に、名前をもう一度右クリックして、[<プロジェクト名>.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) ファイルを閉じてから、プロジェクトを右クリックして [再読み込み] を選びます。

  • ASP.NET MVC 4 プロジェクトのターゲットを 4.5 から 4.0 に変更しても、EntityFramework アセンブリ参照は更新されません: ASP.NET MVC 4 プロジェクトのターゲットを 4.5 にした後で 4.0 に変更した場合、EntityFramework アセンブリへの参照は 4.5 バージョンを指したままになります。 この問題を解決するには、EntityFramework NuGet パッケージをアンインストールして再インストールします。

  • ASP.NET MVC 4 アプリケーションのターゲットを 4.5 から 4.0 に変更した後、Azure で実行したときの 403 Forbidden: ASP.NET MVC 4 プロジェクトのターゲットを 4.5 にした後で 4.0 に変更してから、Azure にデプロイした場合、実行時に 403 Forbidden エラーが発生する可能性があります。 この問題を回避するには、web.config に次のように追加します: <modules runAllManagedModulesForAllRequests="true" />

  • Razor ファイルの文字列リテラルに「''」を入力すると、Visual Studio 2012 がクラッシュします。 この問題を回避するには、文字列リテラルの終了引用符を先に入力します。

  • Internet テンプレートで "Account/Manage" を参照すると、CHS、TRK、CHT 言語では実行時エラーになります。 この問題を解決するには、ページを変更し、@User.Identity.Name<strong> タグ内の唯一の内容にして分離します。

  • Google と LinkedIn プロバイダーは、Azure Web サイト内ではサポートされていません。 Azure Web サイトにデプロイするときは、代わりの認証プロバイダーを使ってください。

  • IIS 8 Express/IIS で UriPathExtensionMapping を使うと、拡張機能を使おうとしたときに 404 Not Found エラーを受け取ります。 静的ファイル ハンドラーは、UriPathExtensionMappings を使う Web API への要求に干渉します。 この問題を回避するには、web.configで runAllManagedModulesForAllRequests=true を設定します。

  • Controller.Execute メソッドは呼び出されなくなりました。 すべての MVC コントローラーは常に非同期で実行されます。