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

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

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

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

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

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

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

ドキュメント

ASP.NET MVC のドキュメントについては、次の URL で MSDN Web サイトを参照してください。

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 コミュニティのメンバーが非公式のサポートを頻繁に提供できる ASP.NET MVC フォーラム (https://forums.asp.net/1146.aspx) に投稿することもできます。

ソフトウェア要件

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 要求と応答に直接アクセスして操作します。 同じプログラミング モデルと HTTP パイプラインは、新しい HttpClient 型を介してクライアントで対称的に使用できます。
  • ルートの完全なサポート: 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 のクエリをサポートできるようにします。
  • テストの容易性の向上: 静的コンテキスト オブジェクトで HTTP の詳細を設定するのではなく、Web API アクションは HttpRequestMessageHttpResponseMessage のインスタンスで動作します。 Web API プロジェクトと共に単体テスト プロジェクトを作成して、Web API 機能の単体テストの記述をすばやく開始します。
  • コードベースの構成: ASP.NET Web API構成はコードによってのみ実行され、構成ファイルはクリーン。 提供されたサービス ロケーター パターンを使用して、拡張ポイントを構成します。
  • 制御 (IoC) コンテナーの反転のサポートの強化: ASP.NET Web APIは、依存関係リゾルバーの抽象化の向上を通じて IoC コンテナーの優れたサポートを提供します
  • セルフホスト: Web API は、ルートと Web API の他の機能の完全な機能を引き続き使用しながら、IIS に加えて独自のプロセスでホストできます。
  • カスタム ヘルプとテスト ページを作成する: 新しい IApiExplorer サービスを使用して Web API の完全なランタイム説明を取得することで、Web API のカスタム ヘルプとテスト ページを簡単に構築できるようになりました。
  • 監視と診断: ASP.NET Web APIでは、System.Diagnostics、ETW、サード パーティのログ 記録フレームワークなどの既存のログ ソリューションと簡単に統合できる軽量のトレース インフラストラクチャが提供されるようになりました。 トレースを有効にするには、 ITraceWriter 実装を指定し、Web API 構成に追加します。
  • リンクの生成:ASP.NET Web API UrlHelper を使用して、同じアプリケーション内の関連リソースへのリンクを生成します。
  • Web API プロジェクト テンプレート:新しい Web API プロジェクトを新しい MVC 4 プロジェクト ウィザードから選択すると、ASP.NET Web APIですばやく起動して実行できます。
  • 足場: [ コントローラーの追加] ダイアログを使用すると、Entity Framework ベースのモデルの種類に基づいて Web API コントローラーをすばやくスキャフォールディングできます。

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

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

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

新しいプロジェクト テンプレート ページのブラウザー ビューのスクリーンショット。

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

新しいプロジェクト テンプレート ページのデスクトップ バージョンのモバイル ブラウザー ビューのスクリーンショット。

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

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

新しいプロジェクトを開始し、モバイルおよびタブレット ブラウザー専用のサイトを作成する場合は、新しいモバイル アプリケーション プロジェクト テンプレートを使用できます。 これは、タッチ最適化 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 レイアウトが使用されます (存在する場合)。 表示モードの詳細については、「 ASP.NET MVC 4 Mobile Features」を参照してください。 DisplayModeProvider を使用するアプリケーションでは、 Fixed DisplayModes NuGet パッケージをインストールする必要があります。 ASP.NET Fall 2012 Update には、新しいプロジェクト テンプレートに Fixed DisplayModes NuGet パッケージが含まれています。 修正 の詳細については、「ASP.NET MVC 4 Mobile Caching Bug Fixedd 」を参照してください。

jQuery のモバイル機能とモバイル機能

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

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

非同期アクション メソッドを、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 Model と Table への新しいフィールドの追加」を参照してください。

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

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

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

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

バンドルと縮小

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

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

ASP.NET MVC 4 インターネット プロジェクト テンプレートの既定のテンプレートには、DotNetOpenAuth ライブラリを使用した OAuth および OpenID ログインのサポートが含まれるようになりました。 OAuth プロバイダーまたは OpenID プロバイダーの構成の詳細については、OAuth/OpenID Support for WebForms、MVC、WebPages、およびOAuth および OpenID 機能のドキュメント (ASP.NET Web ページ) を参照してください

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 パッケージの管理] を選択します。 左側のウィンドウで、 Online\NuGet 公式パッケージ ソースを選択し、次を更新します。

    • ASP.NET MVC 4
    • (省略可能) jQuery、jQuery の検証、jQuery UI
    • (省略可能)Entity Framework
    • (Optonal)Modernizr
  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 MVC 4 リリース候補からの主な変更点を以下にまとめます。

  • コントローラー構成ごと: ASP.NET Web API コントローラーは、独自のフォーマッタ、アクション セレクター、パラメーター バインダーを設定するために IControllerConfiguration を実装するカスタム属性で属性付けできます。 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 受け入れられない応答を返すサポート:excludeMatchOnTypeOnly パラメーターを true に設定して DefaultContentNegotiator を作成することで、適切なフォーマッタが見つからない場合に、ASP.NET Web APIで 406 Not Acceptable 応答を返すようになりました。
  • NameValueCollection または JToken としてフォーム データを読み取る:フォーム データは、それぞれ ParseQueryString 拡張メソッドと ReadAsFormDataAsync 拡張メソッドを使用して、URI クエリ文字列または要求本文で NameValueCollection として読み取ることができます。 同様に、それぞれ TryReadQueryAsJson 拡張メソッドと ReadAsAsync<T> 拡張メソッドを使用して、URI クエリ文字列または要求本文のフォーム データを JToken として読み取ることができます。
  • マルチパートの機能強化: これで、ユーザーに最適な方法で結果を読み取って提示できる MIME マルチパート データの種類に合わせて完全に調整された MultipartStreamProvider を記述できるようになりました。 MultipartStreamProvider で後処理ステップをフックすることもできます。これにより、実装は MIME マルチパート本文パーツで必要な後処理を実行できます。 たとえば、 MultipartFormDataStreamProvider 実装では、HTML フォーム データ パーツを読み取り、 それらを NameValueCollection に追加して、呼び出し元から簡単に取得できるようにします。
  • リンク生成の機能強化:UrlHelperHttpControllerContext に依存しなくなりました。 HttpRequestMessage を使用できる任意のコンテキストから UrlHelper にアクセスできるようになりました。
  • メッセージ ハンドラーの実行順序の変更: メッセージ ハンドラーは、逆順ではなく、構成された順序で実行されるようになりました。
  • メッセージ ハンドラーを配線するためのヘルパー:DelegatingHandlers を接続し、目的のパイプラインを準備して HttpClient を作成できる新しい HttpClientFactory。 また、代替の内部ハンドラー (既定値は HttpClientHandler) に接続したり、HttpClient の代わりに HttpMessageInvoker または別のDelegatingHandler をトップ呼び出し子として使用する場合に、その配線を行うための機能も提供します。
  • ASP.NET Web 最適化での CDN のサポート: ASP.NET Web 最適化では、CDN 代替パスがサポートされるようになりました。これにより、コンテンツ配信ネットワーク上の同じリソースを指す追加の URL をバンドルごとに指定できるようになりました。 CDN をサポートすることで、スクリプトとスタイル バンドルを Web アプリケーションのエンド コンシューマーに地理的に近づけることができます。 CDN が使用できない場合は、運用アプリでフォールバックを実装する必要があります。 フォールバックをテストします。
  • テスト コードで再利用できる WebApiConfig.Register 静的メソッドに移動されたルートと構成を ASP.NET Web APIします。 ASP.NET Web APIルートは、RouteConfig.RegisterRoutes に標準の MVC ルートと共に追加されました。 テストを容易にするために、既定の 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 のサイド バイ サイド インストール用に mvc 4 ASP.NET インストールしようとすると、NuGet パッケージ マネージャーのインストールが失敗します。 Visual Studio 2010 と Visual Web Developer 2010 を ASP.NET MVC 4 と並行して実行するには、両方のバージョンの Visual Studio が既にインストールされた後 ASP.NET MVC 4 をインストールする必要があります。

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

  • MVC 4 ASP.NET インストールすると、MVC 3 RTM アプリケーション ASP.NET 中断されます。 RTM リリース (ASP.NET MVC 3 ツール更新プログラム リリースではなく) で作成された MVC 3 アプリケーション ASP.NET、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. ソリューション エクスプローラーで、プロジェクト名を右クリックし、[プロジェクトのアンロード] を選択します。 もう一度名前を右クリックし、[ 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) ファイルを閉じ、プロジェクトを右クリックして [再読み込み] を選択します。

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

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

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

  • インターネット テンプレートで "アカウント/管理" を参照すると、CHS、TRK、CHT 言語の実行時エラーが発生します。 この問題を解決するには、強い>タグ内の唯一のコンテンツとして配置することで、@User.Identity.Name を分離するようにページを<変更します。

  • Google および LinkedIn プロバイダーは、Azure Web サイト内ではサポートされていません。 Azure Web サイトにデプロイするときは、代替認証プロバイダーを使用します。

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

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