2013-03-11 3 views
19

я получаю следующее сообщение об ошибке при попытке запустить один из моих scaffolded просмотров в MVC 4:Ошибка выполнения нет поставщика сборки зарегистрировано для расширения «.cshtml»

Ошибка сервера в приложении „/“ , Для расширения '.cshtml' не зарегистрирован провайдер построения. Вы можете зарегистрировать его в разделе machine.config или web.config. Убедитесь, что у него есть атрибут BuildProviderAppliesToAttribute , который включает в себя значение «Веб» или «Все».

Единственные ответы, которые я нашел, относятся к intellisense, но мой код соответствует штрафу и прерывается во время выполнения. Это странная ошибка, поскольку я не использую библиотеку классов. Есть только один контроллер, который дает это сообщение во всех своих представлениях, все остальные контроллеры/представления работают нормально.

+1

проверка этого предыдущий вопрос, который, кажется, есть решение: [ошибки cshtml] [1] [1]: http://stackoverflow.com/questions/12769926/razor-compiler-warning -errors-asp-net-mvc-4 – tessi

+0

Сортировка, я устал играть с такими вещами в то время, но в итоге просто воссоздал рассматриваемые взгляды. Поэтому так и не нашли решения. – Nigel

+0

Я получил эту ошибку в соответствии с типичной ошибкой сборки, которую я получаю при сильной печати просмотров. Исправить это просто вручную удалить bin и obj и решить, что проблема разрешила это для меня. – Quibblesome

ответ

13

Если раствор в Razor Compiler Warning/Errors - ASP.NET MVC 4 не работает, добавив следующий код в ROOT web.config

<compilation debug="true" targetFramework="4.0"> 
    <!-- New --> 
    <assemblies> 
    <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
    <add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
    <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
    <add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
    <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
    </assemblies> 
</compilation> 

затем попытаться перезапустить Visual Studio. Это сработало для меня, поэтому можно предположить, что, возможно, ошибка Visual Studio.

+2

Перезагрузка Visual Studio работала для меня. Несмотря на то, что у моего Web.Config есть только такие: System.Web.Mvc, System.Web.Abstractions, System.Web.Routing, System.Data.Linq, System.Data.Entity, System.Data.Entity.Design и не имеют: System.Web.Helpers, System.Web.WebPages –

+0

Это сработало для меня и все еще работало, как только я удалил вышеуказанное из web.config. Не уверен, что вызвало ошибку в первую очередь. –

+0

Работал и на меня, но не забудьте использовать те же версии, которые вы используете в своих действительных ссылках в своем проекте. –

4

Я получил эту ошибку при развертывании (ранее работающего сайта) после обновления до VS2013 RC2. К счастью, у меня были другие сайты для сравнения папки bin - оказалось, что ранее были развернуты несколько библиотек и magical остановлен, включая библиотеки бритвы. Я изменил свои ссылки Copy Local свойствам на True, и все было лучше. Библиотеки 3 бритвенные в вопросе были:

  • System.Web.Razor
  • System.Web.WebPages.Deployment
  • System.Web.WebPages.Razor

Я также потерял библиотеки чьи пространства имен указаны в файле web.config, поэтому не забудьте также скопировать их на локальный.

Я подозреваю, что это может быть разрешено на сервере с помощью GAC, но я не знаю много о серверной стороне вещей, так что это в другое время.

3

Я установил подобный вопрос - документированный здесь: https://naa4e.codeplex.com/workitem/1

Решение было то, что я удалил ссылки и повторно добавлены пакеты NuGet.

Проблема заключается в том, что проект первоначально ссылался на MVC4, который, как я полагаю, был расположен где-то на локальной машине (то есть не был пакетом NuGet). Я просто «восстановить» пакет, который должным образом не перезаписать ссылку на проект от 4 до 5.

+0

Примечание. Я понимаю, что мой ответ относится к исправлению для MVC5, а не к 4, но, надеюсь, предлагает другой способ попробовать. – rohancragg

3

Нажмите «Rebuild Solution» достаточно для меня

+0

Но для меня этого недостаточно, я попробовал метод @DrakonHash, и это сработало для меня. – QMaster

36

Это решило проблему для меня.

Изменить это в Web.config

<compilation debug="true" targetFramework="4.5.1" optimizeCompilations="true" /> 

в

<compilation debug="true" targetFramework="4.5.1" optimizeCompilations="false" /> 

ADDED: когда через несколько минут я снова web.config к старому, проблема не повторяется. странные вещи)

+4

Возможно, это связано с тем, что optimizeCompilations = "true" приводит к компиляции только * измененных * файлов. Если что-то не так с предыдущей компиляцией, оно не будет исправлено, если поврежденный файл (ы) перекомпилирован, что не произойдет, пока они не будут изменены. Настройка optimizeCompilations = "false" заставит все перекомпилировать, независимо от состояния изменения. Когда ваш сайт снова работает, вы можете вернуться к «true». –

+0

Это точно происходит в моем случае. Как только я изменяю optimizeCompilations на false или даже избавляюсь от optimizeCompilations и перестраиваю решение, которое оно исправляет. И тогда вы можете вернуть его обратно. Он просто заново перекомпилировал все. Благодаря! –

+0

Есть ли какой-либо вариант или настройка в IIS для этого с помощью щелчка? –

2

Я исправил эту проблему, изменив .Net Framework с моей текущей версии «4.52» на «4.6». Вы можете изменить это, если вы щелкните правой кнопкой мыши на своем проекте -> Свойства затем «Целевая структура» После изменения текущей Framework я перестраиваю и все работает нормально.

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

1

Я попытался перезапустить IIS, удалить временные файлы Интернета и сменить тег компиляции в файле веб-конфигурации. Никто из них не работает для меня.

Я исправил проблему, удалив и добавив System.Web.MVC в проект.

Смежные вопросы