MS-Build 2017 "Microsoft.WebApplication.targets" fehlt

85

Ich versuche, unseren Buildserver (Jenkins) von Visual Studio 2015 auf 2017 zu aktualisieren. Wir erstellen über MS-Build. Ich habe MS-Buld-Tools wie in dieser Antwort beschrieben heruntergeladen und installiert . Wenn ich meine Projekte kompiliere, wird ein Fehler angezeigt, Microsoft.WebApplication.targetsder nicht gefunden wurde.

Detaillierter Fehler:

 error MSB4226: The imported project "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\Microsoft\VisualStudio\v15.0\WebApplications\Microsoft.WebApplication.targets"

Ich habe eine Suche im MS-Build-Verzeichnis durchgeführt:

PS C:\Program Files (x86)\MSBuild> dir -Recurse -Filter "Microsoft.WebApplication.targets"


    Directory: C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\WebApplications


Mode                LastWriteTime         Length Name                                                                                                                                                                                                            
----                -------------         ------ ----                                                                                                                                                                                                            
-a----       11.01.2012     00:23          19654 Microsoft.WebApplication.targets                                                                                                                                                                                


    Directory: C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\WebApplications


Mode                LastWriteTime         Length Name                                                                                                                                                                                                            
----                -------------         ------ ----                                                                                                                                                                                                            
-a----       22.07.2013     01:25          19995 Microsoft.WebApplication.targets                                                                                                                                                                                


    Directory: C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\WebApplications


Mode                LastWriteTime         Length Name                                                                                                                                                                                                            
----                -------------         ------ ----                                                                                                                                                                                                            
-a----       06.07.2015     21:55          20118 Microsoft.WebApplication.targets                                                                                                                                                                                


    Directory: C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\WebApplications


Mode                LastWriteTime         Length Name                                                                                                                                                                                                            
----                -------------         ------ ----                                                                                                                                                                                                            
-a----       22.07.2013     01:25          19995 Microsoft.WebApplication.targets

Wie zu sehen ist, existiert die Datei für alte Compilerversionen, aber für v15.0 fehlt sie.

Ich habe auch Visual Studio 2017 auf dem Build-Server installiert. Das Projekt kann erfolgreich erstellt werden, wenn ich mit Visual Studio 2017 kompiliere.

Irgendwelche Hinweise, wie man dieses Problem löst? Eine mögliche Lösung besteht darin, eine symbolische Verknüpfung vom C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v15.0\WebApplicationsPunkt zu den alten v14.0-Dateien (unter C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\WebApplications) zu generieren .

Danke

Moerwald
quelle
1
Ich hatte dieses Problem mit einem Projekt mit VS 2019. Ich habe es behoben, indem ich die csproj-Datei geöffnet und die Zeile <Import Project = "$ (MSBuildExtensionsPath32) \ Microsoft \ VisualStudio \ v14.0 \ WebApplications \ Microsoft.WebApplication.targets identifiziert habe "/> und Ersetzen durch <Import Project =" $ (MSBuildExtensionsPath32) \ Microsoft \ VisualStudio \ v $ (VisualStudioVersion) \ WebApplications \ Microsoft.WebApplication.targets "/>
tmutton

Antworten:

124

Anscheinend fehlt Ihnen die Arbeitslast für "Web Development Build Tools" : Microsoft.VisualStudio.Workload.WebBuildTools.

Sie können es installieren, indem Sie das Installationsprogramm für Build-Tools von hier (VS2017) oder hier (VS2019) herunterladen und dann ausführen

vs_buildtools.exe --add Microsoft.VisualStudio.Workload.WebBuildTools

oder Öffnen vs_buildtools.exeund Auswählen der Komponente "Web Development Build Tools" in der GUI:

Screenshot von der GUI

Martin Ullrich
quelle
3
Wie kann ich diesen Befehl ausführen? Die Angabe 'vs_buildtools.exe' wird im Entwicklertool 2017
Developerzzz
26
Wenn Sie das Installationsprogramm "Build Tools for Visual Studio 2017" ( visualstudio.com/thank-you-downloading-visual-studio/… ) bereits heruntergeladen haben , können Sie dieses Installationsprogramm starten, auf " Ändern " klicken und die "Webentwicklungs-Build-Aufgaben " aktivieren Kontrollkästchen "Workload-Modul". Klicken Sie dann auf die Schaltfläche Ändern und lassen Sie das Installationsprogramm beenden.
Spiralis
Ja, Sie müssen die obige Befehlszeile verwenden, um zu installieren. Sie können es nicht auf der GUI finden.
sky91
4
Ich habe Build Tools for Visual Studio 2017mit Web development build tasksüber den angegebenen Link installiert, aber es wird immer noch kein C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v15.0\WebApplicationsOrdner erstellt. Ich sehe auch nicht. vs_buildtools.exeIch habe das ganze `c:`
LP13
1
danke ... sieht so aus, als ob ab VS 2017 der Wert von $(MSBuildExtensionsPath)in C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild stackoverflow.com/questions/47077150/… geändert wurde
LP13
88

