Frage

Ich habe von ASP.NET MVC Beta 1.0 aktualisiert und hat die folgenden Änderungen an der MVC-Projekt (wie in den RC Release Notes descibed):

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

Während die Build auf unseren lokalen dev-Boxen fein läuft, ist es unter TFS 2008 build nicht mit „Typ kann nicht‚xxx.MvcApplication‘laden“, siehe unten Buildprotokoll:

...
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 ist auf TFS installiert und die Lösung kompiliert, wenn sie innerhalb einer Visual Studio-Instanz auf demselben TFS-Server aufgebaut.

Bauen Ausgabe

Wie kann ich diese TFS lösen?

War es hilfreich?

Lösung

Das Problem ergibt sich aus der Tatsache, dass die AspNetCompiler MSBuild-Aufgabe innerhalb des Afterbuild Ziel einer ASP.NET MVC-Projekt verwendet, erwartet, dass die DLL im Ordner bin des Webprojekts zu verweisen.

Auf einem Desktop bauen die Binärordner ist, wo Sie es unter Ihrem Quellbaum erwarten kann.

Allerdings TFS Teambuild kompiliert den Ausgang Ihrer Quelle in einem anderen Verzeichnis auf dem Build-Server. Wenn die AspNetCompiler Aufgabe beginnt kann es nicht das Verzeichnis ist finden Sie die gewünschte DLL zu verweisen und Sie die Ausnahme erhalten.

Die Lösung ist das Ziel Afterbuild des MVC-Projektes zu ändern, um wie folgt aussehen:

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

Diese Änderung ermöglicht es Ihnen, Ansichten sowohl auf dem Desktop zu erstellen, und die TFS-Build-Server.

Andere Tipps

Eigentlich ist es eine bessere Lösung für dieses Problem. Ich habe es getestet mit VS / TFS 2010, aber es sollte auch mit VS / TFS 2008 arbeiten.

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

Ich werde mit dem MVC-Team arbeiten, um ihre Projektvorlage zu aktualisieren, um diesen Ansatz zu verwenden, zusammen mit einem benutzerdefinierten Ziel (und nicht zwingende Afterbuild).

Ich habe einen Blog-Beitrag veröffentlicht, wie man einschalten Compile-Zeit Ansicht Überprüfung für Projekte ASP.NET MVC in TFS 2010 erstellen.

Jim Lamb-Lösung war für uns nicht, wenn ich unser Web CSPROJ mit

gebaut
/p:UseWPP_CopyWebApplication=true;PipelineDependsOnBuild=False

, da das Ziel AfterBuild und die Anwendung ausgeführt wurde, wurde in die WebProjectOutputDir noch nicht kopiert. (Übrigens, ich gehe diese Eigenschaften auf das Web-Projekt bauen cos ich die Build wollen einen OutDir Ordner erstellen mit nur meine Binärdateien und cshtml geeignete Dateien für zippen, dh nicht ein direktes Build)

Um dieses Problem zu bekommen und die Absicht seines ursprünglichen Ziels ehren, ich habe folgende:

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

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

Ich nehme an, Sie sollen Sie die folgende Einstellung in der CSPROJ Datei geändert:

<MvcBuildViews>true</MvcBuildViews>

Die Einstellung Sie in Ihrer Frage gepostet sollten nicht berührt werden. Wenn es auf dem lokalen Computer funktioniert, dann natürlich können Sie eine ASP.NET MVC-Anwendung Präbuildereignis.

Ich glaube, Sie brauchen, um die Spur zu kommen, was zwischen Ihrer TFS Build-Umgebung und den lokalen VS Maschinen anders. Vielleicht eine andere Version von MsBuild oder etwas es verwendet wird.

Versuchen Sie beide bauen mit ausführlicher Ausgabe Durchführung und vergleichen die beide zu sehen, was anders ist.

Wir testen immer noch die, aber es scheint, dass Sie den falschen / true aus dem Tag-Satz bewegen können, in die Immobiliengruppe für Ihre DEBUG Build-Version, können Sie einstellen, nach wie vor auf true und MSBuild kompiliert (vorausgesetzt, MSBuild TFSBuild.proj Datei ist Setup etwas anderes als Debug-Konfiguration zu verwenden). Sie müssen die csproj Datei mit dem Editor bearbeiten, dies zu erreichen.

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

Sie müssen den MVCBuildViews Tag aus der Standardeigenschaft Gruppe verschieben oben, um die Debug-Konfiguration Eigenschaftsgruppe (siehe unten). Auch wenn wir den TFS / MSBuild-Setup bekommen, werde ich versuchen, den Schritt, den wir in TFS zu unserer TFSBuild.proj Datei hinzugefügt zu veröffentlichen.

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

Dieses Problem scheint ähnlich dem hier die Rede: http: // blogs.msdn.com/aaronhallberg/archive/2007/07/02/team-build-and-web-deployment-projects.aspx es scheint der Aufruf von aspnet_compiler.exe die Binärdateien lokalisieren schlägt fehl, da die nicht in den Papierkorb-Ordner des MVC-Projekt auf der Maschine zu bauen sind. Ich habe keine Lösung noch ausgearbeitet.

Die akzeptierte Antwort nicht für mich arbeiten. Die $ (PublishDir) Parameter deutete nicht an die richtige Stelle. Stattdessen hatte ich verwenden:

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

Ich hatte ein paar alten Ordner in meiner Source-Control, die nicht sichtbar in der Lösung war.

Sie können eine ASP.NET MVC-Anwendung nicht im Voraus erstellen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top