2009-11-26 49 views
9

我正在使用最初从CodeBetter.Canvas项目启动的ASP.NET MVC项目 - 我试图转移到ASP.NET MVC 2.我成功升级我的项目使用Eilon's upgrade tool,转移到VS2010(虽然还没有到.NET 4)。在火花视图引擎中使用asp.net mvc 2功能

我目前遇到的问题只发生在使用火花视图引擎时。这里是代码我View.spark(强类型)的相关位:

${Html.EditorFor(e => e)} 

的代码作品就好了相同的位,如果我用一个.aspx视图:

<%= Html.EditorFor(e => e) %> 

的这里的主要观点是“EditorFor”在ASP.NET MVC 2中是新的,在我的项目中,我可以在ASPX视图中使用该助手,但不能使用Spark视图。

我试过upgrading Spark to use MVC 2(以及MvcContrib和Ninject),觉得也许这是一个吓坏了 - 但到目前为止没有运气 - 我仍然看到相同的行为。

以下是Spark的BatchCompiler类中引发的完整错误消息。

动态视图编译失败。 (0,0):警告CS1701:假设 集引用 'System.Web.Mvc, 版本= 1.0.0.0,文化=中性 公钥= 31bf3856ad364e35' 匹配“System.Web.Mvc, 版本= 2.0 .0.0,Culture = neutral, PublicKeyToken = 31bf3856ad364e35',you may need to provide runtime policy c:\ inetpub \ wwwroot [myproject] \ CodeBetter.Canvas.Web \ Views [MyEntity] \ View.spark(9,16 ): 错误CS1061: “System.Web.Mvc.HtmlHelper”不 包含关于“EditorFor” 定义和没有扩展方法“EditorFor” 接受 类型“的第一个参数System.W eb.Mvc.HtmlHelper”可能是 (是否缺少using 指令或程序集引用?)

这里是我的Global.asax星火相关的代码:

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); 

而且,我在我的spark视图中引用System.Web.Mvc.Html,如in another SO answer所述。

<use namespace="System.Web.Mvc.Html" /> 
+0

我想这里真正的问题是,我误以为版本我正在使用的MVCContrib的版本是使用system.web.mvc.dll的2.0.0版 - 它不是!扯淡!更新之后,spark和ninject - 它的工作原理! – 2009-12-05 22:11:46

回答

9

潜在的问题是版本1.0.0程序集仍在项目中某处引用。

使用reflector检查每个组件的依赖,我发现(如果你已经从CodeBetter.Canvas项目)有需要被更新为使用2.0.0版本的System.Web的相关项目。 mvc.dll

  1. 星火。从TeamCity的下载火花的最新版本 和使用 spark.web.mvc2.dll(引用 System.Web.Mvc.dll程序2.0.0)Link to detailed instructions.

  2. MVCContrib。下载引用 system.web.mvc.dll 2.0.0的MVCContrib(download release,download source)的最新版本 。

  3. NinjectDownload the latest version of ninject并重新编译VS解决方案 更新参考2.0.0版本 System.Web.Mvc.dll程序

的现在后,在您的项目替换这些依赖的组件和在必要时更新项目引用。一切都会好的。

+0

谢谢伊恩,我遇到了同样的问题,并按照您的方法修复。有一个程序集引用了system.web.mvc.dll v1.0。 – wenqiang 2010-06-01 14:06:03

1

当您下载最新的Spark源代码时,是否使用MVC 2程序集重建了它?您是否替换Spark项目中的引用?

+0

是的 - 我已经在我的问题中重新提到了“升级到最新版本的Spark”到“升级Spark使用MVC 2”的句子,以澄清我的意思。我用MVC 2引用重新编译了Spark源代码,并将生成的程序集合并到我的MVC项目中,并更新了它的引用。错误信息没有变化。 我也看过我的项目在Reflector中使用的程序集,以验证它们是否引用System.Web.Mvc 2.0.0.0版。 – 2009-11-29 00:28:04

+0

您是否通过模型查看?你是否定义了“”? – LukLed 2009-11-29 00:38:22

+0

这是我的观点的全部内容: <可视数据模型= “实体”/> <使用命名空间= “System.Web.Mvc.Html”/>

实体

名称

$ {Model.Name}

$ {Html.EditorFor(E => E)} Back 2009-11-29 00:45:54

1

尝试specifiying在web.config,而不是Global.ascx.cs文件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> 

这应该防止SPARK从工作所有如果从某个地方加载MVC程序集的错误版本。

如果MVC 1。0大会是在GAC可以清除和如下重新装入:

(从Visual Studio命令提示符)

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

希望这有助于

杰夫法国

+1

我在对System.Web以下>我的web.config的组件部分 - 是足够了吗? <添加组件=“System.Web.Mvc,版本= 2.0.0.0,文化=中性公钥= 31BF3856AD364E35” />如果没有,你能就如何/为什么到部分添加到web.config详细点吗? – 2009-12-01 23:23:09

+2

部分添加到web.config是指定设置的备用方法。它等同于你的Global.asax文件中的内容(例如:新的SparkSettings()中的var设置...)。我建议将设置移动到web.config 部分的原因是,您可以指定强大会名称并键入,而不仅仅是告诉spark来查找System.Web.Mvc。另请注意,除了已经在Global.asax文件中指定的名称空间引用外,这是spark中的程序集引用。 – 2009-12-02 20:33:18

+0

谢谢杰夫的澄清。这是非常有用的,但它并没有直接解决我的问题(我不得不搜索并销毁所有对旧版本system.web.mvc程序集*的引用)。你说得对,如果你遵循这个步骤,如果引用1.0版本的system.web.mvc.dll,它会杀死所有的火花。 – 2009-12-05 22:13:28

2

我最近转换我的spark项目到asp.net mvc 2.我没有看到你写的内容,你已经从使用Spark.Web.Mvc切换到Spark.Web.Mvc2。

需要明确的是,Spark.Web.Mvc2是需要使用新的System.Web.Mvc程序集重新编译的项目。

我有intellisense的问题,直到我从web.config中删除所有程序集和名称空间引用,并将它们放在global.spark文件中,并已将pageBaseType =“Spark.Web.Mvc2.SparkView”属性添加到Spark - > web.config中的Pages节点。

希望任何帮助。

+0

感谢您的信息,我仔细检查了最新版本的Spark实际上包含引用system.web.mvc.dll v 2.0.0的Spark.Web.Mvc2.dll。我能够在我的项目中成功地使用它,但我仍然错误地忽略了其他地方对v1.0.0的其他参考! – 2009-12-05 22:16:54

0

我尝试了很多上面提到的东西,但不能得到一个依赖dll,我的意见使用(也引用MVC 1.0.0.0)使用MVC 2.0.0.0,所以这里是什么修复了我...

我下载了星火代码并添加以下行BatchCompiler.cs文件编译方法:

compilerParameters.CompilerOptions = "/nowarn:1701"; 
1

这些都是我带着一个新的MVC 2来解决问题的步骤项目和Spark 1。1:

  1. 编译对MVC 2.0 - 我仔细检查了引用,以确保我被链接到MVC 2和MVC不是1。由于这是一个新的项目,这是不是一个问题。

  2. 新增System.Web.Mvc.Html - 我加System.Web.Mvc.Html到星火配置,以确保该命名空间加入到所有的意见。

    在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"); 
    

    这也可以在星火视图引擎块webconfig完成。

  3. 添加打字模型 - 确保输入了Spark View模型。在ASPX这是在页面声明与继承完成,像这样:

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

    在星火:

    <viewdata model="MyModelType" /> 
    
相关问题