Получение System.Web.Optimization для работы в бритвенном представлении в библиотеке классов

Я создаю модульное приложение MVC4, где каждый модуль (= область) представляет собой библиотеку классов. Модели и контроллеры компилируются в .dll, представления копируются в соответствующую папку. Во время выполнения все работает нормально. Во время разработки остается одна досадная проблема: при редактировании представления Razor в библиотеке классов Visual Studio не распознает пространство имен System.Web.Optimization.

The name "Styles" does not exist in the current context.
The name "Scripts" does not exist in the current context.

Пробовал добавить сборку в раздел system.web/compilation в корень и во внутренний web.config:

<add assembly="System.Web.Optimization, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />

Пробовал и без конкретной версии. Оба метода не решили проблему, но вызвали ошибку времени выполнения asp.net (видимую в первой строке представления бритвы):

Could not load file or assembly 'System.Web.Optimization, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.

Сборка упоминается в проекте, и для параметра «Копировать локально» установлено значение «Истина». Он также добавлен как пространство имен в разделе конфигурации бритвы.

Я подозреваю, что это общая проблема, с которой я столкнусь в других сборках в будущем.

Редактировать: я выполнил общую настройку, чтобы Intellisense работал в режиме бритвы в библиотеке классов. Пока все работает, за исключением того, что VS2010 не распознает пространство имен оптимизации.


person Marcel    schedule 21.07.2012    source источник


Ответы (5)


Добавьте файл web.config в корень проекта библиотеки классов (тот, который содержит представления Razor) со следующим содержимым (взято из это сообщение в блоге):

<configuration>
  <configSections>
    <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
      <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
    </sectionGroup>
  </configSections>

  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Optimization"/>
        <add namespace="System.Web.Routing" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>

  <system.web>
    <compilation targetFramework="4.0">
      <assemblies>
        <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
      </assemblies>
    </compilation>
  </system.web>
</configuration>

Это заставит Visual Studio думать, что это веб-проект, и активирует Intellisense.

person Darin Dimitrov    schedule 21.07.2012
comment
Я уже сделал это. Intellisense работает нормально, за исключением пространства имен System.Web.Optimization. - person Marcel; 21.07.2012
comment
Вы заметили <add namespace="System.Web.Optimization"/> в моем примере? У вас есть это в вашем? - person Darin Dimitrov; 21.07.2012
comment
Да, у меня есть. Я забыл упомянуть об этом в вопросе, извините! - person Marcel; 21.07.2012
comment
Добавление ‹add namespace=System.Web.Optimization/› в Views/Web.config решило мою проблему. Спасибо - person Diego Vieira; 04.10.2012

У меня была эта ошибка в предварительно созданном представлении в проекте asp mvc для решения, я установил Microsoft.Web.Optimization с nuget.

В меню «Инструменты» выберите «Диспетчер пакетов библиотек», а затем нажмите «Консоль диспетчера пакетов». Введите следующую команду для обновления объединения и минификации:

Install-Package Microsoft.Web.Optimization -Pre

некоторые дополнительные сведения здесь http://forums.asp.net/t/1812274.aspx/1

person Vladimir Shmidt    schedule 14.10.2012
comment
где мне ввести этот установочный пакет? - person guiomie; 06.09.2013

@ Владимир, я использую Visual Studio 2013, и мне пришлось немного изменить вашу строку на:

Пакет установки Microsoft.AspNet.Web.Optimization

Это исправило это для меня.

person Saurabh Kumar    schedule 25.02.2014

Следующее:

Install-Package Microsoft.AspNet.Web.Optimization

отлично работает для меня.

person Community    schedule 10.02.2015

Install-Package Microsoft.AspNet.Web.Optimization -version 1.1.0.0

если вашему проекту нужна указанная версия, добавьте -version... для выбора истинной версии. Это будет полезно для вас.

person 蓝色_迷恋    schedule 26.02.2018