62 votes

ASP.NET MVC 1.0 AfterBuilding Views échoue lors de la création de TFS

J'ai mis à jour à partir de ASP.NET MVC version Beta et la version 1.0 et fait les modifications suivantes au projet MVC (comme décrits dans le RC notes de version):

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

Alors que la génération fonctionne bien sur notre dev boîtes, il n'a pas sous TFS 2008 de Construire avec "impossible de charger le type" xxx.MvcApplication'", voir ci-dessous le journal de génération:

...
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 installé sur TFS et la solution compile construit au sein d'une instance de Visual Studio sur le même serveur TFS.

Comment puis-je résoudre ce Build TFS problème?

180voto

Jim Lamb Points 10474

En fait, il y a une meilleure solution à ce problème. Je l'ai testé avec VS/TFS 2010, mais il convient également de travailler avec VS/TFS 2008.

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

Je vais travailler avec le MVC de l'équipe pour mettre à jour leur modèle de projet à utiliser cette approche avec une cible personnalisée (au lieu de remplacer AfterBuild).

J'ai publié un billet de blog sur l' Activer au moment de la Compilation Vue de la Vérification de ASP.NET MVC projets de Build TFS 2010.

17voto

crowleym Points 1005

Le problème vient du fait que le AspNetCompiler tâche MSBuild utilisé dans le AfterBuild cible d'une ASP.NET MVC projet prévoit de référence de la dll dans le dossier bin du projet Web.

Sur un bureau de construire le dossier bin est où vous pouvez vous attendre dans votre arborescence des sources.

Cependant TFS Teambuild compile la sortie de votre source à un autre répertoire sur le serveur de build. Lorsque le AspNetCompiler tâche démarre, il ne peut pas trouver le répertoire bin pour faire référence à la DLL requis, et vous obtenez l'exception.

La Solution est de modifier le AfterBuild cible du Projet MVC comme suit:

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

Cette modification vous permet de compiler des Vues sur le bureau, et le serveur de build TFS.

3voto

Peter McEvoy Points 1653

Jim Agneau solution n'a pas fonctionné pour nous, quand j'ai construit notre web .csproj avec

/p:UseWPP_CopyWebApplication=true;PipelineDependsOnBuild=False

parce que la cible a été exécutée AfterBuild et la demande n'a pas été copié dans l' WebProjectOutputDir encore. (BTW, je passe ces propriétés pour le projet web construire cos je veux le construire pour créer un OutDir dossier avec seulement mon binaires et cshtml fichiers adapté pour la compression, c'est à dire pas un lieu de construire)

Pour contourner ce problème et d'honorer l'intention de son objectif initial, j'ai fait la suivante:

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

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

1voto

Haacked Points 31070

Je suppose que vous vouliez dire, vous avez modifié le paramètre suivant dans le .csproj fichier:

<MvcBuildViews>true</MvcBuildViews>

Le paramètre que vous avez posté votre question ne devrait pas être touché. Si cela fonctionne en local sur votre machine, alors évidemment, vous pouvez pré-construire une ASP.NET application MVC.

Je pense que vous avez besoin pour traquer ce qui est différent entre votre build TFS de l'environnement et de votre local VS machines. C'est peut-être en utilisant une autre version de MsBuild ou quelque chose.

Essayez d'effectuer les deux versions avec des informations détaillées et de comparer les deux pour voir ce qui est différent.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X