MVC3切换视图编译后出现奇怪错误

ntt*_*akr 11 iis-7 visual-studio-2010 asp.net-mvc-3

我目前正在与Razor合作开发一个MVC3项目.我已经编译了视图,以便在编译时了解拼写错误等.

一旦我在项目配置文件中打开<MvcBuildViews> true </ MvcBuildViews>,就会在编译期间收到以下错误:

错误1使用在应用程序级别之外注册为allowDefinition ='MachineToApplication'的部分是错误的.此错误可能是由于未在IIS中将虚拟目录配置为应用程序引起的.

我阅读了几个可能的问题解决方案,主要涉及IIS和虚拟目录或应用程序.问题是,我不使用IIS,而是使用默认的Visual Studio开发服务器.

我该怎么做才能解决这个问题?

ntt*_*akr 23

我在网上尝试了很多不同的解决方案,但要么它们不太适合我的问题,要么它们不起作用.

回顾一下我的问题:

在打开CompileViews之后,我在编译期间立即得到了上述错误.我使用VS2010的默认Visual Studio开发服务器来测试我的MVC应用程序.

今天我在微软开发人员的支持下开了一个请求,而且 - 我很惭愧承认 - 在技术人员的回调中大约30秒得到我的回答:

他说的只是:请转到你的obj文件夹并删除所有内容.然后再次编译.

而这真的就是它.

因此,经过大量关于我自己的动摇之后,我想与大家分享结果.

  • 我很高兴这工作但我每次想要构建时都必须删除obj文件夹. (6认同)

Chr*_*nes 5

当obj文件夹中有Web项目输出(模板化的web.config或临时发布文件)时,会发生此问题。使用的ASP.NET编译器不够聪明,无法忽略obj文件夹中的内容,因此它引发错误。

另一个解决方法是在调用<AspNetCompiler>之前取消发布输出。打开您的.csproj并更改它:

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

对此:

<Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
  <ItemGroup>
    <ExtraWebConfigs Include="$(BaseIntermediateOutputPath)\**\web.config" />
    <ExtraPackageTmp Include="$([System.IO.Directory]::GetDirectories(&quot;$(BaseIntermediateOutputPath)&quot;, &quot;PackageTmp&quot;, System.IO.SearchOption.AllDirectories))" />
  </ItemGroup>
  <Delete Files="@(ExtraWebConfigs)" />
  <RemoveDir Directories="@(ExtraPackageTmp)" />
  <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" />
</Target>
Run Code Online (Sandbox Code Playgroud)

这将删除\ obj下的所有web.configs以及\ obj下的所有PackageTmp文件夹。