Ответ 1
У меня возникла такая же проблема после того, как я удалил атрибут targetFramework
из элемента <compilation>
в файле Web.config.
Как только я вернул его в
<compilation debug="true" targetFramework="4.0">
Все снова работало отлично!
Работа с текущим RC2 - генерируемый шаблон Представления Razor включают в себя:
@{
ViewBag.Title = "Details1";
Layout = "/Views/Shared/_Public.cshtml";
}
С красным squiggly под ViewBag.Title и этой ошибкой компилятора: '
Error 4 One or more types required to compile a dynamic expression cannot be found. Are you missing references to Microsoft.CSharp.dll and System.Core.dll? c:\Visual Studio 2010\Projects\myProj\Views\Webinar\Details1.cshtml 6 2 TTSTrain.Webinars.WebEntry
Но проект строит и функционирует правильно. Является ли ошибка индикатором других проблем, которые необходимо решить?
У меня возникла такая же проблема после того, как я удалил атрибут targetFramework
из элемента <compilation>
в файле Web.config.
Как только я вернул его в
<compilation debug="true" targetFramework="4.0">
Все снова работало отлично!
Я решил это следующим образом:
Сначала я заметил использование gacutil (Global Assembly Cache Utility), в котором содержались две ссылки на System.Core, от одной до версии 4.0 и от одной до версии 3.5. Очевидно, что внутри просмотров бритвы, даже если в проекте у меня была правильная ссылка на версию 4.0, она все еще использовала версию 3.5 и почему я получал ошибку о динамических типах. Чтобы проверить, откроется ли ваше приложение как администратор командной строки Visual Studio и выполните:
gacutil -l System.Core
Чтобы удалить ссылку на старую версию System.Core, я сделал следующие шаги:
- cd %systemroot%\assembly\
Здесь у вас может быть больше одного "gac" -каталога, поэтому вам придется искать в каждом, чтобы найти ваш компонент. Для меня это было в каталоге "gac_MSIL".
- cd gac_msil
- cd System.Core
- cd <assembly version number>__<public key token>
- erase *.* Say "y" to are you sure.
- cd ..
- rd <assembly version number>__<public key token>
- cd ..
- rd System.Core
После этого я снова открыл свое решение в visual studio и ошибка исчезла, он правильно ссылается на System.Core 4.0, и я больше не получал динамических ошибок:)
Надеюсь, это поможет и вам, Лучший, N.
Как и в ответе @Kaiser, я столкнулся с этой проблемой в результате наличия нескольких сборок System.Core
в GAC.
Я решил не удалять сборку 3.5. Вместо этого в представлении web.config я изменил configuration/system.web/compilation
node следующим образом:
<compilation debug="true" targetFramework="4.0">
<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.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
</assemblies>
</compilation>
Важной линией является последний assembly
node: он сообщает компилятору Razor, какую версию сборки GAC использовать.
Как только я это сделал, все было в моих взглядах на Razor.
У меня нет этой проблемы при запуске VS 2012 в качестве администратора.
В противном случае, что сработало для меня:
в корневой веб-конфигурации добавили в качестве рекомендуемой ссылки для правильной сборки в качестве дочернего элемента компиляции node `
<system.web>
<compilation debug="true" targetFramework="4.5">
<assemblies>
<add assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</assemblies>
</compilation>
</system.web>
установить copy local = true для System.Core и Microsoft.CSharp`
Есть ли у вас ссылка на Microsoft.CSharp
и System.Core
?
MVC-представления (обычно) скомпилируются динамически при доступе к вашему сайту, а не при компиляции приложения в VS. Я предполагаю, что вы увидите проблемы при запуске сайта. Просто добавьте две ссылки, и все будет хорошо.
Используя Peters, мне удалось решить проблему с помощью Html.EditorFor(m = > m.xxx) подчеркнуть ошибки в файлах chtml. Хотя ошибка ViewBar сохраняется. Поэтому я изменил файл web.config следующим образом
<compilation debug="true" targetFramework="4.5.1">
<assemblies>
<add assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
<add assembly="Microsoft.CSharp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</assemblies>
</compilation>
Обратите внимание на строку Microsoft.Csharp. Вышеприведенный трюк и теперь редактор chtml ясно из красных подчеркиваний. Спасибо Peter
У меня была такая же проблема. По умолчанию при создании приложения MVC3 он вставляет файл решения web.debug.config и web.release.config. Когда я избавился от этих двух элементов, проблема ViewBag разрешилась сама. Это может иметь какое-то отношение к тому, что говорил Питер, но я не проверял это.
Это время, когда считываются другие поля в ViewBag. Поэтому, если вы передаете их от контроллера. ViewBag.yourobjectDto = yourObjectDto;
убедитесь, что эта строка не заблокирована, если условие или что-то.
Попробуйте
Page.title= "Details1";
Это может сработать.