【问题标题】:How to stop Visual Studio Web writing web.config to /obj directory如何停止 Visual Studio Web 将 web.config 写入 /obj 目录
【发布时间】:2014-05-03 11:54:07
【问题描述】:

我正在使用 MSDeploy(Web 部署)发布我的 MVC 应用程序,效果很好。唯一的问题是它将所有编译的文件以及一个额外的 web.config 放在 obj 目录中,所以下次我尝试构建时会收到以下错误:

Error   1   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.  

如果我删除 obj,问题就会消失,但这很烦人。我可以设置一个后期构建任务来为我做这件事,但感觉不对。不应该有更好的办法吗?

【问题讨论】:

    标签: asp.net-mvc visual-studio-2013 msdeploy


    【解决方案1】:

    我假设您在 Visual Studio 中构建期间使用 MvcBuildViews 编译您的站点,因为在发布期间预编译的默认行为是将站点内容复制到临时文件夹并预编译该文件夹(以避免出现类似obj 或其他排除的文件)。

    最简单的解决方法(记录在 here)是将您的 obj 目录重新定位到别处,如下所示:

    <BaseIntermediateOutputPath>Somewhere\Not\Under\Project\Directory</BaseIntermediateOutputPath>
    

    更长的解释:

    MvcBuildViews 在项目文件中调用 ASP.NET 编译器:

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

    默认情况下,编译器将编译指定根文件夹下站点的所有内容。错误源于obj\web.config 包含仅在站点根目录web.config 中允许的内容(因为它是从那里复制的)。

    2 其他解决方法:

    1. 不要使用 MvcBuildViews。自从 Web 部署项目 were dropped 支持为所有 Web 项目本地支持 WebDeploy 以来,您可以在发布之前配置预编译。这确实会丢失编译器对每个构建的检查。
    2. 从 .NET 4.5 开始,aspnet_compiler.exe 现在支持 -x 标志以从预编译中排除特定目录。不幸的是,这个标志从未进入 AspNetCompilerTask,因此您必须改写目标以调用编译器并自己传递任何必要的参数。

    【讨论】:

      【解决方案2】:

      我将 web.config 属性“复制到输出目录”设置为“始终复制”。将其设置回“请勿复制”为我解决了问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-11-27
        • 1970-01-01
        • 2011-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-19
        相关资源
        最近更新 更多