Подтвердить что ты не робот

MVCBuildViews работают неправильно

Итак, я редактировал файл csproj в приложении RTM MVC 3, чтобы установить следующее свойство:

<MvcBuildViews>true</MvcBuildViews>

Это должно привести к тому, что мои представления будут соблюдены во время сборки и будут вынуждены строить ошибку сборки, если мое представление нарушено. Это единственное изменение, которое я сделал, однако, когда я пытаюсь создать приложение, я получаю следующую ошибку:

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

Проект компилируется и выполняется успешно, если я вернусь к false,

Ниже перечислены задачи сборки, сконфигурированные в файле csproj (они никогда не редактировались вручную, они были добавлены Visual Studio 2010)

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

Я что-то упустил? Как правильно настроить MVC 3/Visual Studio 2010 для проверки моих просмотров во время сборки?

4b9b3361

Ответ 1

У меня была эта проблема несколько дней назад, и я исправил ее, удалив папку obj/Debug.

Изменить: см. Джо Картано ответ для более постоянного решения.

Ответ 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.

Ответ 3

Когда вы получите эту ошибку, у вас есть еще один файл web.config в вашей папке obj? Если вы используете MSDeploy, это может помочь: http://blogs.msdn.com/b/webdevtools/archive/2010/05/14/the-aspnet-compiler-build-task-in-visual-studio-2010-asp-net-mvc-2-projects.aspx, если нет, возможно, другой инструмент web.config создается каким-либо инструментом, который вы используете.

Ответ 4

Это то, что сработало для меня. При желании вы можете указать условие с конфигурацией.

<Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
  <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" />
</Target>
<Target Name="AfterBuild" Condition="'$(Configuration)'!='Debug'">
  <RemoveDir Directories="$(BaseIntermediateOutputPath)" />
</Target>

Ответ 5

Попробуйте изменить эту строку AspNetCompiler на это:

<AspNetCompiler VirtualPath="temp" PhysicalPath="$(ProjectDir)\..\$(ProjectName)" />