ここでは、MvcWebRazorHostFactoryを拡張してビルド時に余分なビューを行うことができます。正確な魔法は関係ありません。私の〜\ビューでカスタムホストでRazorの構文を強調表示するVisual Studioを入手するfactoryType
登録\のWeb.configはそうのようになります。
<host factoryType="StackExchange.MyNamespace.MyFactory, StackExchange.MyNamespace" />
あり\ libフォルダ内のアセンブリのコピーは、プロジェクト内の適切なアセンブリにだ、と私はしました期待どおりに\ binにコピーされていることを確認しました。さらに、実際のビューマジックは、ビューが作成されるときにが発生するので、ASP.NET自体が実際にすべてを見つけるようになります。
Visual Studio(2012)のRazorで動作しないもの構文ハイライト。上記
シンタックスハイライトが失敗したかのスナップショットです。原則として、名前空間に直接ないものは@using
'dが見つかりません(したがって、赤い波状の下線が引かれます)。@model
ディレクティブは機能しません。これは、Web.configのautomatically included namespacesに問題があることを示しています。
@model
のエラーのヒントは、「現在のコンテキストには名前のモデルが存在しません」というメッセージが表示されます。
試行錯誤を経て、上記のhost
設定セクションの根本的な原因を絞りましたが、Razor(カスタムpageBaseTypeなど)の周りにはいくつかの調整がありますが、それはすべてを破るその1行です。
物事私がこれまで試してみた:
- 強いが、これは必要なことでGAC
- This pageヒントにアセンブリーの取り付けアセンブリ
- に名前を付けます。
強く名前の私の〜\は\ 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)を取得する方法を知っているんですか?
修正中の私の現在の最高の推測は、編集中に1つの設定とデバッグ中に1つの設定を持つように、いくつかの本当にハックなWeb.configの置き換えを行っています。本当にそのアイデアのファンではありません。
これはうまくいくはずですが、Visual Studioはただ必要なものを見つけるのに苦労しているようです。私はそれが何であるか分かりません。
さらにいくつかの実験を行ってから更新します。
バニラMVC4アプリケーションを含む<host pageFactoryType="...">
であることを再現する開発者が増えています(上記の例は、明らかにStackOverflowソリューションの一部です)。
私たちは回避策を見つけました。それはReSharperのライセンスを購入することです。偉大な(または安い)回避策ではなく、少ないものの周りの仕事。
ReSharperをインストールすると、すべてが1つの注意書きで動作します。カスタム<pages pageBaseType="...">
の登録がある場合、タイプはである必要があります。@this.Model
の参照ではインテリセンスを得られません(@model
ディレクティブは機能します)。
その他のアップデート。
はノーオペレーションのHostFactory(MvcRazorHostFactoryを拡張するが、任意のメソッドをオーバーライドしたり、他のコードが含まれていない1)のように見えます正常に動作あなた厳密な名前をし、GACにインストール場合。私はそれを以前のテストで間違ったGACを使用していたと信じていましたが、(いくつかの外部からの突発的な結果で)明示的にx64 gacutilを使って動作させることができました。
問題は、私の特定のホストファクトリで何が問題なのかを把握することです。彼らが発見されるにつれて詳細が来る。