9

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" />
4

6 に答える 6

9

根本的な問題は、バージョン 1.0.0 アセンブリがまだプロジェクトのどこかで参照されていることです。

リフレクターを使用して各アセンブリの依存関係を調べたところ、2.0.0 バージョンの system.web.mvc.dll を使用するために更新する必要がある3 つの依存プロジェクトがあることがわかりました (CodeBetter.Canvas プロジェクトから開始している場合)。

  1. スパーク。teamcity から最新バージョンの spark をダウンロードし、spark.web.mvc2.dll (system.web.mvc.dll 2.0.0 を参照) を使用します。詳細な手順へのリンク。

  2. MVCContrib。system.web.mvc.dll 2.0.0 を参照する最新バージョンの MVCContrib (ダウンロード リリースダウンロード ソース) をダウンロードします。

  3. ニンジェクトninject の最新バージョンをダウンロードし、 system.web.mvc.dll の 2.0.0 バージョンへの参照を更新した後、VS ソリューションを再コンパイルします。

ここで、プロジェクト内のこれらの依存関係のアセンブリを置き換え、必要に応じてプロジェクト参照を更新します。すべてがうまくいくはずです。

于 2009-12-05T22:10:08.773 に答える
2

最近、sparkプロジェクトをasp.net mvc 2に変換しました。Spark.Web.MvcからSpark.Web.Mvc2に切り替えたことが、あなたの書いた内容にはわかりません。

明確にするために、Spark.Web.Mvc2は、新しいSystem.Web.Mvcアセンブリで再コンパイルする必要があるプロジェクトです。

web.configからすべてのアセンブリと名前空間の参照を削除してglobal.sparkファイルに配置し、pageBaseType = "Spark.Web.Mvc2.SparkView"属性をSpark->Pagesノードに追加するまで、インテリセンスに問題がありました。 web.configにあります。

それがお役に立てば幸いです。

于 2009-12-02T18:21:06.463 に答える
1

これらは、新しい MVC 2 プロジェクトと Spark 1.1 の問題を解決するために私が行った手順です。

  1. MVC 2.0 に対してコンパイル- 参照を再確認して、MVC 1 ではなく MVC 2 にリンクしていることを確認しました。これは新しいプロジェクトだったので、これは問題ではありませんでした。

  2. System.Web.Mvc.Htmlを追加 - System.Web.Mvc.Html を Spark 構成に追加して、名前空間がすべてのビューに追加されるようにしました。

    Global.asax.cs で Application_Start

     var settings = new SparkSettings()
         .SetDebug(true)
         .SetAutomaticEncoding(true)
         .AddAssembly("Web")
         .AddNamespace("Web.Model")
         .AddNamespace("System.Collections.Generic")
         .AddNamespace("System.Linq")
         .AddNamespace("System.Web.Mvc")
         .AddNamespace("System.Web.Mvc.Html");
    

    これは、Spark View Engine ブロックの webconfig でも実行できます。

  3. 型指定されたモデルを追加する- Spark View モデルを必ず入力してください。aspx では、これは次のようにページ宣言の Inherits で行われます。

    <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master"
    Inherits="System.Web.Mvc.ViewPage<MyModelType>" %>
    

    スパークで:

    <viewdata model="MyModelType" />
    
于 2010-12-06T18:40:20.990 に答える
1

特定のバージョンを指定できるように、Global.ascx.cs ファイルではなく、web.config で System.Web.Mvc 参照を指定してみてください。

<spark>
  <compilation debug="true" defaultLanguage="CSharp">
     <assemblies>
        <add assembly="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
     </assemblies>
 </compilation>
</spark>

これにより、間違ったバージョンの MVC アセンブリがどこかから読み込まれている場合、SPARK がまったく機能しなくなります。

MVC 1.0 アセンブリが GAC にある場合は、次のようにクリアして再読み込みできます。

(Visual Studio コマンド プロンプトから)

ngen /delete System.Web.Mvc
ngen /delete System.Web.Abstractions
ngen update

お役に立てれば、

ジェフ・フレンチ

于 2009-12-01T18:52:37.843 に答える
1

最新の Spark ソースをダウンロードしたとき、MVC 2 アセンブリを使用して再構築しましたか? Spark プロジェクトの参照を置き換えましたか?

于 2009-11-28T19:27:45.483 に答える
0

上記の多くのことを試しましたが、ビューが MVC 2.0.0.0 を使用するために使用した (および MVC 1.0.0.0 を参照した) 依存 dll を取得できなかったので、ここでそれを修正しました...

Spark コードをダウンロードし、Compile メソッドの BatchCompiler.cs ファイルに次の行を追加しました。

compilerParameters.CompilerOptions = "/nowarn:1701";
于 2010-09-23T18:11:17.543 に答える