Ответ 1
У меня была эта проблема несколько дней назад, и я исправил ее, удалив папку obj/Debug.
Изменить: см. Джо Картано ответ для более постоянного решения.
Итак, я редактировал файл 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 для проверки моих просмотров во время сборки?
У меня была эта проблема несколько дней назад, и я исправил ее, удалив папку obj/Debug.
Изменить: см. Джо Картано ответ для более постоянного решения.
Эта проблема возникает, когда в папке 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("$(BaseIntermediateOutputPath)", "PackageTmp", System.IO.SearchOption.AllDirectories))" />
</ItemGroup>
<Delete Files="@(ExtraWebConfigs)" />
<RemoveDir Directories="@(ExtraPackageTmp)" />
<AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" />
</Target>
Это удалит все web.configs в \obj, а также все папки PackageTmp в\obj.
Когда вы получите эту ошибку, у вас есть еще один файл 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 создается каким-либо инструментом, который вы используете.
Это то, что сработало для меня. При желании вы можете указать условие с конфигурацией.
<Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
<AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" />
</Target>
<Target Name="AfterBuild" Condition="'$(Configuration)'!='Debug'">
<RemoveDir Directories="$(BaseIntermediateOutputPath)" />
</Target>
Попробуйте изменить эту строку AspNetCompiler
на это:
<AspNetCompiler VirtualPath="temp" PhysicalPath="$(ProjectDir)\..\$(ProjectName)" />