Question

Je l'ai mis à jour de ASP.NET MVC Beta à 1.0 et fait les modifications suivantes au projet MVC (comme dans les décrivaient notes de version RC):

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

Alors que la construction fonctionne bien sur nos boîtes de dev locales, il échoue dans TFS 2008 Construire avec "Impossible de charger le type 'xxx.MvcApplication'", voir ci-dessous build log:

...
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 une fois construit dans une instance Visual Studio sur le même serveur TFS.

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

Était-ce utile?

La solution

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

Sur un ordinateur de bureau construire le dossier bin est l'endroit où vous attendez sous votre arbre source.

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

La solution est de modifier la cible AfterBuild du projet MVC être 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 tant sur le bureau, et le serveur TFS construire.

Autres conseils

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

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

Je vais travailler avec l'équipe MVC de 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 Comment Activer Compile temps Voir Vérification des projets ASP.NET MVC dans TFS 2010 construire.

La solution de Jim Lamb n'a pas fonctionné pour nous quand je construit notre .csproj web avec

/p:UseWPP_CopyWebApplication=true;PipelineDependsOnBuild=False

parce que la cible était en cours d'exécution AfterBuild et l'application n'a pas été copié dans le WebProjectOutputDir encore. (BTW, je passe ces propriétés au projet web construire parce que je veux le construire pour créer un dossier OutDir avec seulement mes binaires et cshtml fichiers appropriés pour passer comme un éclair, à savoir pas une construction en place)

Pour contourner ce problème et d'honorer l'intention de son objectif initial, je l'ai fait ce qui suit:

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

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

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

<MvcBuildViews>true</MvcBuildViews>

Le paramètre que vous avez publié dans votre question ne doit pas être touché. Si cela fonctionne sur votre machine locale, vous pouvez évidemment pré-construire une application ASP.NET MVC.

Je pense que vous devez traquer ce qui est différent entre votre TFS environnement bâti et l'VS vos machines locales. Peut-être qu'il utilise une version différente de MsBuild ou quelque chose.

Essayez d'effectuer deux previews avec une sortie verbeuse et comparer les deux pour voir ce qui est différent.

Nous continuons de tester ceci, mais il semble que vous pouvez déplacer le faux / vrai de l'ensemble de l'étiquette, dans le groupe de propriété pour votre version Debug, vous pouvez toujours mettre à true et MSBuild compilerez (en supposant MSBuild fichier TfsBuild.proj est configuré pour utiliser autre chose que la configuration de débogage). Vous devrez modifier le fichier csproj en utilisant Bloc-notes pour y parvenir.

<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <MvcBuildViews>true</MvcBuildViews>
    ....

Vous devez déplacer la balise MVCBuildViews du groupe de propriété par défaut ci-dessus, le groupe de propriétés de configuration de débogage (ci-dessous). Encore une fois, quand nous obtenons la configuration TFS / MSBuild, je vais essayer de poster l'étape, nous avons ajouté à notre fichier TFSBuild.proj dans TFS.

  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <MvcBuildViews>true</MvcBuildViews>
    <DebugSymbols>true</DebugSymbols>
    ....

Ce problème semble similaire à celui parlé ici: http: // blogs.msdn.com/aaronhallberg/archive/2007/07/02/team-build-and-web-deployment-projects.aspx il semble que l'invocation de aspnet_compiler.exe ne parvient pas à localiser les binaires car le sont pas dans le dossier bin du projet MVC sur la machine de construction. Je n'ai pas travaillé une solution encore.

La réponse acceptée ne fonctionne pas pour moi. Le paramètre $ (PublishDir) n'a pas pointer vers l'emplacement correct. Au lieu de cela, je devais utiliser:

  <Target Name="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
    <AspNetCompiler Condition="'$(IsDesktopBuild)' != 'false'" VirtualPath="temp" PhysicalPath="$(ProjectDir)\..\$(ProjectName)" />
    <AspNetCompiler Condition="'$(IsDesktopBuild)' == 'false'" VirtualPath="temp" PhysicalPath="$(OutDir)\_PublishedWebsites\$(ProjectName)" />
  </Target>

J'ai eu quelques vieux dossiers dans mon contrôle de code source qui n'étaient pas visibles dans la solution.

Vous ne pouvez pas pré-construire une application ASP.NET MVC.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top