webentwicklung-frage-antwort-db.com.de

Microsoft.WebApplication.targets wurde auf dem Build-Server nicht gefunden. Was ist deine Lösung?

Beim Versuch, mein Projekt auf dem Build-Server zu erstellen, wird der folgende Fehler angezeigt:

Microsoft (R) Build Engine Version 4.0.30319.1
error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\TeamData\Microsoft.Data.Schema.SqlTasks.targets" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.

Ich habe dieses Problem vor einigen Monaten mit der Installation von Visual Studio 2010 auf dem Build Server gelöst. Aber jetzt habe ich einen neuen Server von Grund auf eingerichtet und möchte wissen, ob es eine bessere Lösung gibt, um dieses Problem zu lösen.

365
stacker

Um den Titel der Frage zu beantworten (aber nicht die Frage nach der Ausgabe, die Sie erhalten):

Das Kopieren des folgenden Ordners von Ihrem Entwicklungscomputer auf Ihren Build-Server behebt dies, wenn es sich nur um Webanwendungen handelt

C:\Programme (x86)\MSBuild\Microsoft\VisualStudio\v10.0\WebApplications

Entfernen Sie x86, je nachdem, wie Ihr Build bricht. Wenn Sie andere Projekttypen haben, müssen Sie wahrscheinlich den gesamten Ordner "msbuild" kopieren.

197
Chris S

Das Erstellen und Veröffentlichen von WAPs wird nicht unterstützt, wenn VS nicht installiert ist. Wenn Sie VS wirklich nicht installieren möchten, müssen Sie alle Dateien unter %ProgramFiles32%\MSBuild\Microsoft\ kopieren. 

Sie müssen auch das Web Deploy Tool installieren. Ich denke das ist es.

94

UPD: Ab VS2017 gibt es eine Arbeitslast in Build Tools, die dieses Problem vollständig beseitigt. Siehe @SOReader answer .

Wenn Sie keine Änderungen am Build-Server vornehmen möchten und das Projekt trotzdem außerhalb der Quellcodeverwaltung erstellt werden soll, ist es möglicherweise ratsam, die erforderlichen Binärdateien der Quellcodeverwaltung zu unterziehen. Sie müssen den Importabschnitt in Ihrer Projektdatei so ändern, dass er wie folgt aussieht:

<Import Project="$(SolutionDir)\BuildTargets\WebApplications\Microsoft.WebApplication.targets" />
<Import Condition="false" Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />

Die erste Zeile enthält den tatsächlichen Import aus dem neuen Speicherort, der relativ zum Lösungsverzeichnis ist. Die zweite ist eine deaktivierte Version (Condition="false") der ursprünglichen Zeile, die es Visual Studio ermöglicht, Ihr Projekt weiterhin als gültiges Webanwendungsprojekt zu betrachten (dies ist der Trick, den VS 2010 SP1 selbst ausführt). 

Vergessen Sie nicht, den Ordner C:\Program Files (x86)\Microsoft\VisualStudio\v10.0\WebApplications in den Ordner BuildTargets unter Ihrer Quellcodeverwaltung zu kopieren.

70
Andriy K

Sie können auch das NuGet-Paket MSBuild.Microsoft.VisualStudio.Web.targets verwenden, auf das Sie in Ihren Visual Studio-Projekten verweisen, und dann Ihre Referenzen ändern, wie Andriy K dies empfiehlt.

62
Lloyd Holman

Basierend auf diesem Beitrag hier können Sie einfach das Microsoft Visual Studio 2010 Shell (Integrated) Redistributable Package herunterladen und die Ziele werden installiert.

Dadurch wird die Installation von Visual Studio auf dem Build-Server vermieden.

Ich habe es gerade ausprobiert und kann bestätigen, dass es funktioniert:

Vor:

fehler MSB4019: Das importierte Projekt "C:\Programme (x86)\MSBuild\Microsoft\VisualStudio\10.0\WebApplications\Microsoft.WebApplication.targets" wurde nicht gefunden. Stellen Sie sicher, dass der Pfad in der Deklaration .__ ist. richtig, und dass die Datei auf der Festplatte vorhanden ist.

Nach der Installation:

[Baut korrekt]

Dies ist natürlich eine weitaus bessere Lösung als die Installation von Visual Studio auf einem Build-Server. 

55
Matthew Skelton

