MVCBuildViews无法正常工作。

14 浏览
0 Comments

MVCBuildViews无法正常工作。

我在一个MVC 3 RTM应用程序的csproj文件中编辑,设置了以下属性:true 这应该在构建过程中编译我的视图,并在视图出现错误时强制产生构建错误。这是我做的唯一修改,但是当我尝试构建应用程序时,出现以下错误:

在应用程序级别之外使用注册为allowDefinition='MachineToApplication'的部分是错误的。这个错误可能是由于IIS中的虚拟目录没有配置为应用程序引起的。

如果我改回false,项目会成功编译和运行。以下是在csproj文件中配置的构建任务(这些任务从未手动编辑过,它们是由Visual Studio 2010添加的):--> 我是否遗漏了什么?如何正确配置MVC 3 / Visual Studio 2010以在构建时验证我的视图?

0
0 Comments

问题的原因是在obj文件夹中有另一个web.config文件。可能是使用MSDeploy导致的,可以参考MSDN博客中的解决方法。另外,可能是某个工具生成了另一个web.config文件。

解决方法是在.proj文件中添加以下代码:<BaseIntermediateOutputPath>..\bin</BaseIntermediateOutputPath>,这样obj文件夹就在解决方案级别,构建问题就解决了。

如果不想打开链接,可以直接在项目文件中的<MvcBuildViews>下面添加<BaseIntermediateOutputPath>元素。临时目录的名称可能更正确地命名为"obj"而不是"bin",但实际上并不重要。

如果从评论中复制代码,可能会出现一些奇怪的Unicode问题,导致开标签与闭标签不匹配,即使它们看起来是相同的。在"Path"中的"a"和"t"之间有一些不可见的字符。

0
0 Comments

这个问题出现的原因是obj文件夹中存在网页项目输出(模板化的web.config文件或临时发布文件)。ASP.NET编译器无法智能地忽略obj文件夹中的内容,因此会抛出错误。

解决方法之一是在调用<AspNetCompiler>之前清除发布输出。打开.csproj文件,将以下内容:

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

修改为:

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

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

更新:

根据https://stackoverflow.com/a/48582282/8037中的解决方法,你还可以完全排除obj文件夹。显然,<AspNetCompiler />任务没有exclude参数,但如果你直接调用aspnet_compiler.exe,你可以这样排除obj文件夹:

<Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
    <Exec Command="$(MSBuildFrameworkToolsPath)aspnet_compiler.exe -v temp -p $(WebProjectOutputDir) -x $(BaseIntermediateOutputPath)"/>
</Target>

这个解决方法对我也有效。我使用的是VS2013和MVC5。

或者,如果你愿意直接删除整个obj\Debug(或obj\Release)文件夹,在<AspNetCompiler>之前添加以下一行代码:<RemoveDir Directories="$(BaseIntermediateOutputPath)\$(Configuration)" />

<Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'"> <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" /> </Target>这段代码导致我的编译工作只在第一次有效。浪费了很多时间等待重新编译。这个解决方法解决了我的问题

0
0 Comments

问题出现的原因是<MvcBuildViews>true</MvcBuildViews>这个设置会告诉Visual Studio在构建时编译视图,这个设置可能会导致在构建服务器上出现问题。

解决方法是删除obj/Debug文件夹或者进行项目清理。另外,可以参考Joe Cartano在stackoverflow上的回答,他提供了一个更持久的解决方案。

然而,有些人尝试了这些方法但并未成功,他们会尝试其他解决方案。

需要注意的是,每次重新启动VS2010时,都需要再次删除该文件夹,这是相对有效但不是持久的解决方法。因此,建议参考Joe Cartano在stackoverflow上的回答,他提供了一个更持久的解决方案。

具体的解决方案可以在stackoverflow上的这个链接找到:stackoverflow.com/questions/4725387/…

0