22

asp.net mvc 3 でのマルチプロジェクト エリアのサポートについて考えている人はいますか? mvc 2 で将来のステータスに低下したため、まだ含まれていない場合は、 MvcContribを介して ASP.Net MVC ポータブル エリアを期待する必要があります。あなたの経験を共有できますか?

大規模なアプリケーションを管理するための推奨される方法は何ですか? MEFについて読みました。どのようなシナリオで MEF が推奨されますか?

4

2 に答える 2

15

私は Microsoft で ASP.NET MVC の開発リーダーを務めています。

ASP.NET MVC 3 にマルチ プロジェクト領域を含める計画はありません。

それまでの間、MvcContrib のソリューションがおそらく最善の策です。MVC Futures のダウンロードには、元のマルチ プロジェクト エリア機能の古いバージョン (おそらく半機能のみ) が含まれています。その完全なソース コードも利用できるため、ニーズに合わせてカスタマイズされたソリューションを構築できる場合があります。

于 2010-10-19T17:18:34.727 に答える
6

同じ構造にする必要があるので、エリアを別々のプロジェクトにする方法を見つけました。コードの変更は必要ありません。ほんの少しの構成作業を行うだけです。

これについてブログエントリを作成するつもりですが、基本的な手順は次のとおりです。

単一の MVC アプリケーション プロジェクトがあり、これが "シェル" アプリになるとします。

  1. シェル プロジェクトを右クリックし、[領域を追加...] をクリックします。エリア名を入力します。これにより、領域を含む Areas フォルダーが作成されます。(これは 100% 必要というわけではありませんが、"Areas" フォルダーが必要であり、アプリケーションの XXXXAreaRegistration クラスを盗むことができます。)

  2. 領域に合わせて、ソリューションに新しい MVC3 空のプロジェクトを作成します。XXXXAreaRegistration.cs ファイルを新しいプロジェクトに移動し、必要に応じて名前空間を調整します。

  3. テンプレート ウィザードが追加したareasフォルダーの下のフォルダーを削除します。

  4. 新しいプロジェクトの web.config を変更し、接続文字列と認証、メンバーシップ、プロファイル、ロールマネージャーのセクションを削除します。web.config は実際には必要ありませんが、それがないとかみそりのインテリセンスは機能しません。

  5. エリアの名前をエイリアスとしてシェル プロジェクトの「エリア」フォルダーに仮想ディレクトリを作成し、それを「エリア」プロジェクトにポイントします。これには IIS または IIS Express を使用する必要があります。私はIISを使用しています。IIS Express では、構成ファイルを変更する必要があります。ScottGu には、これを行う方法に関するブログ エントリがあったと思います。

  6. "area" プロジェクトでビルド後のイベントを作成して、dll を "shell" プロジェクトの bin フォルダーにコピーします。私のビルド イベントは次のとおりです。 copy $(TargetDir)\$(TargetFileName) $(SolutionDir)\ShellProjectName\bin\$(TargetFileName)

  7. シェル web.config で、"area" プロジェクトを System.Web/Assemblies セクションに追加します。

6/7 の代わりに、「area」プロジェクトを「shell」プロジェクトで参照するだけで、同様に機能します。ただし、毎回すべての「エリア」dll を展開する必要があります。リフレクションまたは MEF を使用して、アプリの起動時に「領域」アセンブリをアプリ ドメインに追加するために、何らかのプローブ コードを実行する予定です。

また、ルーティングを編集し、シェル アプリとエリア アプリの両方で名前空間フィルターを追加することもできます。このようにすると、sell アプリと area アプリの間で重複するコントローラー名が競合することを心配する必要がなくなります。

それはそれについてです。正式なブログ エントリを投稿したら、ここにリンクを追加することを忘れないようにします。

誰かが興味を持っている場合は、 http://bob.archer.net/content/aspnet-mvc3-areas-separate-projectsでこれをどのように行っているかをブログにしました。

于 2011-08-23T20:32:44.063 に答える