Jetzt können Sie 2017 WebApplication-Redists mit MSBuildTools installieren. Gehen Sie einfach zu diese Seite , die MSBuild 2017 Tools herunterladen, und klicken Sie während der Installation auf Web development build tools, um diese Ziele ebenfalls zu installieren:  enter image description here

Dies führt dazu, dass standardmäßig fehlende Bibliotheken in C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\Microsoft\VisualStudio\v15.0\WebApplications installiert werden

46
SOReader

Das neueste Windows SDK, wie oben erwähnt, zusätzlich zu "Microsoft Visual Studio 2010 Shell (integriert) weitervertreibbares Paket" für Microsoft.WebApplication.targets und "Microsoft Visual Studio Team System 2008 Datenbank Edition GDR R2" für Microsoft.Data.Schema.SqlTasks.targets sollte die Installation von Visual Studio 2010 erleichtern. Die Installation von VS 2010 ist jedoch weniger generell weniger zum Herunterladen und weniger Arbeit am Ende.

38
dansomething

Deaktivieren Sie beim Erstellen auf dem Build-/CI-Server den Import von Microsoft.WebApplication.targets durch Angabe von /p:VSToolsPath=''. Dies macht im Wesentlichen die Bedingung der folgenden Zeile falsch:

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


So wird es in TeamCity gemacht:

 enter image description here

18
Alex R.

Fügen Sie über NuGet eine Abhängigkeit hinzu und legen Sie einen Build-Parameter fest

Ziel: Es sind keine Änderungen/Installationen für die Build-Agenten erforderlich.

Ich habe einen hybriden Ansatz für den NuGet-Ansatz von Lloyd hier gewählt, der auf der Binärabhängigkeitslösung von Andrik beruhte.

Der Grund dafür ist, dass ich neue Build-Agenten hinzufügen möchte, ohne sie mit Elementen wie diesem vorkonfigurieren zu müssen.

  1. Öffnen Sie auf einem Computer mit Visual Studio die Lösung. ignorieren Sie, dass das Webprojekt fehlschlägt.
  2. Fügen Sie im NuGet-Paketmanager MSBuild.Microsoft.VisualStudio.Web.targets hinzu, wie von Lloyd erwähnt.
  3. Dadurch werden die Binärdateien in [solution]\packages\MSBuild.Microsoft.VisualStudio.Web.targets.nn.n.n.n\tools\VSToolsPath\.__ aufgelöst.
    1. Sie können diese in einen Referenzordner kopieren und bestätigen,
    2. Oder verwenden Sie sie einfach dort, wo sie sind. Ich habe dies gewählt, aber ich werde mich später mit der Versionsnummer im Pfad befassen müssen.

In Version 7 habe ich Folgendes getan. Dies war möglicherweise nicht notwendig und aufgrund der Kommentare ist jetzt definitiv nicht erforderlich. Bitte beachten Sie die Kommentare unten.

  1. Fügen Sie in Ihrer TeamCity-Build-Konfiguration einen Build-Parameter für env.VSToolsPath hinzu und setzen Sie ihn auf den Ordner VSToolsPath. Ich habe ..\packages\MSBuild.Microsoft.VisualStudio.Web.targets.11.0.2.1\tools\VSToolsPath verwendet
15
Damon

Wenn Sie Visual Studio 2012 nach 2013 migrieren, öffnen Sie die * .csproj-Projektdatei mit edior. 
und überprüfen Sie das ToolsVersion-Element des 'Project' -Tags.

Ändern Sie den Wert von 4.0 auf 12.0

  • Von

    <?xml version="1.0" encoding="utf-8"?>
    <Project ToolsVersion="4.0" ...
    
  • Zu

    <?xml version="1.0" encoding="utf-8"?>
    <Project ToolsVersion="12.0" ...
    

Oder Wenn Sie mit msbuild erstellen, geben Sie einfach die Eigenschaft VisualStudioVersion an

msbuild /p:VisualStudioVersion=12.0

Lösungsquelle

13
Korayem

Das ist alles was du brauchst. Nur 103 MB. Installieren Sie nicht alles

enter image description here

8
Simon_Weaver

Es scheint, dass die neue Version von msbuild nicht mit Microsoft.WebApplication.targets geliefert wird. Um dies zu beheben, müssen Sie Ihre csproj-Datei entsprechend aktualisieren:

