我正在使用MSDeploy(Web Deploy)来发布我的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,问题就会消失,但这很烦人。我可以为我做一个后期构建任务,但感觉不对。不应该有更好的方法吗?
答案 0 :(得分:2)
我假设您在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 :(得分:0)
我有我的web.config属性&#34;复制到输出目录&#34;设置为&#34;始终复制&#34;。将其设置回&#34;不要复制&#34;为我解决了。