MVC3 Странная ошибка после включения компиляции представлений

В настоящее время я работаю над проектом MVC3 с Razor. У меня есть switchen при компиляции Views, чтобы быть в курсе орфографических ошибок и т.д. Во время компиляции.

Как только я включаю <MvcBuildViews> true </MvcBuildViews> в файле конфигурации проектов получите во время компиляции следующую ошибку:

Ошибка 1 Ошибка использования раздела, зарегистрированного как allowDefinition = 'MachineToApplication', превышающего уровень приложения. Эта ошибка может быть вызвана тем, что виртуальный каталог не настроен как приложение в IIS.

Я прочитал несколько возможных решений проблемы, в основном касающиеся IIS и виртуальных каталогов или приложений. Проблема в том, что я не использую IIS, а вместо этого использую сервер Visual Studio Development по умолчанию.

Что я могу сделать для решения этой проблемы?

Ответ 1

Я попробовал множество различных решений, доступных в Интернете, но либо они не совсем соответствовали моей проблеме, либо они не работали.

Чтобы повторить мою проблему:

После включения CompileViews я сразу получил ошибку при компиляции. Я использую по умолчанию Visual Studio Development Server VS2010 для тестирования моего приложения MVC.

Сегодня я открыл запрос в поддержку Microsoft Developer, и - мне почти стыдно признаться в этом, - получил мой ответ примерно за 30 секунд в обратном вызове от техника:

Все, что он сказал, это: перейдите в свою папку obj и удалите все содержимое. Затем снова скомпилируйте.

И это действительно все, что нужно.

Итак, после того, как я много думал о себе, я хотел поделиться с вами результатами.

Ответ 2

Эта проблема возникает, когда в папке obj есть выход веб-проекта (templated web.config или временные файлы публикации). Используемый компилятор ASP.NET недостаточно умен, чтобы игнорировать материал в папке obj, поэтому вместо этого он генерирует ошибки.

Другое исправление заключается в том, чтобы nuke вывести публикацию прямо перед вызовом <AspNetCompiler> . Откройте ваш .csproj и измените это:

<Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
  <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" />
</Target>

:

<Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
  <ItemGroup>
    <ExtraWebConfigs Include="$(BaseIntermediateOutputPath)\**\web.config" />
    <ExtraPackageTmp Include="$([System.IO.Directory]::GetDirectories(&quot;$(BaseIntermediateOutputPath)&quot;, &quot;PackageTmp&quot;, System.IO.SearchOption.AllDirectories))" />
  </ItemGroup>
  <Delete Files="@(ExtraWebConfigs)" />
  <RemoveDir Directories="@(ExtraPackageTmp)" />
  <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" />
</Target>

Это удалит все web.configs в \obj, а также все папки PackageTmp в\obj.