62 votos

ASP.NET MVC 1.0 AfterBuilding Vistas error en la Compilación de TFS

He actualizado desde ASP.NET MVC Beta 1.0 y se hicieron los siguientes cambios en el proyecto de MVC (según lo expuesto en el RC notas de la versión):

<Project ...>
  ...
  <MvcBuildViews>true</MvcBuildViews>
  ...
  <Target Name="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
    <AspNetCompiler VirtualPath="temp" PhysicalPath="$(ProjectDir)\..\$(ProjectName)" />
  </Target>
  ...
</Project>

Mientras que la construcción corre bien en nuestro local dev cajas, no en virtud de TFS 2008 a Construir con "no se Pudo cargar el tipo de 'xxx.MvcApplication'", véase a continuación un registro de compilación:

...
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 está instalado en TFS y la solución compila cuando se construyó dentro de una instancia de Visual Studio en el mismo servidor de TFS.

¿Cómo puedo resolver este TFS Build problema?

180voto

Jim Lamb Puntos 10474

De hecho, hay una mejor solución a este problema. Lo he probado con VS/TFS 2010, pero también debería funcionar con VS/TFS 2008.

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

Voy a trabajar con el MVC equipo de actualizar su plantilla de proyecto para el uso de este enfoque, junto con una medida de destino (lugar de reemplazar AfterBuild).

He publicado un post en el blog sobre Cómo Activar en tiempo de Compilación de Vista de la Comprobación de ASP.NET MVC proyectos en la Compilación de TFS 2010.

17voto

crowleym Puntos 1005

El problema deriva del hecho de que la AspNetCompiler tarea de MSBuild utilizados dentro de la AfterBuild destino de un ASP.NET proyecto de MVC espera para hacer referencia a la dll en la carpeta bin del proyecto Web.

En un escritorio construir la carpeta bin que es donde se espera que bajo su árbol de fuentes.

Sin embargo TFS Teambuild compila la salida de la fuente a un directorio diferente en el servidor de compilación. Cuando el AspNetCompiler tarea se inicia no se puede encontrar el directorio bin de hacer referencia a la DLL requerida y se obtiene la excepción.

La solución es modificar el AfterBuild objetivo del Proyecto MVC a ser como sigue:

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

Este cambio permite compilar puntos de vista sobre el escritorio, y el TFS build server.

3voto

Peter McEvoy Puntos 1653

Jim Cordero solución no funciona para nosotros cuando he construido nuestra web .csproj con

/p:UseWPP_CopyWebApplication=true;PipelineDependsOnBuild=False

debido a que el objetivo estaba siendo ejecutado AfterBuild y la aplicación no se ha copiado en el WebProjectOutputDir todavía. (Por CIERTO, yo paso de esas propiedades a la web del proyecto construir cos quiero la construcción para crear un OutDir carpeta con sólo mi binarios y cshtml los archivos adecuados para comprimir, es decir, no a una en lugar de construir)

Para evitar este problema, y en honor a la intención de su objetivo original, hice lo siguiente:

<PropertyGroup>
    <OnAfter_WPPCopyWebApplication>
        MvcBuildViews;
    </OnAfter_WPPCopyWebApplication>
</PropertyGroup>

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

1voto

Haacked Puntos 31070

Supongo que quería decir que usted ha cambiado la configuración siguiente en el .csproj archivo:

<MvcBuildViews>true</MvcBuildViews>

La configuración que has publicado en tu pregunta no debería ser tocado. Si funciona en tu máquina local, entonces, obviamente, usted puede pre-construir un ASP.NET aplicación MVC.

Creo que usted necesita para rastrear cuál es la diferencia entre tu TFS build medio ambiente y de su local VS máquinas. Tal vez está usando una versión diferente de MsBuild o algo.

Trate de realizar ambas generaciones con salida detallada y comparar las dos para ver lo que es diferente.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X