Сбой сборки MVC3 из-за web.config в папке obj
У меня есть <MvcBuildViews>true</MvcBuildViews>
настройка в моих файлах проекта.
Теперь, когда я развертываю первый раз, я получаю файлы в obj\release\package\packagetmp
. Каждая последующая сборка после этого приводит к сбою сборки.
Web -> C:\Projects\ProjectX\Web\bin\ProjectX.Web.dll
C:\Projects\ProjectX\Web\obj\release\package\packagetmp\web.config(64):
error ASPCONFIG: It is an error to use a section registered as
allowDefinition='MachineToApplication' beyond application level.
This error can be caused by a virtual directory not being configured as an
application in IIS.
------ Skipped Publish: Project Web, Configuration: Release Any CPU ------
Теперь, если вы удалите папку obj
, я могу построить штраф.
Это довольно неприятно, если любая сборка завершилась неудачей после публикации, пока я вручную не удалю папку obj
. Есть ли что-нибудь, что я могу сделать, чтобы исправить это?
Ответы
Ответ 1
Добавьте это в файл .csproj:
<Target Name="AfterBuild" Condition="'$(Configuration)'=='Release'">
<RemoveDir Directories="$(IntermediateOutputPath)" />
</Target>
Кажется, нужно удалить файлы в obj\Release, но не в самой папке, по крайней мере на моей машине.
Ответ 2
Эта проблема возникает, потому что MvcBuildViews конфликтует с упаковкой Web Deploy. Я получил идею этого решения от http://www.zvolkov.com/clog/2011/02/16/asp-net-razor-lessons-learned/:
<PropertyGroup>
<PackageDependsOn Condition="'$(DeployOnBuild)'=='true'">
CleanWebsitesPackage;
CleanWebsitesPackageTempDir;
CleanWebsitesTransformParametersFiles;
MvcBuildViews;
$(PackageDependsOn)
</PackageDependsOn>
<BuildDependsOn Condition="'$(DeployOnBuild)'!='true'">
$(BuildDependsOn);
MvcBuildViews
</BuildDependsOn>
</PropertyGroup>
<Target Name="MvcBuildViews" Condition="'$(MvcBuildViews)'=='true'">
<AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" />
</Target>
Теперь AspNetCompiler будет запущен перед упаковкой. Это хорошо работает с подходом msbuild/p: DeployOnBuild = True/p: DeployTarget = Package.
Ответ 3
Это известная проблема с MVC при включении функции просмотра MVC. Надеюсь, они исправят его в следующей версии.
В то же время вы можете запустить операцию "Чистое решение", чтобы очистить папку obj, а не выполнять ее вручную. Недостатком является то, что все ваше решение будет перестраиваться каждый раз.
Еще один вариант, который я еще не сделал, но рассмотрел, если мой проект становится больше, является предварительным компилятором в проекте MVC для удаления web.config из obj\