我在项目文件中设置了<MvcBuildViews>true</MvcBuildViews>
。
现在当我第一次在obj\release\package\packagetmp
中获取文件时进行部署。在此之后的每个后续构建都会导致faild构建。
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
文件夹,这是相当令人沮丧的。我能做些什么来解决这个问题吗?
答案 0 :(得分:12)
将其添加到.csproj文件中:
<Target Name="AfterBuild" Condition="'$(Configuration)'=='Release'">
<RemoveDir Directories="$(IntermediateOutputPath)" />
</Target>
似乎删除obj \ Release中的文件,但不删除文件夹本身,至少在我的机器上。
答案 1 :(得分:5)
出现此问题的原因是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方法。
答案 2 :(得分:1)
启用构建MVC视图功能时,这是MVC的已知问题。希望他们能在下一个版本中修复它。
同时,您可以运行“清理解决方案”操作来清除obj文件夹,而不是手动执行。缺点是,每次都会重建整个解决方案。
我没有做过的另一个选项,但考虑过我的项目是否更大,是MVC项目中的预编译步骤,以从obj \
中删除web.config