Pergunta

Estou trabalhando com um projeto ASP.NET MVC que foi originalmente iniciado a partir do CodeBetter.Canvas Projeto - e estou tentando me mudar para asp.net MVC 2. Atualizei com sucesso meu projeto usando Ferramenta de atualização de Eilon, mudou -se para o VS2010 (embora ainda não fosse .NET 4).

O problema que estou tendo atualmente está ocorrendo apenas ao usar o mecanismo de visualização de faísca. Aqui está o bit relevante de código em minha visualização.Spark (totalmente digitado):

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

O mesmo pedaço de código Funciona muito bem Se eu usar uma exibição .aspx:

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

O principal ponto aqui é "Editorfor" é novo no ASP.NET MVC 2 e, no meu projeto, posso usar esse ajudante em uma visualização ASPX, mas não uma visualização de faísca.

eu tentei Atualizando a faísca para usar o MVC 2 (assim como o MVCContrib e o Ninject), pensando que talvez fosse um daqueles que estavam surtando - mas até agora não há sorte - ainda estou vendo o mesmo comportamento.

Aqui está a mensagem de erro completa que é lançada na classe BatchCompiler da Spark.

A compilação de visão dinâmica falhou. (0,0): AVISO CS1701: Assumindo a Referência da Assembléia 'System.Web.mvc, versão = 1.0.0.0, Culture = neutro, publicKeyToken = 31BF3856AD364E35' Matches 'System.Web.MVC, versão = 2,0.0.0, Cultura = neutral' ' , PublicKeyToken = 31BF3856AD364E35 ', pode ser necessário fornecer política de tempo de execução C: inetpub wwwroot [myProject] codebetter.canvas.web visualizações [myentity] view.spark (9,16): erro cs1061:' systems.w. .Mvc.htmlhelper 'não contém uma definição para' editor para 'e nenhum método de extensão' editor 'para aceitar um primeiro argumento do tipo' System.web.mvc.htmlhelper 'pode ser encontrado (você está perdendo uma diretiva ou referência de montagem ou montagem ?)

Aqui está o código relacionado ao Spark no meu 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);

Além disso, estou referenciando o System.web.mvc.html na minha visão de faísca, como mencionado em outra resposta.

<use namespace="System.Web.Mvc.Html" />
Foi útil?

Solução

A questão subjacente é que uma Assembléia da versão 1.0.0 ainda está sendo referenciada em algum lugar do projeto.

Usando refletor Para examinar as dependências de cada assemblies, eu encontrei (se você está começando com o projeto codebetter.canvas), existem três Projetos dependentes que precisam ser atualizados para usar a versão 2.0.0 do System.web.mvc.dll

  1. Fagulha. Faça o download da versão mais recente do Spark do TeamCity e use o Spark.web.mvc2.dll (que referencia o System.web.mvc.dll 2.0.0) Link para instruções detalhadas.

  2. MVCContrib. Baixe a versão mais recente do MVCContrib (Baixe o lançamento, Baixar fonte) que referenciam o System.web.mvc.dll 2.0.0.

  3. Ninject. Baixe a versão mais recente do Ninject e recompilar a solução VS após atualizar a referência à versão 2.0.0 do System.web.mvc.dll

Agora, substitua as montagens dessas dependência em seu projeto e atualize as referências do projeto, se necessário. Tudo deve estar bem.

Outras dicas

Recentemente, converti meu projeto Spark no ASP.NET MVC 2. Não vejo no que você escreveu que mudou de usar o Spark.web.mvc para Spark.web.mvc2.

Só para deixar claro, Spark.Web.MVC2 é o projeto que precisa ser recompilado com o novo sistema.web.mvc Assembly.

Eu tive problemas com o Intellisense até remover todas as referências de montagem e namespace do web.config e colocá-las no arquivo global.spark e adicionou o atributo PageBaseType = "Spark.Web.MVC2.SparkView" ao nó Spark-> Pages no web.config.

Espero que tudo isso ajude.

Quando você baixou fontes mais recentes, você a reconstruiu usando os assemblies do MVC 2? Você substituiu referências no projeto Spark?

Tente especificar a referência System.web.mvc no arquivo web.config em vez do arquivo global.ascx.cs para que você possa especificar a versão específica:

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

Isso deve impedir que a Spark funcione se a versão errada da montagem do MVC estiver sendo carregada de algum lugar.

Se a montagem do MVC 1.0 estiver no GAC, você poderá limpar e recarregá -lo da seguinte forma:

(do prompt de comando do Visual Studio)

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

Espero que isto ajude,

Jeff French

Estas são as etapas que tomei para resolver o problema com um novo projeto MVC 2 e Spark 1.1:

  1. Compilar contra o MVC 2.0 - Verifiquei as referências para garantir que eu estava vinculando ao MVC 2 e não ao MVC 1. Como esse era um novo projeto, esse não era um problema.

  2. Adicionado system.web.mvc.html - Adicionei System.Web.MVC.HTML à configuração do Spark, para garantir que o namespace fosse adicionado a todas as visualizações.

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

    Isso também pode ser feito no WebConfig no bloco de mecanismo Spark View.

  3. Adicione o modelo digitado - Certifique -se de digitar o modelo de visualização de faísca. No ASPX, isso é feito com os herdos na declaração da página, como este:

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

    em Spark:

    <viewdata model="MyModelType" />
    

Eu tentei muitas coisas mencionadas acima, mas simplesmente não consegui uma DLL dependente de que minhas opiniões usadas (e também referenciadas MVC 1.0.0.0) para usar o MVC 2.0.0.0, então aqui está o que consertou para mim ...

Baixei o código Spark e adicionei a seguinte linha ao arquivo BatchCompiler.cs no método de compilação:

compilerParameters.CompilerOptions = "/nowarn:1701";
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top