2016-05-03 17 views
6

Ich habe einen Build auf TeamCity, der ein Webprojekt für die spätere Bereitstellung vorbereitet, derzeit MSBuild 2013 verwendend. Als ich letztens Code gepusht habe, bekam ich Buildfehler (aufgrund der Tatsache dass ich eine C# 6 Funktionen) wurde unter Verwendung von so ging ich die Build-Konfiguration zu verwenden MSBuild 2015 statt und bekam diesen Fehler zu ändern:MSBuild 2015 Veröffentlichen: Ich kann den gültigen AspnetMergePath nicht finden

[Error] C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\Web\Transform\Microsoft.Web.Publishing.AspNetCompileMerge.targets(132, 5): Can't find the valid AspnetMergePath

Dieser Fehler wird in anderen Fragen vor (wie hier erwähnt: VS 2012 Publish: Can't find the valid AspnetMergePath) aber leider hat keine der in diesen Fragen erwähnten Korrekturen für mich funktioniert.

Dinge, die ich habe bereits versucht, oder waren bereits der Fall:

  • Web und WebApplication Verzeichnisse von den lokalen Rechner (unter C: \ Program Files (x86) \ MSBuild \ Microsoft \ Visualstudio \ v14.0) hat wurde kopiert up-Server zu bauen (sie schon immer dort gewesen)
  • Added <TargetFrameworkSDKToolsDirectory>C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\</TargetFrameworkSDKToolsDirectory> zu Microsoft.Web.Publishing.AspNetCompileMerge.targets Datei
  • hinzugefügt /p:AspnetMergePath="C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\" zu MSBuild Befehl

Ich bin ein wenig verloren mit diesem: ziemlich das einzige, was ich nicht versucht habe, ist Visual Studio auf dem Build-Server zu installieren, aber ich möchte das wirklich vermeiden, wenn ich kann (weil ich denke, es ist lächerlich, dass Sie eine vollständige IDE auf einem CI-Server installieren müssen!).

Einige weitere Infos:

  • alles weiterhin gut funktionieren, wenn Sie den Build zurück zu MSBuild 2013 wechseln (obwohl, natürlich, wir wollen nicht in der Vergangenheit stecken bleiben)
  • wir haben eine Reihe von anderen reine Kompilation Builds, die ohne Fehler
+0

haben Sie das gelöst? –

+0

Ich fürchte nicht; nach etwa zwei Tagen warf ich nur meine Hände in die Luft und nur Visual Studio installiert :( – Richiban

+0

@Richiban warum hast du VS2015 installiert :) die Lösung ist so "einfach" wie in dieser Antwort https://StackOverflow.com/a/16694597/441301: Kopieren Sie den Ordner "C: \ Programme (x86) \ MSBuild \ Microsoft \ VisualStudio \ v14" von einem Dev-Computer auf den Build-Server, bearbeiten Sie dann "Microsoft.Web.Publishing.AspNetConfigurationMerge.targets" und fügen Sie ihn hinzu '' wie im Link. In meinem Fall habe ich * [...] v8.1A \ bin \ NETFX 4.5.1 Tools * verwendet, aber es funktioniert auch, wenn Sie das Windows 10 SDK haben ... zu spät für Sie, aber vielleicht hilft es jemand anderem. "/ P: AspnetMergePath" muss nicht mehr angegeben werden;) – firepol

Antwort

5

Sowohl die zweite und die dritte Lösung ursprünglich vorgeschlagen auf VS 2012 Publish: Can't find the valid AspnetMergePath gegen MSBuild 2015 laufen tatsächlich funktionieren, aber die richtige Version der SDK-Tools muss zur Verfügung gestellt werden.

Der Originalartikel (VS 2012 Publish: Can't find the valid AspnetMergePath) wurde im Jahr 2013 geschrieben und deckt das Visual Studio 2012. Die aspnet_merge.exe, die unter dem Pfad unterstützt C# 6.0 und .NET 4.6 ist nicht derjenige, der "C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\" gefunden wird.

Um die dritte Lösung zu verwenden, verwenden Sie stattdessen den folgenden Pfad "C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\".

in Oder Worten Zugabe/p:AspnetMergePath="C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\"zu MSBuild-Befehl löst das Problem.

Mein Team hatte genau das gleiche Problem wie das, das Sie beschreiben, und das Hinzufügen dieses Parameters zum MSBuild-Schritt wurde sofort korrigiert. (Ich nehme natürlich an, dass Sie die NETFX 4.6-Version der Tools auf Ihrer Build-Maschine haben.)

Als Nebenbemerkung, da Sie gesagt haben, dass Sie Team City verwenden - anstatt den obigen Parameter direkt als Befehlszeilenparameter hinzuzufügen, können Sie die Team City empfohlen und configure the corresponding build parameter verwenden.

+3

Ich musste einen spezifischeren Merge-Pfad hinzufügen, damit er auf VS15 funktioniert. Ich habe '/ p: AspnetMergePath =" C: \ Programme (x86) \ Microsoft SDKs \ Windows \ v10.0A \ bin \ NETFX 4.6 Werkzeuge \ aspnet_merge.exe "' 'das tatsächliche auch, nicht nur den Pfad angeben. –

+0

Wo genau diesen Befehl hinzufügen? Webprojekt -> Eigenschaften -> Ereignis erstellen? – DoomerDGR8

+1

@ DoomerDGR8 '/ p: AspnetMergePath' ist ein MSBuild-Parameter, kein Befehl. Bei der ursprünglichen Frage geht es darum, sie beim Ausführen von MSBuild auf einem Build-Rechner festzulegen (bedeutet, dass MSBuild.exe als Befehlszeilenprogramm ausgeführt wird). In Ihrem Fall interpretiere ich Sie zumindest so, dass Sie diesen Parameter von Visual Studio an MSBuild übergeben möchten. VS (2015 und später) unterstützt nicht die Definition von MSBuild-Parametern in der GUI. Um es hinzuzufügen und in VS zu verwenden, sollten Sie es direkt zur * .csproj-Datei hinzufügen. [Diese Antwort] (http://stackoverflow.com/a/18343396/7025570) erklärt, wie es geht (siehe den Teil "Update"). – ironcev

1

Die akzeptierte Antwort ist nur Symptombehandlung und behandelt das zugrunde liegende Problem nicht. Bitte führen Sie MSBuild mit diagnostic logging. Wenn Sie sich die Microsoft.Web.Publishing.AspNetCompileMerge.targets ansehen, werden Sie sehen, dass es versucht, TargetFrameworkSDKToolsDirectory mit AspnetMergeName zu verketten. Wenn Sie in Ihrem MSBuild-Protokoll suchen, finden Sie, dass TargetFrameworkSDKToolsDirectory leer ist. TargetFrameworkSDKToolsDirectory ist von TargetFrameworkSDKDirectory gebaut, die auch leer ist.

Das ist, was Sie beheben müssen. In meinem Fall:

  • Installieren Sie das Windows 7.1 SDK (mit this workaround auf Windows Server 2016).
  • In VS2017 wird der Pfad basierend auf /configuration/msbuildToolsets/toolset/property[@name="FrameworkSDKRoot] bestimmt, was in meinem Fall Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\NETFXSDK\[email protected] ist. In meinem Fall war dieser Knoten nur in der WOW6432Node verfügbar, er muss auch in der 64-Bit-Registrierung verfügbar sein. Sie müssen den Knoten an die entsprechende Stelle in der 64-Bit-Registrierung kopieren.
Verwandte Themen