Domanda

Ho aggiornato da ASP.NET MVC Beta 1.0 e ha fatto le seguenti modifiche al progetto MVC (come descritto nella RC note di rilascio):

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

Mentre la build funziona bene nel nostro locale dev scatole, non riesce in TFS 2008 Costruire con "impossibile caricare il tipo 'xxx.MvcApplication'", vedi sotto 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 è installato sul TFS e la soluzione compila quando costruito all'interno di un'istanza di Visual Studio sullo stesso server TFS.

Come posso risolvere questo TFS Costruire il problema?

È stato utile?

Soluzione

Il problema deriva dal fatto che il compito AspNetCompiler MSBuild utilizzato entro il bersaglio AfterBuild di un progetto ASP.NET MVC si aspetta di fare riferimento alle dll nella cartella bin del progetto Web.

Su un desktop a costruire la cartella bin è dove ci si aspetterebbe sotto il vostro albero dei sorgenti.

Tuttavia TFS TeamBuild compila l'uscita della sorgente in una directory diversa sul server di build. Quando l'attività AspNetCompiler inizia non riesce a trovare la directory bin per fare riferimento alla DLL necessaria e si ottiene l'eccezione.

La soluzione è di modificare il target AfterBuild del Progetto MVC essere il seguente:

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

Questa modifica consente di compilare Visualizzazioni sia sul desktop e il TFS costruire server.

Altri suggerimenti

In realtà, c'è una soluzione migliore a questo problema. Ho provato con VS / TFS 2010, ma dovrebbe funzionare anche con VS / TFS 2008.

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

ho intenzione di lavorare con il team di MVC di aggiornare il proprio modello di progetto da utilizzare per questo approccio con un target personalizzato (e non viene sostituito AfterBuild).

Ho pubblicato un post sul blog su come Attiva in fase di compilazione View Controllo per i progetti di ASP.NET MVC in TFS costruzione 2010 .

Jim Agnello soluzione non ha funzionato per noi, quando ho costruito la nostra web .csproj con

/p:UseWPP_CopyWebApplication=true;PipelineDependsOnBuild=False

perché il bersaglio è stato in esecuzione AfterBuild e la domanda non è stata copiata nella WebProjectOutputDir di sicurezza.(BTW, io passo le proprietà per il progetto web di costruire cos voglio la build per creare un OutDir con solo il mio file binari e file cshtml adatto per compressione, cioè non un build)

Per ottenere intorno a questo problema e di onore l'intento del suo obiettivo originale, ho fatto la seguente:

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

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

presumo che significava che si modifica l'impostazione seguente nel file Csproj:

<MvcBuildViews>true</MvcBuildViews>

L'impostazione hai postato la tua domanda non deve essere toccata. Se funziona sul computer locale, poi, ovviamente, è possibile pre-creare un'applicazione ASP.NET MVC.

Credo che hai bisogno di rintracciare cosa c'è di diverso tra l'ambiente di TFS costruire e le macchine VS locali. Forse sta usando una versione diversa di MsBuild o qualcosa del genere.

Provare a effettuare sia costruisce con output dettagliato e confrontare i due per vedere cosa c'è di diverso.

Stiamo ancora testando questo fuori, ma sembra che si può spostare il vero falso / dal set di tag, nel gruppo di proprietà per la versione build di debug, è ancora possibile impostarlo su true e MSBuild sarà la compilazione (supponendo MSBuild file di TFSBuild.proj è configurato per usare qualcosa di diverso configurazione di debug). Sarà necessario modificare il file csproj utilizzando il blocco note per raggiungere questo obiettivo.

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

È necessario spostare il tag MVCBuildViews dal gruppo di proprietà di default sopra, per il gruppo di proprietà di configurazione di debug (in basso). Anche in questo caso, quando avremo il setup TFS / MSBuild, cercherò di pubblicare il passo abbiamo aggiunto al nostro file TFSBuild.proj in TFS.

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

Questo problema sembra simile a quello parlato qui: http: // blogs.msdn.com/aaronhallberg/archive/2007/07/02/team-build-and-web-deployment-projects.aspx sembra l'invocazione di aspnet_compiler.exe non riesce a individuare i file binari a causa del non sono nella cartella bin del progetto MVC sul sistema di compilazione. Non ho ancora elaborato una soluzione.

La risposta accettata non ha funzionato per me. Il parametro $ (PublishDir) non ha evidenziato nella posizione corretta. Invece ho dovuto usare:

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

Ho avuto alcune vecchie cartelle nel mio controllo del codice sorgente, che non erano visibili nella soluzione.

Non è possibile pre-creare un'applicazione ASP.NET MVC.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top