8

さて、次のデータで何が起こっているのか少し混乱しています。

アプリケーションには次の構造があります。

  • Portal.Web - 基本的にすべてのビュー、スクリプト、css、および HTML ヘルパー拡張メソッドを含む MVC 3 Web アプリ
  • Portal.Core - 基本的にビジネス オブジェクトであるクラス ライブラリです。すべてのモデルがこのプロジェクトに含まれています。
  • Portal.Data - NHibernate 構成と DTO クラスを含む別のクラス ライブラリ。

使用方法は次のとおりです。コントローラーでは、Portal.Core にあるモデルを呼び出します。このモデルは、Portal.Data を呼び出すことによって生成されます。したがって、基本的に Web はデータを見ることができません。

キャッチは次のとおりです。たとえば、コントローラーで、次のように Client という新しい DTO オブジェクトをインスタンス化しようとするとします。

var client = new Client();

クライアントが何であるかがわからず、 using を指定してもうまくいかないことが予想されます。それはいいです。

しかし、ビューでまったく同じ行を実行しようとすると、Resharper は使用をビューに追加し、その後は問題なく、プロジェクトが実行され、ビューで DTO クラスを使用できます

それで問題は、これはなぜですか?私は後輩がビューで DTO クラスを使用するのを止めようとしているので、意図的に Web のデータ プロジェクトへの参照を削除しましたが、まだクラスを使用できます。誰かが光を当てることができますか?

4

1 に答える 1

2

ASPXビューとRazorビューで同じテストを実行しました。ASPXビューでの参照Clientは失敗しますが、Razorビューでは機能します。アプリケーションを要求すると、ビューはその場でコンパイルされるので、「C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP.NETFiles\portal.web」にあるいくつかのフォルダーを確認しました。アセンブリへのcmdlineファイル参照は、ビューのコンパイル時に明示的に追加されます。

かみそりのビューをコンパイルするプロセスは、binフォルダー内のすべてのアセンブリへの参照を追加するようです。ただし、ASP.NET MVCのソースを見ると、これを確認することはできません。

したがって、私が得ることができる唯一の結論は、それがRazorViewEngineを使用することの副作用であるということです。

そうは言っても、web.configをスキャンして、アセンブリ要素を使用して含まれているかどうかを確認することをお勧めします。

于 2012-04-06T07:58:45.013 に答える