首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ASP.NET MVC1.0 AfterBuilding视图在构建TFS时失败

ASP.NET MVC1.0 AfterBuilding视图在构建TFS时失败
EN

Stack Overflow用户
提问于 2009-04-16 11:07:01
回答 9查看 14K关注 0票数 62

我已经从MVC升级到1.0,并对ASP.NET项目进行了以下更改(如RC发布说明中所述):

代码语言:javascript
复制
<Project ...>
  ...
  <MvcBuildViews>true</MvcBuildViews>
  ...
  <Target Name="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
    <AspNetCompiler VirtualPath="temp" PhysicalPath="$(ProjectDir)\..\$(ProjectName)" />
  </Target>
  ...
</Project>

虽然构建在我们的本地开发环境上运行良好,但在TFS2008构建下失败,并显示“log not load type 'xxx.MvcApplication'",请参阅下面的构建日志:

代码语言:javascript
复制
...
using "AspNetCompiler" task from assembly "Microsoft.Build.Tasks.v3.5, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
Task "AspNetCompiler"

  Command:
  C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_compiler.exe -v temp -p D:\Builds\xxx\Continuous\TeamBuild\Sources\UI\xxx.UI.Dashboard\\..\xxx.UI.Dashboard 
  The "AspNetCompiler" task is using "aspnet_compiler.exe" from "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_compiler.exe".
  Utility to precompile an ASP.NET application
  Copyright (C) Microsoft Corporation. All rights reserved.

/temp/global.asax(1): error ASPPARSE: Could not load type 'xxx.UI.Dashboard.MvcApplication'.
  The command exited with code 1.

Done executing task "AspNetCompiler" -- FAILED.
...

MVC 1.0安装在TFS上,当在同一TFS服务器上的Visual Studio实例中构建时,该解决方案将进行编译。

我如何解决这个TFS构建问题?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2009-07-08 14:24:50

该问题源于以下事实: Web项目的AfterBuild目标中使用的AspNetCompiler MSBuild任务希望引用ASP.NET项目的bin文件夹中的dll。

在桌面构建中,bin文件夹位于源码树下。

但是,TFS Teambuild会将源代码的输出编译到构建服务器上的另一个目录中。当AspNetCompiler任务启动时,它找不到引用所需DLL的bin目录,您会得到异常。

解决方案是修改MVC项目的AfterBuild目标如下:

代码语言:javascript
复制
  <Target Name="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
    <AspNetCompiler Condition="'$(IsDesktopBuild)' != 'false'" VirtualPath="temp" PhysicalPath="$(ProjectDir)\..\$(ProjectName)" />
    <AspNetCompiler Condition="'$(IsDesktopBuild)' == 'false'" VirtualPath="temp" PhysicalPath="$(PublishDir)\_PublishedWebsites\$(ProjectName)" />
  </Target>

此更改使您能够在桌面和TFS构建服务器上编译视图。

票数 17
EN

Stack Overflow用户

发布于 2010-04-20 04:53:37

实际上,对于这个问题有一个更好的解决方案。我已经在VS/TFS2010上测试过了,但它也应该能在VS/TFS2008上运行。

代码语言:javascript
复制
<Target Name="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
  <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" />
</Target>

我将与MVC团队一起更新他们的项目模板,以便将此方法与自定义目标一起使用(而不是覆盖AfterBuild)。

我发表了一篇关于如何使用Turn on Compile-time View Checking for ASP.NET MVC projects in TFS Build 2010的博客文章。

票数 181
EN

Stack Overflow用户

发布于 2012-11-28 01:07:22

Jim Lamb的解决方案在我构建我们的web .csproj时对我们不起作用

代码语言:javascript
复制
/p:UseWPP_CopyWebApplication=true;PipelineDependsOnBuild=False

因为目标正在执行AfterBuild,而应用程序还没有复制到WebProjectOutputDir中。(顺便说一句,我将这些属性传递给web项目build,因为我希望build创建一个OutDir文件夹,里面只有我的二进制文件和适合压缩的cshtml文件,即不是一个就地构建)

为了绕过这个问题并尊重他最初目标的意图,我做了以下工作:

代码语言:javascript
复制
<PropertyGroup>
    <OnAfter_WPPCopyWebApplication>
        MvcBuildViews;
    </OnAfter_WPPCopyWebApplication>
</PropertyGroup>

<Target Name="MvcBuildViews" Condition="'$(MvcBuildViews)'=='true'">
    <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" />
</Target>
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/755645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档