MSBuild schlägt mit zwei Paketen fehl

8

Okay, das ist ein fantastischer Bug. Ich habe eine 2012-Lösung, die MSBuild auf einem 2012 TFS-Server ausführt. Folgende Parameter werden in der Buildprozessvorlage an das Feld "MSBuild-Argumente" übergeben:

/ p: DeployOnBuild = true / p: PublishProfile = ProfilFürProjektA / p: PublishProfile = ProfileForProjectB /p:VisualStudioVersion=11.0

Und der Fehler, den ich von TFS bekomme, ist ....

C: \ Programme (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ Web \ Microsoft.Web.Publishing.targets (4435): Der Wert für PublishProfile wird auf 'ProfileForProjectA' festgelegt, die Datei wird voraussichtlich bei 'gefunden C: \ Builds \ 1 \ Solution \ Solution \ Quellen \ Solution \ ProjectB \ Properties \ PublishProfiles \ ProfileForProjectA.pubxml 'wurde jedoch nicht gefunden.

Mit anderen Worten scheint es, dass der Build-Server jedes Veröffentlichungsprofil (* .pubxml) in jedem PublishProfiles-Ordner erwartet. Die Veröffentlichungsmethode für beide Projekte ist "Dateisystem".

Das einzige, was es für mich löst, ist das Hinzufügen von ProfileForProjectA zum Ordner PublishProfiles für ProjectB und umgekehrt, aber das scheint keine sehr elegante Lösung zu sein. Kann jemand dieses Verhalten reproduzieren? Hat jemand eine elegantere Lösung? Fehle ich etwas?

Vielen Dank im Voraus.

    
Ian 09.01.2013, 00:28
quelle

1 Antwort

13

Wenn Sie Eigenschaften über die Befehlszeile übergeben, handelt es sich um globale MSBuild-Eigenschaften. Aus diesem Grund werden sie an jedes Projekt in einer .sln-Datei übergeben. Webprojekte sind die einzigen, die auf diese spezifischen Eigenschaften reagieren.

Wenn Sie in Ihrem Szenario zwei Projekte erstellen möchten, die Sie erstellen und in einer .sln-Datei veröffentlichen möchten, müssen Sie in jedem Webprojekt ein Profil mit demselben Namen erstellen, z. B. "MyProfile". Sie müssen nicht die gleichen Informationen enthalten, sie können jeweils eigene Einstellungen haben. Sie müssen nur einen Namen teilen.

Dann, wenn Sie bauen.

%Vor%

Wenn jedes Webprojekt erstellt wird, wird der Veröffentlichungsprozess für MyProfile in diesem Projekt aufgerufen.

Wenn Sie Szenarien haben, in denen Sie unterschiedliche Werte für PublishProfile angeben möchten, müssen Sie ein MSBuild-Skript erstellen, anstatt die .sln-Datei zu erstellen. Es gibt ein paar verschiedene Möglichkeiten, die Sie lösen könnten, aber alle beinhalten einige MSBuild.

Haftungsausschluss

Verwenden Sie diese Technik nicht für Live-Server ... aber es ist toll, wenn Sie vor der endgültigen Veröffentlichung an einem Zwischenstandort veröffentlichen.

Wenn Sie mehr als ein Projekt in einer Lösung erstellen + veröffentlichen, können Sie ein Projekt veröffentlichen, wenn das andere nicht einmal erstellt. Dies liegt daran, dass der Veröffentlichungsprozess tatsächlich eine Erweiterung des Buildprozesses ist. Hier ist ein Beispiel.

Sie haben ProjectA und ProjectB in einer Lösung, wenn Sie mit den obigen Eigenschaften bauen, wird ProjectA aufgerufen und es wird erstellt und veröffentlicht. Dann wird es zu ProjectB weitergehen, das aufbauen und veröffentlichen wird. Der Build für ProjectB kann fehlschlagen und ProjectA wäre bereits veröffentlicht worden.

    
Sayed Ibrahim Hashimi 09.01.2013, 09:14
quelle