シナリオは次のとおりです。MvcWebRazorHostFactoryを拡張したので、ビルド時に追加のビュー マジックを少し実行できます。正確な魔法は関係ありません。
~\Views\Web.config への登録は次のようになります。
<host factoryType="StackExchange.MyNamespace.MyFactory, StackExchange.MyNamespace" />
プロジェクトには適切なアセンブリがあり、アセンブリのコピーが \lib フォルダーにあり、期待どおりに \bin にコピーされていることを確認しました。さらに、実際のビュー マジックはビューの構築時に発生するため、ASP.NET 自体が実際にすべてを検索します。
Visual Studio (2012) の Razor Syntax Highlightingで機能しないもの。
上記は、構文の強調表示が失敗する方法のスナップショットです。原則として、名前空間にないものは直接@using
見つけることができず (したがって、赤い波線の下線が引かれます)、@model
ディレクティブは機能しません。これは、Web.config に自動的に含まれる名前空間を取得する際に問題があることを示しています。
エラーのツールチップは、@model
「名前 'モデル' は現在のコンテキストに存在しません」です。
試行錯誤の結果、根本的な原因を上記のhost
構成セクションに絞り込みましたが、Razor (たとえば、カスタムのpageBaseType ) に関して他にも微調整がありますが、すべてを壊すのはその 1 行です。
これまでに試したこと:
- アセンブリに厳密な名前を付ける
- アセンブリを GAC にインストールする
- このページは、これが必要であることを示唆しています。
私の ~\Views\Web.config に厳密な名前を付けると、最終的に次のようになりました。
<host factoryType="StackExchange.MyNamespace.MyFactory, StackExchange.MyNamespace, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b61d663b67b05bd2" />
「gacutil -l」を使用して、GAC に対してバージョン、カルチャ、および PublicKeyToken を確認しました。
私のボックスには大量の.NETバージョンがあるため、もう1つの考えられる障害点はGAC自体であると思います。アセンブリと Web サイトの両方が .NET 4.5 で構築されています (どちらも MVC 4、Razor 2 などを参照しています)。gacutil
デバッグ中に使用してきた へのパスはProgram Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\gacutil.exe
.
根本原因を選別しているときに、ビューの最初の行に「StackExchange.MyNamespace.MyFactory が見つかりませんでした」というエラー メッセージが表示されることがあります。下線は「その他のエラー」の色 (VS2012 ダーク テーマでは紫) になります。それを確実に再現できなかったので、スクリーンショットを取得できません。
私の質問は、Visual Studio (再び 2012) でカスタム ホスト ファクトリを使用して Razor ビューを適切に処理する方法を知っている人はいますか?
私の現在の修正の最善の推測は、本当にハックな Web.config の置き換えを行うことです。そのため、編集中に 1 つの構成を使用し、デバッグ中に別の構成を使用します。しかし、本当にそのアイデアのファンではありません。
これは機能するはずであり、Visual Studio は必要なものを見つけるのに苦労しているようです。私はそれが何であるかを知りません。
いくつかの実験の後、更新します。
<host pageFactoryType="...">
バニラの MVC4 アプリケーションを含めて、より多くの開発者が.
ReSharperライセンスを購入するという回避策が見つかりました。素晴らしい(または安価な)回避策ではありませんが、それでも回避策はあります。
ReSharper をインストールすると、すべてが 1 つの注意事項で機能します。<pages pageBaseType="...">
カスタム登録がある場合、タイプは同じプロジェクトにある必要@this.Model
があります。そうしないと、参照用のインテリセンスが得られません(@model
ただし、ディレクティブは機能します)。
その他の更新。
no-op HostFactory (MvcRazorHostFactory を拡張するが、メソッドをオーバーライドせず、他のコードを含まないもの) は、厳密な名前を付けて GAC にインストールすると正常に動作するように見えます。以前にテストしたときに間違ったGACを使用していたと思いますが、明示的にx64 gacutilを使用して動作させることができました.
問題は、特定のホスト ファクトリの何が問題なのかを突き止めることです。詳細は判明次第お知らせします。