Использование asp.net особенности mvc 2 с двигателем spark view

Я работаю с ASP.NET проект MVC, который был первоначально запущен из CodeBetter.Холст project - и я пытаюсь перейти к ASP.NET MVC 2. Я успешно обновил свой проект, используя инструмент обновления Эйлона, переехал в VS2010 (хотя еще не в .NET 4).

проблема, с которой я сейчас сталкиваюсь, возникает только при использовании Spark view engine. Вот соответствующий кусок кода на мой взгляд.Искра (сильно набрал):

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

тот же кусок кода работает если я использую .aspx view:

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

главным моментом здесь является "EditorFor" является новым в ASP.NET MVC 2 и в моем проекте я могу использовать этот помощник в представлении ASPX, но не в представлении Spark.

Я пробовал обновление Spark для использования MVC 2 (а также MvcContrib и Ninject), думая, что, возможно, это был один из тех, кто волновался - но пока не повезло - я все еще вижу то же самое поведение.

вот полное сообщение об ошибке, которое выбрасывается из класса BatchCompiler Spark.

динамическая компиляция не удалось. (0,0): предупреждение CS1701: если предположить, система "справочник по сборке".Сеть.В MVC, Версия=1.0.0.0, культуры=нейтральный, Значения PublicKeyToken=31bf3856ad364e35' система совпадений.Сеть.В MVC, Версия=2.0.0.0, культуры=нейтральный, PublicKeyToken=31bf3856ad364e35', вы может потребоваться предоставить политику выполнения c:inetpubwwwroot [myproject]CodeBetter.Холст.WebViews[MyEntity]View.Искра(9,16): ошибка CS1061 : - Система.Сеть.В MVC.HtmlHelper' не содержит определение для 'в' а не метод расширения 'в' принимающий первый аргумент типа - Система.Сеть.В MVC.HtmlHelper' может быть найден (отсутствует помощью директива или ссылка на сборку?)

вот код, связанный с 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);

кроме того, я ссылок Система.Сеть.В MVC.Html в моем представлении spark, как упоминалось в другом, так что ответ.

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

6 ответов


основная проблема заключается в том, что сборка версии 1.0.0 по-прежнему упоминается где-то в проекте.

используя отражатель чтобы изучить зависимости каждой сборки, я нашел (если вы начинаете с CodeBetter.Холст проекта) есть три зависимые проекты, которые необходимо обновить для использования версии 2.0.0 системы.сеть.в MVC.dll файлы

  1. Искра. Скачать последнюю версию искры от teamcity и использовать искра.сеть.mvc2.dll (какие ссылки система.сеть.в MVC.dll 2.0.0)ссылка на подробную инструкцию.

  2. MVCContrib. Скачать последнюю версию из MVCContrib (скачать выпуск, скачать источник), который ссылается на система.сеть.в MVC.DLL-файл 2.0.0.

  3. Ninject. скачать последнюю версию ninject и перекомпилировать решение VS после обновление ссылки на 2.0.0 версия системы.сеть.в MVC.dll файлы

теперь замените сборки этих зависимостей в своем проекте и при необходимости обновите ссылки на проект. Все должно быть хорошо.


недавно я преобразовал свой проект spark в asp.net mvc 2. Я не вижу в том, что вы написали, что вы переключились с использования Spark.Сеть.Mvc для Искры.Сеть.Mvc2.

просто для ясности, Искра.Сеть.Mvc2-это проект, который необходимо перекомпилировать с новой системой.Сеть.Сборка Mvc.

У меня были проблемы с intellisense, пока я не удалил все ссылки на сборки и пространства имен из интернета.config и поместите их в глобальный.файл spark и добавил pageBaseType= " Spark.Сеть.Mvc2.Атрибут "SparkView" для узла Spark->Pages в интернете.конфиг.

надеюсь, что это помогает.


когда вы загрузили новейшие источники Spark, вы перестроили его с помощью сборок MVC 2? Вы заменили ссылки в проекте Spark?


попробуйте указать систему.Сеть.Ссылка Mvc в интернете.config вместо глобального.ascx вносятся.cs файл, так что вы можете указать конкретную версию:

<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

надеюсь, что это помогает,

Джефф Французский


Это шаги, которые я предпринял для решения проблемы с новым проектом MVC 2 и Spark 1.1:

  1. компиляция против MVC 2.0 - Я дважды проверил ссылки, чтобы убедиться, что я ссылаюсь на MVC 2, а не MVC 1. Поскольку это новый проект, это не было проблемой.

  2. Добавлена Система.Сеть.В MVC.HTML-код - я добавил систему.Сеть.В MVC.Html для конфигурации Spark, чтобы убедиться, что пространство имен было добавлено ко всем просмотр.

    В Глобальном.асакс.в 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 в блоке двигателя Spark View.

  3. добавить типизированную модель - убедитесь, что вы ввели модель Spark View. В aspx это делается с наследует в объявлении страницы, как это:

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

    в СПАРК:

    <viewdata model="MyModelType" />
    

Я пробовал много вещей, упомянутых выше, но просто не мог получить зависимую dll, которую мои представления использовали (а также ссылались на MVC 1.0.0.0), чтобы использовать MVC 2.0.0.0, так что вот что исправил его для меня...

Я загрузил код Spark и добавил следующую строку в BatchCompiler.cs-файл в методе компиляции:

compilerParameters.CompilerOptions = "/nowarn:1701";