由于obj文件夹中的web.config,MVC3项目构建失败

时间:2011-09-12 13:08:25

标签: visual-studio-2010 asp.net-mvc-3 deployment

我在项目文件中设置了<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文件夹,这是相当令人沮丧的。我能做些什么来解决这个问题吗?

3 个答案:

答案 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