1) Bearbeiten Sie die Web-App csproj (Rechtsklick). Suchen Sie den Abschnitt in csproj nach unten bezüglich der Build-Tools. Es sollte so aussehen.

<PropertyGroup>  
  <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
</PropertyGroup>  
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />  
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />  
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />  

2) Sie müssen eine VSToolsPath-Zeile unter dem Tag "VisualStudioVersion" hinzufügen, damit es so aussieht

<PropertyGroup>  
  <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
  <!--Add the below line to fix the project loading in VS 2017 -->
  <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
  <!--End -->
</PropertyGroup>  
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />  
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />  
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />  

Referenzlink: https://alastaircrabtree.com/cannot-open-vs-2015-web-project-in-vs-2017/

7
Huy Truong

Ich habe dies auf MS connect gefunden:

Ja, Sie müssen Visual Studio installieren 2010 auf Ihrer Build-Maschine erstellen Datenbankprojekte. Dies tut keine zusätzliche Lizenz von Visual Studio.

Dies ist also die einzige Option, die ich vorerst habe.

5
stacker

Alle, die hierher für Visual Studio 2017 kommen. Ich hatte ein ähnliches Problem und konnte das Projekt nach dem Update auf 15.6.1 nicht kompilieren. Ich musste MSBulild-Tools installieren, aber der Fehler war immer noch da. 

Ich konnte das Problem beheben, indem ich den Ordner v14.0 von C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio in den gleichen Ordner wie v15.0 kopierte. Dadurch wurden alle Fehler behoben. Nun sieht meine Ordnerstruktur wie folgt aus, wobei beide Ordner den gleichen Inhalt enthalten. 

 enter image description here

2
Habib

Ich habe eine Reihe von Lösungen ausprobiert, aber am Ende funktionierte diese Antwort für mich: https://stackoverflow.com/a/19826448/431522

Im Wesentlichen bedeutet dies, dass MSBuild aus dem MSBuild-Verzeichnis anstelle des Visual Studio-Verzeichnisses aufgerufen wird. 

Ich habe auch das MSBuild-Verzeichnis zu meinem Pfad hinzugefügt, um die Codierung der Skripts zu erleichtern. 

2
hendrikswan

Meine Lösung ist eine Mischung aus mehreren Antworten.

Ich habe den Build-Server überprüft, und Windows7/NET4.0 SDK wurde bereits installiert. Daher habe ich den Pfad gefunden:

C:\Programme (x86)\MSBuild\Microsoft\VisualStudio\v9.0\WebApplications\Microsoft.WebApplication.targets`

In dieser Zeile jedoch:

<Import Project = "$ (MSBuildExtensionsPath)\Microsoft\VisualStudio\v9.0\WebApplications\Microsoft.WebApplication.targets" />

$ (MSBuildExtensionsPath) erweitert sich nach C:\Programme\MSBuild , das nicht über den Pfad verfügt.

Deshalb habe ich einen Symlink mit folgendem Befehl erstellt:

mklink/J "C:\Programme\MSBuild\Microsoft\VisualStudio" "C:\Programme (x86)\MSBuild\Microsoft\VisualStudio"

Auf diese Weise wird $ (MSBuildExtensionsPath) zu einem gültigen Pfad erweitert, und es sind keine Änderungen in der App selbst erforderlich, sondern nur im Build-Server (möglicherweise kann man bei jedem Build den Symlink erstellen, um sicherzustellen, dass dieser Schritt nicht verloren geht und "dokumentiert" wird ").

2
Kat Lim Ruiz

Ich habe dies durch Hinzufügen behoben
/p:VCTargetsPath="C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\V120"

in 
Build > Build a Visual Studio project or solution using MSBuild > Command Line Arguments

2
MonoThreaded

Wenn Sie MSBuild wie bei einem Build-Server verwenden, funktionierte für mich Folgendes

Ändern Sie Folgendes:

<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v9.0\WebApplications\Microsoft.WebApplication.targets" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v9.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />

zu:

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

Mein Msbuild-Befehl lautet: *"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" solution.sln /p:Configuration=Debug /p:Platform="Any CPU"*

Hoffe das hilft jemandem.

0
Colin Q

Wenn Sie versuchen, ein Projekt mithilfe von VSTS bereitzustellen, wird das Problem möglicherweise mit der Option "Hosted Windows Container" anstelle von "Hosted VS2017" (oder 18 usw.) verbunden.

 enter image description here

0