在我的Asp.Net MVC 4项目中,我已经在.csproj文件中进行了设置,以构建<MvcBuildViews>true</MvcBuildViews>
View 。问题是在构建项目时出现错误: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文件夹,但错误不断出现。该错误表明问题出在身份验证标签行中:
<system.web>
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
通常,我可以通过运行应用程序(出现错误),构建应用程序并随后再次运行来运行该应用程序。
最佳答案
进行@matrixugly建议可以解决此问题,但也会导致编译时 View 检查也停止工作。我假设您仍要在编译时对 View 进行错误检查?如果是这种情况,请在下面进行更好的修复。
为了了解为什么这些解决方案有效,我们必须首先知道问题是如何产生的:
MvcBuildViews=true
。 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.
那是什么原因导致这个问题呢?发布项目时,编译器默认情况下会使用
<project-dir>\obj\
放置将与之一起使用的源文件的副本。不幸的是,这些文件在发布完成后不会自动删除。下次开发人员使用MvcBuildViews=true
编译项目时,它将出错,因为aspnet编译器在编译过程中包括obj\
文件夹,因为它位于<project-dir>
文件夹下面。那么我们该如何解决呢?好吧,您有四个选择:
MvcBuildViews=false
。我真的不认为这是一个解决方案,所以让我们继续。 <project-dir>\obj\
中的文件。可行,但可能会很麻烦,因为必须在每次发布后进行。 <BaseIntermediateOutputPath>
属性来更改发布用作中间目录的路径。示例(引用:this link):<BaseIntermediateOutputPath> [SomeKnownLocationIHaveAccessTo] </BaseIntermediateOutputPath>
<PropertyGroup>
<_EnableCleanOnBuildForMvcViews Condition=" '$(_EnableCleanOnBuildForMvcViews)'=='' ">true</_EnableCleanOnBuildForMvcViews>
</PropertyGroup>
<Target Name="CleanupForBuildMvcViews" Condition=" '$(_EnableCleanOnBuildForMvcViews)'=='true' and '$(MVCBuildViews)'=='true' " BeforeTargets="MvcBuildViews">
<ItemGroup>
<_TempWebConfigToDelete Include="$(BaseIntermediateOutputPath)**\Package\**\*" />
<_TempWebConfigToDelete Include="$(BaseIntermediateOutputPath)**\TransformWebConfig\**\*" />
<_TempWebConfigToDelete Include="$(BaseIntermediateOutputPath)**\CSAutoParameterize\**\*" />
<_TempWebConfigToDelete Include="$(BaseIntermediateOutputPath)**\TempPE\**\*" />
</ItemGroup>
<Delete Files="@(_TempWebConfigToDelete)"/>
</Target>
我的建议是使用选项3或4。
N.B.对于从未编辑过项目文件的用户,在加载时无法对其进行编辑。首先必须通过右键单击并选择
Unload Project
卸载它。然后,您可以右键单击项目并编辑项目文件。或者,您可以在Visual Studio外部编辑文件。