MVC3 Странная ошибка после включения компиляции представлений - PullRequest
11 голосов
/ 02 марта 2011

В настоящее время я работаю над проектом MVC3 с Razor.Я включил компиляцию Views, чтобы знать об ошибках правописания и т. Д. Во время компиляции.

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

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

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

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

Ответы [ 2 ]

23 голосов
/ 03 марта 2011

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

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

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

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

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

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

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

5 голосов
/ 09 февраля 2013

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

Еще одно исправление - обнулить вывод публикации прямо перед вызовом . Откройте ваш .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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...