2017-08-24 2 views
2

Ich habe eine Visual Studio-Lösung, die wir mit VS 2015 mit dem Visual Studio Online Build erstellt haben. Wir wollen den Build in VS 2017 umwandeln. Er baut lokal für mich ohne Fehler auf. Wenn jedoch Online-Aufbau des „VS2017 Hosted“ mit Build-Agenten mit dem folgenden Fehler schlägt fehl, wenn versucht, meine WIX basierten MSI zu bauen:MSBuildExtensionsPath auf VSTS und WIX

DEV\Setup\UISetup\UISetup.wixproj(56,3): Error MSB4019: The imported project "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Microsoft\WiX\v3.x\Wix.targets" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk. 

Fehlerbehebung, funktioniert die wixproj für diesen Weg eine Import-Anweisung hat:

$(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.targets 

ich habe ein paar zusätzliche Schritte in den Aufbau und fanden die folgende als Vergleich der beiden Build-Agenten:

"Hosted" (Build Werke auf dieser VS 2015 Build-Agent)

wix.targets Is Here:  C:\Program Files (x86)\MSBuild\Microsoft\WiX\v3.x\wix.targets 

With Diagnostic output on MSBuild, here are the MSBuild property settings 
2017-08-19T19:12:13.3864207Z MSBuildExtensionsPath = C:\Program Files (x86)\MSBuild 
2017-08-19T19:12:13.3864207Z MSBuildExtensionsPath32 = C:\Program Files (x86)\MSBuild 
2017-08-19T19:12:13.3864207Z MSBuildExtensionsPath64 = C:\Program Files\MSBuild 

Hosted VS2017 (gleiche Build nicht auf diesem Build-Agenten)

Looking here for wix.targets:  C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Microsoft\WiX\v3.x\Wix.targets <-- which errors 

But wix.targets is here:   C:\Program Files (x86)\MSBuild\Microsoft\WiX\v3.x\wix.targets <-- same as “Hosted” build agent 

With Diagnostic output on MSBuild, here are the MSBuild property settings 
2017-08-19T19:21:06.5320962Z MSBuildExtensionsPath = C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild <-- Different on this build agent 
2017-08-19T19:21:06.5320962Z MSBuildExtensionsPath32 = C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild <-- Different on this build agent 
2017-08-19T19:21:06.5320962Z MSBuildExtensionsPath64 = C:\Program Files\MSBuild 

ich ein Ticket mit Microsoft Support geöffnet habe, aber bisher haben sie keine Hilfe. Das eigentliche Problem ist, dass MSBuildExtensionsPath32 auf einen anderen Ordner auf dem Build-Agent "VS2017 Hosted" verweist, aber die Datei wix.targets befindet sich im ursprünglichen Ordner. Ich würde es hassen, den Pfad zu wix.targets zu programmieren, aber ich sehe wirklich keine Alternative.

Irgendwelche Ideen?

Danke.

+1

Haben Sie darüber nachgedacht [WiX in Ihr Projekt integrieren] (http://wixtoolset.org/documentation/manual/v3/msbuild/daily_builds.html)? Es gibt auch NuGet-Pakete, die ähnliche Aufgaben ausführen und keine Build-Agents erfordern, um WiX-Erweiterungen installiert zu haben. –

+0

Ich komme vielleicht zu diesem Punkt, aber für den Moment möchte ich nur den bestehenden Build reparieren. Danke für den Vorschlag obwohl ... – Steve0212

+0

nach mehr darüber schauen, das ist die beste Lösung.Schreibe es als Antwort und ich werde es als richtig markieren. Danke – Steve0212

Antwort

1

VS 2017 verwendet jetzt eine isolierte Installation, bei der mehrere Versionen von VS (z. B. VS 2017 Community, Enterprise und VS 2017 Preview-Versionen) nebeneinander installiert werden können und nicht mehr für die gesamte Maschine installiert sind.

Dies bedeutet, dass alle Erweiterungen in der VS-Version selbst installiert werden müssen, wie das VS 2017 Plugin für WiX tut. Dies bedeutet, dass beim Erstellen mit der Msbuild-Tooling einer VS 2017-Installation möglicherweise global installierte Tools wie WiX nicht gefunden werden, wenn die Erweiterung nicht in dieser bestimmten VS-Instanz installiert wurde, was für die gehosteten VSTS-Agenten der Fall zu sein scheint.

Um solche Probleme zu umgehen, NuGet Pakete like this one (bei https://github.com/kzu/WiX gehalten) besteht, dass die notwendigen Werkzeuge, um WiX Projekte bauen so eine nuget wiederherzustellen holen die erforderlichen Vermögenswerte und das Projekt wird die während des Build verwenden und nicht benötigen Software enthalten auf dem Build-Agent installiert werden.

+0

Ich wechselte auch auf WiX-in-NuGet-Paket-Ansatz und glücklich damit –

0

Das Problem besteht darin, dass MSBuild v15 geändert hat, wie MSBuildExtensionsPath32 funktioniert, lokale, pro-Instance-Installation zu unterstützen. Wenn es direkt in einem Import verwendet wird, verweist es weiterhin auf den globalen Speicherort. Daher muss Ihr .wixproj anders als zuvor mit wix.targets umgehen, bevor MSBuild pro Instanz wurde. Sehen Sie sich einen .wixproj an, der mit Visual Studio mit Datei | Neues Projekt erstellt wurde; es sieht aus wie diese am Boden:

<Import Project="$(WixTargetsPath)" Condition=" '$(WixTargetsPath)' != '' " /> 
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets" Condition=" '$(WixTargetsPath)' == '' AND Exists('$(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets') " /> 
<Target Name="EnsureWixToolsetInstalled" Condition=" '$(WixTargetsImported)' != 'true' "> 
    <Error Text="The WiX Toolset v3.11 (or newer) build tools must be installed to build this project. To download the WiX Toolset, see http://wixtoolset.org/releases/" /> 
</Target> 
+0

Fehle ich etwas? Ich kann die tatsächliche Lösung, die Sie vorschlagen, nicht sehen. Kannst du es näher erläutern? –