Die oben akzeptierte Antwort ist technisch korrekt, nur unvollständig, zumindest für mich etwas verwirrend und benötigt einen zusätzlichen Schritt, damit Visual Build Professional funktioniert.

  1. vs_buildtools.exe existiert technisch nicht. Ich musste eine Frage erstellen , in der gefragt wurde, wo sich diese Datei befindet. Es war nicht offensichtlich, dass vs_buildtools.exe vs_buildtools _ *******. Exe ist und das eigentliche Installationsprogramm ist. Zusätzlich ist das oben erwähnte "-add ***" nur eine Abkürzung. Man kann zur GUI gehen und beide Workflow-Aufgaben überprüfen. Das macht das Gleiche. Ich hatte die vs_buildtools-Datei, brauchte sie aber nicht.

  2. VSB Pro hat mein Projekt immer noch nicht erstellt. Ich habe den gleichen Fehler wie oben geworfen. Das Geheimnis Sauce war einfach das kopieren WebApplicationsOrdner in C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\Microsoft\VisualStudio\v15.0zu C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v15.0. Ich habe dann das Projekt wieder aufgebaut und alles war in Ordnung. Ich habe die Datei WebApplication.targets am erwarteten Speicherort abgelegt.

Warum Microsoft das nicht hätte tun können, ist mir ein Rätsel. Auch warum die separate Installation. VS17 installiert eine enorme Menge an Sachen. Build Tools ist wie immer impliziert. Was auch immer.

Ich poste diese Antwort, da sie hoffentlich anderen helfen wird. Ich bin in die Falle gegangen und habe viel Zeit verloren, weil mein Projekt nicht gebaut wurde. Ich hoffe, dass diese Antwort die Dinge ein wenig klarer macht.

Sarah Weinberger
quelle
4
Es wurde bestätigt, dass "Build Tools für Visual Studio 2017" tatsächlich Ziele nach C: \ Programme (x86) \ Microsoft Visual Studio \ 2017 \ BuildTools \ MSBuild \ Microsoft \ VisualStudio \ v15.0 kopiert, während msbuild tatsächlich versucht, die Ziele bei C zu finden : \ Programme (x86) \ MSBuild \ Microsoft \ VisualStudio \ v15.0, daher muss ich Ordner kopieren. Anscheinend wird der erste von IDE und der zweite von eigenständigem msbuild verwendet. Seltsam.
ZZZ
1
Sie sollten nichts manuell kopieren. vs_buildtools.exe ist nur Visual Studio Installer. Es hilft Ihnen bei der Installation von Build Tools oder Visual Studio. Für beide können Sie verschiedene Workloads und Komponenten installieren. Wenn Sie Workload für Visual Studio installieren möchten, müssen Sie auf die Schaltfläche "Ändern" klicken. Auf diese Weise können Sie die erforderlichen Komponenten installieren.
Vladimir Serykh
2
Sicher, aber das Problem ist, dass das Visual Studio-Installationsprogramm den WebApplications-Ordner anscheinend nicht zuverlässig an beiden benötigten Speicherorten ablegt. Manuelles Kopieren ist, wie Sarah vorgeschlagen hat, die einzige Möglichkeit, Builds zuverlässig auf meinem Entwicklungscomputer zum Laufen zu bringen.
Bart Read
21

Nach dem Upgrade von Visual Studio 2015 auf 2017 trat ein ähnliches Problem auf. Beim Versuch, das Webanwendungsprojekt zu laden, wurde die folgende Fehlermeldung angezeigt:

Das importierte Projekt "C: \ Programme (x86) \ Microsoft Visual Studio \ 2017 \ Enterprise \ MSBuild \ Microsoft \ VisualStudio \ v14.0 \ WebApplications \ Microsoft.WebApplication.targets" wurde nicht gefunden. Außerdem wurde versucht, "WebApplications \ Microsoft.WebApplication.targets" in den Fallback-Suchpfaden für $ (VSToolsPath) - "C: \ Programme (x86) \ MSBuild \ Microsoft \ VisualStudio \ v15.0" zu finden. Diese Suchpfade sind unter "C: \ Benutzer \ xxx \ AppData \ Local \ Microsoft \ VisualStudio \ 15.0_558e146f \ devenv.exe.config" definiert. Stellen Sie sicher, dass der Pfad in der Deklaration korrekt ist und dass die Datei in einem der Suchpfade auf der Festplatte vorhanden ist.

Die Lösung für diesen Fehler habe ich hier gefunden .

In meinem Fall enthielt die .csproj-Datei die folgenden Zeilen:

<PropertyGroup>
    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">14.0</VisualStudioVersion>
    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v14.0</VSToolsPath>
</PropertyGroup>

