CodeBetter.Canvasプロジェクトから最初に開始されたASP.NET MVC プロジェクトを使用しています。ASP.NET MVC 2 に移行しようとしています。Eilon のアップグレード ツールを使用してプロジェクトを正常にアップグレードし、 VS2010 に移行しました (ただし、 .NET 4 にはまだ対応していません)。
私が現在抱えている問題は、spark ビュー エンジンを使用している場合にのみ発生しています。View.spark の関連するコードは次のとおりです (厳密に型指定されています)。
${Html.EditorFor(e => e)}
.aspx ビューを使用すると、同じコードが問題なく動作します。
<%= Html.EditorFor(e => e) %>
ここでの「EditorFor」の重要なポイントは、ASP.NET MVC 2 の新機能であり、私のプロジェクトでは ASPX ビューでそのヘルパーを使用できますが、Spark ビューでは使用できません。
MVC 2 (および MvcContrib と Ninject) を使用するように Spark をアップグレードしようとしましたが、おそらくおかしくなったものの 1 つであると考えましたが、今のところ運が悪く、まだ同じ動作が見られます。
以下は、Spark の BatchCompiler クラス内からスローされる完全なエラー メッセージです。
動的ビューのコンパイルに失敗しました。(0,0): 警告 CS1701: アセンブリ参照 'System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' が 'System.Web.Mvc, Version=2.0.0.0, Culture=neutral' と一致すると仮定、PublicKeyToken=31bf3856ad364e35'、ランタイム ポリシーを指定する必要がある場合があります c:\inetpub\wwwroot[myproject]\CodeBetter.Canvas.Web\Views[MyEntity]\View.spark(9,16): error CS1061: 'System.Web .Mvc.HtmlHelper' には 'EditorFor' の定義が含まれておらず、タイプ 'System.Web.Mvc.HtmlHelper' の最初の引数を受け入れる拡張メソッド 'EditorFor' が見つかりませんでした (using ディレクティブまたはアセンブリ参照がありませんか? ?)
Global.asax の Spark 関連のコードは次のとおりです。
var settings = new SparkSettings()
.AddNamespace("System")
.AddNamespace("System.Collections.Generic")
.AddNamespace("System.Web.Mvc")
.AddNamespace("System.Web.Mvc.Html")
.AddNamespace("MvcContrib.FluentHtml")
.AddNamespace("CodeBetter.Canvas")
.AddNamespace("CodeBetter.Canvas.Web")
.SetPageBaseType("ApplicationViewPage")
.SetAutomaticEncoding(true);
#if DEBUG
settings.SetDebug(true);
#endif
var viewFactory = new SparkViewFactory(settings);
ViewEngines.Engines.Add(viewFactory);
また、別の SO answer で述べたように、spark ビューで System.Web.Mvc.Html を参照しています。
<use namespace="System.Web.Mvc.Html" />