2014-04-28 5 views
8

Ich habe eine Lösung mit einer Reihe von Webprojekten und möchte, dass mein Buildserver automatisch Pakete für jedes Projekt erstellt. Ich kann (fast) alles arbeiten. Die Builds sind in Ordnung und die Pakete werden bei jedem Build erstellt. Aber nur, wenn ich kein PublishProfile in den MSBuild-Argumenten angeben. So wird es nur Standardwerte einfügen und meine Websites und solche nicht vorkompilieren. (Argumente sind /p:DeployOnBuild=True /p:IsAutoBuild=True /p:VisualStudioVersion=12.0)TFS Build Server kann das Veröffentlichungsprofil nicht funktionieren: "Ich kann den gültigen AspnetCompilerPath nicht finden"

Ich möchte jedoch die Veröffentlichungsprofile (.pubxml) verwenden, die ich in Visual Studio erstellt habe. Jedes Projekt hat eine "Test.pubxml". Aber wenn ich den PublishProfile Parameter angeben, wird die Build nicht mit der folgenden Fehlermeldung (Argumente sind /p:DeployOnBuild=True;PublishProfile=Test /p:IsAutoBuild=True /p:VisualStudioVersion=12.0):

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\Web\Transform\Microsoft.Web.Publishing.AspNetCompileMerge.targets (411): Can't find the valid AspnetCompilerPath

Ja, die Datei Microsoft.Web.Publishing.AspNetCompileMerge.targets in diesem Ordner nicht vorhanden ist. Ich kann die Projekte von Visual Studio auf meinem Entwicklungscomputer problemlos bereitstellen.

Ich verwende die folgenden: Windows Server 2012 R2 von Visual Studio Ultimate 2013 Update 1 (auf Build-Server installiert) Projekte sind für .Net 4.5.1

Antwort

5

ich die gleichen Fehler und bekam um es mit einem bisschen Hack.

Ich habe die Microsoft.Web.Publishing.AspNetCompileMerge.targets Datei bearbeitet.

Finden Sie die AspnetCompilerPath Knoten in und $ (Framework40Dir) mit C ersetzen: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319.

Ich nehme an, Sie könnten den Wert von $ (Framework40Dir) früher in der Datei festlegen.

Ich empfehle das Erstellen einer Sicherungskopie der Datei vor dem Ändern (die Datei hat auch einen Kommentar oben, der dies vorschlägt).

Ich denke, dass die richtige Lösung wäre, einige Umgebungsvariable oder Registrierungswert festzulegen.

+0

Das funktioniert! (Anscheinend wurde $ (Framework40Dir) auf das Msbuild-Verzeichnis und nicht auf das .NET-Framework gesetzt). –

12

hatte ich das gleiche Problem, diese Frage zu finden, und kam mit einer etwas weniger hacky Lösung:

Gerade /P:Framework40Dir=c:\windows\microsoft.net\framework\v4.0.30319 als zusätzliche MSBuild Parameter hinzuzufügen.

Keine Notwendigkeit, .targets Dateien zu bearbeiten oder irgendetwas anderes einzustellen. Arbeitete für mich, so dass ich nur:

msbuild MyWebProject.csproj /T:Package /P:PublishProfile=MyProfile /P:Framework40Dir=(as above) 

ich es verwenden, um ein Web Deploy-Paket in einen Unterordner von meiner Wahl zu bauen - ohne das Profil, geht es zu obj/debug/package. Wer benutzt obj? Blergh :)

Verwandte Themen