Nach dem Ersetzen des v14.0by v$(VisualStudioVersion)im VSToolPathTag konnte das Projekt geladen werden.

Ich habe auch das v14.0by v10.0im VisualStudioVersionTag ersetzt, wie die Lösung im obigen Link zeigt. Aber für mich hat es auch funktioniert, indem ich es bei 14.0 belassen habe.

So sollten diese Zeilen am Ende aussehen:

<PropertyGroup>
    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>

Wenn Sie diese Zeilen überhaupt nicht in Ihrer .csproj haben, müssen Sie sie direkt vor dieser Zeile manuell hinzufügen:

<Import Project="$(VSToolsPath)\Web\Microsoft.Web.Publishing.targets" Condition="'$(VSToolsPath)' != ''" />

In meinem Fall (etwas andere Fehlermeldung, aber gleiches Problem) war es diese Zeile:

<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />

Es scheint, dass Projekte, die seit 2011 mit Visual Studio-Versionen erstellt wurden, die Zeilen mit der VSToolsPathNeudefinition enthalten, ältere Dateien jedoch nicht. Visual Studio hat sie beim Upgrade auf eine neuere VS-Version nie automatisch hinzugefügt. Deshalb sollten Sie sie hinzufügen, wenn sie nicht vorhanden sind.

Quelle dieser Informationen: https://developercommunity.visualstudio.com/content/problem/27735/project-fails-to-load-with-error-regarding-microso.html?childToView=123664#comment-123664 (klicken Sie auf Show Weitere Kommentare , um den vollständigen Diskussionsthread zu sehen - leider kann ich nicht direkt auf Kommentare in diesem Abschnitt "Mehr" verweisen.)

Tobias
quelle
11

Es ist einfach, die Build-Tools 2017 mit der WebBuildToolsbereits enthaltenen Option unter Verwendung von Schokolade zu installieren . Geben Sie nach der Installation Folgendes in eine Admin-Eingabeaufforderung ein:

choco install visualstudio2017buildtools -y

Für VS 2019 ist es ähnlich:

choco install visualstudio2019buildtools -y
Alastairtree
quelle
2
Sie müssen keine bestimmte Version installieren, Sie können sie auf diese Weise mit Chocolatey installieren und die akzeptierte Antwort cinst visualstudio2017buildtools -params '--add Microsoft.VisualStudio.Workload.WebBuildTools' -y ; cinst microsoft-build-tools -y
einfügen
8

WebApplicationsOrdner kopieren von

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0

zu

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v15.0

Oder fügen Sie in Ihrem Build-Skript vor dem Kompilieren die folgende Zeile hinzu

Copy-Item "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\WebApplications" "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v15.0\WebApplications" -Recurse -Force

Stellen Sie sicher, dass Sie es mit erhöhten Berechtigungen ausführen

adeel41
quelle
3

Wie erstelle ich eine VS 2017 Pro, asp.net MVC-Anwendung und erstelle sie mit Jenkins?

Verwenden Sie vs 2017 Pro sowohl in der Dev-Maschine als auch im Build-Server

Stellen Sie sicher, dass VisualStudio auf 15
Import Project = "$ (MSBuildExtensionsPath32) \ Microsoft \ VisualStudio \ v15.0 \ WebApplications \ Microsoft.WebApplication.targets" Condition = "false" eingestellt ist.

Setzen Sie das msbuild-Tool
im globalen Konfigurationsmanager von Jenkins auf C: \ Programme (x86) \ Microsoft Visual Studio \ 2017 \ Professional \ MSBuild \ 15.0 \ Bin \ MSBuild.exe


Führen Sie mit Jenkins den Windows-Befehl batch: retore nugets aus: "C: \ Programme (x86) \ Jenkins \ tools \ nuget \ NuGet.exe" wiederherstellen "C: \ Programme (x86) \ Jenkins \ workspace \ theapp_build \ theapp. sln "


Führen Sie mit Jenkins den Windows-Befehlsstapel aus: MSBuild Build-Datei: theapp.sln
Befehlszeilenargumente: / nologo / t: restore / t: restore / p: Configuration = "Debug" /p:VisualStudioVersion=15.0

Viorel Banesaru
quelle
2

Für VS 2019 habe ich dies durch Kopieren behoben:

C: \ Programme (x86) \ Microsoft Visual Studio \ 2019 \ Enterprise \ MSBuild \ Microsoft \ VisualStudio \ v16.0

zu

C: \ Programme (x86) \ MSBuild \ Microsoft \ VisualStudio

Mariocatch
quelle
So erhalten Sie C: \ Programme (x86) \ Microsoft Visual Studio \ 2019 \ Enterprise \ MSBuild \ Microsoft \ VisualStudio \ v15.0 für VS2019
somegeek
-1

Ich verwende nur Visual Studio Installer , um Visual Studio Community 2017 zu aktualisieren , dann ist das Problem behoben.

Peter Chen
quelle